From 5fa8ca55b07dd5e5fb0f8cdbc111c36087eade3f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 17 May 2022 17:12:45 -0400 Subject: [PATCH 001/290] Clean up some additional unknowns --- data/battle_ai_scripts.s | 9 ++++++--- graphics_file_rules.mk | 3 --- src/item.c | 6 ------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s index d856b926a2..c211c4dd21 100644 --- a/data/battle_ai_scripts.s +++ b/data/battle_ai_scripts.s @@ -1099,15 +1099,18 @@ AI_CV_AttackDown3: score -2 AI_CV_AttackDown4: get_target_type1 - if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End + if_in_bytes AI_CV_AttackDown_PhysicalTypeList, AI_CV_AttackDown_End get_target_type2 - if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End + if_in_bytes AI_CV_AttackDown_PhysicalTypeList, AI_CV_AttackDown_End if_random_less_than 50, AI_CV_AttackDown_End score -2 AI_CV_AttackDown_End: end -AI_CV_AttackDown_UnknownTypeList: +@ If the target is not of any type in this list then using the move may be discouraged. +@ It seems likely this was meant to be "discourage reducing the target's attack if they're +@ not a physical type", but they've left out Flying, Poison, and Ghost. +AI_CV_AttackDown_PhysicalTypeList: .byte TYPE_NORMAL .byte TYPE_FIGHTING .byte TYPE_GROUND diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 9e5c191930..7049431267 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -665,9 +665,6 @@ $(WALLPAPERGFXDIR)/ludicolo/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame2.4bpp $ $(WALLPAPERGFXDIR)/whiscash/tiles.4bpp: $(WALLPAPERGFXDIR)/friends_frame2.4bpp $(WALLPAPERGFXDIR)/whiscash/bg.4bpp @cat $^ >$@ -$(OBJEVENTGFXDIR)/pics/effects/unknown_4F6D38/0.4bpp: %.4bpp: %.png - $(GFX) $< $@ -num_tiles 11 - $(INTERFACEGFXDIR)/selector_outline.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 8 diff --git a/src/item.c b/src/item.c index 63287693a8..8d0f45fedc 100644 --- a/src/item.c +++ b/src/item.c @@ -15,20 +15,14 @@ #include "constants/items.h" #include "constants/hold_effects.h" -extern u16 gUnknown_0203CF30[]; - -// this file's functions static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); -// EWRAM variables EWRAM_DATA struct BagPocket gBagPockets[POCKETS_COUNT] = {0}; -// rodata #include "data/text/item_descriptions.h" #include "data/items.h" -// code static u16 GetBagItemQuantity(u16 *quantity) { return gSaveBlock2Ptr->encryptionKey ^ *quantity; From f254df9a1a09163e4408470032220526dcbc0b98 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 11:28:27 -0400 Subject: [PATCH 002/290] Use window constants in berry_tag_screen --- src/berry_tag_screen.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index f683c73f45..41fb8afbab 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -102,7 +102,7 @@ static const u8 sTextColors[2][3] = static const struct WindowTemplate sWindowTemplates[] = { - { // WIN_BERRY_NAME + [WIN_BERRY_NAME] = { .bg = 1, .tilemapLeft = 11, .tilemapTop = 4, @@ -111,7 +111,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 69, }, - { // WIN_SIZE_FIRM + [WIN_SIZE_FIRM] = { .bg = 1, .tilemapLeft = 11, .tilemapTop = 7, @@ -120,7 +120,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 85, }, - { // WIN_DESC + [WIN_DESC] = { .bg = 1, .tilemapLeft = 4, .tilemapTop = 14, @@ -129,7 +129,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 157, }, - { // WIN_BERRY_TAG + [WIN_BERRY_TAG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 0, From 16be1e8447d3e3cdb66cd6fdf83b428204ffeb50 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 11:57:30 -0400 Subject: [PATCH 003/290] Use window constants for move relearner --- include/menu_specialized.h | 13 +++++- src/menu_specialized.c | 93 +++++++++++++++++++------------------- src/move_relearner.c | 60 ++++++++---------------- 3 files changed, 76 insertions(+), 90 deletions(-) diff --git a/include/menu_specialized.h b/include/menu_specialized.h index 10a2110464..06a188b8a0 100644 --- a/include/menu_specialized.h +++ b/include/menu_specialized.h @@ -15,6 +15,15 @@ enum { MAILBOXWIN_COUNT }; +// Window IDs for the move relearner +enum { + RELEARNERWIN_DESC_BATTLE, + RELEARNERWIN_DESC_CONTEST, + RELEARNERWIN_MOVE_LIST, + RELEARNERWIN_MSG, + RELEARNERWIN_YESNO, +}; + enum { TAG_CONDITION_MON = 100, TAG_CONDITION_BALL, @@ -117,11 +126,11 @@ void DestroyConditionSparkleSprites(struct Sprite **sprites); void FreeConditionSparkles(struct Sprite **sprites); // Move relearner -void MoveRelearnerPrintText(u8 *str); +void MoveRelearnerPrintMessage(u8 *str); bool16 MoveRelearnerRunTextPrinters(void); void MoveRelearnerCreateYesNoMenu(void); u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices); -void InitMoveRelearnerWindows(bool8 useContextWindow); +void InitMoveRelearnerWindows(bool8 useContestWindow); // Level up window void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 42c80b5ee3..717190700a 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -105,10 +105,9 @@ static const u8 sConditionToLineLength[MAX_CONDITION + 1] = 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35 }; - static const struct WindowTemplate sMoveRelearnerWindowTemplates[] = { - { + [RELEARNERWIN_DESC_BATTLE] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, @@ -117,7 +116,7 @@ static const struct WindowTemplate sMoveRelearnerWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0xA }, - { + [RELEARNERWIN_DESC_CONTEST] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, @@ -126,7 +125,7 @@ static const struct WindowTemplate sMoveRelearnerWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0xCA }, - { + [RELEARNERWIN_MOVE_LIST] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 1, @@ -135,7 +134,7 @@ static const struct WindowTemplate sMoveRelearnerWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x18A }, - { + [RELEARNERWIN_MSG] = { .bg = 1, .tilemapLeft = 4, .tilemapTop = 15, @@ -144,7 +143,8 @@ static const struct WindowTemplate sMoveRelearnerWindowTemplates[] = .paletteNum = 0xF, .baseBlock = 0x202 }, - { + // Unused. Identical to sMoveRelearnerYesNoMenuTemplate + [RELEARNERWIN_YESNO] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 8, @@ -175,7 +175,7 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate = .itemPrintFunc = NULL, .totalItems = 0, .maxShowed = 0, - .windowId = 2, + .windowId = RELEARNERWIN_MOVE_LIST, .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -701,7 +701,7 @@ void ConditionGraph_CalcPositions(u8 *conditions, struct UCoords16 *positions) // Move relearner //---------------- -void InitMoveRelearnerWindows(bool8 useContextWindow) +void InitMoveRelearnerWindows(bool8 useContestWindow) { u8 i; @@ -713,20 +713,20 @@ void InitMoveRelearnerWindows(bool8 useContextWindow) for (i = 0; i < ARRAY_COUNT(sMoveRelearnerWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(1)); - if (!useContextWindow) + if (!useContestWindow) { - PutWindowTilemap(0); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x1, 0xE); + PutWindowTilemap(RELEARNERWIN_DESC_BATTLE); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_DESC_BATTLE, FALSE, 0x1, 0xE); } else { - PutWindowTilemap(1); - DrawStdFrameWithCustomTileAndPalette(1, FALSE, 1, 0xE); + PutWindowTilemap(RELEARNERWIN_DESC_CONTEST); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_DESC_CONTEST, FALSE, 1, 0xE); } - PutWindowTilemap(2); - PutWindowTilemap(3); - DrawStdFrameWithCustomTileAndPalette(2, FALSE, 1, 0xE); - DrawStdFrameWithCustomTileAndPalette(3, FALSE, 1, 0xE); + PutWindowTilemap(RELEARNERWIN_MOVE_LIST); + PutWindowTilemap(RELEARNERWIN_MSG); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_MOVE_LIST, FALSE, 1, 0xE); + DrawStdFrameWithCustomTileAndPalette(RELEARNERWIN_MSG, FALSE, 1, 0xE); MoveRelearnerDummy(); ScheduleBgCopyTilemapToVram(1); } @@ -757,33 +757,34 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) u8 buffer[32]; const u8 *str; - FillWindowPixelBuffer(0, PIXEL_FILL(1)); + FillWindowPixelBuffer(RELEARNERWIN_DESC_BATTLE, PIXEL_FILL(1)); str = gText_MoveRelearnerBattleMoves; - x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 0x80); - AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 128); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerPP; - AddTextPrinterParameterized(0, FONT_NORMAL, str, 4, 0x29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 4, 41, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerPower; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x6A); - AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 0x19, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 106); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerAccuracy; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x6A); - AddTextPrinterParameterized(0, FONT_NORMAL, str, x, 0x29, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 106); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, x, 41, TEXT_SKIP_DRAW, NULL); if (chosenMove == LIST_CANCEL) { - CopyWindowToVram(0, COPYWIN_GFX); + // On "Cancel", skip printing move data + CopyWindowToVram(RELEARNERWIN_DESC_BATTLE, COPYWIN_GFX); return; } move = &gBattleMoves[chosenMove]; str = gTypeNames[move->type]; - AddTextPrinterParameterized(0, FONT_NORMAL, str, 4, 0x19, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 4, 25, TEXT_SKIP_DRAW, NULL); x = 4 + GetStringWidth(FONT_NORMAL, gText_MoveRelearnerPP, 0); ConvertIntToDecimalStringN(buffer, move->pp, STR_CONV_MODE_LEFT_ALIGN, 2); - AddTextPrinterParameterized(0, FONT_NORMAL, buffer, x, 0x29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, buffer, x, 41, TEXT_SKIP_DRAW, NULL); if (move->power < 2) { @@ -794,7 +795,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) ConvertIntToDecimalStringN(buffer, move->power, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } - AddTextPrinterParameterized(0, FONT_NORMAL, str, 0x6A, 0x19, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 106, 25, TEXT_SKIP_DRAW, NULL); if (move->accuracy == 0) { @@ -805,10 +806,10 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) ConvertIntToDecimalStringN(buffer, move->accuracy, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } - AddTextPrinterParameterized(0, FONT_NORMAL, str, 0x6A, 0x29, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NORMAL, str, 106, 41, TEXT_SKIP_DRAW, NULL); str = gMoveDescriptionPointers[chosenMove - 1]; - AddTextPrinterParameterized(0, FONT_NARROW, str, 0, 0x41, 0, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_BATTLE, FONT_NARROW, str, 0, 65, 0, NULL); } static void MoveRelearnerMenuLoadContestMoveDescription(u32 chosenMove) @@ -818,33 +819,33 @@ static void MoveRelearnerMenuLoadContestMoveDescription(u32 chosenMove) const struct ContestMove *move; MoveRelearnerShowHideHearts(chosenMove); - FillWindowPixelBuffer(1, PIXEL_FILL(1)); + FillWindowPixelBuffer(RELEARNERWIN_DESC_CONTEST, PIXEL_FILL(1)); str = gText_MoveRelearnerContestMovesTitle; - x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 0x80); - AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); + x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 128); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, x, 1, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerAppeal; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x5C); - AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 0x19, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 92); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, x, 25, TEXT_SKIP_DRAW, NULL); str = gText_MoveRelearnerJam; - x = GetStringRightAlignXOffset(FONT_NORMAL, str, 0x5C); - AddTextPrinterParameterized(1, FONT_NORMAL, str, x, 0x29, TEXT_SKIP_DRAW, NULL); + x = GetStringRightAlignXOffset(FONT_NORMAL, str, 92); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, x, 41, TEXT_SKIP_DRAW, NULL); if (chosenMove == MENU_NOTHING_CHOSEN) { - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(RELEARNERWIN_DESC_CONTEST, COPYWIN_GFX); return; } move = &gContestMoves[chosenMove]; str = gContestMoveTypeTextPointers[move->contestCategory]; - AddTextPrinterParameterized(1, FONT_NORMAL, str, 4, 0x19, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NORMAL, str, 4, 25, TEXT_SKIP_DRAW, NULL); str = gContestEffectDescriptionPointers[move->effect]; - AddTextPrinterParameterized(1, FONT_NARROW, str, 0, 0x41, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(RELEARNERWIN_DESC_CONTEST, FONT_NARROW, str, 0, 65, TEXT_SKIP_DRAW, NULL); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(RELEARNERWIN_DESC_CONTEST, COPYWIN_GFX); } static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list) @@ -855,20 +856,20 @@ static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct List MoveRelearnerMenuLoadContestMoveDescription(itemIndex); } -void MoveRelearnerPrintText(u8 *str) +void MoveRelearnerPrintMessage(u8 *str) { u8 speed; - FillWindowPixelBuffer(3, PIXEL_FILL(1)); + FillWindowPixelBuffer(RELEARNERWIN_MSG, PIXEL_FILL(1)); gTextFlags.canABSpeedUpPrint = TRUE; speed = GetPlayerTextSpeedDelay(); - AddTextPrinterParameterized2(3, FONT_NORMAL, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, 3); + AddTextPrinterParameterized2(RELEARNERWIN_MSG, FONT_NORMAL, str, speed, NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, 3); } bool16 MoveRelearnerRunTextPrinters(void) { RunTextPrinters(); - return IsTextPrinterActive(3); + return IsTextPrinterActive(RELEARNERWIN_MSG); } void MoveRelearnerCreateYesNoMenu(void) diff --git a/src/move_relearner.c b/src/move_relearner.c index d9c943b576..bf2e7b5c20 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -458,10 +458,10 @@ static void CB2_MoveRelearnerMain(void) UpdatePaletteFade(); } -static void FormatAndPrintText(const u8 *src) +static void PrintMessageWithPlaceholders(const u8 *src) { StringExpandPlaceholders(gStringVar4, src); - MoveRelearnerPrintText(gStringVar4); + MoveRelearnerPrintMessage(gStringVar4); } // See the state machine doc at the top of the file. @@ -515,7 +515,7 @@ static void DoMoveRelearnerMain(void) { if (GiveMoveToMon(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove()) != MON_HAS_MAX_MOVES) { - FormatAndPrintText(gText_MoveRelearnerPkmnLearnedMove); + PrintMessageWithPlaceholders(gText_MoveRelearnerPkmnLearnedMove); gSpecialVar_0x8004 = TRUE; sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEXT_THEN_FANFARE; } @@ -567,7 +567,7 @@ static void DoMoveRelearnerMain(void) } break; case MENU_STATE_PRINT_TRYING_TO_LEARN_PROMPT: - FormatAndPrintText(gText_MoveRelearnerPkmnTryingToLearnMove); + PrintMessageWithPlaceholders(gText_MoveRelearnerPkmnTryingToLearnMove); sMoveRelearnerStruct->state++; break; case MENU_STATE_WAIT_FOR_TRYING_TO_LEARN: @@ -583,7 +583,7 @@ static void DoMoveRelearnerMain(void) if (var == 0) { - FormatAndPrintText(gText_MoveRelearnerWhichMoveToForget); + PrintMessageWithPlaceholders(gText_MoveRelearnerWhichMoveToForget); sMoveRelearnerStruct->state = MENU_STATE_PRINT_WHICH_MOVE_PROMPT; } else if (var == -1 || var == 1) @@ -594,7 +594,7 @@ static void DoMoveRelearnerMain(void) break; case MENU_STATE_PRINT_STOP_TEACHING: StringCopy(gStringVar2, gMoveNames[GetCurrentSelectedMove()]); - FormatAndPrintText(gText_MoveRelearnerStopTryingToTeachMove); + PrintMessageWithPlaceholders(gText_MoveRelearnerStopTryingToTeachMove); sMoveRelearnerStruct->state++; break; case MENU_STATE_WAIT_FOR_STOP_TEACHING: @@ -630,7 +630,7 @@ static void DoMoveRelearnerMain(void) case MENU_STATE_CHOOSE_SETUP_STATE: if (!MoveRelearnerRunTextPrinters()) { - FillWindowPixelBuffer(3, 0x11); + FillWindowPixelBuffer(RELEARNERWIN_MSG, 0x11); if (sMoveRelearnerMenuSate.showContestInfo == FALSE) { sMoveRelearnerStruct->state = MENU_STATE_SETUP_BATTLE_MODE; @@ -687,7 +687,7 @@ static void DoMoveRelearnerMain(void) ShowTeachMoveText(TRUE); } RemoveScrollArrows(); - CopyWindowToVram(3, COPYWIN_GFX); + CopyWindowToVram(RELEARNERWIN_MSG, COPYWIN_GFX); break; case MENU_STATE_TRY_OVERWRITE_MOVE: if (!gPaletteFade.active) @@ -704,7 +704,7 @@ static void DoMoveRelearnerMain(void) RemoveMonPPBonus(&gPlayerParty[sMoveRelearnerStruct->partyMon], sMoveRelearnerStruct->moveSlot); SetMonMoveSlot(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove(), sMoveRelearnerStruct->moveSlot); StringCopy(gStringVar2, gMoveNames[GetCurrentSelectedMove()]); - FormatAndPrintText(gText_MoveRelearnerAndPoof); + PrintMessageWithPlaceholders(gText_MoveRelearnerAndPoof); sMoveRelearnerStruct->state = MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE; gSpecialVar_0x8004 = TRUE; } @@ -713,7 +713,7 @@ static void DoMoveRelearnerMain(void) case MENU_STATE_DOUBLE_FANFARE_FORGOT_MOVE: if (!MoveRelearnerRunTextPrinters()) { - FormatAndPrintText(gText_MoveRelearnerPkmnForgotMoveAndLearnedNew); + PrintMessageWithPlaceholders(gText_MoveRelearnerPkmnForgotMoveAndLearnedNew); sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEXT_THEN_FANFARE; PlayFanfare(MUS_LEVEL_UP); } @@ -758,15 +758,13 @@ static void HideHeartSpritesAndShowTeachMoveText(bool8 onlyHideSprites) s32 i; for (i = 0; i < 16; i++) - { gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE; - } if (!onlyHideSprites) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); - FillWindowPixelBuffer(3, 0x11); - AddTextPrinterParameterized(3, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); + FillWindowPixelBuffer(RELEARNERWIN_MSG, 0x11); + AddTextPrinterParameterized(RELEARNERWIN_MSG, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } } @@ -779,21 +777,19 @@ static void HandleInput(bool8 showContest) { case LIST_NOTHING_CHOSEN: if (!(JOY_NEW(DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) - { break; - } PlaySE(SE_SELECT); if (showContest == FALSE) { - PutWindowTilemap(1); + PutWindowTilemap(RELEARNERWIN_DESC_CONTEST); sMoveRelearnerStruct->state = MENU_STATE_SETUP_CONTEST_MODE; sMoveRelearnerMenuSate.showContestInfo = TRUE; } else { - PutWindowTilemap(0); + PutWindowTilemap(RELEARNERWIN_DESC_BATTLE); sMoveRelearnerStruct->state = MENU_STATE_SETUP_BATTLE_MODE; sMoveRelearnerMenuSate.showContestInfo = FALSE; } @@ -806,7 +802,7 @@ static void HandleInput(bool8 showContest) RemoveScrollArrows(); sMoveRelearnerStruct->state = MENU_STATE_PRINT_GIVE_UP_PROMPT; StringExpandPlaceholders(gStringVar4, gText_MoveRelearnerGiveUp); - MoveRelearnerPrintText(gStringVar4); + MoveRelearnerPrintMessage(gStringVar4); break; default: PlaySE(SE_SELECT); @@ -814,7 +810,7 @@ static void HandleInput(bool8 showContest) sMoveRelearnerStruct->state = MENU_STATE_PRINT_TEACH_MOVE_PROMPT; StringCopy(gStringVar2, gMoveNames[itemId]); StringExpandPlaceholders(gStringVar4, gText_MoveRelearnerTeachMoveConfirm); - MoveRelearnerPrintText(gStringVar4); + MoveRelearnerPrintMessage(gStringVar4); break; } } @@ -835,8 +831,8 @@ static void ShowTeachMoveText(bool8 shouldDoNothingInstead) if (shouldDoNothingInstead == FALSE) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); - FillWindowPixelBuffer(3, 0x11); - AddTextPrinterParameterized(3, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); + FillWindowPixelBuffer(RELEARNERWIN_MSG, 0x11); + AddTextPrinterParameterized(RELEARNERWIN_MSG, FONT_NORMAL, gStringVar4, 0, 1, 0, NULL); } } @@ -850,9 +846,7 @@ static void CreateUISprites(void) // These are the appeal hearts. for (i = 0; i < 8; i++) - { sMoveRelearnerStruct->heartSpriteIds[i] = CreateSprite(&sConstestMoveHeartSprite, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 36, 0); - } // These are the jam harts. // The animation is used to toggle between full/empty heart sprites. @@ -863,17 +857,13 @@ static void CreateUISprites(void) } for (i = 0; i < 16; i++) - { gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE; - } } static void AddScrollArrows(void) { if (sMoveRelearnerStruct->moveDisplayArrowTask == TASK_NONE) - { sMoveRelearnerStruct->moveDisplayArrowTask = AddScrollIndicatorArrowPair(&sDisplayModeArrowsTemplate, &sMoveRelearnerStruct->scrollOffset); - } if (sMoveRelearnerStruct->moveListScrollArrowTask == TASK_NONE) { @@ -927,49 +917,35 @@ void MoveRelearnerShowHideHearts(s32 moveId) if (!sMoveRelearnerMenuSate.showContestInfo || moveId == LIST_CANCEL) { for (i = 0; i < 16; i++) - { gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = TRUE; - } } else { numHearts = (u8)(gContestEffects[gContestMoves[moveId].effect].appeal / 10); if (numHearts == 0xFF) - { numHearts = 0; - } for (i = 0; i < 8; i++) { if (i < numHearts) - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i]], 1); - } else - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i]], 0); - } gSprites[sMoveRelearnerStruct->heartSpriteIds[i]].invisible = FALSE; } numHearts = (u8)(gContestEffects[gContestMoves[moveId].effect].jam / 10); if (numHearts == 0xFF) - { numHearts = 0; - } for (i = 0; i < 8; i++) { if (i < numHearts) - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i + 8]], 3); - } else - { StartSpriteAnim(&gSprites[sMoveRelearnerStruct->heartSpriteIds[i + 8]], 2); - } gSprites[sMoveRelearnerStruct->heartSpriteIds[i + 8]].invisible = FALSE; } } From dd5daa3208484c0f13c9dcbfe7594e9251a5d74e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 12:15:17 -0400 Subject: [PATCH 004/290] Use window constants in berry_blender --- src/berry_blender.c | 87 ++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/src/berry_blender.c b/src/berry_blender.c index d099a14ba2..975ad7ea10 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -106,6 +106,13 @@ enum { // Last berry that an NPC can put in #define NUM_NPC_BERRIES ITEM_TO_BERRY(ITEM_ASPEAR_BERRY) +enum { + // Windows 0-3 are used implicitly in several loops over BLENDER_MAX_PLAYERS + // i.e. window 0 is for player 1, window 1 for player 2, etc. + WIN_MSG = BLENDER_MAX_PLAYERS, + WIN_RESULTS, +}; + struct BlenderBerry { u16 itemId; @@ -200,7 +207,7 @@ static void SpriteCB_ScoreSymbolBest(struct Sprite *); static void InitLocalPlayers(u8); static void CB2_LoadBerryBlender(void); static void UpdateBlenderCenter(void); -static bool32 Blender_PrintText(s16 *, const u8 *, s32 ); +static bool32 PrintMessage(s16 *, const u8 *, s32 ); static void StartBlender(void); static void CB2_StartBlenderLink(void); static void CB2_StartBlenderLocal(void); @@ -332,7 +339,7 @@ static const struct BgTemplate sBgTemplates[3] = static const struct WindowTemplate sWindowTemplates[] = { - { + { // Player 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 6, @@ -341,7 +348,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x28, }, - { + { // Player 2 .bg = 0, .tilemapLeft = 22, .tilemapTop = 6, @@ -350,7 +357,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x36, }, - { + { // Player 3 .bg = 0, .tilemapLeft = 1, .tilemapTop = 12, @@ -359,7 +366,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x44, }, - { + { // Player 4 .bg = 0, .tilemapLeft = 22, .tilemapTop = 12, @@ -368,7 +375,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x52, }, - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -377,7 +384,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 0x60, }, - { + [WIN_RESULTS] = { .bg = 0, .tilemapLeft = 5, .tilemapTop = 3, @@ -1107,7 +1114,7 @@ static void CB2_LoadBerryBlender(void) sBerryBlender->mainState++; break; case 4: - if (Blender_PrintText(&sBerryBlender->textState, sText_BerryBlenderStart, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sText_BerryBlenderStart, GetPlayerTextSpeedDelay())) sBerryBlender->mainState++; break; case 5: @@ -1337,7 +1344,7 @@ static void CB2_StartBlenderLink(void) } break; case 5: - Blender_PrintText(&sBerryBlender->textState, sText_CommunicationStandby, 0); + PrintMessage(&sBerryBlender->textState, sText_CommunicationStandby, 0); sBerryBlender->mainState = 8; sBerryBlender->framesToWait = 0; break; @@ -1363,7 +1370,7 @@ static void CB2_StartBlenderLink(void) if (++sBerryBlender->framesToWait > 20) { // Wait for partners' berries - ClearDialogWindowAndFrameToTransparent(4, TRUE); + ClearDialogWindowAndFrameToTransparent(WIN_MSG, TRUE); if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags()) { for (i = 0; i < GetLinkPlayerCount(); i++) @@ -2664,7 +2671,7 @@ static void CB2_EndBlenderGame(void) } break; case 7: - if (Blender_PrintText(&sBerryBlender->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sText_WouldLikeToBlendAnotherBerry, GetPlayerTextSpeedDelay())) sBerryBlender->gameEndState++; break; case 9: @@ -2748,7 +2755,7 @@ static void CB2_EndBlenderGame(void) sBerryBlender->gameEndState++; break; case 13: - if (Blender_PrintText(&sBerryBlender->textState, sText_CommunicationStandby, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sText_CommunicationStandby, GetPlayerTextSpeedDelay())) { SetMainCallback2(CB2_CheckPlayAgainLink); sBerryBlender->gameEndState = 0; @@ -2858,7 +2865,7 @@ static void CB2_CheckPlayAgainLink(void) StringAppend(gStringVar4, sText_HasNoBerriesToPut); break; case 3: - if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) { sBerryBlender->framesToWait = 0; sBerryBlender->gameEndState++; @@ -2869,7 +2876,7 @@ static void CB2_CheckPlayAgainLink(void) sBerryBlender->gameEndState = 5; break; case 5: - Blender_PrintText(&sBerryBlender->textState, gText_SavingDontTurnOff2, 0); + PrintMessage(&sBerryBlender->textState, gText_SavingDontTurnOff2, 0); SetLinkStandbyCallback(); sBerryBlender->gameEndState++; break; @@ -2965,7 +2972,7 @@ static void CB2_CheckPlayAgainLocal(void) StringCopy(gStringVar4, sText_RunOutOfBerriesForBlending); break; case 3: - if (Blender_PrintText(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, gStringVar4, GetPlayerTextSpeedDelay())) sBerryBlender->gameEndState = 9; break; case 9: @@ -3495,7 +3502,7 @@ static bool8 PrintBlendingResults(void) u8 *txtPtr; xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_BlendingResults, 0xA8); - Blender_AddTextPrinter(5, sText_BlendingResults, xPos, 1, TEXT_SKIP_DRAW, 0); + Blender_AddTextPrinter(WIN_RESULTS, sText_BlendingResults, xPos, 1, TEXT_SKIP_DRAW, 0); if (sBerryBlender->numPlayers == BLENDER_MAX_PLAYERS) yPos = 17; @@ -3510,15 +3517,15 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, sText_Dot); StringAppend(sBerryBlender->stringVar, gText_Space); StringAppend(sBerryBlender->stringVar, gLinkPlayers[place].name); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 8, yPos, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 8, yPos, TEXT_SKIP_DRAW, 3); StringCopy(sBerryBlender->stringVar, sBerryBlender->blendedBerries[place].name); ConvertInternationalString(sBerryBlender->stringVar, gLinkPlayers[place].language); StringAppend(sBerryBlender->stringVar, sText_SpaceBerry); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0x54, yPos, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 0x54, yPos, TEXT_SKIP_DRAW, 3); } - Blender_AddTextPrinter(5, sText_MaximumSpeed, 0, 0x51, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sText_MaximumSpeed, 0, 0x51, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->maxRPM / 100, STR_CONV_MODE_RIGHT_ALIGN, 3); StringAppend(sBerryBlender->stringVar, sText_Dot); @@ -3527,8 +3534,8 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, sText_RPM); xPos = GetStringRightAlignXOffset(FONT_NORMAL, sBerryBlender->stringVar, 0xA8); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x51, TEXT_SKIP_DRAW, 3); - Blender_AddTextPrinter(5, sText_Time, 0, 0x61, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, xPos, 0x51, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sText_Time, 0, 0x61, TEXT_SKIP_DRAW, 3); seconds = (sBerryBlender->gameFrameTime / 60) % 60; minutes = (sBerryBlender->gameFrameTime / (60 * 60)); @@ -3540,12 +3547,12 @@ static bool8 PrintBlendingResults(void) StringAppend(sBerryBlender->stringVar, sText_Sec); xPos = GetStringRightAlignXOffset(FONT_NORMAL, sBerryBlender->stringVar, 0xA8); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, xPos, 0x61, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, xPos, 0x61, TEXT_SKIP_DRAW, 3); sBerryBlender->framesToWait = 0; sBerryBlender->mainState++; - CopyWindowToVram(5, COPYWIN_GFX); + CopyWindowToVram(WIN_RESULTS, COPYWIN_GFX); } break; case 4: @@ -3553,7 +3560,7 @@ static bool8 PrintBlendingResults(void) sBerryBlender->mainState++; break; case 5: - ClearStdWindowAndFrameToTransparent(5, TRUE); + ClearStdWindowAndFrameToTransparent(WIN_RESULTS, TRUE); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { @@ -3581,7 +3588,7 @@ static bool8 PrintBlendingResults(void) sBerryBlender->mainState++; break; case 6: - if (Blender_PrintText(&sBerryBlender->textState, sBerryBlender->stringVar, GetPlayerTextSpeedDelay())) + if (PrintMessage(&sBerryBlender->textState, sBerryBlender->stringVar, GetPlayerTextSpeedDelay())) { TryUpdateBerryBlenderRecord(); return TRUE; @@ -3692,9 +3699,9 @@ static bool8 PrintBlendingRanking(void) } break; case 3: - DrawStdFrameWithCustomTileAndPalette(5, FALSE, 1, 0xD); + DrawStdFrameWithCustomTileAndPalette(WIN_RESULTS, FALSE, 1, 0xD); xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sText_Ranking, 168); - Blender_AddTextPrinter(5, sText_Ranking, xPos, 1, TEXT_SKIP_DRAW, 0); + Blender_AddTextPrinter(WIN_RESULTS, sText_Ranking, xPos, 1, TEXT_SKIP_DRAW, 0); sBerryBlender->scoreIconIds[SCORE_BEST] = CreateSprite(&sSpriteTemplate_ScoreSymbols, 128, 52, 0); StartSpriteAnim(&gSprites[sBerryBlender->scoreIconIds[SCORE_BEST]], SCOREANIM_BEST_STATIC); @@ -3718,20 +3725,20 @@ static bool8 PrintBlendingRanking(void) StringAppend(sBerryBlender->stringVar, sText_Dot); StringAppend(sBerryBlender->stringVar, gText_Space); StringAppend(sBerryBlender->stringVar, gLinkPlayers[place].name); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 0, yPos, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 0, yPos, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_BEST], STR_CONV_MODE_RIGHT_ALIGN, 3); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78, yPos, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 78, yPos, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_GOOD], STR_CONV_MODE_RIGHT_ALIGN, 3); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 32, yPos, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 78 + 32, yPos, TEXT_SKIP_DRAW, 3); ConvertIntToDecimalStringN(sBerryBlender->stringVar, sBerryBlender->scores[place][SCORE_MISS], STR_CONV_MODE_RIGHT_ALIGN, 3); - Blender_AddTextPrinter(5, sBerryBlender->stringVar, 78 + 64, yPos, TEXT_SKIP_DRAW, 3); + Blender_AddTextPrinter(WIN_RESULTS, sBerryBlender->stringVar, 78 + 64, yPos, TEXT_SKIP_DRAW, 3); } - PutWindowTilemap(5); - CopyWindowToVram(5, COPYWIN_FULL); + PutWindowTilemap(WIN_RESULTS); + CopyWindowToVram(WIN_RESULTS, COPYWIN_FULL); sBerryBlender->framesToWait = 0; sBerryBlender->mainState++; @@ -3875,26 +3882,24 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3 } if (caseId != 3) - { FillWindowPixelBuffer(windowId, PIXEL_FILL(txtColor[0])); - } AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, letterSpacing, 1, txtColor, speed, string); } -static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed) +static bool32 PrintMessage(s16 *textState, const u8 *string, s32 textSpeed) { switch (*textState) { case 0: - DrawDialogFrameWithCustomTileAndPalette(4, FALSE, 0x14, 0xF); - Blender_AddTextPrinter(4, string, 0, 1, textSpeed, 0); - PutWindowTilemap(4); - CopyWindowToVram(4, COPYWIN_FULL); + DrawDialogFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x14, 0xF); + Blender_AddTextPrinter(WIN_MSG, string, 0, 1, textSpeed, 0); + PutWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); (*textState)++; break; case 1: - if (!IsTextPrinterActive(4)) + if (!IsTextPrinterActive(WIN_MSG)) { *textState = 0; return TRUE; From 9f5704b05a783a43914c51f869a399aac4337bc8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 12:30:10 -0400 Subject: [PATCH 005/290] Use window constants in trainer_card --- src/trainer_card.c | 90 ++++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/src/trainer_card.c b/src/trainer_card.c index 04b8f686ab..ceda0e5701 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -33,6 +33,12 @@ #include "constants/trainers.h" #include "constants/union_room.h" +enum { + WIN_MSG, + WIN_CARD_TEXT, + WIN_TRAINER_PIC, +}; + struct TrainerCardData { u8 mainState; @@ -226,7 +232,7 @@ static const struct BgTemplate sTrainerCardBgTemplates[4] = static const struct WindowTemplate sTrainerCardWindowTemplates[] = { - { + [WIN_MSG] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 15, @@ -235,7 +241,7 @@ static const struct WindowTemplate sTrainerCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x253, }, - { + [WIN_CARD_TEXT] = { .bg = 1, .tilemapLeft = 1, .tilemapTop = 1, @@ -244,7 +250,7 @@ static const struct WindowTemplate sTrainerCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x1, }, - { + [WIN_TRAINER_PIC] = { .bg = 3, .tilemapLeft = 19, .tilemapTop = 5, @@ -376,7 +382,7 @@ static void Task_TrainerCard(u8 taskId) case 0: if (!IsDma3ManagerBusyWithBgCopy()) { - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_CARD_TEXT, PIXEL_FILL(0)); sData->mainState++; } break; @@ -385,13 +391,13 @@ static void Task_TrainerCard(u8 taskId) sData->mainState++; break; case 2: - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); sData->mainState++; break; case 3: - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TRAINER_PIC, PIXEL_FILL(0)); CreateTrainerCardTrainerPic(); - DrawTrainerCardWindow(2); + DrawTrainerCardWindow(WIN_TRAINER_PIC); sData->mainState++; break; case 4: @@ -411,7 +417,7 @@ static void Task_TrainerCard(u8 taskId) if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) { LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(230, 150); + CreateWirelessStatusIndicatorSprite(DISPLAY_WIDTH - 10, DISPLAY_HEIGHT - 10); } BlendPalettes(PALETTES_ALL, 16, sData->blendColor); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, sData->blendColor); @@ -434,7 +440,7 @@ static void Task_TrainerCard(u8 taskId) if (!gReceivedRemoteLinkPlayers && sData->timeColonNeedDraw) { PrintTimeOnCard(); - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); sData->timeColonNeedDraw = FALSE; } if (JOY_NEW(A_BUTTON)) @@ -497,9 +503,9 @@ static void Task_TrainerCard(u8 taskId) break; case STATE_WAIT_LINK_PARTNER: SetCloseLinkCallback(); - DrawDialogueFrame(0, TRUE); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); - CopyWindowToVram(0, COPYWIN_FULL); + DrawDialogueFrame(WIN_MSG, TRUE); + AddTextPrinterParameterized(WIN_MSG, FONT_NORMAL, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); sData->mainState = STATE_CLOSE_CARD_LINK; break; case STATE_CLOSE_CARD_LINK: @@ -1002,9 +1008,9 @@ static void PrintNameOnCardFront(void) StringCopy(txtPtr, sData->trainerCard.playerName); ConvertInternationalString(txtPtr, sData->language); if (sData->cardType == CARD_TYPE_FRLG) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 28, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 28, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); } static void PrintIdOnCard(void) @@ -1026,7 +1032,7 @@ static void PrintIdOnCard(void) top = 9; } - AddTextPrinterParameterized3(1, FONT_NORMAL, xPos, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xPos, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, buffer); } static void PrintMoneyOnCard(void) @@ -1035,9 +1041,9 @@ static void PrintMoneyOnCard(void) u8 top; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 56, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 56, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney); ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); @@ -1051,7 +1057,7 @@ static void PrintMoneyOnCard(void) xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 128); top = 57; } - AddTextPrinterParameterized3(1, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } static u16 GetCaughtMonsCount(void) @@ -1069,9 +1075,9 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 72, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 72, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 73, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 73, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardPokedex); StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6); if (!sData->isHoenn) { @@ -1083,7 +1089,7 @@ static void PrintPokedexOnCard(void) xOffset = GetStringRightAlignXOffset(FONT_NORMAL, gStringVar4, 128); top = 73; } - AddTextPrinterParameterized3(1, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xOffset, top, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } } @@ -1097,9 +1103,9 @@ static void PrintTimeOnCard(void) u32 x, y, totalWidth; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 20, 88, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 20, 88, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); else - AddTextPrinterParameterized3(1, FONT_NORMAL, 16, 89, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 89, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardTime); if (sData->isLink) { @@ -1131,14 +1137,14 @@ static void PrintTimeOnCard(void) totalWidth = width + 30; x -= totalWidth; - FillWindowPixelRect(1, PIXEL_FILL(0), x, y, totalWidth, 15); + FillWindowPixelRect(WIN_CARD_TEXT, PIXEL_FILL(0), x, y, totalWidth, 15); ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); x += 18; - AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTimeColonTextColors[sData->timeColonInvisible], TEXT_SKIP_DRAW, gText_Colon2); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, x, y, sTimeColonTextColors[sData->timeColonInvisible], TEXT_SKIP_DRAW, gText_Colon2); x += width; ConvertIntToDecimalStringN(gStringVar4, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); - AddTextPrinterParameterized3(1, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, x, y, sTrainerCardTextColors, TEXT_SKIP_DRAW, gStringVar4); } static void PrintProfilePhraseOnCard(void) @@ -1148,10 +1154,10 @@ static void PrintProfilePhraseOnCard(void) if (sData->isLink) { - AddTextPrinterParameterized3(1, FONT_NORMAL, 8, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[0]); - AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[0], 0) + 14, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[1]); - AddTextPrinterParameterized3(1, FONT_NORMAL, 8, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[2]); - AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[2], 0) + 14, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[3]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 8, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[0]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[0], 0) + 14, yOffsetsLine1[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[1]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 8, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[2]); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringWidth(FONT_NORMAL, sData->easyChatProfile[2], 0) + 14, yOffsetsLine2[sData->isHoenn], sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->easyChatProfile[3]); } } @@ -1169,9 +1175,9 @@ static void BufferNameForCardBack(void) static void PrintNameOnCardBack(void) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, FONT_NORMAL, 136, 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 136, 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); else - AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, sData->textPlayersCard, 216), 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, sData->textPlayersCard, 216), 9, sTrainerCardTextColors, TEXT_SKIP_DRAW, sData->textPlayersCard); } static const u8 sText_HofTime[] = _("{STR_VAR_1}:{STR_VAR_2}:{STR_VAR_3}"); @@ -1192,8 +1198,8 @@ static void PrintStatOnBackOfCard(u8 top, const u8 *statName, u8 *stat, const u8 static const u8 xOffsets[] = {8, 16}; static const u8 widths[] = {216, 216}; - AddTextPrinterParameterized3(1, FONT_NORMAL, xOffsets[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, statName); - AddTextPrinterParameterized3(1, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, stat, widths[sData->isHoenn]), top * 16 + 33, color, TEXT_SKIP_DRAW, stat); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, xOffsets[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SKIP_DRAW, statName); + AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, GetStringRightAlignXOffset(FONT_NORMAL, stat, widths[sData->isHoenn]), top * 16 + 33, color, TEXT_SKIP_DRAW, stat); } static void PrintHofDebutTimeOnCard(void) @@ -1672,7 +1678,7 @@ static bool8 Task_DrawFlippedCardSide(struct Task *task) switch (sData->flipDrawState) { case 0: - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_CARD_TEXT, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); break; case 1: @@ -1691,13 +1697,13 @@ static bool8 Task_DrawFlippedCardSide(struct Task *task) if (!sData->onBack) DrawCardFrontOrBack(sData->backTilemap); else - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); break; case 3: if (!sData->onBack) DrawCardBackStats(); else - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TRAINER_PIC, PIXEL_FILL(0)); break; case 4: if (sData->onBack) @@ -1722,12 +1728,12 @@ static bool8 Task_SetCardFlipped(struct Task *task) // If on back of card, draw front of card because its being flipped if (sData->onBack) { - DrawTrainerCardWindow(2); + DrawTrainerCardWindow(WIN_TRAINER_PIC); DrawCardScreenBackground(sData->bgTilemap); DrawCardFrontOrBack(sData->frontTilemap); DrawStarsAndBadgesOnCard(); } - DrawTrainerCardWindow(1); + DrawTrainerCardWindow(WIN_CARD_TEXT); sData->onBack ^= 1; task->tFlipState++; sData->allowDMACopy = TRUE; @@ -1882,7 +1888,7 @@ static void CreateTrainerCardTrainerPic(void) sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][0], sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][1], 8, - 2); + WIN_TRAINER_PIC); } else { @@ -1891,6 +1897,6 @@ static void CreateTrainerCardTrainerPic(void) sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][0], sTrainerPicOffset[sData->isHoenn][sData->trainerCard.gender][1], 8, - 2); + WIN_TRAINER_PIC); } } From 1f225286d5641fef8c1b7f657d7fa0bdbb0ff0df Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 12:55:31 -0400 Subject: [PATCH 006/290] Use window constants in party_menu --- src/data/party_menu.h | 54 +++++++++++++++++++++---------------------- src/party_menu.c | 28 ++++++++++++---------- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/data/party_menu.h b/src/data/party_menu.h index b29449830a..7a9efce0b8 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -122,7 +122,7 @@ static const u8 sFontColorTable[][3] = static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 3, @@ -131,7 +131,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 12, .tilemapTop = 1, @@ -140,7 +140,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 4, @@ -149,7 +149,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xDF, }, - { + { // Party mon 4 .bg = 0, .tilemapLeft = 12, .tilemapTop = 7, @@ -158,7 +158,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0x115, }, - { + { // Party mon 5 .bg = 0, .tilemapLeft = 12, .tilemapTop = 10, @@ -167,7 +167,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x14B, }, - { + { // Party mon 6 .bg = 0, .tilemapLeft = 12, .tilemapTop = 13, @@ -176,7 +176,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = .paletteNum = 8, .baseBlock = 0x181, }, - { + [WIN_MSG] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 15, @@ -190,7 +190,7 @@ static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -199,7 +199,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 1, .tilemapTop = 8, @@ -208,7 +208,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 1, @@ -217,7 +217,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xEF, }, - { + { // Party mon 4 .bg = 0, .tilemapLeft = 12, .tilemapTop = 5, @@ -226,7 +226,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0x125, }, - { + { // Party mon 5 .bg = 0, .tilemapLeft = 12, .tilemapTop = 9, @@ -235,7 +235,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x15B, }, - { + { // Party mon 6 .bg = 0, .tilemapLeft = 12, .tilemapTop = 13, @@ -244,7 +244,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = .paletteNum = 8, .baseBlock = 0x191, }, - { + [WIN_MSG] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 15, @@ -258,7 +258,7 @@ static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -267,7 +267,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 1, .tilemapTop = 8, @@ -276,7 +276,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 2, @@ -285,7 +285,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xEF, }, - { + { // Party mon 4 .bg = 0, .tilemapLeft = 12, .tilemapTop = 5, @@ -294,7 +294,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0x125, }, - { + { // Party mon 5 .bg = 0, .tilemapLeft = 12, .tilemapTop = 9, @@ -303,7 +303,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x15B, }, - { + { // Party mon 6 .bg = 0, .tilemapLeft = 12, .tilemapTop = 12, @@ -312,7 +312,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = .paletteNum = 8, .baseBlock = 0x191, }, - { + [WIN_MSG] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 15, @@ -326,7 +326,7 @@ static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = { - { + { // Party mon 1 .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, @@ -335,7 +335,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 3, .baseBlock = 0x63, }, - { + { // Party mon 2 .bg = 0, .tilemapLeft = 12, .tilemapTop = 3, @@ -344,7 +344,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 5, .baseBlock = 0xA9, }, - { + { // Party mon 3 .bg = 0, .tilemapLeft = 12, .tilemapTop = 6, @@ -353,7 +353,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 6, .baseBlock = 0xDF, }, - { + { // Party mon 4 .bg = 2, .tilemapLeft = 1, .tilemapTop = 11, @@ -362,7 +362,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 4, .baseBlock = 0x115, }, - { + { // Party mon 5 .bg = 2, .tilemapLeft = 12, .tilemapTop = 12, @@ -371,7 +371,7 @@ static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = .paletteNum = 7, .baseBlock = 0x16B, }, - { + { // Party mon 6 .bg = 2, .tilemapLeft = 12, .tilemapTop = 15, diff --git a/src/party_menu.c b/src/party_menu.c index 8c9b09f523..153e389b23 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -161,14 +161,18 @@ enum { #define MENU_DIR_RIGHT 2 #define MENU_DIR_LEFT -2 -enum -{ +enum { CAN_LEARN_MOVE, CANNOT_LEARN_MOVE, ALREADY_KNOWS_MOVE, CANNOT_LEARN_MOVE_IS_EGG }; +enum { + // Window ids 0-5 are implicitly assigned to each party pokemon in InitPartyMenuBoxes + WIN_MSG = PARTY_SIZE, +}; + struct PartyMenuBoxInfoRects { void (*blitFunc)(u8, u8, u8, u8, u8, bool8); @@ -320,7 +324,7 @@ static void UpdateCurrentPartySelection(s8 *, s8); static void UpdatePartySelectionSingleLayout(s8 *, s8); static void UpdatePartySelectionDoubleLayout(s8 *, s8); static s8 GetNewSlotDoubleLayout(s8, s8); -static void PartyMenuPrintText(const u8 *); +static void PrintMessage(const u8 *); static void Task_PrintAndWaitForText(u8); static bool16 IsMonAllowedInPokemonJump(struct Pokemon *); static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *); @@ -1703,7 +1707,7 @@ u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen) { u8 taskId; - PartyMenuPrintText(str); + PrintMessage(str); taskId = CreateTask(Task_PrintAndWaitForText, 1); gTasks[taskId].tKeepOpen = keepOpen; return taskId; @@ -1711,12 +1715,12 @@ u8 DisplayPartyMenuMessage(const u8 *str, bool8 keepOpen) static void Task_PrintAndWaitForText(u8 taskId) { - if (RunTextPrintersRetIsActive(6) != TRUE) + if (RunTextPrintersRetIsActive(WIN_MSG) != TRUE) { if (gTasks[taskId].tKeepOpen == FALSE) { - ClearStdWindowAndFrameToTransparent(6, FALSE); - ClearWindowTilemap(6); + ClearStdWindowAndFrameToTransparent(WIN_MSG, FALSE); + ClearWindowTilemap(WIN_MSG); } DestroyTask(taskId); } @@ -1742,8 +1746,8 @@ static void Task_ReturnToChooseMonAfterText(u8 taskId) { if (IsPartyMenuTextPrinterActive() != TRUE) { - ClearStdWindowAndFrameToTransparent(6, FALSE); - ClearWindowTilemap(6); + ClearStdWindowAndFrameToTransparent(WIN_MSG, FALSE); + ClearWindowTilemap(WIN_MSG); if (MenuHelpers_IsLinkActive() == TRUE) { gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon; @@ -2559,11 +2563,11 @@ static u8 DisplaySelectionWindow(u8 windowType) return sPartyMenuInternal->windowId[0]; } -static void PartyMenuPrintText(const u8 *text) +static void PrintMessage(const u8 *text) { - DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13); + DrawStdFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x4F, 13); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(6, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); + AddTextPrinterParameterized2(WIN_MSG, FONT_NORMAL, text, GetPlayerTextSpeedDelay(), 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); } static void PartyMenuDisplayYesNoMenu(void) From 4af1044439d46afdd5da98f7e4b41fafc4b246f8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 13:11:38 -0400 Subject: [PATCH 007/290] Use window constants in region_map --- include/region_map.h | 3 ++- src/region_map.c | 47 ++++++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/include/region_map.h b/include/region_map.h index 85793badcb..9f0b110a65 100644 --- a/include/region_map.h +++ b/include/region_map.h @@ -21,7 +21,8 @@ enum { MAPSECTYPE_ROUTE, MAPSECTYPE_CITY_CANFLY, MAPSECTYPE_CITY_CANTFLY, - MAPSECTYPE_BATTLE_FRONTIER + MAPSECTYPE_BATTLE_FRONTIER, + NUM_MAPSEC_TYPES }; struct RegionMap { diff --git a/src/region_map.c b/src/region_map.c index 8157f8a4e7..ba7dcf106f 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -53,7 +53,12 @@ enum { TAG_FLY_ICON, }; -// Static type declarations +// Window IDs for the fly map +enum { + WIN_MAPSEC_NAME, + WIN_MAPSEC_NAME_TALL, // For fly destinations with subtitles (just Ever Grande) + WIN_FLY_TO_WHERE, +}; struct MultiNameFlyDest { @@ -386,7 +391,7 @@ static const struct BgTemplate sFlyMapBgTemplates[] = static const struct WindowTemplate sFlyMapWindowTemplates[] = { - { + [WIN_MAPSEC_NAME] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 17, @@ -395,7 +400,7 @@ static const struct WindowTemplate sFlyMapWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x01 }, - { + [WIN_MAPSEC_NAME_TALL] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 15, @@ -404,7 +409,7 @@ static const struct WindowTemplate sFlyMapWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x19 }, - { + [WIN_FLY_TO_WHERE] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 18, @@ -1404,7 +1409,7 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag) } LoadSpriteSheet(&sheet); LoadSpritePalette(&palette); - spriteId = CreateSprite(&template, 0x38, 0x48, 0); + spriteId = CreateSprite(&template, 56, 72, 0); if (spriteId != MAX_SPRITES) { sRegionMap->cursorSprite = &gSprites[spriteId]; @@ -1713,9 +1718,9 @@ void CB2_OpenFlyMap(void) break; case 7: LoadPalette(sRegionMapFramePal, 0x10, sizeof(sRegionMapFramePal)); - PutWindowTilemap(2); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized(2, FONT_NORMAL, gText_FlyToWhere, 0, 1, 0, NULL); + PutWindowTilemap(WIN_FLY_TO_WHERE); + FillWindowPixelBuffer(WIN_FLY_TO_WHERE, PIXEL_FILL(0)); + AddTextPrinterParameterized(WIN_FLY_TO_WHERE, FONT_NORMAL, gText_FlyToWhere, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); gMain.state++; break; @@ -1768,7 +1773,7 @@ static void DrawFlyDestTextWindow(void) bool32 namePrinted; const u8 *name; - if (sFlyMap->regionMap.mapSecType > MAPSECTYPE_NONE && sFlyMap->regionMap.mapSecType <= MAPSECTYPE_BATTLE_FRONTIER) + if (sFlyMap->regionMap.mapSecType > MAPSECTYPE_NONE && sFlyMap->regionMap.mapSecType < NUM_MAPSEC_TYPES) { namePrinted = FALSE; for (i = 0; i < ARRAY_COUNT(sMultiNameFlyDestinations); i++) @@ -1779,11 +1784,11 @@ static void DrawFlyDestTextWindow(void) { StringLength(sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec]); namePrinted = TRUE; - ClearStdWindowAndFrameToTransparent(0, FALSE); - DrawStdFrameWithCustomTileAndPalette(1, FALSE, 101, 13); - AddTextPrinterParameterized(1, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + ClearStdWindowAndFrameToTransparent(WIN_MAPSEC_NAME, FALSE); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME_TALL, FALSE, 101, 13); + AddTextPrinterParameterized(WIN_MAPSEC_NAME_TALL, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec]; - AddTextPrinterParameterized(1, FONT_NORMAL, name, GetStringRightAlignXOffset(FONT_NORMAL, name, 96), 17, 0, NULL); + AddTextPrinterParameterized(WIN_MAPSEC_NAME_TALL, FONT_NORMAL, name, GetStringRightAlignXOffset(FONT_NORMAL, name, 96), 17, 0, NULL); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = TRUE; } @@ -1794,15 +1799,15 @@ static void DrawFlyDestTextWindow(void) { if (sDrawFlyDestTextWindow == TRUE) { - ClearStdWindowAndFrameToTransparent(1, FALSE); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); + ClearStdWindowAndFrameToTransparent(WIN_MAPSEC_NAME_TALL, FALSE); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 101, 13); } else { // Window is already drawn, just empty it - FillWindowPixelBuffer(0, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); } - AddTextPrinterParameterized(0, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_MAPSEC_NAME, FONT_NORMAL, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = FALSE; } @@ -1812,11 +1817,11 @@ static void DrawFlyDestTextWindow(void) // Selection is on MAPSECTYPE_NONE, draw empty fly destination text window if (sDrawFlyDestTextWindow == TRUE) { - ClearStdWindowAndFrameToTransparent(1, FALSE); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); + ClearStdWindowAndFrameToTransparent(WIN_MAPSEC_NAME_TALL, FALSE); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 101, 13); } - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); + CopyWindowToVram(WIN_MAPSEC_NAME, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); sDrawFlyDestTextWindow = FALSE; } From 81defb5986dc76951f593a403c5d78ba500c652e Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 13:20:35 -0400 Subject: [PATCH 008/290] Use window constants in union_room_chat --- src/union_room_chat.c | 94 ++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/src/union_room_chat.c b/src/union_room_chat.c index e1ca7c0b0d..36bdbe07bc 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -116,6 +116,13 @@ enum { // Shared by all above #define PALTAG_INTERFACE 0 +enum { + WIN_CHAT_HISTORY, + WIN_TEXT_ENTRY, + WIN_KEYBOARD, + WIN_SWAP_MENU, +}; + struct UnionRoomChat { u32 filler1; @@ -560,7 +567,7 @@ static const struct BgTemplate sBgTemplates[] = { }; static const struct WindowTemplate sWinTemplates[] = { - { + [WIN_CHAT_HISTORY] = { .bg = 3, .tilemapLeft = 8, .tilemapTop = 1, @@ -568,7 +575,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 19, .paletteNum = 15, .baseBlock = 0x0001, - }, { + }, + [WIN_TEXT_ENTRY] = { .bg = 1, .tilemapLeft = 9, .tilemapTop = 18, @@ -576,7 +584,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 2, .paletteNum = 12, .baseBlock = 0x007a, - }, { + }, + [WIN_KEYBOARD] = { .bg = 1, .tilemapLeft = 0, .tilemapTop = 2, @@ -584,7 +593,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 15, .paletteNum = 7, .baseBlock = 0x0020, - }, { + }, + [WIN_SWAP_MENU] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, @@ -2280,7 +2290,7 @@ static bool32 Display_ShowKeyboardSwapMenu(u8 *state) { case 0: ShowKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2296,7 +2306,7 @@ static bool32 Display_HideKeyboardSwapMenu(u8 *state) { case 0: HideKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2316,7 +2326,7 @@ static bool32 Display_SwitchPages(u8 *state) return TRUE; PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2393,7 +2403,7 @@ static bool32 Display_UpdateMessageBuffer(u8 *state) FillTextEntryWindow(x, width, 0); str = GetMessageEntryBuffer(); DrawTextEntryMessage(0, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2422,7 +2432,7 @@ static bool32 Display_AskRegisterText(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(6)); DrawTextEntryMessage(x, str, 0, 4, 5); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2463,7 +2473,7 @@ static bool32 Display_CancelRegister(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(0)); DrawTextEntryMessage(x, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2501,7 +2511,7 @@ static bool32 Display_ReturnToKeyboard(u8 *state) { case 0: PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); (*state)++; break; case 1: @@ -2527,7 +2537,7 @@ static bool32 Display_ScrollChat(u8 *state) str = GetLastReceivedMessage(); colorIdx = GetReceivedPlayerIndex(); PrintChatMessage(row, str, colorIdx); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2546,8 +2556,8 @@ static bool32 Display_ScrollChat(u8 *state) } // fall through case 2: - ScrollWindow(0, 0, 5, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_GFX); + ScrollWindow(WIN_CHAT_HISTORY, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); sDisplay->scrollCount++; (*state)++; // fall through @@ -2864,7 +2874,7 @@ static void DestroyStdMessageWindow(void) static void FillTextEntryWindow(u16 x, u16 width, u8 fillValue) { - FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); + FillWindowPixelRect(WIN_TEXT_ENTRY, fillValue, x * 8, 1, width * 8, 14); } static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) @@ -2881,7 +2891,7 @@ static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shad strBuffer[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; strBuffer[2] = 8; StringCopy(&strBuffer[3], str); - AddTextPrinterParameterized3(1, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); + AddTextPrinterParameterized3(WIN_TEXT_ENTRY, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); } static void PrintCurrentKeyboardPage(void) @@ -2894,7 +2904,7 @@ static void PrintCurrentKeyboardPage(void) u8 str[45]; u8 *str2; - FillWindowPixelBuffer(2, PIXEL_FILL(15)); + FillWindowPixelBuffer(WIN_KEYBOARD, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_5; @@ -2916,7 +2926,7 @@ static void PrintCurrentKeyboardPage(void) return; StringCopy(&str[3], sUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); } } else @@ -2927,7 +2937,7 @@ static void PrintCurrentKeyboardPage(void) str2 = GetRegisteredTextByRow(i); if (GetStringWidth(FONT_SMALL, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); } else { @@ -2938,8 +2948,8 @@ static void PrintCurrentKeyboardPage(void) StringCopyN_Multibyte(str, str2, length); } while (GetStringWidth(FONT_SMALL, str, 0) > 35); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); - AddTextPrinterParameterized3(2, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); } } } @@ -2989,17 +2999,17 @@ static bool32 SlideKeyboardPageIn(void) static void ShowKeyboardSwapMenu(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - DrawTextBorderOuter(3, 1, 13); - PrintMenuActionTextsAtPos(3, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); - InitMenuNormal(3, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); - PutWindowTilemap(3); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + DrawTextBorderOuter(WIN_SWAP_MENU, 1, 13); + PrintMenuActionTextsAtPos(WIN_SWAP_MENU, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); + InitMenuNormal(WIN_SWAP_MENU, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); + PutWindowTilemap(WIN_SWAP_MENU); } static void HideKeyboardSwapMenu(void) { - ClearStdWindowAndFrameToTransparent(3, FALSE); - ClearWindowTilemap(3); + ClearStdWindowAndFrameToTransparent(WIN_SWAP_MENU, FALSE); + ClearWindowTilemap(WIN_SWAP_MENU); } static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) @@ -3009,8 +3019,8 @@ static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) color[0] = TEXT_COLOR_WHITE; color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; - FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); - AddTextPrinterParameterized3(0, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); + FillWindowPixelRect(WIN_CHAT_HISTORY, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(WIN_CHAT_HISTORY, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); } static void ResetGpuBgState(void) @@ -3087,16 +3097,16 @@ static void LoadChatUnkPalette(void) static void LoadChatMessagesWindow(void) { LoadPalette(sUnk_Palette2, 0xF0, sizeof(sUnk_Palette2)); - PutWindowTilemap(0); - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_FULL); + PutWindowTilemap(WIN_CHAT_HISTORY); + FillWindowPixelBuffer(WIN_CHAT_HISTORY, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_FULL); } static void LoadKeyboardWindow(void) { - PutWindowTilemap(2); + PutWindowTilemap(WIN_KEYBOARD); PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_FULL); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_FULL); } static void LoadTextEntryWindow(void) @@ -3107,18 +3117,18 @@ static void LoadTextEntryWindow(void) unused[1] = 0xFF; for (i = 0; i < MAX_MESSAGE_LENGTH; i++) - BlitBitmapToWindow(1, sDisplay->unk2128, i * 8, 0, 8, 16); + BlitBitmapToWindow(WIN_TEXT_ENTRY, sDisplay->unk2128, i * 8, 0, 8, 16); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_TEXT_ENTRY, PIXEL_FILL(0)); + PutWindowTilemap(WIN_TEXT_ENTRY); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_FULL); } static void LoadKeyboardSwapWindow(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - LoadUserWindowBorderGfx(3, 1, 0xD0); - LoadUserWindowBorderGfx_(3, 0xA, 0x20); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + LoadUserWindowBorderGfx(WIN_SWAP_MENU, 1, 0xD0); + LoadUserWindowBorderGfx_(WIN_SWAP_MENU, 0xA, 0x20); LoadPalette(gStandardMenuPalette, 0xE0, 0x20); } From 2cd07d80b8e60cc0b2660dea3df7d2f4295b69c8 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 13:31:01 -0400 Subject: [PATCH 009/290] Use window constants in wireless_communication_status_screen --- src/wireless_communication_status_screen.c | 62 ++++++++++++---------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 1fbd83fcda..5d40aefb7a 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -27,12 +27,20 @@ enum { COLORMODE_WHITE_DGRAY, }; -#define GROUPTYPE_TRADE 0 -#define GROUPTYPE_BATTLE 1 -#define GROUPTYPE_UNION 2 -#define GROUPTYPE_TOTAL 3 -#define GROUPTYPE_NONE -1 -#define NUM_GROUPTYPES 4 +enum { + WIN_TITLE, + WIN_GROUP_NAMES, + WIN_GROUP_COUNTS, +}; + +enum { + GROUPTYPE_NONE = -1, + GROUPTYPE_TRADE, + GROUPTYPE_BATTLE, + GROUPTYPE_UNION, + GROUPTYPE_TOTAL, + NUM_GROUPTYPES +}; struct WirelessCommunicationStatusScreen { @@ -70,7 +78,7 @@ static const struct BgTemplate sBgTemplates[] = { }; static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_TITLE] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 0, @@ -78,7 +86,8 @@ static const struct WindowTemplate sWindowTemplates[] = { .height = 3, .paletteNum = 15, .baseBlock = 0x0001 - }, { + }, + [WIN_GROUP_NAMES] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 4, @@ -86,7 +95,8 @@ static const struct WindowTemplate sWindowTemplates[] = { .height = 15, .paletteNum = 15, .baseBlock = 0x0049 - }, { + }, + [WIN_GROUP_COUNTS] = { .bg = 0, .tilemapLeft = 24, .tilemapTop = 4, @@ -233,19 +243,17 @@ static void WCSS_CyclePalette(s16 * counter, s16 * palIdx) static void PrintHeaderTexts(void) { s32 i; - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - WCSS_AddTextPrinterParameterized(0, FONT_NORMAL, sHeaderTexts[0], GetStringCenterAlignXOffset(FONT_NORMAL, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); + FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_NAMES, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_COUNTS, PIXEL_FILL(0)); + WCSS_AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, sHeaderTexts[0], GetStringCenterAlignXOffset(FONT_NORMAL, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); for (i = 0; i < (int)ARRAY_COUNT(*sHeaderTexts) - 1; i++) - { - WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); - } - WCSS_AddTextPrinterParameterized(1, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED); - PutWindowTilemap(0); - CopyWindowToVram(0, COPYWIN_GFX); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_GFX); + WCSS_AddTextPrinterParameterized(WIN_GROUP_NAMES, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_WHITE_LGRAY); + WCSS_AddTextPrinterParameterized(WIN_GROUP_NAMES, FONT_NORMAL, sHeaderTexts[i + 1], 0, 30 * i + 8, COLORMODE_RED); + PutWindowTilemap(WIN_TITLE); + CopyWindowToVram(WIN_TITLE, COPYWIN_GFX); + PutWindowTilemap(WIN_GROUP_NAMES); + CopyWindowToVram(WIN_GROUP_NAMES, COPYWIN_GFX); } #define tState data[0] @@ -268,24 +276,22 @@ static void Task_WirelessCommunicationScreen(u8 taskId) break; case 2: if (!gPaletteFade.active) - { gTasks[taskId].tState++; - } break; case 3: if (UpdateCommunicationCounts(sStatusScreen->groupCounts, sStatusScreen->prevGroupCounts, sStatusScreen->activities, sStatusScreen->rfuTaskId)) { - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_COUNTS, PIXEL_FILL(0)); for (i = 0; i < NUM_GROUPTYPES; i++) { ConvertIntToDecimalStringN(gStringVar4, sStatusScreen->groupCounts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); if (i != GROUPTYPE_TOTAL) - WCSS_AddTextPrinterParameterized(2, FONT_NORMAL, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY); + WCSS_AddTextPrinterParameterized(WIN_GROUP_COUNTS, FONT_NORMAL, gStringVar4, 12, 30 * i + 8, COLORMODE_WHITE_LGRAY); else - WCSS_AddTextPrinterParameterized(2, FONT_NORMAL, gStringVar4, 12, 98, COLORMODE_RED); + WCSS_AddTextPrinterParameterized(WIN_GROUP_COUNTS, FONT_NORMAL, gStringVar4, 12, 98, COLORMODE_RED); } - PutWindowTilemap(2); - CopyWindowToVram(2, COPYWIN_FULL); + PutWindowTilemap(WIN_GROUP_COUNTS); + CopyWindowToVram(WIN_GROUP_COUNTS, COPYWIN_FULL); } if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { From 9ae918bb3564065d056c75fe80a86061b1962f77 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 13:37:32 -0400 Subject: [PATCH 010/290] Use window constants in field_region_map --- src/field_region_map.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/field_region_map.c b/src/field_region_map.c index 43055174fa..365b1622a4 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -23,9 +23,15 @@ * For the fly map, and utility functions all of the maps use, see region_map.c */ -// Static type declarations +enum { + WIN_MAPSEC_NAME, + WIN_TITLE, +}; -// Static RAM declarations +enum { + TAG_PLAYER_ICON, + TAG_CURSOR, +}; static EWRAM_DATA struct { MainCallback callback; @@ -34,16 +40,12 @@ static EWRAM_DATA struct { u16 state; } *sFieldRegionMapHandler = NULL; -// Static ROM declarations - static void MCB2_InitRegionMapRegisters(void); static void VBCB_FieldUpdateRegionMap(void); static void MCB2_FieldUpdateRegionMap(void); static void FieldUpdateRegionMap(void); static void PrintRegionMapSecName(void); -// .rodata - static const struct BgTemplate sFieldRegionMapBgTemplates[] = { { .bg = 0, @@ -66,7 +68,7 @@ static const struct BgTemplate sFieldRegionMapBgTemplates[] = { static const struct WindowTemplate sFieldRegionMapWindowTemplates[] = { - { + [WIN_MAPSEC_NAME] = { .bg = 0, .tilemapLeft = 17, .tilemapTop = 17, @@ -75,7 +77,7 @@ static const struct WindowTemplate sFieldRegionMapWindowTemplates[] = .paletteNum = 15, .baseBlock = 1 }, - { + [WIN_TITLE] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 1, @@ -87,8 +89,6 @@ static const struct WindowTemplate sFieldRegionMapWindowTemplates[] = DUMMY_WIN_TEMPLATE }; -// .text - void FieldInitRegionMap(MainCallback callback) { SetVBlankCallback(NULL); @@ -145,16 +145,16 @@ static void FieldUpdateRegionMap(void) { case 0: InitRegionMap(&sFieldRegionMapHandler->regionMap, FALSE); - CreateRegionMapPlayerIcon(0, 0); - CreateRegionMapCursor(1, 1); + CreateRegionMapPlayerIcon(TAG_PLAYER_ICON, TAG_PLAYER_ICON); + CreateRegionMapCursor(TAG_CURSOR, TAG_CURSOR); sFieldRegionMapHandler->state++; break; case 1: - DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x27, 0xd); + DrawStdFrameWithCustomTileAndPalette(WIN_TITLE, FALSE, 0x27, 0xd); offset = GetStringCenterAlignXOffset(FONT_NORMAL, gText_Hoenn, 0x38); - AddTextPrinterParameterized(1, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL); + AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, gText_Hoenn, offset, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x27, 0xd); + DrawStdFrameWithCustomTileAndPalette(WIN_MAPSEC_NAME, FALSE, 0x27, 0xd); PrintRegionMapSecName(); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); sFieldRegionMapHandler->state++; @@ -203,13 +203,13 @@ static void PrintRegionMapSecName(void) { if (sFieldRegionMapHandler->regionMap.mapSecType != MAPSECTYPE_NONE) { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, FONT_NORMAL, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); - ScheduleBgCopyTilemapToVram(0); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); + AddTextPrinterParameterized(WIN_MAPSEC_NAME, FONT_NORMAL, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); + ScheduleBgCopyTilemapToVram(WIN_MAPSEC_NAME); } else { - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_MAPSEC_NAME, PIXEL_FILL(1)); + CopyWindowToVram(WIN_MAPSEC_NAME, COPYWIN_FULL); } } From c719d5d9b1a6af7e1afe6966dfd8b07edc09437b Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 14:50:51 -0400 Subject: [PATCH 011/290] Use window constants in link --- src/link.c | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/link.c b/src/link.c index b01be9d890..3d36755fc6 100644 --- a/src/link.c +++ b/src/link.c @@ -28,6 +28,13 @@ #include "constants/rgb.h" #include "constants/trade.h" +// Window IDs for the link error screens +enum { + WIN_LINK_ERROR_TOP, + WIN_LINK_ERROR_MID, + WIN_LINK_ERROR_BOTTOM, +}; + struct BlockTransfer { u16 pos; @@ -193,8 +200,9 @@ static const struct BgTemplate sLinkErrorBgTemplates[] = { .priority = 1 } }; + static const struct WindowTemplate sLinkErrorWindowTemplates[] = { - { + [WIN_LINK_ERROR_TOP] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -202,7 +210,8 @@ static const struct WindowTemplate sLinkErrorWindowTemplates[] = { .height = 5, .paletteNum = 15, .baseBlock = 0x002 - }, { + }, + [WIN_LINK_ERROR_MID] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 6, @@ -210,7 +219,8 @@ static const struct WindowTemplate sLinkErrorWindowTemplates[] = { .height = 7, .paletteNum = 15, .baseBlock = 0x098 - }, { + }, + [WIN_LINK_ERROR_BOTTOM] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 13, @@ -1641,26 +1651,26 @@ static void ErrorMsg_MoveCloserToPartner(void) CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); LoadPalette(sWirelessLinkDisplayPal, 0, 0x20); - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); - AddTextPrinterParameterized3(2, FONT_SHORT_COPY_1, 2, 1, sTextColors, 0, gText_MoveCloserToLinkPartner); - PutWindowTilemap(0); - PutWindowTilemap(2); - CopyWindowToVram(0, COPYWIN_NONE); // Does nothing - CopyWindowToVram(2, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_LINK_ERROR_TOP, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); + AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); + AddTextPrinterParameterized3(WIN_LINK_ERROR_BOTTOM, FONT_SHORT_COPY_1, 2, 1, sTextColors, 0, gText_MoveCloserToLinkPartner); + PutWindowTilemap(WIN_LINK_ERROR_TOP); + PutWindowTilemap(WIN_LINK_ERROR_BOTTOM); + CopyWindowToVram(WIN_LINK_ERROR_TOP, COPYWIN_NONE); // Does nothing + CopyWindowToVram(WIN_LINK_ERROR_BOTTOM, COPYWIN_FULL); } static void ErrorMsg_CheckConnections(void) { LoadBgTiles(0, sCommErrorBg_Gfx, 0x20, 0); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - AddTextPrinterParameterized3(1, FONT_SHORT_COPY_1, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); - PutWindowTilemap(1); - PutWindowTilemap(2); - CopyWindowToVram(1, COPYWIN_NONE); // Does nothing - CopyWindowToVram(2, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_LINK_ERROR_MID, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_LINK_ERROR_BOTTOM, PIXEL_FILL(0)); + AddTextPrinterParameterized3(WIN_LINK_ERROR_MID, FONT_SHORT_COPY_1, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); + PutWindowTilemap(WIN_LINK_ERROR_MID); + PutWindowTilemap(WIN_LINK_ERROR_BOTTOM); + CopyWindowToVram(WIN_LINK_ERROR_MID, COPYWIN_NONE); // Does nothing + CopyWindowToVram(WIN_LINK_ERROR_BOTTOM, COPYWIN_FULL); } static void CB2_PrintErrorMessage(void) @@ -1691,9 +1701,9 @@ static void CB2_PrintErrorMessage(void) break; case 130: if (gWirelessCommType == 2) - AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnTitleScreen); + AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnTitleScreen); else if (gWirelessCommType == 1) - AddTextPrinterParameterized3(0, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter); + AddTextPrinterParameterized3(WIN_LINK_ERROR_TOP, FONT_SHORT_COPY_1, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter); break; } if (gMain.state == 160) From 6bc1955c992458891538267193eaa18549d9cf66 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 15:03:44 -0400 Subject: [PATCH 012/290] Use window constants in easy_chat --- src/easy_chat.c | 88 ++++++++++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 38 deletions(-) diff --git a/src/easy_chat.c b/src/easy_chat.c index 054c65c0fb..8a2bae7d51 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -226,18 +226,23 @@ static void DoQuizQuestionEasyChatScreen(void); static void DoQuizSetAnswerEasyChatScreen(void); static void DoQuizSetQuestionEasyChatScreen(void); -#define PALTAG_TRIANGLE_CURSOR 0 -#define PALTAG_RECTANGLE_CURSOR 1 -#define PALTAG_MISC_UI 2 -#define PALTAG_RS_INTERVIEW_FRAME 3 +enum { + PALTAG_TRIANGLE_CURSOR, + PALTAG_RECTANGLE_CURSOR, + PALTAG_MISC_UI, + PALTAG_RS_INTERVIEW_FRAME, +}; + +enum { + GFXTAG_TRIANGLE_CURSOR, + GFXTAG_RECTANGLE_CURSOR, + GFXTAG_SCROLL_INDICATOR, + GFXTAG_START_SELECT_BUTTONS, + GFXTAG_MODE_WINDOW, + GFXTAG_RS_INTERVIEW_FRAME, + GFXTAG_BUTTON_WINDOW, +}; -#define GFXTAG_TRIANGLE_CURSOR 0 -#define GFXTAG_RECTANGLE_CURSOR 1 -#define GFXTAG_SCROLL_INDICATOR 2 -#define GFXTAG_START_SELECT_BUTTONS 3 -#define GFXTAG_MODE_WINDOW 4 -#define GFXTAG_RS_INTERVIEW_FRAME 5 -#define GFXTAG_BUTTON_WINDOW 6 // State values for sEasyChatScreen->inputState // Control which input handler to use in HandleEasyChatInput @@ -376,6 +381,13 @@ enum { WINANIM_KEYBOARD_SWITCH_IN, }; +// Window IDs +enum { + WIN_TITLE, + WIN_MSG, + WIN_INPUT_SELECT, // Word groups, word list, and keyboard +}; + // Values for text frame tilemap #define FRAME_OFFSET_ORANGE 0x1000 // Orange frame, for phrase text #define FRAME_OFFSET_GREEN 0x4000 // Green frame, for keyboard/word select @@ -814,7 +826,7 @@ static const struct BgTemplate sEasyChatBgTemplates[] = { }; static const struct WindowTemplate sEasyChatWindowTemplates[] = { - { + [WIN_TITLE] = { .bg = 1, .tilemapLeft = 6, .tilemapTop = 0, @@ -823,7 +835,7 @@ static const struct WindowTemplate sEasyChatWindowTemplates[] = { .paletteNum = 10, .baseBlock = 0x10, }, - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 15, @@ -832,7 +844,7 @@ static const struct WindowTemplate sEasyChatWindowTemplates[] = { .paletteNum = 15, .baseBlock = 0xA, }, - { + [WIN_INPUT_SELECT] = { .bg = 2, .tilemapLeft = 1, .tilemapTop = 0, @@ -3934,10 +3946,10 @@ static void PrintTitle(void) return; xOffset = GetStringCenterAlignXOffset(FONT_NORMAL, titleText, 144); - FillWindowPixelBuffer(0, PIXEL_FILL(0)); - PrintEasyChatTextWithColors(0, FONT_NORMAL, titleText, xOffset, 1, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); - PutWindowTilemap(0); - CopyWindowToVram(0, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(0)); + PrintEasyChatTextWithColors(WIN_TITLE, FONT_NORMAL, titleText, xOffset, 1, TEXT_SKIP_DRAW, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY); + PutWindowTilemap(WIN_TITLE); + CopyWindowToVram(WIN_TITLE, COPYWIN_FULL); } static void PrintEasyChatText(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) @@ -3957,10 +3969,10 @@ static void PrintEasyChatTextWithColors(u8 windowId, u8 fontId, const u8 *str, u static void PrintInitialInstructions(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); - LoadUserWindowBorderGfx(1, 1, 0xE0); - DrawTextBorderOuter(1, 1, 14); + LoadUserWindowBorderGfx(WIN_MSG, 1, 0xE0); + DrawTextBorderOuter(WIN_MSG, 1, 14); PrintEasyChatStdMessage(MSG_INSTRUCTIONS); - PutWindowTilemap(1); + PutWindowTilemap(WIN_MSG); CopyBgTilemapBufferToVram(0); } @@ -4004,14 +4016,14 @@ static void PrintEasyChatStdMessage(u8 msgId) break; } - FillWindowPixelBuffer(1, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_MSG, PIXEL_FILL(1)); if (text1) - PrintEasyChatText(1, FONT_NORMAL, text1, 0, 1, TEXT_SKIP_DRAW, 0); + PrintEasyChatText(WIN_MSG, FONT_NORMAL, text1, 0, 1, TEXT_SKIP_DRAW, 0); if (text2) - PrintEasyChatText(1, FONT_NORMAL, text2, 0, 17, TEXT_SKIP_DRAW, 0); + PrintEasyChatText(WIN_MSG, FONT_NORMAL, text2, 0, 17, TEXT_SKIP_DRAW, 0); - CopyWindowToVram(1, COPYWIN_FULL); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); } static void CreateEasyChatYesNoMenu(u8 initialCursorPos) @@ -4198,14 +4210,14 @@ static void AdjustBgTilemapForFooter(void) static void DrawLowerWindow(void) { - PutWindowTilemap(2); - CopyBgTilemapBufferToVram(2); + PutWindowTilemap(WIN_INPUT_SELECT); + CopyBgTilemapBufferToVram(WIN_INPUT_SELECT); } static void InitLowerWindowText(u32 whichText) { ResetLowerWindowScroll(); - FillWindowPixelBuffer(2, PIXEL_FILL(1)); + FillWindowPixelBuffer(WIN_INPUT_SELECT, PIXEL_FILL(1)); switch (whichText) { case TEXT_GROUPS: @@ -4219,7 +4231,7 @@ static void InitLowerWindowText(u32 whichText) break; } - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_INPUT_SELECT, COPYWIN_GFX); } static void PrintKeyboardText(void) @@ -4248,7 +4260,7 @@ static void PrintKeyboardGroupNames(void) return; } - PrintEasyChatText(2, FONT_NORMAL, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); + PrintEasyChatText(WIN_INPUT_SELECT, FONT_NORMAL, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SKIP_DRAW, NULL); } y += 16; @@ -4260,7 +4272,7 @@ static void PrintKeyboardAlphabet(void) u32 i; for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardAlphabet); i++) - PrintEasyChatText(2, FONT_NORMAL, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SKIP_DRAW, NULL); + PrintEasyChatText(WIN_INPUT_SELECT, FONT_NORMAL, sEasyChatKeyboardAlphabet[i], 10, 97 + i * 16, TEXT_SKIP_DRAW, NULL); } static void PrintInitialWordSelectText(void) @@ -4331,16 +4343,16 @@ static void PrintWordSelectText(u8 scrollOffset, u8 numRows) { CopyEasyChatWordPadded(sScreenControl->wordSelectPrintBuffer, easyChatWord, 0); if (!DummyWordCheck(easyChatWord)) - PrintEasyChatText(2, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, NULL); + PrintEasyChatText(WIN_INPUT_SELECT, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, NULL); else // Never reached - PrintEasyChatTextWithColors(2, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GRAY); + PrintEasyChatTextWithColors(WIN_INPUT_SELECT, FONT_NORMAL, sScreenControl->wordSelectPrintBuffer, (j * 13 + 3) * 8, y, TEXT_SKIP_DRAW, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GRAY); } } y += 16; } - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_INPUT_SELECT, COPYWIN_GFX); } static void EraseWordSelectRows(u8 scrollOffset, u8 numRows) @@ -4364,15 +4376,15 @@ static void EraseWordSelectRows(u8 scrollOffset, u8 numRows) var1 = 0; } - FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2); + FillWindowPixelRect(WIN_INPUT_SELECT, PIXEL_FILL(1), 0, y, 224, var2); if (var1) - FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1); + FillWindowPixelRect(WIN_INPUT_SELECT, PIXEL_FILL(1), 0, 0, 224, var1); } static void ClearWordSelectWindow(void) { - FillWindowPixelBuffer(2, PIXEL_FILL(1)); - CopyWindowToVram(2, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_INPUT_SELECT, PIXEL_FILL(1)); + CopyWindowToVram(WIN_INPUT_SELECT, COPYWIN_GFX); } static void InitLowerWindowAnim(int winAnimType) From 5af7355fbd8a04e4d24a7e5e791f2ca5c6d68935 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 15:10:32 -0400 Subject: [PATCH 013/290] Clarify window ID usage in contest_util --- src/contest_util.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/contest_util.c b/src/contest_util.c index d44b47373c..654a0c3997 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -319,9 +319,10 @@ static const struct BgTemplate sBgTemplates[] = } }; -static const struct WindowTemplate sWindowTemplates[] = +// Window IDs are implicitly shared with contestant IDs in LoadContestMonName +static const struct WindowTemplate sWindowTemplates[CONTESTANT_COUNT + 1] = { - { + { // Contestant 1 .bg = 1, .tilemapLeft = 7, .tilemapTop = 4, @@ -330,7 +331,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 770 }, - { + { // Contestant 2 .bg = 1, .tilemapLeft = 7, .tilemapTop = 7, @@ -339,7 +340,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 794 }, - { + { // Contestant 3 .bg = 1, .tilemapLeft = 7, .tilemapTop = 10, @@ -348,7 +349,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 818 }, - { + { // Contestant 4 .bg = 1, .tilemapLeft = 7, .tilemapTop = 13, @@ -357,7 +358,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 842 }, - DUMMY_WIN_TEMPLATE, + DUMMY_WIN_TEMPLATE }; static const struct OamData sOamData_WirelessIndicatorWindow = From fb87616e9d147de21fe2eba278f0f74737ebfc32 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 15:48:19 -0400 Subject: [PATCH 014/290] Use window constants in mystery_gift_menu --- include/mystery_gift_menu.h | 4 +- src/ereader_screen.c | 14 ++-- src/mystery_gift_menu.c | 133 +++++++++++++++++++----------------- src/mystery_gift_view.c | 4 +- src/union_room.c | 18 ++--- 5 files changed, 91 insertions(+), 82 deletions(-) diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h index dc30d30519..665c4596e7 100644 --- a/include/mystery_gift_menu.h +++ b/include/mystery_gift_menu.h @@ -5,11 +5,11 @@ extern bool8 gGiftIsFromEReader; u16 GetMysteryGiftBaseBlock(void); void CB2_MysteryGiftEReader(void); -void PrintMysteryGiftOrEReaderTopMenu(bool8 isJapanese, bool32 usePickOkCancel); +void PrintMysteryGiftOrEReaderHeader(bool8 isJapanese, bool32 usePickOkCancel); void MG_DrawCheckerboardPattern(u32 bg); void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void); bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str); -void AddTextPrinterToWindow1(const u8 *src); +void MG_AddMessageTextPrinter(const u8 *src); void CB2_InitEReader(void); void CB2_InitMysteryGift(void); void MG_DrawTextBorder(u8 windowId); diff --git a/src/ereader_screen.c b/src/ereader_screen.c index b6bf7133a0..8079c99005 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -342,7 +342,7 @@ static void Task_EReader(u8 taskId) case ER_STATE_MSG_SELECT_CONNECT: if (PrintMysteryGiftMenuMessage(&data->textState, gJPText_SelectConnectFromEReaderMenu)) { - AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); + MG_AddMessageTextPrinter(gJPText_SelectConnectWithGBA); ResetTimer(&data->timer); data->state = ER_STATE_MSG_SELECT_CONNECT_WAIT; } @@ -396,7 +396,7 @@ static void Task_EReader(u8 taskId) data->state = ER_STATE_MSG_SELECT_CONNECT; break; case ER_STATE_CONNECTING: - AddTextPrinterToWindow1(gJPText_Connecting); + MG_AddMessageTextPrinter(gJPText_Connecting); // XXX: This (u32 *) cast is discarding the const qualifier from gMultiBootProgram_EReader_Start EReader_Load(&gEReaderData, gMultiBootProgram_EReader_End - gMultiBootProgram_EReader_Start, (u32 *)gMultiBootProgram_EReader_Start); data->state = ER_STATE_TRANSFER; @@ -415,7 +415,7 @@ static void Task_EReader(u8 taskId) else if (data->status == TRANSFER_SUCCESS) { ResetTimer(&data->timer); - AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment); + MG_AddMessageTextPrinter(gJPText_PleaseWaitAMoment); data->state = ER_STATE_TRANSFER_SUCCESS; } else // TRANSFER_CANCELED @@ -429,7 +429,7 @@ static void Task_EReader(u8 taskId) break; case ER_STATE_LOAD_CARD_START: OpenEReaderLink(); - AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); + MG_AddMessageTextPrinter(gJPText_AllowEReaderToLoadCard); data->state = ER_STATE_LOAD_CARD; break; case ER_STATE_LOAD_CARD: @@ -438,7 +438,7 @@ static void Task_EReader(u8 taskId) case RECV_ACTIVE: break; case RECV_SUCCESS: - AddTextPrinterToWindow1(gJPText_Connecting); + MG_AddMessageTextPrinter(gJPText_Connecting); data->state = ER_STATE_WAIT_RECV_CARD; break; case RECV_CANCELED: @@ -486,7 +486,7 @@ static void Task_EReader(u8 taskId) case ER_STATE_SAVE: if (TryWriteTrainerHill((struct EReaderTrainerHillSet *)&gDecompressionBuffer)) { - AddTextPrinterToWindow1(gJPText_ConnectionComplete); + MG_AddMessageTextPrinter(gJPText_ConnectionComplete); ResetTimer(&data->timer); data->state = ER_STATE_SUCCESS_MSG; } @@ -498,7 +498,7 @@ static void Task_EReader(u8 taskId) case ER_STATE_SUCCESS_MSG: if (UpdateTimer(&data->timer, 120)) { - AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToHoenn); + MG_AddMessageTextPrinter(gJPText_NewTrainerHasComeToHoenn); PlayFanfare(MUS_OBTAIN_ITEM); data->state = ER_STATE_SUCCESS_END; } diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 9e4796bb20..9c8aea4d66 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -32,6 +32,12 @@ #include "wonder_news.h" #include "constants/cable_club.h" +enum { + WIN_HEADER, + WIN_MSG, + WIN_UNK, // Cleared, but nothing is ever apparently rendered on it +}; + #define LIST_MENU_TILE_NUM 10 #define LIST_MENU_PAL_NUM 224 @@ -98,7 +104,7 @@ static const struct BgTemplate sBGTemplates[] = { }; static const struct WindowTemplate sMainWindows[] = { - { + [WIN_HEADER] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -106,7 +112,8 @@ static const struct WindowTemplate sMainWindows[] = { .height = 2, .paletteNum = 12, .baseBlock = 0x0013 - }, { + }, + [WIN_MSG] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 15, @@ -114,7 +121,8 @@ static const struct WindowTemplate sMainWindows[] = { .height = 4, .paletteNum = 12, .baseBlock = 0x004f - }, { + }, + [WIN_UNK] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 15, @@ -224,7 +232,7 @@ static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .itemPrintFunc = NULL, .totalItems = 3, .maxShowed = 3, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -269,7 +277,7 @@ static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { .itemPrintFunc = NULL, .totalItems = 4, .maxShowed = 4, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -290,7 +298,7 @@ static const struct ListMenuTemplate sListMenu_ReceiveToss = { .itemPrintFunc = NULL, .totalItems = 3, .maxShowed = 3, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -311,7 +319,7 @@ static const struct ListMenuTemplate sListMenu_ReceiveSend = { .itemPrintFunc = NULL, .totalItems = 3, .maxShowed = 3, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -332,7 +340,7 @@ static const struct ListMenuTemplate sListMenu_Receive = { .itemPrintFunc = NULL, .totalItems = 2, .maxShowed = 2, - .windowId = 0, + .windowId = 0, // Overwritten by DoMysteryGiftListMenu .header_X = 0, .item_X = 8, .cursor_X = 0, @@ -354,9 +362,9 @@ static const u8 *const sUnusedMenuTexts[] = { gText_ReturnToTitle }; -ALIGNED(2) static const u8 sTextColors_TopMenu[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; -ALIGNED(2) static const u8 sTextColors_TopMenu_Copy[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; -ALIGNED(2) static const u8 sMG_Ereader_TextColor_2[] = { TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY }; +ALIGNED(2) static const u8 sTextColors_Header[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; +ALIGNED(2) static const u8 sTextColors_Header_Copy[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY }; +ALIGNED(2) static const u8 sMG_Ereader_TextColor_2[] = { TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY }; static void VBlankCB_MysteryGiftEReader(void) { @@ -420,7 +428,7 @@ static bool32 HandleMysteryGiftOrEReaderSetup(s32 isEReader) FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); MG_DrawCheckerboardPattern(3); - PrintMysteryGiftOrEReaderTopMenu(isEReader, FALSE); + PrintMysteryGiftOrEReaderHeader(isEReader, FALSE); gMain.state++; break; case 2: @@ -474,26 +482,27 @@ void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void) SetMainCallback2(CB2_InitTitleScreen); } -void PrintMysteryGiftOrEReaderTopMenu(bool8 isEReader, bool32 useCancel) +// Print the text window at the top of the screen with the title and control instructions +void PrintMysteryGiftOrEReaderHeader(bool8 isEReader, bool32 useCancel) { - const u8 * header; + const u8 * title; const u8 * options; - FillWindowPixelBuffer(0, 0); + FillWindowPixelBuffer(WIN_HEADER, 0); if (!isEReader) { - header = gText_MysteryGift; + title = gText_MysteryGift; options = !useCancel ? gText_PickOKExit : gText_PickOKCancel; } else { - header = gJPText_MysteryGift; + title = gJPText_MysteryGift; options = gJPText_DecideStop; } - AddTextPrinterParameterized4(0, FONT_NORMAL, 4, 1, 0, 0, sTextColors_TopMenu, TEXT_SKIP_DRAW, header); - AddTextPrinterParameterized4(0, FONT_SMALL, GetStringRightAlignXOffset(FONT_SMALL, options, 0xDE), 1, 0, 0, sTextColors_TopMenu, TEXT_SKIP_DRAW, options); - CopyWindowToVram(0, COPYWIN_GFX); - PutWindowTilemap(0); + AddTextPrinterParameterized4(WIN_HEADER, FONT_NORMAL, 4, 1, 0, 0, sTextColors_Header, TEXT_SKIP_DRAW, title); + AddTextPrinterParameterized4(WIN_HEADER, FONT_SMALL, GetStringRightAlignXOffset(FONT_SMALL, options, 0xDE), 1, 0, 0, sTextColors_Header, TEXT_SKIP_DRAW, options); + CopyWindowToVram(WIN_HEADER, COPYWIN_GFX); + PutWindowTilemap(WIN_HEADER); } void MG_DrawTextBorder(u8 windowId) @@ -533,21 +542,21 @@ static void ClearScreenInBg0(bool32 ignoreTopTwoRows) CopyBgTilemapBufferToVram(0); } -void AddTextPrinterToWindow1(const u8 *str) +void MG_AddMessageTextPrinter(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); - FillWindowPixelBuffer(1, 0x11); - AddTextPrinterParameterized4(1, FONT_NORMAL, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); - DrawTextBorderOuter(1, 0x001, 0xF); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_MSG, 0x11); + AddTextPrinterParameterized4(WIN_MSG, FONT_NORMAL, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(WIN_MSG, 0x001, 0xF); + PutWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); } -static void ClearTextWindow(void) +static void ClearMessage(void) { - rbox_fill_rectangle(1); - ClearWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_MAP); + rbox_fill_rectangle(WIN_MSG); + ClearWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_MAP); } #define DOWN_ARROW_X 208 @@ -558,18 +567,18 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) switch (*textState) { case 0: - AddTextPrinterToWindow1(str); + MG_AddMessageTextPrinter(str); (*textState)++; break; case 1: - DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); - if (({JOY_NEW(A_BUTTON | B_BUTTON);})) + DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + if (JOY_NEW(A_BUTTON | B_BUTTON)) (*textState)++; break; case 2: - DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); *textState = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; case 0xFF: *textState = 2; @@ -580,12 +589,12 @@ bool32 PrintMysteryGiftMenuMessage(u8 *textState, const u8 *str) static void HideDownArrow(void) { - DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } static void ShowDownArrow(void) { - DrawDownArrow(1, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); + DrawDownArrow(WIN_MSG, DOWN_ARROW_X, DOWN_ARROW_Y, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } // Unused @@ -609,12 +618,12 @@ static bool32 HideDownArrowAndWaitButton(u8 * textState) static bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str) { if (*counter == 0) - AddTextPrinterToWindow1(str); + MG_AddMessageTextPrinter(str); if (++(*counter) > 120) { *counter = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; } else @@ -648,8 +657,8 @@ static u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whi response = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, LIST_MENU_TILE_NUM, LIST_MENU_PAL_NUM); if (response != LIST_NOTHING_CHOSEN) { - ClearWindowTilemap(2); - CopyWindowToVram(2, COPYWIN_MAP); + ClearWindowTilemap(WIN_UNK); + CopyWindowToVram(WIN_UNK, COPYWIN_MAP); } return response; } @@ -865,7 +874,7 @@ static bool32 SaveOnMysteryGiftMenu(u8 * state) switch (*state) { case 0: - AddTextPrinterToWindow1(gText_DataWillBeSaved); + MG_AddMessageTextPrinter(gText_DataWillBeSaved); (*state)++; break; case 1: @@ -873,7 +882,7 @@ static bool32 SaveOnMysteryGiftMenu(u8 * state) (*state)++; break; case 2: - AddTextPrinterToWindow1(gText_SaveCompletedPressA); + MG_AddMessageTextPrinter(gText_SaveCompletedPressA); (*state)++; break; case 3: @@ -882,7 +891,7 @@ static bool32 SaveOnMysteryGiftMenu(u8 * state) break; case 4: *state = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; } @@ -967,7 +976,7 @@ static bool32 PrintSuccessMessage(u8 * state, const u8 * msg, u16 * timer) { case 0: if (msg != NULL) - AddTextPrinterToWindow1(msg); + MG_AddMessageTextPrinter(msg); PlayFanfare(MUS_OBTAIN_ITEM); *timer = 0; (*state)++; @@ -980,7 +989,7 @@ static bool32 PrintSuccessMessage(u8 * state, const u8 * msg, u16 * timer) if (IsFanfareTaskInactive()) { *state = 0; - ClearTextWindow(); + ClearMessage(); return TRUE; } break; @@ -1161,7 +1170,7 @@ static void Task_MysteryGift(u8 taskId) if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveCardNewOneInput)) { data->state = MG_STATE_SOURCE_PROMPT; - PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); + PrintMysteryGiftOrEReaderHeader(FALSE, TRUE); } } else @@ -1169,16 +1178,16 @@ static void Task_MysteryGift(u8 taskId) if (PrintMysteryGiftMenuMessage(&data->textState, gText_DontHaveNewsNewOneInput)) { data->state = MG_STATE_SOURCE_PROMPT; - PrintMysteryGiftOrEReaderTopMenu(FALSE, TRUE); + PrintMysteryGiftOrEReaderHeader(FALSE, TRUE); } } break; } case MG_STATE_SOURCE_PROMPT: if (!data->isWonderNews) - AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed); + MG_AddMessageTextPrinter(gText_WhereShouldCardBeAccessed); else - AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed); + MG_AddMessageTextPrinter(gText_WhereShouldNewsBeAccessed); data->state = MG_STATE_SOURCE_PROMPT_INPUT; break; case MG_STATE_SOURCE_PROMPT_INPUT: @@ -1186,17 +1195,17 @@ static void Task_MysteryGift(u8 taskId) switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->var, TRUE)) { case 0: // "Wireless Communication" - ClearTextWindow(); + ClearMessage(); data->state = MG_STATE_CLIENT_LINK_START; data->sourceIsFriend = FALSE; break; case 1: // "Friend" - ClearTextWindow(); + ClearMessage(); data->state = MG_STATE_CLIENT_LINK_START; data->sourceIsFriend = TRUE; break; case LIST_CANCEL: - ClearTextWindow(); + ClearMessage(); if (ValidateCardOrNews(data->isWonderNews)) { data->state = MG_STATE_LOAD_GIFT; @@ -1204,7 +1213,7 @@ static void Task_MysteryGift(u8 taskId) else { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } break; } @@ -1246,7 +1255,7 @@ static void Task_MysteryGift(u8 taskId) } break; case MG_STATE_CLIENT_COMMUNICATING: - AddTextPrinterToWindow1(gText_Communicating); + MG_AddMessageTextPrinter(gText_Communicating); data->state = MG_STATE_CLIENT_LINK; break; case MG_STATE_CLIENT_LINK: @@ -1379,7 +1388,7 @@ static void Task_MysteryGift(u8 taskId) { // Did not receive card/news, return to main menu data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } else { @@ -1500,7 +1509,7 @@ static void Task_MysteryGift(u8 taskId) if (PrintThrownAway(&data->textState, data->isWonderNews)) { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } break; case MG_STATE_GIFT_INPUT_EXIT: @@ -1546,12 +1555,12 @@ static void Task_MysteryGift(u8 taskId) if (!data->isWonderNews) { - AddTextPrinterToWindow1(gText_SendingWonderCard); + MG_AddMessageTextPrinter(gText_SendingWonderCard); MysterGiftServer_CreateForCard(); } else { - AddTextPrinterToWindow1(gText_SendingWonderNews); + MG_AddMessageTextPrinter(gText_SendingWonderNews); MysterGiftServer_CreateForNews(); } data->state = MG_STATE_SERVER_LINK; @@ -1586,7 +1595,7 @@ static void Task_MysteryGift(u8 taskId) else { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } } break; @@ -1595,7 +1604,7 @@ static void Task_MysteryGift(u8 taskId) if (PrintMysteryGiftMenuMessage(&data->textState, gText_CommunicationError)) { data->state = MG_STATE_TO_MAIN_MENU; - PrintMysteryGiftOrEReaderTopMenu(FALSE, FALSE); + PrintMysteryGiftOrEReaderHeader(FALSE, FALSE); } break; case MG_STATE_EXIT: diff --git a/src/mystery_gift_view.c b/src/mystery_gift_view.c index b059b183c8..a1e294f235 100644 --- a/src/mystery_gift_view.c +++ b/src/mystery_gift_view.c @@ -310,7 +310,7 @@ s32 WonderCard_Exit(bool32 useCancel) FreeMonIconPalettes(); break; case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); + PrintMysteryGiftOrEReaderHeader(gGiftIsFromEReader, useCancel); CopyBgTilemapBufferToVram(0); BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); break; @@ -785,7 +785,7 @@ s32 WonderNews_Exit(bool32 useCancel) } break; case 5: - PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, useCancel); + PrintMysteryGiftOrEReaderHeader(gGiftIsFromEReader, useCancel); MG_DrawCheckerboardPattern(3); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(3); diff --git a/src/union_room.c b/src/union_room.c index b47ddb41c0..1396aa2244 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1927,7 +1927,7 @@ static void Task_SendMysteryGift(u8 taskId) data->state = 3; break; case 3: - AddTextPrinterToWindow1(gStringVar4); + MG_AddMessageTextPrinter(gStringVar4); data->state = 4; break; case 4: @@ -2001,7 +2001,7 @@ static void Task_SendMysteryGift(u8 taskId) } break; case 9: - AddTextPrinterToWindow1(gStringVar4); + MG_AddMessageTextPrinter(gStringVar4); data->state = 10; break; case 10: @@ -2104,7 +2104,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 1; break; case 1: - AddTextPrinterToWindow1(sText_ChooseTrainer); + MG_AddMessageTextPrinter(sText_ChooseTrainer); data->state = 2; break; case 2: @@ -2177,7 +2177,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) } break; case 4: - AddTextPrinterToWindow1(sText_AwaitingPlayersResponse); + MG_AddMessageTextPrinter(sText_AwaitingPlayersResponse); CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = 5; break; @@ -2196,7 +2196,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 8; break; case RFU_STATUS_JOIN_GROUP_OK: - AddTextPrinterToWindow1(sText_PlayerSentBackOK); + MG_AddMessageTextPrinter(sText_PlayerSentBackOK); RfuSetStatus(RFU_STATUS_OK, 0); break; } @@ -2224,7 +2224,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 7: DestroyWirelessStatusIndicatorSprite(); - AddTextPrinterToWindow1(sText_PleaseStartOver); + MG_AddMessageTextPrinter(sText_PleaseStartOver); DestroyTask(taskId); LinkRfu_Shutdown(); gSpecialVar_Result = LINKUP_FAILED; @@ -2273,7 +2273,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 1; break; case 1: - AddTextPrinterToWindow1(sText_SearchingForWirelessSystemWait); + MG_AddMessageTextPrinter(sText_SearchingForWirelessSystemWait); data->state = 2; break; case 2: @@ -2342,7 +2342,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } break; case 4: - AddTextPrinterToWindow1(sText_AwaitingResponseFromWirelessSystem); + MG_AddMessageTextPrinter(sText_AwaitingResponseFromWirelessSystem); CopyAndTranslatePlayerName(gStringVar1, &data->playerList->players[data->leaderId]); data->state = 5; break; @@ -2361,7 +2361,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 8; break; case RFU_STATUS_JOIN_GROUP_OK: - AddTextPrinterToWindow1(sText_WirelessLinkEstablished); + MG_AddMessageTextPrinter(sText_WirelessLinkEstablished); RfuSetStatus(RFU_STATUS_OK, 0); break; } From 7d4fddd56b1c91089d166f2d4ec033d43fe69c11 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 15:55:26 -0400 Subject: [PATCH 015/290] Use window constants in mystery_event_menu --- src/mystery_event_menu.c | 53 ++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index b6610a6403..826055b249 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -20,6 +20,11 @@ #include "decompress.h" #include "constants/rgb.h" +enum { + WIN_MSG, + WIN_LOADING, +}; + static void CB2_MysteryEventMenu(void); static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed); @@ -40,7 +45,7 @@ static const struct BgTemplate sBgTemplates[] = static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 4, .tilemapTop = 15, @@ -49,7 +54,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 20 }, - { + [WIN_LOADING] = { .bg = 0, .tilemapLeft = 7, .tilemapTop = 6, @@ -87,7 +92,7 @@ void CB2_InitMysteryEventMenu(void) s32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 2; i++) + for (i = 0; i < (int)ARRAY_COUNT(sWindowTemplates) - 1; i++) FillWindowPixelBuffer(i, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14); @@ -131,9 +136,9 @@ static void CB2_MysteryEventMenu(void) switch (gMain.state) { case 0: - DrawStdFrameWithCustomTileAndPalette(0, TRUE, 1, 0xD); - PutWindowTilemap(0); - CopyWindowToVram(0, COPYWIN_FULL); + DrawStdFrameWithCustomTileAndPalette(WIN_MSG, TRUE, 1, 0xD); + PutWindowTilemap(WIN_MSG); + CopyWindowToVram(WIN_MSG, COPYWIN_FULL); ShowBg(0); BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); gMain.state++; @@ -141,12 +146,12 @@ static void CB2_MysteryEventMenu(void) case 1: if (!gPaletteFade.active) { - PrintMysteryMenuText(0, gText_LinkStandby2, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gText_LinkStandby2, 1, 2, 1); gMain.state++; } break; case 2: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) { gMain.state++; gLinkType = LINKTYPE_MYSTERY_EVENT; @@ -154,10 +159,10 @@ static void CB2_MysteryEventMenu(void) } break; case 3: - if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4) + if ((gLinkStatus & LINK_STAT_MASTER) && (gLinkStatus & LINK_STAT_PLAYER_COUNT) > 4) { PlaySE(SE_PIN); - PrintMysteryMenuText(0, gText_PressAToLoadEvent, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gText_PressAToLoadEvent, 1, 2, 1); gMain.state++; } if (JOY_NEW(B_BUTTON)) @@ -168,7 +173,7 @@ static void CB2_MysteryEventMenu(void) } break; case 4: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) gMain.state++; break; case 5: @@ -178,10 +183,10 @@ static void CB2_MysteryEventMenu(void) { PlaySE(SE_SELECT); CheckShouldAdvanceLinkState(); - DrawStdFrameWithCustomTileAndPalette(1, TRUE, 1, 0xD); - PrintMysteryMenuText(1, gText_LoadingEvent, 1, 2, 0); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + DrawStdFrameWithCustomTileAndPalette(WIN_LOADING, TRUE, 1, 0xD); + PrintMysteryMenuText(WIN_LOADING, gText_LoadingEvent, 1, 2, 0); + PutWindowTilemap(WIN_LOADING); + CopyWindowToVram(WIN_LOADING, COPYWIN_FULL); gMain.state++; } else if (JOY_NEW(B_BUTTON)) @@ -194,7 +199,7 @@ static void CB2_MysteryEventMenu(void) else { GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } break; @@ -207,19 +212,19 @@ static void CB2_MysteryEventMenu(void) { SetCloseLinkCallback(); GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } else if (CheckLanguageMatch()) { - PrintMysteryMenuText(0, gText_DontRemoveCableTurnOff, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gText_DontRemoveCableTurnOff, 1, 2, 1); gMain.state++; } else { CloseLink(); GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } } @@ -232,7 +237,7 @@ static void CB2_MysteryEventMenu(void) } break; case 7: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) gMain.state++; break; case 8: @@ -260,11 +265,11 @@ static void CB2_MysteryEventMenu(void) } break; case 12: - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state++; break; case 13: - if (!IsTextPrinterActive(0)) + if (!IsTextPrinterActive(WIN_MSG)) { gMain.state++; sUnused = 0; @@ -287,11 +292,11 @@ static void CB2_MysteryEventMenu(void) break; } - if (gLinkStatus & 0x40 && !IsLinkMaster()) + if (gLinkStatus & LINK_STAT_CONN_ESTABLISHED && !IsLinkMaster()) { CloseLink(); GetEventLoadMessage(gStringVar4, MEVENT_STATUS_LOAD_ERROR); - PrintMysteryMenuText(0, gStringVar4, 1, 2, 1); + PrintMysteryMenuText(WIN_MSG, gStringVar4, 1, 2, 1); gMain.state = 13; } From 77c3163cf00b12b1568c69571d135888e3b25946 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 18:29:20 -0400 Subject: [PATCH 016/290] Use window constants in reset_rtc_screen --- src/reset_rtc_screen.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 0a9ec49113..8f8ff6c163 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -49,6 +49,11 @@ enum { SELECTION_NONE }; +enum { + WIN_TIME, + WIN_MSG, +}; + struct ResetRtcInputMap { /*0x0*/ u8 dataIndex; @@ -79,7 +84,7 @@ static const struct BgTemplate sBgTemplates[] = static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_TIME] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -88,7 +93,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 15, .baseBlock = 0x155 }, - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 15, @@ -562,8 +567,8 @@ static void VBlankCB(void) static void ShowMessage(const u8 *str) { - DrawDialogFrameWithCustomTileAndPalette(1, FALSE, 0x200, 0xF); - AddTextPrinterParameterized(1, FONT_NORMAL, str, 0, 1, 0, NULL); + DrawDialogFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x200, 0xF); + AddTextPrinterParameterized(WIN_MSG, FONT_NORMAL, str, 0, 1, 0, NULL); ScheduleBgCopyTilemapToVram(0); } @@ -576,11 +581,11 @@ static void Task_ShowResetRtcPrompt(u8 taskId) switch (tState) { case 0: - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x214, 0xE); + DrawStdFrameWithCustomTileAndPalette(WIN_TIME, FALSE, 0x214, 0xE); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_PresentTime, 0, 1, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(WIN_TIME, FONT_NORMAL, gText_PresentTime, 0, 1, TEXT_SKIP_DRAW, 0); PrintTime( - 0, + WIN_TIME, 0, 17, gLocalTime.days, @@ -588,9 +593,9 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gLocalTime.minutes, gLocalTime.seconds); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_PreviousTime, 0, 33, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(WIN_TIME, FONT_NORMAL, gText_PreviousTime, 0, 33, TEXT_SKIP_DRAW, 0); PrintTime( - 0, + WIN_TIME, 0, 49, gSaveBlock2Ptr->lastBerryTreeUpdate.days, @@ -599,7 +604,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gSaveBlock2Ptr->lastBerryTreeUpdate.seconds); ShowMessage(gText_ResetRTCConfirmCancel); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_TIME, COPYWIN_GFX); ScheduleBgCopyTilemapToVram(0); tState++; case 1: @@ -666,7 +671,7 @@ static void Task_ResetRtcScreen(u8 taskId) // Wait for A or B press on prompt first if (gTasks[tSubTaskId].isActive != TRUE) { - ClearStdWindowAndFrameToTransparent(0, FALSE); + ClearStdWindowAndFrameToTransparent(WIN_TIME, FALSE); ShowMessage(gText_PleaseResetTime); gLocalTime = gSaveBlock2Ptr->lastBerryTreeUpdate; tSubTaskId = CreateTask(Task_ResetRtc_Init, 80); From 744952542872b6a5b9e37a0f03028a0e18674a94 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 18:56:34 -0400 Subject: [PATCH 017/290] Use window constants in wallclock --- src/wallclock.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/wallclock.c b/src/wallclock.c index 5e0fae3a13..105bd350df 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -55,25 +55,28 @@ static void SpriteCB_AMIndicator(struct Sprite *sprite); #define PALTAG_WALL_CLOCK_MALE 0x1000 #define PALTAG_WALL_CLOCK_FEMALE 0x1001 -enum -{ +enum { PERIOD_AM, PERIOD_PM, }; -enum -{ +enum { MOVE_NONE, MOVE_BACKWARD, MOVE_FORWARD, }; +enum { + WIN_MSG, + WIN_BUTTON_LABEL, +}; + static const u32 sHand_Gfx[] = INCBIN_U32("graphics/wallclock/hand.4bpp.lz"); static const u16 sTextPrompt_Pal[] = INCBIN_U16("graphics/wallclock/text_prompt.gbapal"); // for "Cancel" or "Confirm" static const struct WindowTemplate sWindowTemplates[] = { - { + [WIN_MSG] = { .bg = 0, .tilemapLeft = 3, .tilemapTop = 17, @@ -82,7 +85,7 @@ static const struct WindowTemplate sWindowTemplates[] = .paletteNum = 14, .baseBlock = 512 }, - { + [WIN_BUTTON_LABEL] = { .bg = 2, .tilemapLeft = 24, .tilemapTop = 16, @@ -717,8 +720,8 @@ void CB2_StartWallClock(void) WallClockInit(); - AddTextPrinterParameterized(1, FONT_NORMAL, gText_Confirm3, 0, 1, 0, NULL); - PutWindowTilemap(1); + AddTextPrinterParameterized(WIN_BUTTON_LABEL, FONT_NORMAL, gText_Confirm3, 0, 1, 0, NULL); + PutWindowTilemap(WIN_BUTTON_LABEL); ScheduleBgCopyTilemapToVram(2); } @@ -765,8 +768,8 @@ void CB2_ViewWallClock(void) WallClockInit(); - AddTextPrinterParameterized(1, FONT_NORMAL, gText_Cancel4, 0, 1, 0, NULL); - PutWindowTilemap(1); + AddTextPrinterParameterized(WIN_BUTTON_LABEL, FONT_NORMAL, gText_Cancel4, 0, 1, 0, NULL); + PutWindowTilemap(WIN_BUTTON_LABEL); ScheduleBgCopyTilemapToVram(2); } @@ -829,9 +832,9 @@ static void Task_SetClock_HandleInput(u8 taskId) static void Task_SetClock_AskConfirm(u8 taskId) { - DrawStdFrameWithCustomTileAndPalette(0, FALSE, 0x250, 0x0d); - AddTextPrinterParameterized(0, FONT_NORMAL, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); - PutWindowTilemap(0); + DrawStdFrameWithCustomTileAndPalette(WIN_MSG, FALSE, 0x250, 0x0d); + AddTextPrinterParameterized(WIN_MSG, FONT_NORMAL, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); + PutWindowTilemap(WIN_MSG); ScheduleBgCopyTilemapToVram(0); CreateYesNoMenu(&sWindowTemplate_ConfirmYesNo, 0x250, 0x0d, 1); gTasks[taskId].func = Task_SetClock_HandleConfirmInput; @@ -848,8 +851,8 @@ static void Task_SetClock_HandleConfirmInput(u8 taskId) case 1: // NO case MENU_B_PRESSED: PlaySE(SE_SELECT); - ClearStdWindowAndFrameToTransparent(0, FALSE); - ClearWindowTilemap(0); + ClearStdWindowAndFrameToTransparent(WIN_MSG, FALSE); + ClearWindowTilemap(WIN_MSG); gTasks[taskId].func = Task_SetClock_HandleInput; break; } From 7587963d24f74b2d8bf20e051861de0e0739ea66 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 19:09:50 -0400 Subject: [PATCH 018/290] Use window constants in berry_fix_program --- src/berry_fix_program.c | 53 +++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index e8c4bc7e68..af21bb929a 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -14,6 +14,13 @@ #include "m4a.h" #include "constants/rgb.h" +enum { + WIN_TITLE, // "Berry Program Update" header on the first screen + WIN_MSG_BODY, + WIN_GAME_NAMES, // The labels under the GBA graphics on the link screen + WIN_TURN_OFF_TITLE, // "Ruby/Sapphire" at the top of the "turn off the power" screen +}; + struct { u8 state; u8 curScene; @@ -71,7 +78,7 @@ static const struct BgTemplate sBerryFixBgTemplates[] = { }; static const struct WindowTemplate sBerryFixWindowTemplates[] = { - { + [WIN_TITLE] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 4, @@ -80,7 +87,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { .paletteNum = 15, .baseBlock = 1 }, - { + [WIN_MSG_BODY] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 11, @@ -89,7 +96,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { .paletteNum = 15, .baseBlock = 53 }, - { + [WIN_GAME_NAMES] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 8, @@ -98,7 +105,7 @@ static const struct WindowTemplate sBerryFixWindowTemplates[] = { .paletteNum = 15, .baseBlock = 277 }, - { + [WIN_TURN_OFF_TITLE] = { .bg = 0, .tilemapLeft = 8, .tilemapTop = 0, @@ -217,11 +224,11 @@ static void BerryFix_Main(void) sBerryFix->state = MAINSTATE_BEGIN; break; case MAINSTATE_BEGIN: - if (TryScene(SCENE_BEGIN) && (JOY_NEW(A_BUTTON))) + if (TryScene(SCENE_BEGIN) && JOY_NEW(A_BUTTON)) sBerryFix->state = MAINSTATE_CONNECT; break; case MAINSTATE_CONNECT: - if (TryScene(SCENE_ENSURE_CONNECT) && (JOY_NEW(A_BUTTON))) + if (TryScene(SCENE_ENSURE_CONNECT) && JOY_NEW(A_BUTTON)) sBerryFix->state = MAINSTATE_INIT_MULTIBOOT; break; case MAINSTATE_INIT_MULTIBOOT: @@ -299,29 +306,29 @@ static void BerryFix_GpuSet(void) DmaCopy32(3, sBerryFixPalColors, BG_PLTT + 0x1E0, sizeof(sBerryFixPalColors)); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); - FillWindowPixelBuffer(3, PIXEL_FILL(0)); - FillWindowPixelBuffer(0, PIXEL_FILL(10)); + FillWindowPixelBuffer(WIN_GAME_NAMES, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TURN_OFF_TITLE, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(10)); width = GetStringWidth(FONT_SMALL, sText_Emerald, 0); left = (120 - width) / 2; - AddTextPrinterParameterized3(2, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_Emerald); + AddTextPrinterParameterized3(WIN_GAME_NAMES, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_Emerald); width = GetStringWidth(FONT_SMALL, sText_RubySapphire, 0); left = (120 - width) / 2 + 120; - AddTextPrinterParameterized3(2, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); + AddTextPrinterParameterized3(WIN_GAME_NAMES, FONT_SMALL, left, 3, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); width = GetStringWidth(FONT_SMALL, sText_RubySapphire, 0); left = (112 - width) / 2; - AddTextPrinterParameterized3(3, FONT_SMALL, left, 0, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); + AddTextPrinterParameterized3(WIN_TURN_OFF_TITLE, FONT_SMALL, left, 0, sGameTitleTextColors, TEXT_SKIP_DRAW, sText_RubySapphire); width = GetStringWidth(FONT_NORMAL, sText_BerryProgramUpdate, 0); left = (208 - width) / 2; - AddTextPrinterParameterized3(0, FONT_NORMAL, left, 2, sBerryProgramTextColors, TEXT_SKIP_DRAW, sText_BerryProgramUpdate); + AddTextPrinterParameterized3(WIN_TITLE, FONT_NORMAL, left, 2, sBerryProgramTextColors, TEXT_SKIP_DRAW, sText_BerryProgramUpdate); - CopyWindowToVram(2, COPYWIN_GFX); - CopyWindowToVram(3, COPYWIN_GFX); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_GAME_NAMES, COPYWIN_GFX); + CopyWindowToVram(WIN_TURN_OFF_TITLE, COPYWIN_GFX); + CopyWindowToVram(WIN_TITLE, COPYWIN_GFX); } static int BerryFix_TrySetScene(int scene) @@ -345,23 +352,23 @@ static int BerryFix_TrySetScene(int scene) static void BerryFix_SetScene(int scene) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); - FillWindowPixelBuffer(1, PIXEL_FILL(10)); - AddTextPrinterParameterized3(1, FONT_NORMAL, 0, 0, sBerryProgramTextColors, TEXT_SKIP_DRAW, sBerryProgramTexts[scene]); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_GFX); + FillWindowPixelBuffer(WIN_MSG_BODY, PIXEL_FILL(10)); + AddTextPrinterParameterized3(WIN_MSG_BODY, FONT_NORMAL, 0, 0, sBerryProgramTextColors, TEXT_SKIP_DRAW, sBerryProgramTexts[scene]); + PutWindowTilemap(WIN_MSG_BODY); + CopyWindowToVram(WIN_MSG_BODY, COPYWIN_GFX); switch (scene) { case SCENE_ENSURE_CONNECT: case SCENE_TRANSMITTING: case SCENE_FOLLOW_INSTRUCT: case SCENE_TRANSMIT_FAILED: - PutWindowTilemap(2); + PutWindowTilemap(WIN_GAME_NAMES); break; case SCENE_TURN_OFF_POWER: - PutWindowTilemap(3); + PutWindowTilemap(WIN_TURN_OFF_TITLE); break; case SCENE_BEGIN: - PutWindowTilemap(0); + PutWindowTilemap(WIN_TITLE); break; } CopyBgTilemapBufferToVram(0); From e989879f71d39a798108559cbb0b6c7b58da9e65 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 29 Sep 2022 21:24:50 -0400 Subject: [PATCH 019/290] Use window constants in battle_dome --- src/battle_dome.c | 177 ++++++++++++++++++++++++++-------------------- 1 file changed, 102 insertions(+), 75 deletions(-) diff --git a/src/battle_dome.c b/src/battle_dome.c index d30739ca58..224ef1b842 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -73,9 +73,33 @@ struct TourneyTreeLineSection #define tMode data[2] #define tPrevTaskId data[3] -#define EFFECTIVENESS_MODE_GOOD 0 -#define EFFECTIVENESS_MODE_BAD 1 -#define EFFECTIVENESS_MODE_AI_VS_AI 2 +enum { + EFFECTIVENESS_MODE_GOOD, + EFFECTIVENESS_MODE_BAD, + EFFECTIVENESS_MODE_AI_VS_AI, +}; + +// Window IDs for the tourney tree +enum { + TOURNEYWIN_NAMES_LEFT, + TOURNEYWIN_NAMES_RIGHT, + TOURNEYWIN_TITLE, +}; + +// Window IDs for the trainer (WIN_TRAINER_*) and match (WIN_MATCH_*) info cards. +// All 9 have a duplicate window at WIN + NUM_INFO_CARD_WINDOWS used by the alternate info card +enum { + WIN_TRAINER_NAME, + WIN_TRAINER_MON1_NAME, + WIN_TRAINER_MON2_NAME, // Used implicitly + WIN_TRAINER_MON3_NAME, // Used implicitly + WIN_TRAINER_FLAVOR_TEXT = WIN_TRAINER_MON1_NAME + FRONTIER_PARTY_SIZE, // Trainer's potential, battle style, and stat texts + WIN_MATCH_NUMBER, + WIN_MATCH_TRAINER_NAME_LEFT, + WIN_MATCH_TRAINER_NAME_RIGHT, + WIN_MATCH_WIN_TEXT, + NUM_INFO_CARD_WINDOWS +}; static u8 GetDomeTrainerMonIvs(u16); static void SwapDomeTrainers(int, int, u16 *); @@ -670,7 +694,7 @@ static const struct BgTemplate sInfoCardBgTemplates[4] = static const struct WindowTemplate sTourneyTreeWindowTemplates[] = { - { + [TOURNEYWIN_NAMES_LEFT] = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 3, @@ -679,7 +703,7 @@ static const struct WindowTemplate sTourneyTreeWindowTemplates[] = .paletteNum = 15, .baseBlock = 16, }, - { + [TOURNEYWIN_NAMES_RIGHT] = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 3, @@ -688,7 +712,7 @@ static const struct WindowTemplate sTourneyTreeWindowTemplates[] = .paletteNum = 15, .baseBlock = 144, }, - { + [TOURNEYWIN_TITLE] = { .bg = 0, .tilemapLeft = 8, .tilemapTop = 1, @@ -702,7 +726,7 @@ static const struct WindowTemplate sTourneyTreeWindowTemplates[] = static const struct WindowTemplate sInfoCardWindowTemplates[] = { - { + [WIN_TRAINER_NAME] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 2, @@ -711,7 +735,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 1, }, - { + [WIN_TRAINER_MON1_NAME] = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 5, @@ -720,7 +744,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 53, }, - { + [WIN_TRAINER_MON2_NAME] = { .bg = 0, .tilemapLeft = 19, .tilemapTop = 7, @@ -729,7 +753,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 69, }, - { + [WIN_TRAINER_MON3_NAME] = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 10, @@ -738,7 +762,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 96, }, - { + [WIN_TRAINER_FLAVOR_TEXT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 12, @@ -747,7 +771,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 112, }, - { + [WIN_MATCH_NUMBER] = { .bg = 0, .tilemapLeft = 5, .tilemapTop = 2, @@ -756,7 +780,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 294, }, - { + [WIN_MATCH_TRAINER_NAME_LEFT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 5, @@ -765,7 +789,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 340, }, - { + [WIN_MATCH_TRAINER_NAME_RIGHT] = { .bg = 0, .tilemapLeft = 20, .tilemapTop = 5, @@ -774,7 +798,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 356, }, - { + [WIN_MATCH_WIN_TEXT] = { .bg = 0, .tilemapLeft = 2, .tilemapTop = 16, @@ -783,7 +807,9 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 372, }, - { + // Duplicate windows used by the alternate info card + // Same as above but on bg 1 instead of bg 0 + [WIN_TRAINER_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 2, @@ -792,7 +818,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 1, }, - { + [WIN_TRAINER_MON1_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 16, .tilemapTop = 5, @@ -801,7 +827,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 53, }, - { + [WIN_TRAINER_MON2_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 19, .tilemapTop = 7, @@ -810,7 +836,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 69, }, - { + [WIN_TRAINER_MON3_NAME + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 16, .tilemapTop = 10, @@ -819,7 +845,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 96, }, - { + [WIN_TRAINER_FLAVOR_TEXT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 12, @@ -828,7 +854,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 112, }, - { + [WIN_MATCH_NUMBER + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 5, .tilemapTop = 2, @@ -837,7 +863,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 294, }, - { + [WIN_MATCH_TRAINER_NAME_LEFT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 5, @@ -846,7 +872,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 340, }, - { + [WIN_MATCH_TRAINER_NAME_RIGHT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 20, .tilemapTop = 5, @@ -855,7 +881,7 @@ static const struct WindowTemplate sInfoCardWindowTemplates[] = .paletteNum = 15, .baseBlock = 356, }, - { + [WIN_MATCH_WIN_TEXT + NUM_INFO_CARD_WINDOWS] = { .bg = 1, .tilemapLeft = 2, .tilemapTop = 16, @@ -1397,26 +1423,27 @@ static const u8 sCompetitorRangeByMatch[DOME_TOURNAMENT_MATCHES_COUNT][3] = { NUM_POSSIBLE_MATCH_TRAINERS(DOME_FINAL) * 0, NUM_POSSIBLE_MATCH_TRAINERS(DOME_FINAL), DOME_FINAL}, }; -// 1st value is the windowId (0 for left column, 1 for right column) -// 2nd value is the y coord +#define NAME_ROW_HEIGHT 16 + +// 1st value is the windowId, 2nd value is the y coord static const u8 sTrainerNamePositions[DOME_TOURNAMENT_TRAINERS_COUNT][2] = { - { 0, 0}, - { 1, 112}, - { 1, 0}, - { 0, 112}, - { 0, 48}, - { 1, 64}, - { 1, 48}, - { 0, 64}, - { 0, 16}, - { 1, 96}, - { 1, 16}, - { 0, 96}, - { 0, 32}, - { 1, 80}, - { 1, 32}, - { 0, 80}, + { TOURNEYWIN_NAMES_LEFT, 0 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 7 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 0 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 7 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 3 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 4 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 3 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 4 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 1 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 6 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 1 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 6 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 2 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 5 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_RIGHT, 2 * NAME_ROW_HEIGHT}, + { TOURNEYWIN_NAMES_LEFT, 5 * NAME_ROW_HEIGHT}, }; // Coords for the pokeballs on the tourney tree that act as buttons to view trainer/match info @@ -2427,7 +2454,7 @@ static void InitDomeTrainers(void) break; } - if (sTrainerNamePositions[i][0] != 0) + if (sTrainerNamePositions[i][0] != TOURNEYWIN_NAMES_LEFT) { j = 0; DOME_TRAINERS[j].trainerId = TRAINER_FRONTIER_BRAIN; @@ -3437,11 +3464,11 @@ static void Task_HandleInfoCardInput(u8 taskId) case MATCHCARD_INPUT_UP ... MATCHCARD_INPUT_RIGHT: gTasks[taskId].data[5] = i; if (gTasks[taskId].tUsingAlternateSlot) - windowId = 9; + windowId = NUM_INFO_CARD_WINDOWS; else windowId = 0; - for (i = windowId; i < windowId + 9; i++) + for (i = windowId; i < windowId + NUM_INFO_CARD_WINDOWS; i++) { CopyWindowToVram(i, COPYWIN_GFX); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -4263,14 +4290,14 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) int trainerId = 0; u8 nature = 0; int arrId = 0; - int windowId = 0; + int windowId = WIN_TRAINER_NAME; int x = 0, y = 0; u8 palSlot = 0; s16 *allocatedArray = AllocZeroed(sizeof(s16) * ALLOC_ARRAY_SIZE); trainerId = DOME_TRAINERS[trainerTourneyId].trainerId; if (flags & CARD_ALTERNATE_SLOT) - arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = 9, palSlot = 2; + arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = WIN_TRAINER_NAME + NUM_INFO_CARD_WINDOWS, palSlot = 2; if (flags & MOVE_CARD_RIGHT) x = DISPLAY_WIDTH + 16; if (flags & MOVE_CARD_DOWN) @@ -4388,19 +4415,19 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) else textPrinter.currentChar = gSpeciesNames[gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species]; - textPrinter.windowId = 1 + i + windowId; + textPrinter.windowId = WIN_TRAINER_MON1_NAME + i + windowId; if (i == 1) textPrinter.currentX = 7; else textPrinter.currentX = 0; - PutWindowTilemap(1 + i + windowId); - CopyWindowToVram(1 + i + windowId, COPYWIN_FULL); + PutWindowTilemap(WIN_TRAINER_MON1_NAME + i + windowId); + CopyWindowToVram(WIN_TRAINER_MON1_NAME + i + windowId, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); } - PutWindowTilemap(windowId + 4); - CopyWindowToVram(windowId + 4, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_TRAINER_FLAVOR_TEXT); + CopyWindowToVram(windowId + WIN_TRAINER_FLAVOR_TEXT, COPYWIN_FULL); // Print text about trainers potential in the tourney if (trainerId == TRAINER_FRONTIER_BRAIN) @@ -4409,7 +4436,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) textPrinter.currentChar = sBattleDomePotentialTexts[trainerTourneyId]; textPrinter.fontId = FONT_NORMAL; - textPrinter.windowId = windowId + 4; + textPrinter.windowId = windowId + WIN_TRAINER_FLAVOR_TEXT; textPrinter.currentX = 0; textPrinter.y = 4; textPrinter.currentY = 4; @@ -4731,7 +4758,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) u8 palSlot = 0; if (flags & CARD_ALTERNATE_SLOT) - arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = 9, palSlot = 2; + arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = NUM_INFO_CARD_WINDOWS, palSlot = 2; if (flags & MOVE_CARD_RIGHT) x = DISPLAY_WIDTH + 16; if (flags & MOVE_CARD_DOWN) @@ -4873,10 +4900,10 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4; StringExpandPlaceholders(gStringVar4, sBattleDomeWinTexts[winStringId]); textPrinter.currentChar = gStringVar4; - textPrinter.windowId = windowId + 8; + textPrinter.windowId = windowId + WIN_MATCH_WIN_TEXT; textPrinter.fontId = FONT_NORMAL; - PutWindowTilemap(windowId + 8); - CopyWindowToVram(windowId + 8, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_WIN_TEXT); + CopyWindowToVram(windowId + WIN_MATCH_WIN_TEXT, COPYWIN_FULL); textPrinter.currentX = 0; textPrinter.currentY = textPrinter.y = 0; AddTextPrinter(&textPrinter, 0, NULL); @@ -4892,11 +4919,11 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) textPrinter.fontId = FONT_SHORT; textPrinter.letterSpacing = 2; textPrinter.currentChar = gStringVar1; - textPrinter.windowId = windowId + 6; + textPrinter.windowId = windowId + WIN_MATCH_TRAINER_NAME_LEFT; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x40, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 6); - CopyWindowToVram(windowId + 6, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_TRAINER_NAME_LEFT); + CopyWindowToVram(windowId + WIN_MATCH_TRAINER_NAME_LEFT, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); // Print right trainer's name. @@ -4908,21 +4935,21 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) CopyDomeTrainerName(gStringVar1, trainerIds[1]); textPrinter.currentChar = gStringVar1; - textPrinter.windowId = windowId + 7; + textPrinter.windowId = windowId + WIN_MATCH_TRAINER_NAME_RIGHT; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x40, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 7); - CopyWindowToVram(windowId + 7, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_TRAINER_NAME_RIGHT); + CopyWindowToVram(windowId + WIN_MATCH_TRAINER_NAME_RIGHT, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); // Print match number. textPrinter.letterSpacing = 0; textPrinter.currentChar = sBattleDomeMatchNumberTexts[matchNo]; - textPrinter.windowId = windowId + 5; + textPrinter.windowId = windowId + WIN_MATCH_NUMBER; textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0xA0, textPrinter.letterSpacing); textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 5); - CopyWindowToVram(windowId + 5, COPYWIN_FULL); + PutWindowTilemap(windowId + WIN_MATCH_NUMBER); + CopyWindowToVram(windowId + WIN_MATCH_NUMBER, COPYWIN_FULL); AddTextPrinter(&textPrinter, 0, NULL); } @@ -5356,7 +5383,7 @@ static void Task_ShowTourneyTree(u8 taskId) case 4: textPrinter.fontId = FONT_SHORT; textPrinter.currentChar = gText_BattleTourney; - textPrinter.windowId = 2; + textPrinter.windowId = TOURNEYWIN_TITLE; textPrinter.x = 0; textPrinter.y = 0; textPrinter.letterSpacing = 2; @@ -5442,7 +5469,7 @@ static void Task_ShowTourneyTree(u8 taskId) } } - if (sTrainerNamePositions[i][0] == 0) + if (sTrainerNamePositions[i][0] == TOURNEYWIN_NAMES_LEFT) textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); else textPrinter.currentX = 3; @@ -5454,12 +5481,12 @@ static void Task_ShowTourneyTree(u8 taskId) gTasks[taskId].tState++; break; case 5: - PutWindowTilemap(0); - PutWindowTilemap(1); - PutWindowTilemap(2); - CopyWindowToVram(0, COPYWIN_FULL); - CopyWindowToVram(1, COPYWIN_FULL); - CopyWindowToVram(2, COPYWIN_FULL); + PutWindowTilemap(TOURNEYWIN_NAMES_LEFT); + PutWindowTilemap(TOURNEYWIN_NAMES_RIGHT); + PutWindowTilemap(TOURNEYWIN_TITLE); + CopyWindowToVram(TOURNEYWIN_NAMES_LEFT, COPYWIN_FULL); + CopyWindowToVram(TOURNEYWIN_NAMES_RIGHT, COPYWIN_FULL); + CopyWindowToVram(TOURNEYWIN_TITLE, COPYWIN_FULL); SetHBlankCallback(HblankCb_TourneyTree); SetVBlankCallback(VblankCb_TourneyTree); if (r4 == 2) @@ -5556,7 +5583,7 @@ static void Task_HandleStaticTourneyTreeInput(u8 taskId) if (DOME_TRAINERS[i].eliminatedAt == gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1 && DOME_TRAINERS[i].isEliminated) { - if (sTrainerNamePositions[i][0] == 0) + if (sTrainerNamePositions[i][0] == TOURNEYWIN_NAMES_LEFT) textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); else textPrinter.currentX = 3; From 60e1ad20e4a9c27c53a1e6e2416b995b50d52744 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 10 Oct 2022 22:07:34 -0400 Subject: [PATCH 020/290] Add NUM_MON_PIC_FRAMES, and trainer pic size constants --- include/battle.h | 2 +- include/constants/pokemon.h | 8 + include/data.h | 6 + src/battle_anim_effects_2.c | 2 +- src/battle_anim_mons.c | 2 +- src/battle_anim_utility_funcs.c | 2 +- src/data.c | 70 +++---- src/data/trainer_graphics/back_pic_tables.h | 50 ++++- src/data/trainer_graphics/front_pic_tables.h | 186 +++++++++---------- src/pokemon.c | 10 +- src/pokemon_jump.c | 2 +- src/pokemon_storage_system.c | 2 +- src/pokenav_conditions.c | 2 +- src/pokenav_match_call_gfx.c | 2 +- src/trainer_pokemon_sprites.c | 28 +-- src/use_pokeblock.c | 2 +- 16 files changed, 211 insertions(+), 165 deletions(-) diff --git a/include/battle.h b/include/battle.h index e779dee3df..aa9acac3cb 100644 --- a/include/battle.h +++ b/include/battle.h @@ -593,7 +593,7 @@ struct MonSpritesGfx u8 *byte[MAX_BATTLERS_COUNT]; } sprites; struct SpriteTemplate templates[MAX_BATTLERS_COUNT]; - struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][4]; + struct SpriteFrameImage frameImages[MAX_BATTLERS_COUNT][MAX_MON_PIC_FRAMES]; u8 unusedArr[0x80]; u8 *barFontGfx; void *unusedPtr; diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index d0e6094483..716d5adf9d 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -260,6 +260,14 @@ #define MON_PIC_HEIGHT 64 #define MON_PIC_SIZE (MON_PIC_WIDTH * MON_PIC_HEIGHT / 2) +// Most pokemon have 2 frames (a default and an alternate for their animation). +// There are 4 exceptions: +// - Castform has 4 frames, 1 for each form +// - Deoxys has 2 frames, 1 for each form +// - Spinda has 1 frame, presumably to avoid the work of animating its spots +// - Unown has 1 frame, presumably to avoid the work of animating all 28 of its forms +#define MAX_MON_PIC_FRAMES 4 + #define BATTLE_ALIVE_EXCEPT_ACTIVE 0 #define BATTLE_ALIVE_ATK_SIDE 1 #define BATTLE_ALIVE_DEF_SIDE 2 diff --git a/include/data.h b/include/data.h index 0cd87fc99a..732fda992c 100644 --- a/include/data.h +++ b/include/data.h @@ -7,6 +7,12 @@ #define MAX_TRAINER_ITEMS 4 +#define TRAINER_PIC_WIDTH 64 +#define TRAINER_PIC_HEIGHT 64 +#define TRAINER_PIC_SIZE (TRAINER_PIC_WIDTH * TRAINER_PIC_HEIGHT / 2) + +#define MAX_TRAINER_PIC_FRAMES 4 // ? Red and Leaf's back pics have 5 frames + enum { BATTLER_AFFINE_NORMAL, BATTLER_AFFINE_EMERGE, diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 6b60440528..7efa2e9edd 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -3023,7 +3023,7 @@ void AnimTask_LoadMusicNotesPals(u8 taskId) for (i = 1; i < NUM_MUSIC_NOTE_PAL_TAGS; i++) paletteNums[i] = AllocSpritePalette(ANIM_SPRITES_START - i); - gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); + gMonSpritesGfxPtr->buffer = AllocZeroed(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); LZDecompressWram(gBattleAnimSpritePal_MusicNotes2, gMonSpritesGfxPtr->buffer); for (i = 0; i < NUM_MUSIC_NOTE_PAL_TAGS; i++) LoadPalette(&gMonSpritesGfxPtr->buffer[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index a5d4659a9d..ba493ed189 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -2101,7 +2101,7 @@ u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 u16 palette = AllocSpritePalette(sSpriteTemplates_MoveEffectMons[id].paletteTag); if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->buffer == NULL) - gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); + gMonSpritesGfxPtr->buffer = AllocZeroed(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); if (!isBackpic) { LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 403939f883..cae9eb7d5f 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -905,7 +905,7 @@ void AnimTask_GetBattleTerrain(u8 taskId) void AnimTask_AllocBackupPalBuffer(u8 taskId) { - gMonSpritesGfxPtr->buffer = AllocZeroed(0x2000); + gMonSpritesGfxPtr->buffer = AllocZeroed(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); DestroyAnimVisualTask(taskId); } diff --git a/src/data.c b/src/data.c index 5856d17b85..d3674c2886 100644 --- a/src/data.c +++ b/src/data.c @@ -48,68 +48,68 @@ const struct SpriteFrameImage gBattlerPicTable_OpponentRight[] = const struct SpriteFrameImage gTrainerBackPicTable_Brendan[] = { - gTrainerBackPic_Brendan, 0x0800, - gTrainerBackPic_Brendan + 0x0800, 0x0800, - gTrainerBackPic_Brendan + 0x1000, 0x0800, - gTrainerBackPic_Brendan + 0x1800, 0x0800, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Brendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_May[] = { - gTrainerBackPic_May, 0x0800, - gTrainerBackPic_May + 0x0800, 0x0800, - gTrainerBackPic_May + 0x1000, 0x0800, - gTrainerBackPic_May + 0x1800, 0x0800, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_May + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Red[] = { - gTrainerBackPic_Red, 0x0800, - gTrainerBackPic_Red + 0x0800, 0x0800, - gTrainerBackPic_Red + 0x1000, 0x0800, - gTrainerBackPic_Red + 0x1800, 0x0800, - gTrainerBackPic_Red + 0x2000, 0x0800, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + gTrainerBackPic_Red + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Leaf[] = { - gTrainerBackPic_Leaf, 0x0800, - gTrainerBackPic_Leaf + 0x0800, 0x0800, - gTrainerBackPic_Leaf + 0x1000, 0x0800, - gTrainerBackPic_Leaf + 0x1800, 0x0800, - gTrainerBackPic_Leaf + 0x2000, 0x0800, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, + gTrainerBackPic_Leaf + TRAINER_PIC_SIZE * 4, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireBrendan[] = { - gTrainerBackPic_RubySapphireBrendan, 0x0800, - gTrainerBackPic_RubySapphireBrendan + 0x0800, 0x0800, - gTrainerBackPic_RubySapphireBrendan + 0x1000, 0x0800, - gTrainerBackPic_RubySapphireBrendan + 0x1800, 0x0800, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireBrendan + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[] = { - gTrainerBackPic_RubySapphireMay, 0x0800, - gTrainerBackPic_RubySapphireMay + 0x0800, 0x0800, - gTrainerBackPic_RubySapphireMay + 0x1000, 0x0800, - gTrainerBackPic_RubySapphireMay + 0x1800, 0x0800, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_RubySapphireMay + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Wally[] = { - gTrainerBackPic_Wally, 0x0800, - gTrainerBackPic_Wally + 0x0800, 0x0800, - gTrainerBackPic_Wally + 0x1000, 0x0800, - gTrainerBackPic_Wally + 0x1800, 0x0800, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Wally + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = { - gTrainerBackPic_Steven, 0x0800, - gTrainerBackPic_Steven + 0x0800, 0x0800, - gTrainerBackPic_Steven + 0x1000, 0x0800, - gTrainerBackPic_Steven + 0x1800, 0x0800, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 0, TRAINER_PIC_SIZE, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 1, TRAINER_PIC_SIZE, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 2, TRAINER_PIC_SIZE, + gTrainerBackPic_Steven + TRAINER_PIC_SIZE * 3, TRAINER_PIC_SIZE, }; static const union AnimCmd sAnim_GeneralFrame0[] = @@ -290,7 +290,7 @@ static const union AnimCmd sAnim_MonPic_3[] = ANIMCMD_END, }; -const union AnimCmd *const gAnims_MonPic[] = +const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] = { sAnim_MonPic_0, sAnim_MonPic_1, diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index 1dbffba428..524d48d480 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -13,18 +13,48 @@ const struct MonCoords gTrainerBackPicCoords[] = // this table 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, sprite, size) [TRAINER_BACK_PIC_##trainerPic] = {(const u32 *)sprite, size, TRAINER_BACK_PIC_##trainerPic} - const struct CompressedSpriteSheet gTrainerBackPicTable[] = { - TRAINER_BACK_SPRITE(BRENDAN, gTrainerBackPic_Brendan, 0x2000), - TRAINER_BACK_SPRITE(MAY, gTrainerBackPic_May, 0x2000), - TRAINER_BACK_SPRITE(RED, gTrainerBackPic_Red, 0x2800), - TRAINER_BACK_SPRITE(LEAF, gTrainerBackPic_Leaf, 0x2800), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, gTrainerBackPic_RubySapphireBrendan, 0x2000), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, gTrainerBackPic_RubySapphireMay, 0x2000), - TRAINER_BACK_SPRITE(WALLY, gTrainerBackPic_Wally, 0x2000), - TRAINER_BACK_SPRITE(STEVEN, gTrainerBackPic_Steven, 0x2000), + [TRAINER_BACK_PIC_BRENDAN] = { + .data = (const u32 *)gTrainerBackPic_Brendan, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Brendan), + .tag = TRAINER_BACK_PIC_BRENDAN, + }, + [TRAINER_BACK_PIC_MAY] = { + .data = (const u32 *)gTrainerBackPic_May, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_May), + .tag = TRAINER_BACK_PIC_MAY, + }, + [TRAINER_BACK_PIC_RED] = { + .data = (const u32 *)gTrainerBackPic_Red, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Red), + .tag = TRAINER_BACK_PIC_RED, + }, + [TRAINER_BACK_PIC_LEAF] = { + .data = (const u32 *)gTrainerBackPic_Leaf, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Leaf), + .tag = TRAINER_BACK_PIC_LEAF, + }, + [TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = { + .data = (const u32 *)gTrainerBackPic_RubySapphireBrendan, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_RubySapphireBrendan), + .tag = TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, + }, + [TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = { + .data = (const u32 *)gTrainerBackPic_RubySapphireMay, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_RubySapphireMay), + .tag = TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, + }, + [TRAINER_BACK_PIC_WALLY] = { + .data = (const u32 *)gTrainerBackPic_Wally, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Wally), + .tag = TRAINER_BACK_PIC_WALLY, + }, + [TRAINER_BACK_PIC_STEVEN] = { + .data = (const u32 *)gTrainerBackPic_Steven, + .size = TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_Steven), + .tag = TRAINER_BACK_PIC_STEVEN, + }, }; #define TRAINER_BACK_PAL(trainerPic, pal) [TRAINER_BACK_PIC_##trainerPic] = {pal, TRAINER_BACK_PIC_##trainerPic} diff --git a/src/data/trainer_graphics/front_pic_tables.h b/src/data/trainer_graphics/front_pic_tables.h index e751f3c1d2..dd4aa26de0 100644 --- a/src/data/trainer_graphics/front_pic_tables.h +++ b/src/data/trainer_graphics/front_pic_tables.h @@ -99,99 +99,99 @@ const struct MonCoords gTrainerFrontPicCoords[] = const struct CompressedSpriteSheet gTrainerFrontPicTable[] = { - TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), - TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, 0x800), - TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, 0x800), - TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, 0x800), - TRAINER_SPRITE(BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, 0x800), - TRAINER_SPRITE(COLLECTOR, gTrainerFrontPic_Collector, 0x800), - TRAINER_SPRITE(AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, 0x800), - TRAINER_SPRITE(SWIMMER_M, gTrainerFrontPic_SwimmerM, 0x800), - TRAINER_SPRITE(MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, 0x800), - TRAINER_SPRITE(EXPERT_M, gTrainerFrontPic_ExpertM, 0x800), - TRAINER_SPRITE(AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, 0x800), - TRAINER_SPRITE(BLACK_BELT, gTrainerFrontPic_BlackBelt, 0x800), - TRAINER_SPRITE(AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, 0x800), - TRAINER_SPRITE(AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, 0x800), - TRAINER_SPRITE(HEX_MANIAC, gTrainerFrontPic_HexManiac, 0x800), - TRAINER_SPRITE(AROMA_LADY, gTrainerFrontPic_AromaLady, 0x800), - TRAINER_SPRITE(RUIN_MANIAC, gTrainerFrontPic_RuinManiac, 0x800), - TRAINER_SPRITE(INTERVIEWER, gTrainerFrontPic_Interviewer, 0x800), - TRAINER_SPRITE(TUBER_F, gTrainerFrontPic_TuberF, 0x800), - TRAINER_SPRITE(TUBER_M, gTrainerFrontPic_TuberM, 0x800), - TRAINER_SPRITE(COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, 0x800), - TRAINER_SPRITE(LADY, gTrainerFrontPic_Lady, 0x800), - TRAINER_SPRITE(BEAUTY, gTrainerFrontPic_Beauty, 0x800), - TRAINER_SPRITE(RICH_BOY, gTrainerFrontPic_RichBoy, 0x800), - TRAINER_SPRITE(EXPERT_F, gTrainerFrontPic_ExpertF, 0x800), - TRAINER_SPRITE(POKEMANIAC, gTrainerFrontPic_Pokemaniac, 0x800), - TRAINER_SPRITE(MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, 0x800), - TRAINER_SPRITE(GUITARIST, gTrainerFrontPic_Guitarist, 0x800), - TRAINER_SPRITE(KINDLER, gTrainerFrontPic_Kindler, 0x800), - TRAINER_SPRITE(CAMPER, gTrainerFrontPic_Camper, 0x800), - TRAINER_SPRITE(PICNICKER, gTrainerFrontPic_Picnicker, 0x800), - TRAINER_SPRITE(BUG_MANIAC, gTrainerFrontPic_BugManiac, 0x800), - TRAINER_SPRITE(POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, 0x800), - TRAINER_SPRITE(PSYCHIC_M, gTrainerFrontPic_PsychicM, 0x800), - TRAINER_SPRITE(PSYCHIC_F, gTrainerFrontPic_PsychicF, 0x800), - TRAINER_SPRITE(GENTLEMAN, gTrainerFrontPic_Gentleman, 0x800), - TRAINER_SPRITE(ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, 0x800), - TRAINER_SPRITE(ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, 0x800), - TRAINER_SPRITE(ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, 0x800), - TRAINER_SPRITE(ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, 0x800), - TRAINER_SPRITE(LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, 0x800), - TRAINER_SPRITE(LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, 0x800), - TRAINER_SPRITE(LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, 0x800), - TRAINER_SPRITE(LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, 0x800), - TRAINER_SPRITE(LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, 0x800), - TRAINER_SPRITE(LEADER_WINONA, gTrainerFrontPic_LeaderWinona, 0x800), - TRAINER_SPRITE(LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, 0x800), - TRAINER_SPRITE(LEADER_JUAN, gTrainerFrontPic_LeaderJuan, 0x800), - TRAINER_SPRITE(SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, 0x800), - TRAINER_SPRITE(SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, 0x800), - TRAINER_SPRITE(SR_AND_JR, gTrainerFrontPic_SrAndJr, 0x1000), - TRAINER_SPRITE(POKEFAN_M, gTrainerFrontPic_PokefanM, 0x1000), - TRAINER_SPRITE(POKEFAN_F, gTrainerFrontPic_PokefanF, 0x800), - TRAINER_SPRITE(YOUNGSTER, gTrainerFrontPic_Youngster, 0x800), - TRAINER_SPRITE(CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, 0x1000), - TRAINER_SPRITE(FISHERMAN, gTrainerFrontPic_Fisherman, 0x800), - TRAINER_SPRITE(CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, 0x1000), - TRAINER_SPRITE(CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, 0x800), - TRAINER_SPRITE(RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, 0x800), - TRAINER_SPRITE(RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, 0x800), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, 0x800), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, 0x800), - TRAINER_SPRITE(DRAGON_TAMER, gTrainerFrontPic_DragonTamer, 0x800), - TRAINER_SPRITE(NINJA_BOY, gTrainerFrontPic_NinjaBoy, 0x800), - TRAINER_SPRITE(BATTLE_GIRL, gTrainerFrontPic_BattleGirl, 0x1000), - TRAINER_SPRITE(PARASOL_LADY, gTrainerFrontPic_ParasolLady, 0x800), - TRAINER_SPRITE(SWIMMER_F, gTrainerFrontPic_SwimmerF, 0x800), - TRAINER_SPRITE(TWINS, gTrainerFrontPic_Twins, 0x800), - TRAINER_SPRITE(SAILOR, gTrainerFrontPic_Sailor, 0x800), - TRAINER_SPRITE(MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, 0x800), - TRAINER_SPRITE(WALLY, gTrainerFrontPic_Wally, 0x800), - TRAINER_SPRITE(BRENDAN, gTrainerFrontPic_Brendan, 0x800), - TRAINER_SPRITE(MAY, gTrainerFrontPic_May, 0x800), - TRAINER_SPRITE(BUG_CATCHER, gTrainerFrontPic_BugCatcher, 0x800), - TRAINER_SPRITE(POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, 0x800), - TRAINER_SPRITE(POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, 0x800), - TRAINER_SPRITE(MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, 0x800), - TRAINER_SPRITE(LASS, gTrainerFrontPic_Lass, 0x800), - TRAINER_SPRITE(YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, 0x800), - TRAINER_SPRITE(OLD_COUPLE, gTrainerFrontPic_OldCouple, 0x800), - TRAINER_SPRITE(SIS_AND_BRO, gTrainerFrontPic_SisAndBro, 0x800), - TRAINER_SPRITE(STEVEN, gTrainerFrontPic_Steven, 0x800), - TRAINER_SPRITE(SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, 0x800), - TRAINER_SPRITE(DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, 0x800), - TRAINER_SPRITE(PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, 0x800), - TRAINER_SPRITE(ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, 0x1000), - TRAINER_SPRITE(FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, 0x800), - TRAINER_SPRITE(PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, 0x800), - TRAINER_SPRITE(PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, 0x800), - TRAINER_SPRITE(RED, gTrainerFrontPic_Red, 0x800), - TRAINER_SPRITE(LEAF, gTrainerFrontPic_Leaf, 0x800), - TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, 0x800), - TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), + TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, TRAINER_PIC_SIZE), + TRAINER_SPRITE(COLLECTOR, gTrainerFrontPic_Collector, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMER_M, gTrainerFrontPic_SwimmerM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(EXPERT_M, gTrainerFrontPic_ExpertM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BLACK_BELT, gTrainerFrontPic_BlackBelt, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, TRAINER_PIC_SIZE), + TRAINER_SPRITE(HEX_MANIAC, gTrainerFrontPic_HexManiac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(AROMA_LADY, gTrainerFrontPic_AromaLady, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RUIN_MANIAC, gTrainerFrontPic_RuinManiac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(INTERVIEWER, gTrainerFrontPic_Interviewer, TRAINER_PIC_SIZE), + TRAINER_SPRITE(TUBER_F, gTrainerFrontPic_TuberF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(TUBER_M, gTrainerFrontPic_TuberM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LADY, gTrainerFrontPic_Lady, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BEAUTY, gTrainerFrontPic_Beauty, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RICH_BOY, gTrainerFrontPic_RichBoy, TRAINER_PIC_SIZE), + TRAINER_SPRITE(EXPERT_F, gTrainerFrontPic_ExpertF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMANIAC, gTrainerFrontPic_Pokemaniac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(GUITARIST, gTrainerFrontPic_Guitarist, TRAINER_PIC_SIZE), + TRAINER_SPRITE(KINDLER, gTrainerFrontPic_Kindler, TRAINER_PIC_SIZE), + TRAINER_SPRITE(CAMPER, gTrainerFrontPic_Camper, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PICNICKER, gTrainerFrontPic_Picnicker, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BUG_MANIAC, gTrainerFrontPic_BugManiac, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PSYCHIC_M, gTrainerFrontPic_PsychicM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PSYCHIC_F, gTrainerFrontPic_PsychicF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(GENTLEMAN, gTrainerFrontPic_Gentleman, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_WINONA, gTrainerFrontPic_LeaderWinona, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEADER_JUAN, gTrainerFrontPic_LeaderJuan, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SR_AND_JR, gTrainerFrontPic_SrAndJr, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(POKEFAN_M, gTrainerFrontPic_PokefanM, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(POKEFAN_F, gTrainerFrontPic_PokefanF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(YOUNGSTER, gTrainerFrontPic_Youngster, TRAINER_PIC_SIZE), + TRAINER_SPRITE(CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(FISHERMAN, gTrainerFrontPic_Fisherman, TRAINER_PIC_SIZE), + TRAINER_SPRITE(CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(DRAGON_TAMER, gTrainerFrontPic_DragonTamer, TRAINER_PIC_SIZE), + TRAINER_SPRITE(NINJA_BOY, gTrainerFrontPic_NinjaBoy, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BATTLE_GIRL, gTrainerFrontPic_BattleGirl, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(PARASOL_LADY, gTrainerFrontPic_ParasolLady, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SWIMMER_F, gTrainerFrontPic_SwimmerF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(TWINS, gTrainerFrontPic_Twins, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SAILOR, gTrainerFrontPic_Sailor, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, TRAINER_PIC_SIZE), + TRAINER_SPRITE(WALLY, gTrainerFrontPic_Wally, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BRENDAN, gTrainerFrontPic_Brendan, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAY, gTrainerFrontPic_May, TRAINER_PIC_SIZE), + TRAINER_SPRITE(BUG_CATCHER, gTrainerFrontPic_BugCatcher, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, TRAINER_PIC_SIZE), + TRAINER_SPRITE(POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, TRAINER_PIC_SIZE), + TRAINER_SPRITE(MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LASS, gTrainerFrontPic_Lass, TRAINER_PIC_SIZE), + TRAINER_SPRITE(YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, TRAINER_PIC_SIZE), + TRAINER_SPRITE(OLD_COUPLE, gTrainerFrontPic_OldCouple, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SIS_AND_BRO, gTrainerFrontPic_SisAndBro, TRAINER_PIC_SIZE), + TRAINER_SPRITE(STEVEN, gTrainerFrontPic_Steven, TRAINER_PIC_SIZE), + TRAINER_SPRITE(SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, TRAINER_PIC_SIZE), + TRAINER_SPRITE(DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, TRAINER_PIC_SIZE), + TRAINER_SPRITE(ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, TRAINER_PIC_SIZE * 2), + TRAINER_SPRITE(FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, TRAINER_PIC_SIZE), + TRAINER_SPRITE(PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RED, gTrainerFrontPic_Red, TRAINER_PIC_SIZE), + TRAINER_SPRITE(LEAF, gTrainerFrontPic_Leaf, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, TRAINER_PIC_SIZE), + TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, TRAINER_PIC_SIZE), }; #define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} diff --git a/src/pokemon.c b/src/pokemon.c index b65f97bd85..0b4e6465bb 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6928,8 +6928,6 @@ static bool8 ShouldSkipFriendshipChange(void) #define ALLOC_FAIL_BUFFER (1 << 0) #define ALLOC_FAIL_STRUCT (1 << 1) #define GFX_MANAGER_ACTIVE 0xA3 // Arbitrary value -#define GFX_MANAGER_SPR_SIZE (MON_PIC_SIZE * 4) // Only Castform uses more than MON_PIC_SIZE, despite not displaying its forms. -#define GFX_MANAGER_NUM_FRAMES 4 // Only 2 frames are needed static void InitMonSpritesGfx_Battle(struct MonSpritesGfxManager* gfx) { @@ -6976,7 +6974,7 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) case MON_SPR_GFX_MODE_FULL_PARTY: gfx->numSprites = PARTY_SIZE + 1; gfx->numSprites2 = PARTY_SIZE + 1; - gfx->numFrames = GFX_MANAGER_NUM_FRAMES; + gfx->numFrames = MAX_MON_PIC_FRAMES; gfx->dataSize = 1; gfx->mode = MON_SPR_GFX_MODE_FULL_PARTY; break; @@ -6985,14 +6983,14 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) default: gfx->numSprites = MAX_BATTLERS_COUNT; gfx->numSprites2 = MAX_BATTLERS_COUNT; - gfx->numFrames = GFX_MANAGER_NUM_FRAMES; + gfx->numFrames = MAX_MON_PIC_FRAMES; gfx->dataSize = 1; gfx->mode = MON_SPR_GFX_MODE_NORMAL; break; } // Set up sprite / sprite pointer buffers - gfx->spriteBuffer = AllocZeroed(gfx->dataSize * GFX_MANAGER_SPR_SIZE * gfx->numSprites); + gfx->spriteBuffer = AllocZeroed(gfx->dataSize * MON_PIC_SIZE * MAX_MON_PIC_FRAMES * gfx->numSprites); gfx->spritePointers = AllocZeroed(gfx->numSprites * 32); // ? Only * 4 is necessary, perhaps they were thinking bits. if (gfx->spriteBuffer == NULL || gfx->spritePointers == NULL) { @@ -7001,7 +6999,7 @@ struct MonSpritesGfxManager *CreateMonSpritesGfxManager(u8 managerId, u8 mode) else { for (i = 0; i < gfx->numSprites; i++) - gfx->spritePointers[i] = gfx->spriteBuffer + (gfx->dataSize * GFX_MANAGER_SPR_SIZE * i); + gfx->spritePointers[i] = gfx->spriteBuffer + (gfx->dataSize * MON_PIC_SIZE * MAX_MON_PIC_FRAMES * i); } // Set up sprite structs diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 4f2a14fdf0..e9397a08e8 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2714,7 +2714,7 @@ static void CreateJumpMonSprite(struct PokemonJumpGfx *jumpGfx, struct PokemonJu u8 spriteId; spriteTemplate = sSpriteTemplate_JumpMon; - buffer = Alloc(0x2000); + buffer = Alloc(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); unusedBuffer = Alloc(MON_PIC_SIZE); if (multiplayerId == GetPokeJumpMultiplayerId()) subpriority = 3; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 9a9e551a2a..a879cd4c89 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -550,7 +550,7 @@ struct PokemonStorageSystemData u16 *displayMonTilePtr; struct Sprite *displayMonSprite; u16 displayMonPalBuffer[0x40]; - u8 tileBuffer[MON_PIC_SIZE * 4]; // 4x the size of a 'Mon sprite to account for Castform + u8 tileBuffer[MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; u8 itemIconBuffer[0x800]; u8 wallpaperBgTilemapBuffer[0x1000]; u8 displayMenuTilemapBuffer[0x800]; diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index e0645bac0b..e7269ae835 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -19,7 +19,7 @@ struct Pokenav_ConditionMenu { u32 monPal[CONDITION_MONS_LOADED][0x20]; u8 fill[0x180]; - u32 monPicGfx[CONDITION_MONS_LOADED][MON_PIC_SIZE]; + u32 monPicGfx[CONDITION_MONS_LOADED][MON_PIC_SIZE]; // TODO: Is this too small? bool8 inSearchMode; s16 toLoadListIndex; u32 (*callback)(struct Pokenav_ConditionMenu *); diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index fd5b36fae0..c207e3826c 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -49,7 +49,7 @@ struct Pokenav_MatchCallGfx u8 unusedTilemapBuffer[BG_SCREEN_SIZE]; u8 bgTilemapBuffer2[BG_SCREEN_SIZE]; u8 *trainerPicGfxPtr; - u8 trainerPicGfx[0x800]; + u8 trainerPicGfx[0x800]; // TODO u8 trainerPicPal[0x20]; }; diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index a7289677e6..2ef8a7cff1 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -9,6 +9,12 @@ #include "pokemon.h" #include "constants/trainers.h" +#define PICS_COUNT 8 + +// Needs to be large enough to store either a decompressed pokemon pic or trainer pic +#define PIC_SPRITE_SIZE max(MON_PIC_SIZE, TRAINER_PIC_SIZE) +#define MAX_PIC_FRAMES max(MAX_MON_PIC_FRAMES, MAX_TRAINER_PIC_FRAMES) + struct PicData { u8 *frames; @@ -18,8 +24,6 @@ struct PicData u8 active; }; -#define PICS_COUNT 8 - static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {}; static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {}; @@ -149,11 +153,11 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront if (i == PICS_COUNT) return 0xFFFF; - framePics = Alloc(4 * 0x800); + framePics = Alloc(PIC_SPRITE_SIZE * MAX_PIC_FRAMES); if (!framePics) return 0xFFFF; - images = Alloc(4 * sizeof(struct SpriteFrameImage)); + images = Alloc(sizeof(struct SpriteFrameImage) * MAX_PIC_FRAMES); if (!images) { Free(framePics); @@ -164,10 +168,10 @@ static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFront // debug trap? return 0xFFFF; } - for (j = 0; j < 4; j ++) + for (j = 0; j < MAX_PIC_FRAMES; j ++) { - images[j].data = framePics + 0x800 * j; - images[j].size = 0x800; + images[j].data = framePics + PIC_SPRITE_SIZE * j; + images[j].size = PIC_SPRITE_SIZE; } sCreatingSpriteTemplate.tileTag = TAG_NONE; sCreatingSpriteTemplate.oam = &sOamData_Normal; @@ -209,7 +213,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, if (i == PICS_COUNT) return 0xFFFF; - framePics = Alloc(4 * MON_PIC_SIZE); + framePics = Alloc(MON_PIC_SIZE * MAX_MON_PIC_FRAMES); if (!framePics) return 0xFFFF; @@ -222,7 +226,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, { type = flags; } - images = Alloc(4 * sizeof(struct SpriteFrameImage)); + images = Alloc(sizeof(struct SpriteFrameImage) * MAX_MON_PIC_FRAMES); if (!images) { Free(framePics); @@ -233,7 +237,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, // debug trap? return 0xFFFF; } - for (j = 0; j < 4; j ++) + for (j = 0; j < MAX_MON_PIC_FRAMES; j ++) { images[j].data = framePics + MON_PIC_SIZE * j; images[j].size = MON_PIC_SIZE; @@ -307,10 +311,10 @@ static u16 CreateTrainerCardSprite(u16 species, u32 otId, u32 personality, bool8 { u8 *framePics; - framePics = Alloc(4 * 0x800); + framePics = Alloc(TRAINER_PIC_SIZE * MAX_TRAINER_PIC_FRAMES); if (framePics && !DecompressPic_HandleDeoxys(species, personality, isFrontPic, framePics, isTrainer)) { - BlitBitmapRectToWindow(windowId, framePics, 0, 0, 0x40, 0x40, destX, destY, 0x40, 0x40); + BlitBitmapRectToWindow(windowId, framePics, 0, 0, TRAINER_PIC_WIDTH, TRAINER_PIC_HEIGHT, destX, destY, TRAINER_PIC_WIDTH, TRAINER_PIC_HEIGHT); LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer); Free(framePics); return 0; diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 2f16f220aa..37e75bc4e9 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -88,7 +88,7 @@ struct UsePokeblockMenu { u32 unused; u16 partyPalettes[PARTY_SIZE][0x40]; - u8 partySheets[NUM_SELECTIONS_LOADED][0x2000]; + u8 partySheets[NUM_SELECTIONS_LOADED][MON_PIC_SIZE * MAX_MON_PIC_FRAMES]; u8 unusedBuffer[0x1000]; u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; u8 selectionIconSpriteIds[PARTY_SIZE + 1]; From 347a02ace1f571a8aab355a9df2f3bf112d3cca7 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 9 Dec 2022 12:34:55 -0500 Subject: [PATCH 021/290] Sync trade --- include/battle_anim.h | 2 +- include/constants/trade.h | 77 +-- include/link_rfu.h | 2 +- src/battle_anim_mons.c | 2 +- src/battle_main.c | 27 +- src/data/trade.h | 173 +++-- src/link_rfu_3.c | 2 +- src/trade.c | 1319 +++++++++++++++++++------------------ src/trainer_see.c | 20 +- src/union_room.c | 2 +- 10 files changed, 813 insertions(+), 813 deletions(-) diff --git a/include/battle_anim.h b/include/battle_anim.h index 0fe0d18980..f99af9059b 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -148,7 +148,7 @@ void AnimThrowProjectile(struct Sprite *sprite); void GetBgDataForTransform(struct BattleAnimBgData *dest, u8 battlerId); u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 id, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxysForm); void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite); -void TradeMenuBouncePartySprites(struct Sprite *sprite); +void Trade_MoveSelectedMonToTarget(struct Sprite *sprite); void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); void DestroySpriteAndFreeResources_(struct Sprite *sprite); void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); diff --git a/include/constants/trade.h b/include/constants/trade.h index fa42e6b43f..0f205d6d2f 100644 --- a/include/constants/trade.h +++ b/include/constants/trade.h @@ -12,21 +12,13 @@ #define INGAME_TRADE_HORSEA 2 #define INGAME_TRADE_MEOWTH 3 -// Flag IDs for sending link data -#define INITIATE_TRADE 1 -#define CANCEL_TRADE 2 -#define WANTS_TO_TRADE 1 -#define WANTS_TO_CANCEL 2 -#define READY_FINISH_TRADE 1 -#define FINISH_TRADE 2 - // Return values for CanTradeSelectedMon and CanSpinTradeMon -#define CAN_TRADE_MON 0 -#define CANT_TRADE_LAST_MON 1 -#define CANT_TRADE_NATIONAL 2 -#define CANT_TRADE_EGG_YET 3 -#define CANT_TRADE_INVALID_MON 4 -#define CANT_TRADE_EGG_YET2 5 +#define CAN_TRADE_MON 0 +#define CANT_TRADE_LAST_MON 1 +#define CANT_TRADE_NATIONAL 2 +#define CANT_TRADE_EGG_YET 3 +#define CANT_TRADE_INVALID_MON 4 +#define CANT_TRADE_PARTNER_EGG_YET 5 // Return values for CheckValidityOfTradeMons #define PLAYER_MON_INVALID 0 @@ -38,63 +30,6 @@ #define TRADE_PLAYER_NOT_READY 1 #define TRADE_PARTNER_NOT_READY 2 -// Indexes for sTradeActionTexts -#define TRADE_TEXT_CANCEL 0 -#define TRADE_TEXT_CHOOSE_MON 1 -#define TRADE_TEXT_SUMMARY 2 -#define TRADE_TEXT_TRADE 3 -#define TRADE_TEXT_CANCEL_TRADE 4 -#define TRADE_TEXT_JP_QUIT 5 - -// Checked to confirm DrawTradeMenuParty has reached final state -#define DRAW_PARTY_FINISH 5 - -// Message indexes for sTradeMessages -#define TRADE_MSG_STANDBY 0 -#define TRADE_MSG_CANCELED 1 -#define TRADE_MSG_ONLY_MON1 2 -#define TRADE_MSG_ONLY_MON2 3 -#define TRADE_MSG_WAITING_FOR_FRIEND 4 -#define TRADE_MSG_FRIEND_WANTS_TO_TRADE 5 -#define TRADE_MSG_MON_CANT_BE_TRADED 6 -#define TRADE_MSG_EGG_CANT_BE_TRADED 7 -#define TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED 8 - -// IDs for QueueAction -#define QUEUE_SEND_DATA 0 -#define QUEUE_STANDBY 1 -#define QUEUE_ONLY_MON1 2 -#define QUEUE_ONLY_MON2 3 -#define QUEUE_UNUSED1 4 -#define QUEUE_UNUSED2 5 -#define QUEUE_MON_CANT_BE_TRADED 6 -#define QUEUE_EGG_CANT_BE_TRADED 7 -#define QUEUE_FRIENDS_MON_CANT_BE_TRADED 8 - -#define QUEUE_DELAY_MSG 3 -#define QUEUE_DELAY_DATA 5 - -// IDs for CallTradeMenuFunc -#define TRADEMENUFUNC_MAIN_MENU 0 -#define TRADEMENUFUNC_SELECTED_MON 1 -#define TRADEMENUFUNC_SHOW_MON_SUMMARY 2 -#define TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE 3 -#define TRADEMENUFUNC_CANCEL_TRADE_PROMPT 4 -#define TRADEMENUFUNC_UNUSED_5 5 -#define TRADEMENUFUNC_BOTH_MONS_SELECTED 6 -#define TRADEMENUFUNC_CONFIRM_TRADE_PROMPT 7 -#define TRADEMENUFUNC_REDRAW_MAIN_MENU 8 -#define TRADEMENUFUNC_LINK_TRADE_FADE_OUT 9 -#define TRADEMENUFUNC_LINK_TRADE_WAIT_FADE 10 -#define TRADEMENUFUNC_CANCEL_TRADE_1 11 -#define TRADEMENUFUNC_CANCEL_TRADE_2 12 -#define TRADEMENUFUNC_START_LINK_TRADE 13 -#define TRADEMENUFUNC_DELAY_TRADE_CONFIRM 14 -#define TRADEMENUFUNC_UNUSED_15 15 -#define TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE 16 -#define TRADEMENUFUNC_PARTNER_MON_INVALID 17 -#define TRADEMENUFUNC_STANDBY 100 - // Message indexes for sUnionRoomTradeMessages #define UR_TRADE_MSG_NONE 0 #define UR_TRADE_MSG_NOT_MON_PARTNER_WANTS 1 diff --git a/include/link_rfu.h b/include/link_rfu.h index 1e434e8303..4a3b8928ca 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -83,7 +83,7 @@ struct RfuGameCompatibilityData u16 hasNews:1; u16 hasCard:1; u16 unknown:1; // Never read - u16 isChampion:1; + u16 canLinkNationally:1; u16 hasNationalDex:1; u16 gameClear:1; u16 version:4; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index a5d4659a9d..b1c3072fcf 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1047,7 +1047,7 @@ void UpdateAnimBg3ScreenSize(bool8 largeScreenSize) } } -void TradeMenuBouncePartySprites(struct Sprite *sprite) +void Trade_MoveSelectedMonToTarget(struct Sprite *sprite) { sprite->data[1] = sprite->x; sprite->data[3] = sprite->y; diff --git a/src/battle_main.c b/src/battle_main.c index fa85608d48..8492040eef 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -301,11 +301,28 @@ const struct OamData gOamData_BattleSpritePlayerSide = .affineParam = 0, }; -// Unknown and unused data. Feel free to remove. -static const u16 sUnused1[] = {0, 5, 0xfffe, 0}; -static const u16 *const sUnused1Ptr = sUnused1; -static const u16 sUnused2[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0}; -static const u16 *const sUnused2Ptr = sUnused2; +static const union AnimCmd sAnim_Unused[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sAnims_Unused[] = +{ + sAnim_Unused, +}; + +static const union AffineAnimCmd sAffineAnim_Unused[] = +{ + AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 4), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 0x3C), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const sAffineAnims_Unused[] = +{ + sAffineAnim_Unused, +}; static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; diff --git a/src/data/trade.h b/src/data/trade.h index 80d17a49ba..433e362478 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -55,7 +55,7 @@ static const u8 sText_OnlyPkmnForBattle[] = _("That's your only\nPOKéMON for ba static const u8 sText_WaitingForYourFriend[] = _("{COLOR DARK_GRAY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GRAY}Waiting for your friend\nto finish…"); static const u8 sText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON."); -static const struct OamData sTradeOamData_32x16 = +static const struct OamData sOamData_MenuText = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), @@ -167,17 +167,17 @@ static const struct SpriteTemplate sSpriteTemplate_MenuText = { .tileTag = GFXTAG_MENU_TEXT, .paletteTag = PALTAG_MENU_TEXT, - .oam = &sTradeOamData_32x16, + .oam = &sOamData_MenuText, .anims = sAnims_MenuText, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -static const u16 sTradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette sSpritePalette_TradeScreenText = +static const u16 sMenuText_Pal[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const struct SpritePalette sSpritePalette_MenuText = { - .data = sTradeScreenTextPalette, + .data = sMenuText_Pal, .tag = PALTAG_MENU_TEXT }; @@ -193,7 +193,7 @@ static const struct SpritePalette sSpritePalette_TradeScreenText = // 1st array is the current positions // 2nd array is directions of input // 3rd array is the next positions to go to (unoccupied spaces are skipped over) -static const u8 sTradeNextSelectedMonTable[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = +static const u8 sCursorMoveDestinations[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = { { {4, 2, 12, 12, 0, 0}, // UP @@ -275,86 +275,67 @@ static const u8 sTradeNextSelectedMonTable[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] } }; +#define COL0_X 1 +#define COL1_X 8 +#define COL2_X 16 +#define COL3_X 23 +#define ROW0_Y 5 +#define ROW1_Y 10 +#define ROW2_Y 15 +#define ROW3_Y 18 + static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] = { - // Your party - {1, 5 }, - {8, 5 }, - {1, 10}, - {8, 10}, - {1, 15}, - {8, 15}, - - // Friend's party - {16, 5 }, - {23, 5 }, - {16, 10}, - {23, 10}, - {16, 15}, - {23, 15}, - - {23, 18} // CANCEL + // Player's party + {COL0_X, ROW0_Y }, + {COL1_X, ROW0_Y }, + {COL0_X, ROW1_Y}, + {COL1_X, ROW1_Y}, + {COL0_X, ROW2_Y}, + {COL1_X, ROW2_Y}, + // Partners's party + {COL2_X, ROW0_Y }, + {COL3_X, ROW0_Y }, + {COL2_X, ROW1_Y}, + {COL3_X, ROW1_Y}, + {COL2_X, ROW2_Y}, + {COL3_X, ROW2_Y}, + // Cancel + {COL3_X, ROW3_Y} }; -static const u8 sTradeMonLevelCoords[][2][2] = -{ - // Your party - { - {5, 4}, - {12, 4}, - }, - { - {5, 9}, - {12, 9}, - }, - { - {5, 14}, +static const u8 sTradeMonLevelCoords[PARTY_SIZE * 2][2] = { + [TRADE_PLAYER] = + { 5, 4}, + {12, 4}, + { 5, 9}, + {12, 9}, + { 5, 14}, {12, 14}, - }, - // Friend's party - { - - {20, 4}, - {27, 4}, - }, - { - {20, 9}, - {27, 9}, - }, - { + [TRADE_PARTNER * PARTY_SIZE] = + {20, 4}, + {27, 4}, + {20, 9}, + {27, 9}, {20, 14}, {27, 14}, - }, }; -static const u8 sTradeMonBoxCoords[][2][2] = -{ - // Your party - { - {1, 3}, - {8, 3}, - }, - { - {1, 8}, - {8, 8}, - }, - { - {1, 13}, - {8, 13}, - }, - // Friend's party - { - {16, 3}, - {23, 3}, - }, - { - {16, 8}, - {23, 8}, - }, - { +static const u8 sTradeMonBoxCoords[PARTY_SIZE * 2][2] = { + [TRADE_PLAYER] = + { 1, 3}, + { 8, 3}, + { 1, 8}, + { 8, 8}, + { 1, 13}, + { 8, 13}, + [TRADE_PARTNER * PARTY_SIZE] = + {16, 3}, + {23, 3}, + {16, 8}, + {23, 8}, {16, 13}, {23, 13}, - }, }; static const u8 sUnusedCoords[][2] = @@ -379,14 +360,14 @@ static const u8 sUnusedCoords[][2] = {23, 12} }; -static const u8 *const sTradeActionTexts[] = +static const u8 *const sActionTexts[] = { - [TRADE_TEXT_CANCEL] = sText_Cancel, - [TRADE_TEXT_CHOOSE_MON] = sText_ChooseAPkmn, - [TRADE_TEXT_SUMMARY] = sText_Summary, - [TRADE_TEXT_TRADE] = sText_Trade, - [TRADE_TEXT_CANCEL_TRADE] = sText_CancelTrade, - [TRADE_TEXT_JP_QUIT] = sJPText_PressBButtonToQuit + [TEXT_CANCEL] = sText_Cancel, + [TEXT_CHOOSE_MON] = sText_ChooseAPkmn, + [TEXT_SUMMARY] = sText_Summary, + [TEXT_TRADE] = sText_Trade, + [TEXT_CANCEL_TRADE] = sText_CancelTrade, + [TEXT_JP_QUIT] = sJPText_PressBButtonToQuit }; static const struct MenuAction sSelectTradeMonActions[] = @@ -395,17 +376,17 @@ static const struct MenuAction sSelectTradeMonActions[] = {sText_Trade2, Task_DrawSelectionTrade} }; -static const u8 *const sTradeMessages[] = +static const u8 *const sMessages[] = { - [TRADE_MSG_STANDBY] = sText_CommunicationStandby, - [TRADE_MSG_CANCELED] = sText_TheTradeHasBeenCanceled, - [TRADE_MSG_ONLY_MON1] = sText_OnlyPkmnForBattle, - [TRADE_MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, //identical text to above - [TRADE_MSG_WAITING_FOR_FRIEND] = sText_WaitingForYourFriend, - [TRADE_MSG_FRIEND_WANTS_TO_TRADE] = sText_YourFriendWantsToTrade, - [TRADE_MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow, - [TRADE_MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow, - [TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded + [MSG_STANDBY] = sText_CommunicationStandby, + [MSG_CANCELED] = sText_TheTradeHasBeenCanceled, + [MSG_ONLY_MON1] = sText_OnlyPkmnForBattle, + [MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, //identical text to above + [MSG_WAITING_FOR_FRIEND] = sText_WaitingForYourFriend, + [MSG_FRIEND_WANTS_TO_TRADE] = sText_YourFriendWantsToTrade, + [MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow, + [MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow, + [MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded }; static const u8 sTradeTextColors[] = @@ -415,7 +396,7 @@ static const u8 sTradeTextColors[] = TEXT_COLOR_DARK_GRAY //shadow color }; -static const struct BgTemplate sTradeMenuBgTemplates[] = +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, @@ -455,7 +436,7 @@ static const struct BgTemplate sTradeMenuBgTemplates[] = }, }; -static const struct WindowTemplate sTradeMenuWindowTemplates[] = +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, @@ -633,8 +614,8 @@ static const struct WindowTemplate sTradeYesNoWindowTemplate = .baseBlock = 582 }; -static const u8 sJPText_Shedinja[] = _("ヌケニン"); -static const u8 sTradeMenuPartyMonBoxDimensions[3][2] = +static const u8 sText_ShedinjaJP[] = _("ヌケニン"); +static const u8 sSelectedMonLevelGenderCoords[3][2] = { [TRADE_PLAYER] = {4, 3}, [TRADE_PARTNER] = {19, 3} diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 0d028cd48a..6eee8435c9 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -677,7 +677,7 @@ void InitHostRfuGameData(struct RfuGameData *data, u8 activity, bool32 startedAc data->compatibility.hasNews = FALSE; data->compatibility.hasCard = FALSE; data->compatibility.unknown = FALSE; - data->compatibility.isChampion = FlagGet(FLAG_IS_CHAMPION); + data->compatibility.canLinkNationally = FlagGet(FLAG_IS_CHAMPION); data->compatibility.hasNationalDex = IsNationalPokedexEnabled(); data->compatibility.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); } diff --git a/src/trade.c b/src/trade.c index 61ebaf4cc3..1032d0d5df 100644 --- a/src/trade.c +++ b/src/trade.c @@ -51,6 +51,68 @@ #include "constants/songs.h" #include "constants/union_room.h" +// IDs for RunTradeMenuCallback +enum { + CB_MAIN_MENU, + CB_SELECTED_MON, + CB_SHOW_MON_SUMMARY, + CB_CONFIRM_TRADE_PROMPT, + CB_CANCEL_TRADE_PROMPT, + CB_READY_WAIT, // Unused in Emerald, equivalent to CB_IDLE + CB_SET_SELECTED_MONS, + CB_PRINT_IS_THIS_OKAY, + CB_HANDLE_TRADE_CANCELED, + CB_FADE_TO_START_TRADE, + CB_WAIT_TO_START_TRADE, + CB_INIT_EXIT_CANCELED_TRADE, + CB_EXIT_CANCELED_TRADE, + CB_START_LINK_TRADE, + CB_INIT_CONFIRM_TRADE_PROMPT, + CB_UNUSED_CLOSE_MSG, + CB_WAIT_TO_START_RFU_TRADE, + CB_PARTNER_MON_INVALID, + CB_IDLE = 100, +}; + +// Indexes for sActionTexts +enum { + TEXT_CANCEL, + TEXT_CHOOSE_MON, + TEXT_SUMMARY, + TEXT_TRADE, + TEXT_CANCEL_TRADE, + TEXT_JP_QUIT, +}; + +// Indexes for sMessages +enum { + MSG_STANDBY, + MSG_CANCELED, + MSG_ONLY_MON1, + MSG_ONLY_MON2, + MSG_WAITING_FOR_FRIEND, + MSG_FRIEND_WANTS_TO_TRADE, + MSG_MON_CANT_BE_TRADED, + MSG_EGG_CANT_BE_TRADED, + MSG_FRIENDS_MON_CANT_BE_TRADED, +}; + +// IDs for QueueAction +enum { + QUEUE_SEND_DATA, + QUEUE_STANDBY, + QUEUE_ONLY_MON1, + QUEUE_ONLY_MON2, + QUEUE_UNUSED1, // Presumably intended for MSG_WAITING_FOR_FRIEND + QUEUE_UNUSED2, // Presumably intended for MSG_FRIEND_WANTS_TO_TRADE + QUEUE_MON_CANT_BE_TRADED, + QUEUE_EGG_CANT_BE_TRADED, + QUEUE_FRIENDS_MON_CANT_BE_TRADED, +}; + +#define QUEUE_DELAY_MSG 3 +#define QUEUE_DELAY_DATA 5 + // The following tags are offsets from GFXTAG_MENU_TEXT // They're looped over in CB2_CreateTradeMenu and CB2_ReturnToTradeMenu // and used as indexes into sMenuTextTileBuffers @@ -69,11 +131,21 @@ enum { GFXTAG_CHOOSE_PKMN_EMPTY_1, // 6 sprites to cover the full bottom bar, but only first 3 are needed GFXTAG_CHOOSE_PKMN_EMPTY_2, GFXTAG_CHOOSE_PKMN_EMPTY_3, - GFXTAG_MENU_TEXT_COUNT + NUM_MENU_TEXT_SPRITES }; -#define GFXTAG_PLAYER_NAME (1 + GFXTAG_PLAYER_NAME_R - GFXTAG_PLAYER_NAME_L) -#define GFXTAG_PARTNER_NAME (1 + GFXTAG_PARTNER_NAME_R - GFXTAG_PARTNER_NAME_L) -#define GFXTAG_CHOOSE_PKMN (1 + GFXTAG_CHOOSE_PKMN_EMPTY_3 - GFXTAG_CHOOSE_PKMN_L) +#define NUM_PLAYER_NAME_SPRITES (1 + GFXTAG_PLAYER_NAME_R - GFXTAG_PLAYER_NAME_L) +#define NUM_PARTNER_NAME_SPRITES (1 + GFXTAG_PARTNER_NAME_R - GFXTAG_PARTNER_NAME_L) +#define NUM_CHOOSE_PKMN_SPRITES (1 + GFXTAG_CHOOSE_PKMN_EMPTY_3 - GFXTAG_CHOOSE_PKMN_L) + +// Values for signaling to/from the link partner +enum { + STATUS_NONE, + STATUS_READY, + STATUS_CANCEL, +}; + +// Checked to confirm DrawSelectedMonScreen has reached final state +#define DRAW_SELECTED_FINISH 5 struct InGameTrade { /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; @@ -91,56 +163,53 @@ struct InGameTrade { /*0x38*/ u16 requestedSpecies; }; -static EWRAM_DATA u8 *sMenuTextAllocBuffer = NULL; +static EWRAM_DATA u8 *sMenuTextTileBuffer = NULL; // Bytes 0-2 are used for the player's name text // Bytes 3-5 are used for the partner's name text // Bytes 6-7 are used for the Cancel text // Bytes 8-13 are used for the Choose a Pokemon text // See the corresponding GFXTAGs in src/data/trade.h -static EWRAM_DATA u8 *sMenuTextTileBuffers[GFXTAG_MENU_TEXT_COUNT] = {NULL}; +static EWRAM_DATA u8 *sMenuTextTileBuffers[NUM_MENU_TEXT_SPRITES] = {NULL}; EWRAM_DATA struct Mail gTradeMail[PARTY_SIZE] = {0}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; static EWRAM_DATA struct { - /*0x0000*/ u8 bg2hofs; - /*0x0001*/ u8 bg3hofs; - /*0x0002*/ u8 filler_2[38]; - /*0x0028*/ u8 partySpriteIds[2][PARTY_SIZE]; - /*0x0034*/ u8 cursorSpriteId; - /*0x0035*/ u8 cursorPosition; - /*0x0036*/ u8 partyCounts[2]; - /*0x0038*/ bool8 monPresent[PARTY_SIZE * 2]; - /*0x0044*/ bool8 neverRead_44; - /*0x0045*/ bool8 isLiveMon[2][PARTY_SIZE]; - /*0x0051*/ bool8 isEgg[2][PARTY_SIZE]; - /*0x005D*/ u8 hpBarLevels[2][PARTY_SIZE]; - /*0x0069*/ u8 bufferPartyState; - /*0x006A*/ u8 filler_6A[5]; - /*0x006F*/ u8 tradeMenuFunc; - /*0x0070*/ u8 neverRead_70; - /*0x0071*/ u8 filler_71; - /*0x0072*/ u16 bottomTextTileStart; - /*0x0074*/ u8 drawPartyState[2]; - /*0x0076*/ u8 selectedMonIdx[2]; - /*0x0078*/ u8 playerLinkFlagChoseAction; - /*0x0079*/ u8 partnerLinkFlagChoseAction; - /*0x007A*/ u8 playerLinkFlagStatus; - /*0x007B*/ u8 partnerLinkFlagStatus; - /*0x007C*/ u8 filler_7C[2]; - /*0x007E*/ u8 partnerCursorPosition; - /*0x007F*/ u8 unused_7F; - /*0x0080*/ u16 linkData[20]; - /*0x00A8*/ u8 timer; - /*0x00A9*/ u8 giftRibbons[GIFT_RIBBONS_COUNT]; - /*0x00B4*/ u8 filler_B4[0x81C]; - /*0x08D0*/ struct { - bool8 queued; - u16 queueDelay; + u8 bg2hofs; + u8 bg3hofs; + u8 filler_2[38]; + u8 partySpriteIds[2][PARTY_SIZE]; + u8 cursorSpriteId; + u8 cursorPosition; + u8 partyCounts[2]; + bool8 optionsActive[PARTY_SIZE * 2 + 1]; + bool8 isLiveMon[2][PARTY_SIZE]; + bool8 isEgg[2][PARTY_SIZE]; + u8 hpBarLevels[2][PARTY_SIZE]; + u8 bufferPartyState; + u8 filler_6A[5]; + u8 callbackId; + u8 neverRead_70; + u16 bottomTextTileStart; + u8 drawSelectedMonState[2]; + u8 selectedMonIdx[2]; + u8 playerSelectStatus; + u8 partnerSelectStatus; + u8 playerConfirmStatus; + u8 partnerConfirmStatus; + u8 filler_7C[2]; + u8 partnerCursorPosition; + u16 linkData[20]; + u8 timer; + u8 giftRibbons[GIFT_RIBBONS_COUNT]; + u8 filler_B4[0x81C]; + struct { + bool8 active; + u16 delay; u8 actionId; } queuedActions[4]; - /*0x08F0*/ u16 tilemapBuffer[0x400]; -} *sTradeMenuData = {NULL}; + u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; +} *sTradeMenu = NULL; static EWRAM_DATA struct { /*0x00*/ struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon @@ -193,29 +262,29 @@ static void CB2_CreateTradeMenu(void); static void VBlankCB_TradeMenu(void); static void CB2_TradeMenu(void); static void LoadTradeBgGfx(u8); -static void SetTradePartyMonsVisible(void); +static void SetActiveMenuOptions(void); static bool8 BufferTradeParties(void); -static void CB1_SendOrReactToLinkTradeData(void); -static void CallTradeMenuFunc(void); +static void CB1_UpdateLink(void); +static void RunTradeMenuCallback(void); static void SetSelectedMon(u8); -static void DrawTradeMenuParty(u8); +static void DrawSelectedMonScreen(u8); static u8 GetMonNicknameWidth(u8 *, u8, u8); -static void BufferTradeMonMoves(u8 *, u8, u8); -static void PrintPartyNicknamesForTradeMenu(u8); -static void DrawTradeMenuPartyMonInfo(u8, u8, u8, u8, u8, u8); -static void DrawTradeMenuPartyInfo(u8); -static void PrintNicknamesForTradeMenu(void); -static void RedrawTradeMenuParty(u8); +static void BufferMovesString(u8 *, u8, u8); +static void PrintPartyNicknames(u8); +static void PrintLevelAndGender(u8, u8, u8, u8, u8, u8); +static void PrintPartyLevelsAndGenders(u8); +static void PrintTradePartnerPartyNicknames(void); +static void RedrawPartyWindow(u8); static void Task_DrawSelectionSummary(u8); static void Task_DrawSelectionTrade(u8); static void QueueAction(u16, u8); static u32 GetNumQueuedActions(void); static void DoQueuedActions(void); static void PrintTradeMessage(u8); -static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void); +static bool8 LoadUISpriteGfx(void); static void DrawBottomRowText(const u8 *, u8 *, u8); -static void SetTradePartyLiveStatuses(u8); -static void GetTradePartyHPBarLevels(u8); +static void ComputePartyTradeableFlags(u8); +static void ComputePartyHPBarLevels(u8); static void SetTradePartyHPBarSprites(void); static void SaveTradeGiftRibbons(void); static u32 CanTradeSelectedMon(struct Pokemon *, int, int); @@ -336,16 +405,16 @@ static void InitTradeMenu(void) LoadPalette(gStandardMenuPalette, 0xF0, 20); LoadPalette(gStandardMenuPalette, 0xD0, 20); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sTradeMenuBgTemplates, ARRAY_COUNT(sTradeMenuBgTemplates)); - SetBgTilemapBuffer(1, sTradeMenuData->tilemapBuffer); + InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates)); + SetBgTilemapBuffer(1, sTradeMenu->tilemapBuffer); - if (InitWindows(sTradeMenuWindowTemplates)) + if (InitWindows(sWindowTemplates)) { u32 i; DeactivateAllTextPrinters(); - for (i = 0; i < 18; i++) + for (i = 0; i < ARRAY_COUNT(sWindowTemplates) - 1; i++) { ClearWindowTilemap(i); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -355,14 +424,14 @@ static void InitTradeMenu(void) LoadUserWindowBorderGfx_(0, 20, 0xC0); LoadUserWindowBorderGfx(2, 1, 0xE0); LoadMonIconPalettes(); - sTradeMenuData->bufferPartyState = 0; - sTradeMenuData->tradeMenuFunc = 0; - sTradeMenuData->neverRead_70 = 0; - sTradeMenuData->drawPartyState[TRADE_PLAYER] = 0; - sTradeMenuData->drawPartyState[TRADE_PARTNER] = 0; - sTradeMenuData->playerLinkFlagStatus = 0; - sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->timer = 0; + sTradeMenu->bufferPartyState = 0; + sTradeMenu->callbackId = CB_MAIN_MENU; + sTradeMenu->neverRead_70 = 0; + sTradeMenu->drawSelectedMonState[TRADE_PLAYER] = 0; + sTradeMenu->drawSelectedMonState[TRADE_PARTNER] = 0; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->timer = 0; } } @@ -383,12 +452,12 @@ static void CB2_CreateTradeMenu(void) switch (gMain.state) { case 0: - sTradeMenuData = AllocZeroed(sizeof(*sTradeMenuData)); + sTradeMenu = AllocZeroed(sizeof(*sTradeMenu)); InitTradeMenu(); - sMenuTextAllocBuffer = AllocZeroed(GFXTAG_MENU_TEXT_COUNT * 256); + sMenuTextTileBuffer = AllocZeroed(NUM_MENU_TEXT_SPRITES * 256); - for (i = 0; i < GFXTAG_MENU_TEXT_COUNT; i++) - sMenuTextTileBuffers[i] = &sMenuTextAllocBuffer[i * 256]; + for (i = 0; i < NUM_MENU_TEXT_SPRITES; i++) + sMenuTextTileBuffers[i] = &sMenuTextTileBuffer[i * 256]; gMain.state++; break; @@ -398,13 +467,13 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < PARTY_SIZE; i++) CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); - PrintTradeMessage(TRADE_MSG_STANDBY); + PrintTradeMessage(MSG_STANDBY); ShowBg(0); if (!gReceivedRemoteLinkPlayers) { gLinkType = LINKTYPE_TRADE_CONNECTING; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; if (gWirelessCommType) { @@ -425,10 +494,10 @@ static void CB2_CreateTradeMenu(void) } break; case 2: - sTradeMenuData->timer++; - if (sTradeMenuData->timer > 11) + sTradeMenu->timer++; + if (sTradeMenu->timer > 11) { - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; gMain.state++; } break; @@ -437,7 +506,7 @@ static void CB2_CreateTradeMenu(void) { if (IsLinkMaster()) { - if (++sTradeMenuData->timer > 30) + if (++sTradeMenu->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -455,7 +524,7 @@ static void CB2_CreateTradeMenu(void) DestroyTask_RfuIdle(); CalculatePlayerPartyCount(); gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; if (gWirelessCommType) { Rfu_SetLinkRecovery(TRUE); @@ -489,13 +558,13 @@ static void CB2_CreateTradeMenu(void) CalculateEnemyPartyCount(); SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); - sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; - sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; + sTradeMenu->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenu->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -504,10 +573,10 @@ static void CB2_CreateTradeMenu(void) TRUE); } - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -519,30 +588,30 @@ static void CB2_CreateTradeMenu(void) break; case 8: LoadHeldItemIcons(); - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, 3); id = GetMultiplayerId(); DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, 3); - DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); + DrawTextWindowAndBufferTiles(sActionTexts[TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; break; case 11: - if (LoadTradeMenuSpriteSheetsAndPalettes()) + if (LoadUISpriteGfx()) gMain.state++; break; case 12: // Create player's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 120); - for (i = 0; i < GFXTAG_PLAYER_NAME; i++) + for (i = 0; i < NUM_PLAYER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PLAYER_NAME_L; @@ -551,7 +620,7 @@ static void CB2_CreateTradeMenu(void) // Create partner's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); - for (i = 0; i < GFXTAG_PARTNER_NAME; i++) + for (i = 0; i < NUM_PARTNER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PARTNER_NAME_L; @@ -566,33 +635,33 @@ static void CB2_CreateTradeMenu(void) CreateSprite(&temp, 215, 152, 1); temp = sSpriteTemplate_MenuText; temp.tileTag += GFXTAG_CANCEL_R; - CreateSprite(&temp, 247, 152, 1); + CreateSprite(&temp, 215 + 32, 152, 1); // Create Choose a Pokémon text sprites (only 3 are needed, other 3 are empty) - for (i = 0; i < GFXTAG_CHOOSE_PKMN; i++) + for (i = 0; i < NUM_CHOOSE_PKMN_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); - sTradeMenuData->cursorPosition = 0; + sTradeMenu->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenu->cursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); break; case 14: - SetTradePartyLiveStatuses(TRADE_PLAYER); - PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); - sTradeMenuData->bg2hofs = 0; - sTradeMenuData->bg3hofs = 0; - SetTradePartyMonsVisible(); + ComputePartyTradeableFlags(TRADE_PLAYER); + PrintPartyNicknames(TRADE_PLAYER); + sTradeMenu->bg2hofs = 0; + sTradeMenu->bg3hofs = 0; + SetActiveMenuOptions(); gMain.state++; PlayBGM(MUS_SCHOOL); break; case 15: - SetTradePartyLiveStatuses(TRADE_PARTNER); - PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); + ComputePartyTradeableFlags(TRADE_PARTNER); + PrintPartyNicknames(TRADE_PARTNER); gMain.state++; // fallthrough case 16: @@ -613,18 +682,18 @@ static void CB2_CreateTradeMenu(void) gMain.state++; break; case 20: - GetTradePartyHPBarLevels(TRADE_PLAYER); + ComputePartyHPBarLevels(TRADE_PLAYER); gMain.state++; break; case 21: - GetTradePartyHPBarLevels(TRADE_PARTNER); + ComputePartyHPBarLevels(TRADE_PARTNER); SetTradePartyHPBarSprites(); gMain.state++; break; case 22: if (!gPaletteFade.active) { - gMain.callback1 = CB1_SendOrReactToLinkTradeData; + gMain.callback1 = CB1_UpdateLink; SetMainCallback2(CB2_TradeMenu); } break; @@ -652,7 +721,7 @@ static void CB2_ReturnToTradeMenu(void) break; case 1: gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; break; case 2: gMain.state++; @@ -677,16 +746,16 @@ static void CB2_ReturnToTradeMenu(void) break; case 7: CalculateEnemyPartyCount(); - sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; - sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; + sTradeMenu->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenu->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; ClearWindowTilemap(0); - PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); - PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); + PrintPartyNicknames(TRADE_PLAYER); + PrintPartyNicknames(TRADE_PARTNER); - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -695,10 +764,10 @@ static void CB2_ReturnToTradeMenu(void) TRUE); } - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -710,30 +779,30 @@ static void CB2_ReturnToTradeMenu(void) break; case 8: LoadHeldItemIcons(); - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER); + DrawHeldItemIconsForTrade(&sTradeMenu->partyCounts[0], sTradeMenu->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMenuTextTileBuffers[GFXTAG_PLAYER_NAME_L], 0, 0, 3); id = GetMultiplayerId(); DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMenuTextTileBuffers[GFXTAG_PARTNER_NAME_L], 0, 0, 3); - DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); + DrawTextWindowAndBufferTiles(sActionTexts[TEXT_CANCEL], sMenuTextTileBuffers[GFXTAG_CANCEL_L], 0, 0, 2); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], sMenuTextTileBuffers[GFXTAG_CHOOSE_PKMN_L], 24); gMain.state++; - sTradeMenuData->timer = 0; + sTradeMenu->timer = 0; break; case 11: - if (LoadTradeMenuSpriteSheetsAndPalettes()) + if (LoadUISpriteGfx()) gMain.state++; break; case 12: // Create player's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gSaveBlock2Ptr->playerName, 120); - for (i = 0; i < GFXTAG_PLAYER_NAME; i++) + for (i = 0; i < NUM_PLAYER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PLAYER_NAME_L; @@ -742,7 +811,7 @@ static void CB2_ReturnToTradeMenu(void) // Create partner's name text sprites xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gLinkPlayers[GetMultiplayerId() ^ 1].name, 120); - for (i = 0; i < GFXTAG_PARTNER_NAME; i++) + for (i = 0; i < NUM_PARTNER_NAME_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_PARTNER_NAME_L; @@ -757,24 +826,24 @@ static void CB2_ReturnToTradeMenu(void) CreateSprite(&temp, 215, 152, 1); temp = sSpriteTemplate_MenuText; temp.tileTag += GFXTAG_CANCEL_R; - CreateSprite(&temp, 247, 152, 1); + CreateSprite(&temp, 215 + 32, 152, 1); // Create Choose a Pokémon text sprites - for (i = 0; i < GFXTAG_CHOOSE_PKMN; i++) + for (i = 0; i < NUM_CHOOSE_PKMN_SPRITES; i++) { temp = sSpriteTemplate_MenuText; temp.tileTag += i + GFXTAG_CHOOSE_PKMN_L; CreateSprite(&temp, (i * 32) + 24, 150, 1); } - if (sTradeMenuData->cursorPosition < PARTY_SIZE) - sTradeMenuData->cursorPosition = gLastViewedMonIndex; + if (sTradeMenu->cursorPosition < PARTY_SIZE) + sTradeMenu->cursorPosition = gLastViewedMonIndex; else - sTradeMenuData->cursorPosition = gLastViewedMonIndex + PARTY_SIZE; + sTradeMenu->cursorPosition = gLastViewedMonIndex + PARTY_SIZE; - sTradeMenuData->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, - sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, - sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2); + sTradeMenu->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, + sTradeMonSpriteCoords[sTradeMenu->cursorPosition][0] * 8 + 32, + sTradeMonSpriteCoords[sTradeMenu->cursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: @@ -783,9 +852,9 @@ static void CB2_ReturnToTradeMenu(void) break; case 17: LoadTradeBgGfx(1); - sTradeMenuData->bg2hofs = 0; - sTradeMenuData->bg3hofs = 0; - SetTradePartyMonsVisible(); + sTradeMenu->bg2hofs = 0; + sTradeMenu->bg3hofs = 0; + SetActiveMenuOptions(); gMain.state++; break; case 18: @@ -808,9 +877,7 @@ static void CB2_ReturnToTradeMenu(void) break; case 22: if (!gPaletteFade.active) - { SetMainCallback2(CB2_TradeMenu); - } break; } @@ -827,59 +894,59 @@ static void VBlankCB_TradeMenu(void) TransferPlttBuffer(); } -static void LinkTradeFadeOut(void) +static void CB_FadeToStartTrade(void) { - if (++sTradeMenuData->timer > 15) + if (++sTradeMenu->timer > 15) { BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE; + sTradeMenu->callbackId = CB_WAIT_TO_START_TRADE; } } -static void LinkTradeWaitForFade(void) +static void CB_WaitToStartTrade(void) { if (!gPaletteFade.active) { - gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenuData->cursorPosition; - gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenuData->partnerCursorPosition; + gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenu->cursorPosition; + gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenu->partnerCursorPosition; if (gWirelessCommType) { - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE; + sTradeMenu->callbackId = CB_WAIT_TO_START_RFU_TRADE; } else { SetCloseLinkCallbackAndType(32); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; + sTradeMenu->callbackId = CB_START_LINK_TRADE; } } } -static void SetLinkTradeCallbacks(void) +static void CB_StartLinkTrade(void) { gMain.savedCallback = CB2_StartCreateTradeMenu; - // Wireless Link Trade if (gWirelessCommType) { + // Wireless Link Trade if (IsLinkRfuTaskFinished()) { - Free(sMenuTextAllocBuffer); + Free(sMenuTextTileBuffer); FreeAllWindowBuffers(); - Free(sTradeMenuData); + Free(sTradeMenu); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_LinkTrade); } } - // Cable Link Trade else { + // Cable Link Trade if (!gReceivedRemoteLinkPlayers) { - Free(sMenuTextAllocBuffer); + Free(sMenuTextTileBuffer); FreeAllWindowBuffers(); - Free(sTradeMenuData); + Free(sTradeMenu); gMain.callback1 = NULL; SetMainCallback2(CB2_LinkTrade); } @@ -888,13 +955,15 @@ static void SetLinkTradeCallbacks(void) static void CB2_TradeMenu(void) { - CallTradeMenuFunc(); + RunTradeMenuCallback(); DoQueuedActions(); - DrawTradeMenuParty(TRADE_PLAYER); - DrawTradeMenuParty(TRADE_PARTNER); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuData->bg2hofs++); - SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuData->bg3hofs--); + // As long as drawSelectedMonState is 0, these do nothing + DrawSelectedMonScreen(TRADE_PLAYER); + DrawSelectedMonScreen(TRADE_PARTNER); + + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenu->bg2hofs++); + SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenu->bg3hofs--); RunTextPrintersAndIsPrinter0Active(); RunTasks(); @@ -917,8 +986,8 @@ static void LoadTradeBgGfx(u8 state) break; case 1: LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0); - DrawTradeMenuPartyInfo(TRADE_PLAYER); - DrawTradeMenuPartyInfo(TRADE_PARTNER); + PrintPartyLevelsAndGenders(TRADE_PLAYER); + PrintPartyLevelsAndGenders(TRADE_PARTNER); CopyBgTilemapBufferToVram(1); break; case 2: @@ -932,47 +1001,50 @@ static void LoadTradeBgGfx(u8 state) } } -static void SetTradePartyMonsVisible(void) +// Determine (based on party counts) where the main menu cursor can go +static void SetActiveMenuOptions(void) { int i; for (i = 0; i < PARTY_SIZE; i++) { - if (i < sTradeMenuData->partyCounts[TRADE_PLAYER]) + if (i < sTradeMenu->partyCounts[TRADE_PLAYER]) { - gSprites[sTradeMenuData->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; - sTradeMenuData->monPresent[i] = TRUE; + // Present player pokemon + gSprites[sTradeMenu->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; + sTradeMenu->optionsActive[i] = TRUE; } else { - sTradeMenuData->monPresent[i] = FALSE; + // Absent player pokemon + sTradeMenu->optionsActive[i] = FALSE; } - if (i < sTradeMenuData->partyCounts[TRADE_PARTNER]) + if (i < sTradeMenu->partyCounts[TRADE_PARTNER]) { - gSprites[sTradeMenuData->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; - sTradeMenuData->monPresent[i + PARTY_SIZE] = TRUE; + // Present partner pokemon + gSprites[sTradeMenu->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; + sTradeMenu->optionsActive[i + PARTY_SIZE] = TRUE; } else { - sTradeMenuData->monPresent[i + PARTY_SIZE] = FALSE; + // Absent partner pokemno + sTradeMenu->optionsActive[i + PARTY_SIZE] = FALSE; } } - sTradeMenuData->neverRead_44 = TRUE; + // Cancel is always active + sTradeMenu->optionsActive[PARTY_SIZE * 2] = TRUE; } // why not just use memcpy? -static void Trade_Memcpy(void *dataDest, const void *dataSrc, u32 count) +static void Trade_Memcpy(void *dest, const void *src, u32 size) { - u8 *dest = dataDest; - const u8 *src = dataSrc; + u8 *_dest = dest; + const u8 *_src = src; u32 i; - - for (i = 0; i < count; i++) - { - dest[i] = src[i]; - } + for (i = 0; i < size; i++) + _dest[i] = _src[i]; } static bool8 BufferTradeParties(void) @@ -981,107 +1053,107 @@ static bool8 BufferTradeParties(void) int i; struct Pokemon *mon; - switch (sTradeMenuData->bufferPartyState) + switch (sTradeMenu->bufferPartyState) { case 0: // The parties are sent in pairs rather than all at once Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); - sTradeMenuData->bufferPartyState++; - sTradeMenuData->timer = 0; + sTradeMenu->bufferPartyState++; + sTradeMenu->timer = 0; break; case 1: if (IsLinkTradeTaskFinished()) { if (_GetBlockReceivedStatus() == 0) { - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } else { TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } } break; case 3: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_200); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 4: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 5: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 7: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_200); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 8: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 9: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 2 * sizeof(struct Pokemon)); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 11: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_200); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 12: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 13: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct Mail) + 4); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 15: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_220); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 16: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct Mail)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 17: - Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, sizeof(sTradeMenuData->giftRibbons)); - sTradeMenuData->bufferPartyState++; + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, sizeof(sTradeMenu->giftRibbons)); + sTradeMenu->bufferPartyState++; break; case 19: if (id == 0) RequestLinkData(BLOCK_REQ_SIZE_40); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; break; case 20: if (_GetBlockReceivedStatus() == 3) { - Trade_Memcpy(sTradeMenuData->giftRibbons, gBlockRecvBuffer[id ^ 1], sizeof(sTradeMenuData->giftRibbons)); + Trade_Memcpy(sTradeMenu->giftRibbons, gBlockRecvBuffer[id ^ 1], sizeof(sTradeMenu->giftRibbons)); TradeResetReceivedFlags(); - sTradeMenuData->bufferPartyState++; + sTradeMenu->bufferPartyState++; } break; case 21: @@ -1096,10 +1168,8 @@ static bool8 BufferTradeParties(void) { GetMonData(mon, MON_DATA_NICKNAME, name); - if (!StringCompareWithoutExtCtrlCodes(name, sJPText_Shedinja)) - { + if (!StringCompareWithoutExtCtrlCodes(name, sText_ShedinjaJP)) SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); - } } } } @@ -1110,40 +1180,39 @@ static bool8 BufferTradeParties(void) case 10: case 14: case 18: - sTradeMenuData->timer++; - if (sTradeMenuData->timer > 10) + sTradeMenu->timer++; + if (sTradeMenu->timer > 10) { - sTradeMenuData->timer = 0; - sTradeMenuData->bufferPartyState++; + sTradeMenu->timer = 0; + sTradeMenu->bufferPartyState++; } break; } return FALSE; } -static void DrawIsThisTradeOkay(void) +static void PrintIsThisTradeOkay(void) { - DrawBottomRowText(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24); + DrawBottomRowText(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenu->bottomTextTileStart * 32)), 24); } -// mpId is unused -static void UpdateLinkTradeFlags(u8 mpId, u8 status) +static void Leader_ReadLinkBuffer(u8 mpId, u8 status) { if (status & 1) { switch (gBlockRecvBuffer[0][0]) { case LINKCMD_REQUEST_CANCEL: - sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_CANCEL; + sTradeMenu->playerSelectStatus = STATUS_CANCEL; break; case LINKCMD_READY_TO_TRADE: - sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE; + sTradeMenu->playerSelectStatus = STATUS_READY; break; case LINKCMD_INIT_BLOCK: - sTradeMenuData->playerLinkFlagStatus = INITIATE_TRADE; + sTradeMenu->playerConfirmStatus = STATUS_READY; break; case LINKCMD_READY_CANCEL_TRADE: - sTradeMenuData->playerLinkFlagStatus = CANCEL_TRADE; + sTradeMenu->playerConfirmStatus = STATUS_CANCEL; break; } TradeResetReceivedFlag(0); @@ -1154,25 +1223,24 @@ static void UpdateLinkTradeFlags(u8 mpId, u8 status) switch (gBlockRecvBuffer[1][0]) { case LINKCMD_REQUEST_CANCEL: - sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_CANCEL; + sTradeMenu->partnerSelectStatus = STATUS_CANCEL; break; case LINKCMD_READY_TO_TRADE: - sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[1][1] + 6; - sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_TRADE; + sTradeMenu->partnerCursorPosition = gBlockRecvBuffer[1][1] + PARTY_SIZE; + sTradeMenu->partnerSelectStatus = STATUS_READY; break; case LINKCMD_INIT_BLOCK: - sTradeMenuData->partnerLinkFlagStatus = INITIATE_TRADE; + sTradeMenu->partnerConfirmStatus = STATUS_READY; break; case LINKCMD_READY_CANCEL_TRADE: - sTradeMenuData->partnerLinkFlagStatus = CANCEL_TRADE; + sTradeMenu->partnerConfirmStatus = STATUS_CANCEL; break; } TradeResetReceivedFlag(1); } } -// mpId is unused -static void ReactToLinkTradeData(u8 mpId, u8 status) +static void Follower_ReadLinkBuffer(u8 mpId, u8 status) { if (status & 1) { @@ -1180,27 +1248,27 @@ static void ReactToLinkTradeData(u8 mpId, u8 status) { case LINKCMD_BOTH_CANCEL_TRADE: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1; + PrintTradeMessage(MSG_WAITING_FOR_FRIEND); + sTradeMenu->callbackId = CB_INIT_EXIT_CANCELED_TRADE; break; case LINKCMD_PARTNER_CANCEL_TRADE: - PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; case LINKCMD_SET_MONS_TO_TRADE: - sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[0][1] + 6; + sTradeMenu->partnerCursorPosition = gBlockRecvBuffer[0][1] + PARTY_SIZE; rbox_fill_rectangle(0); - SetSelectedMon(sTradeMenuData->cursorPosition); - SetSelectedMon(sTradeMenuData->partnerCursorPosition); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT; + SetSelectedMon(sTradeMenu->cursorPosition); + SetSelectedMon(sTradeMenu->partnerCursorPosition); + sTradeMenu->callbackId = CB_PRINT_IS_THIS_OKAY; break; case LINKCMD_START_TRADE: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE; + sTradeMenu->callbackId = CB_WAIT_TO_START_TRADE; break; case LINKCMD_PLAYER_CANCEL_TRADE: - PrintTradeMessage(TRADE_MSG_CANCELED); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } TradeResetReceivedFlag(0); } @@ -1209,76 +1277,87 @@ static void ReactToLinkTradeData(u8 mpId, u8 status) TradeResetReceivedFlag(1); } -static void QueueLinkTradeData(void) +static void Leader_HandleCommunication(void) { - if (sTradeMenuData->playerLinkFlagChoseAction && sTradeMenuData->partnerLinkFlagChoseAction) + if (sTradeMenu->playerSelectStatus != STATUS_NONE + && sTradeMenu->partnerSelectStatus != STATUS_NONE) { - if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE) + if (sTradeMenu->playerSelectStatus == STATUS_READY + && sTradeMenu->partnerSelectStatus == STATUS_READY) { - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_BOTH_MONS_SELECTED; - sTradeMenuData->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; - sTradeMenuData->linkData[1] = sTradeMenuData->cursorPosition; + // Both players have selected a pokemon to trade + sTradeMenu->callbackId = CB_SET_SELECTED_MONS; + sTradeMenu->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; + sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; } - else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL) + else if (sTradeMenu->playerSelectStatus == STATUS_READY + && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - PrintTradeMessage(TRADE_MSG_CANCELED); - sTradeMenuData->linkData[0] = LINKCMD_PARTNER_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // The player has selected a pokemon to trade, + // but the partner has selected Cancel + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->linkData[0] = LINKCMD_PARTNER_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->playerConfirmStatus = sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } - else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE) + else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL + && sTradeMenu->partnerSelectStatus == STATUS_READY) { - PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE); - sTradeMenuData->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // The partner has selected a pokemon to trade, + // but the player has selected cancel + PrintTradeMessage(MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenu->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->playerConfirmStatus = sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } - else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL - && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL) + else if (sTradeMenu->playerSelectStatus == STATUS_CANCEL + && sTradeMenu->partnerSelectStatus == STATUS_CANCEL) { - sTradeMenuData->linkData[0] = LINKCMD_BOTH_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // Both players have selected Cancel + sTradeMenu->linkData[0] = LINKCMD_BOTH_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1; + sTradeMenu->playerSelectStatus = sTradeMenu->partnerSelectStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_INIT_EXIT_CANCELED_TRADE; } } - if (sTradeMenuData->playerLinkFlagStatus && sTradeMenuData->partnerLinkFlagStatus) + if (sTradeMenu->playerConfirmStatus != STATUS_NONE + && sTradeMenu->partnerConfirmStatus != STATUS_NONE) { - if (sTradeMenuData->playerLinkFlagStatus == INITIATE_TRADE - && sTradeMenuData->partnerLinkFlagStatus == INITIATE_TRADE) + if (sTradeMenu->playerConfirmStatus == STATUS_READY + && sTradeMenu->partnerConfirmStatus == STATUS_READY) { - sTradeMenuData->linkData[0] = LINKCMD_START_TRADE; - sTradeMenuData->linkData[1] = 0; + // Both players have confirmed trade + sTradeMenu->linkData[0] = LINKCMD_START_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = 0; - sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_FADE_OUT; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_FADE_TO_START_TRADE; } - if (sTradeMenuData->playerLinkFlagStatus == CANCEL_TRADE - || sTradeMenuData->partnerLinkFlagStatus == CANCEL_TRADE) + if (sTradeMenu->playerConfirmStatus == STATUS_CANCEL + || sTradeMenu->partnerConfirmStatus == STATUS_CANCEL) { - PrintTradeMessage(TRADE_MSG_CANCELED); - sTradeMenuData->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; - sTradeMenuData->linkData[1] = 0; + // One of the players has decided not to confirm the trade, + // or the trade was not allowed. + PrintTradeMessage(MSG_CANCELED); + sTradeMenu->linkData[0] = LINKCMD_PLAYER_CANCEL_TRADE; + sTradeMenu->linkData[1] = 0; QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); - sTradeMenuData->playerLinkFlagStatus = 0; - sTradeMenuData->partnerLinkFlagStatus = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->playerConfirmStatus = STATUS_NONE; + sTradeMenu->partnerConfirmStatus = STATUS_NONE; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; } } } @@ -1292,10 +1371,10 @@ static void _SetLinkData(u16 *linkData, u16 linkCmd, u16 cursorPosition) static void SetLinkData(u16 linkCmd, u16 cursorPosition) { - _SetLinkData(sTradeMenuData->linkData, linkCmd, cursorPosition); + _SetLinkData(sTradeMenu->linkData, linkCmd, cursorPosition); } -static void CB1_SendOrReactToLinkTradeData(void) +static void CB1_UpdateLink(void) { u8 mpId = GetMultiplayerId(); u8 status; @@ -1303,25 +1382,25 @@ static void CB1_SendOrReactToLinkTradeData(void) if ((status = _GetBlockReceivedStatus())) { if (mpId == 0) - UpdateLinkTradeFlags(mpId, status); + Leader_ReadLinkBuffer(mpId, status); else - ReactToLinkTradeData(mpId, status); + Follower_ReadLinkBuffer(mpId, status); } if (mpId == 0) - QueueLinkTradeData(); + Leader_HandleCommunication(); } -static u8 GetNewTradeMenuPosition(u8 oldPosition, u8 direction) +static u8 GetNewCursorPosition(u8 oldPosition, u8 direction) { int i; u8 newPosition = 0; for (i = 0; i < PARTY_SIZE; i++) { - if (sTradeMenuData->monPresent[sTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE) + if (sTradeMenu->optionsActive[sCursorMoveDestinations[oldPosition][direction][i]] == TRUE) { - newPosition = sTradeNextSelectedMonTable[oldPosition][direction][i]; + newPosition = sCursorMoveDestinations[oldPosition][direction][i]; break; } } @@ -1331,157 +1410,151 @@ static u8 GetNewTradeMenuPosition(u8 oldPosition, u8 direction) static void TradeMenuMoveCursor(u8 *cursorPosition, u8 direction) { - u8 newPosition = GetNewTradeMenuPosition(*cursorPosition, direction); + u8 newPosition = GetNewCursorPosition(*cursorPosition, direction); if (newPosition == (PARTY_SIZE * 2)) // CANCEL { - StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteId], CURSOR_ANIM_ON_CANCEL); - gSprites[sTradeMenuData->cursorSpriteId].x = DISPLAY_WIDTH - 16; - gSprites[sTradeMenuData->cursorSpriteId].y = DISPLAY_HEIGHT; + StartSpriteAnim(&gSprites[sTradeMenu->cursorSpriteId], CURSOR_ANIM_ON_CANCEL); + gSprites[sTradeMenu->cursorSpriteId].x = DISPLAY_WIDTH - 16; + gSprites[sTradeMenu->cursorSpriteId].y = DISPLAY_HEIGHT; } else { - StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteId], CURSOR_ANIM_NORMAL); - gSprites[sTradeMenuData->cursorSpriteId].x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[sTradeMenuData->cursorSpriteId].y = sTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[sTradeMenu->cursorSpriteId], CURSOR_ANIM_NORMAL); + gSprites[sTradeMenu->cursorSpriteId].x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenu->cursorSpriteId].y = sTradeMonSpriteCoords[newPosition][1] * 8; } if (*cursorPosition != newPosition) - { PlaySE(SE_SELECT); - } *cursorPosition = newPosition; } static void SetReadyToTrade(void) { - PrintTradeMessage(TRADE_MSG_STANDBY); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + PrintTradeMessage(MSG_STANDBY); + sTradeMenu->callbackId = CB_IDLE; if (GetMultiplayerId() == 1) - SetLinkData(LINKCMD_READY_TO_TRADE, sTradeMenuData->cursorPosition); + { + // Communicate to the link leader that we're ready to trade + SetLinkData(LINKCMD_READY_TO_TRADE, sTradeMenu->cursorPosition); + } else - sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE; + { + // We are the link leader, no communication necessary + sTradeMenu->playerSelectStatus = STATUS_READY; + } } -static void TradeMenuProcessInput(void) +static void CB_ProcessMenuInput(void) { if (JOY_REPEAT(DPAD_UP)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 0); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 0); else if (JOY_REPEAT(DPAD_DOWN)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 1); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 1); else if (JOY_REPEAT(DPAD_LEFT)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 2); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 2); else if (JOY_REPEAT(DPAD_RIGHT)) - { - TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 3); - } + TradeMenuMoveCursor(&sTradeMenu->cursorPosition, 3); if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - // Cursor is in player's party - if (sTradeMenuData->cursorPosition < PARTY_SIZE) + if (sTradeMenu->cursorPosition < PARTY_SIZE) { + // Selected pokemon in player's party DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, ARRAY_COUNT(sSelectTradeMonActions), sSelectTradeMonActions); InitMenuInUpperLeftCornerNormal(1, ARRAY_COUNT(sSelectTradeMonActions), 0); PutWindowTilemap(1); CopyWindowToVram(1, COPYWIN_FULL); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SELECTED_MON; + sTradeMenu->callbackId = CB_SELECTED_MON; } - // Cursor is in partner's party - else if (sTradeMenuData->cursorPosition < PARTY_SIZE * 2) + else if (sTradeMenu->cursorPosition < PARTY_SIZE * 2) { + // Selected pokemon in partner's party BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY; + sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; } - // Cursor is on Cancel - else if (sTradeMenuData->cursorPosition == PARTY_SIZE * 2) + else if (sTradeMenu->cursorPosition == PARTY_SIZE * 2) { + // Selected Cancel CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_PROMPT; - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24); + sTradeMenu->callbackId = CB_CANCEL_TRADE_PROMPT; + DrawBottomRowText(sActionTexts[TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32), 24); } } } -static void TradeMenuChooseMon(void) +static void RedrawChooseAPokemonWindow(void) { - PrintNicknamesForTradeMenu(); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU; - gSprites[sTradeMenuData->cursorSpriteId].invisible = FALSE; - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24); + PrintTradePartnerPartyNicknames(); + sTradeMenu->callbackId = CB_MAIN_MENU; + gSprites[sTradeMenu->cursorSpriteId].invisible = FALSE; + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenu->bottomTextTileStart * 32), 24); } -static void TradeMenuProcessInput_SelectedMon(void) +static void CB_ProcessSelectedMonInput(void) { switch (Menu_ProcessInputNoWrap()) { case MENU_B_PRESSED: PlaySE(SE_SELECT); - TradeMenuChooseMon(); + RedrawChooseAPokemonWindow(); break; case MENU_NOTHING_CHOSEN: break; case 0: // Summary BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY; + sTradeMenu->callbackId = CB_SHOW_MON_SUMMARY; break; case 1: // Trade - switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenuData->cursorPosition)) + switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenu->cursorPosition)) { case CAN_TRADE_MON: SetReadyToTrade(); - gSprites[sTradeMenuData->cursorSpriteId].invisible = TRUE; + gSprites[sTradeMenu->cursorSpriteId].invisible = TRUE; break; case CANT_TRADE_LAST_MON: QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; case CANT_TRADE_NATIONAL: case CANT_TRADE_INVALID_MON: QueueAction(QUEUE_DELAY_MSG, QUEUE_MON_CANT_BE_TRADED); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; case CANT_TRADE_EGG_YET: - case CANT_TRADE_EGG_YET2: + case CANT_TRADE_PARTNER_EGG_YET: QueueAction(QUEUE_DELAY_MSG, QUEUE_EGG_CANT_BE_TRADED); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; + sTradeMenu->callbackId = CB_HANDLE_TRADE_CANCELED; break; } break; } } -static void ChooseMonAfterButtonPress(void) +static void CB_ChooseMonAfterButtonPress(void) { - if ((JOY_NEW(A_BUTTON)) || (JOY_NEW(B_BUTTON))) + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - TradeMenuChooseMon(); + RedrawChooseAPokemonWindow(); } } -static void TradeMenuShowMonSummaryScreen(void) +static void CB_ShowTradeMonSummaryScreen(void) { if (!gPaletteFade.active) { - // Player's party - if (sTradeMenuData->cursorPosition < PARTY_SIZE) - ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gPlayerParty, sTradeMenuData->cursorPosition, sTradeMenuData->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu); - // Partner's party + if (sTradeMenu->cursorPosition < PARTY_SIZE) + ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gPlayerParty, sTradeMenu->cursorPosition, sTradeMenu->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu); else - ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gEnemyParty, sTradeMenuData->cursorPosition - PARTY_SIZE, sTradeMenuData->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu); + ShowPokemonSummaryScreen(SUMMARY_MODE_LOCK_MOVES, gEnemyParty, sTradeMenu->cursorPosition - PARTY_SIZE, sTradeMenu->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu); FreeAllWindowBuffers(); } } @@ -1511,7 +1584,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player // Partner cant trade Egg or non-Hoenn mon if player doesn't have National Dex if (!IsNationalPokedexEnabled()) { - if (sTradeMenuData->isEgg[TRADE_PARTNER][partnerMonIdx] || !IsSpeciesInHoennDex(partnerSpecies)) + if (sTradeMenu->isEgg[TRADE_PARTNER][partnerMonIdx] || !IsSpeciesInHoennDex(partnerSpecies)) return PARTNER_MON_INVALID; } @@ -1527,14 +1600,12 @@ static bool32 CheckMonsBeforeTrade(void) int i; u8 aliveMons[PARTY_SIZE * 2]; - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) - { - aliveMons[i] = sTradeMenuData->isLiveMon[TRADE_PLAYER][i]; - } + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) + aliveMons[i] = sTradeMenu->isLiveMon[TRADE_PLAYER][i]; - switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], - sTradeMenuData->cursorPosition, - sTradeMenuData->partnerCursorPosition)) + switch (CheckValidityOfTradeMons(aliveMons, sTradeMenu->partyCounts[TRADE_PLAYER], + sTradeMenu->cursorPosition, + sTradeMenu->partnerCursorPosition)) { case PLAYER_MON_INVALID: QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); @@ -1552,24 +1623,24 @@ static bool32 CheckMonsBeforeTrade(void) return FALSE; } -static void ConfirmOrCancelTrade(void) +static void CB_ProcessConfirmTradeInput(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: // Confirm Trade + case 0: // YES, Confirm selection if (!CheckMonsBeforeTrade()) - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sTradeMenu->callbackId = CB_IDLE; else - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_PARTNER_MON_INVALID; + sTradeMenu->callbackId = CB_PARTNER_MON_INVALID; PutWindowTilemap(17); break; - case 1: // Cancel Trade + case 1: // NO, Cancel Trade case MENU_B_PRESSED: QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY); if (IsLinkTradeTaskFinished()) SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sTradeMenu->callbackId = CB_IDLE; PutWindowTilemap(17); break; } @@ -1580,66 +1651,65 @@ static void RestoreNicknamesCoveredByYesNo(void) { int i; - for (i = 0; i < sTradeMenuData->partyCounts[1] - 4; i++) + for (i = 0; i < sTradeMenu->partyCounts[1] - 4; i++) { - PutWindowTilemap(i + 12); - CopyWindowToVram(i + 12, COPYWIN_MAP); + PutWindowTilemap(i + PARTY_SIZE * 2); + CopyWindowToVram(i + PARTY_SIZE * 2, COPYWIN_MAP); } } -static void CancelTradeYesNo(void) +static void CB_ProcessCancelTradeInput(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: // YES, Cancel - PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND); + PrintTradeMessage(MSG_WAITING_FOR_FRIEND); SetLinkData(LINKCMD_REQUEST_CANCEL, 0); - gSprites[sTradeMenuData->cursorSpriteId].invisible = TRUE; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + gSprites[sTradeMenu->cursorSpriteId].invisible = TRUE; + sTradeMenu->callbackId = CB_IDLE; RestoreNicknamesCoveredByYesNo(); break; case 1: // NO, Continue case MENU_B_PRESSED: PlaySE(SE_SELECT); - TradeMenuChooseMon(); + RedrawChooseAPokemonWindow(); break; } } -static void SetBothSelectedMons(void) +static void CB_SetSelectedMons(void) { if (GetMultiplayerId() == 0) { rbox_fill_rectangle(0); - SetSelectedMon(sTradeMenuData->cursorPosition); - SetSelectedMon(sTradeMenuData->partnerCursorPosition); + SetSelectedMon(sTradeMenu->cursorPosition); + SetSelectedMon(sTradeMenu->partnerCursorPosition); } - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT; + sTradeMenu->callbackId = CB_PRINT_IS_THIS_OKAY; } -static void ConfirmTradePrompt(void) +static void CB_PrintIsThisTradeOkay(void) { - if (sTradeMenuData->drawPartyState[TRADE_PLAYER] == DRAW_PARTY_FINISH - && sTradeMenuData->drawPartyState[TRADE_PARTNER] == DRAW_PARTY_FINISH) + if (sTradeMenu->drawSelectedMonState[TRADE_PLAYER] == DRAW_SELECTED_FINISH + && sTradeMenu->drawSelectedMonState[TRADE_PARTNER] == DRAW_SELECTED_FINISH) { - DrawIsThisTradeOkay(); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_DELAY_TRADE_CONFIRM; + PrintIsThisTradeOkay(); + sTradeMenu->callbackId = CB_INIT_CONFIRM_TRADE_PROMPT; } } -static void DelayTradeConfirmation(void) +static void CB_InitConfirmTradePrompt(void) { - sTradeMenuData->timer++; - - if (sTradeMenuData->timer > 120) + sTradeMenu->timer++; + if (sTradeMenu->timer > 120) { CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0); - sTradeMenuData->timer = 0; - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE; + sTradeMenu->timer = 0; + sTradeMenu->callbackId = CB_CONFIRM_TRADE_PROMPT; } } -static void RedrawTradeMenuAfterPressA(void) +static void CB_HandleTradeCanceled(void) { int i; @@ -1655,38 +1725,34 @@ static void RedrawTradeMenuAfterPressA(void) rbox_fill_rectangle(i + 14); } - RedrawTradeMenuParty(TRADE_PLAYER); - RedrawTradeMenuParty(TRADE_PARTNER); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU; - gSprites[sTradeMenuData->cursorSpriteId].invisible = FALSE; + RedrawPartyWindow(TRADE_PLAYER); + RedrawPartyWindow(TRADE_PARTNER); + sTradeMenu->callbackId = CB_MAIN_MENU; + gSprites[sTradeMenu->cursorSpriteId].invisible = FALSE; } } -static void CancelTrade_1(void) +static void CB_InitExitCanceledTrade(void) { if (!gPaletteFade.active) { if (gWirelessCommType) - { SetLinkStandbyCallback(); - } else - { SetCloseLinkCallbackAndType(12); - } - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2; + sTradeMenu->callbackId = CB_EXIT_CANCELED_TRADE; } } -static void CancelTrade_2(void) +static void CB_ExitCanceledTrade(void) { if (gWirelessCommType) { if (IsLinkTradeTaskFinished() && GetNumQueuedActions() == 0) { - Free(sMenuTextAllocBuffer); - Free(sTradeMenuData); + Free(sMenuTextTileBuffer); + Free(sTradeMenu); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); @@ -1696,88 +1762,88 @@ static void CancelTrade_2(void) { if (!gReceivedRemoteLinkPlayers) { - Free(sMenuTextAllocBuffer); - Free(sTradeMenuData); + Free(sMenuTextTileBuffer); + Free(sTradeMenu); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); } } } -static void LinkTradeWaitForQueue(void) +static void CB_WaitToStartRfuTrade(void) { if (!Rfu_SetLinkRecovery(FALSE) && GetNumQueuedActions() == 0) { SetLinkStandbyCallback(); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; + sTradeMenu->callbackId = CB_START_LINK_TRADE; } } -static void PartnersMonWasInvalid(void) +static void CB_PartnersMonWasInvalid(void) { if (JOY_NEW(A_BUTTON)) { SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); - sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sTradeMenu->callbackId = CB_IDLE; } } -static void CallTradeMenuFunc(void) +static void RunTradeMenuCallback(void) { - switch (sTradeMenuData->tradeMenuFunc) + switch (sTradeMenu->callbackId) { - case TRADEMENUFUNC_MAIN_MENU: - TradeMenuProcessInput(); + case CB_MAIN_MENU: + CB_ProcessMenuInput(); break; - case TRADEMENUFUNC_SELECTED_MON: - TradeMenuProcessInput_SelectedMon(); + case CB_SELECTED_MON: + CB_ProcessSelectedMonInput(); break; - case TRADEMENUFUNC_SHOW_MON_SUMMARY: - TradeMenuShowMonSummaryScreen(); + case CB_SHOW_MON_SUMMARY: + CB_ShowTradeMonSummaryScreen(); break; - case TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE: - ConfirmOrCancelTrade(); + case CB_CONFIRM_TRADE_PROMPT: + CB_ProcessConfirmTradeInput(); break; - case TRADEMENUFUNC_CANCEL_TRADE_PROMPT: - CancelTradeYesNo(); + case CB_CANCEL_TRADE_PROMPT: + CB_ProcessCancelTradeInput(); break; - case TRADEMENUFUNC_BOTH_MONS_SELECTED: - SetBothSelectedMons(); + case CB_SET_SELECTED_MONS: + CB_SetSelectedMons(); break; - case TRADEMENUFUNC_CONFIRM_TRADE_PROMPT: - ConfirmTradePrompt(); + case CB_PRINT_IS_THIS_OKAY: + CB_PrintIsThisTradeOkay(); break; - case TRADEMENUFUNC_REDRAW_MAIN_MENU: - RedrawTradeMenuAfterPressA(); + case CB_HANDLE_TRADE_CANCELED: + CB_HandleTradeCanceled(); break; - case TRADEMENUFUNC_LINK_TRADE_FADE_OUT: - LinkTradeFadeOut(); + case CB_FADE_TO_START_TRADE: + CB_FadeToStartTrade(); break; - case TRADEMENUFUNC_LINK_TRADE_WAIT_FADE: - LinkTradeWaitForFade(); + case CB_WAIT_TO_START_TRADE: + CB_WaitToStartTrade(); break; - case TRADEMENUFUNC_CANCEL_TRADE_1: - CancelTrade_1(); + case CB_INIT_EXIT_CANCELED_TRADE: + CB_InitExitCanceledTrade(); break; - case TRADEMENUFUNC_CANCEL_TRADE_2: - CancelTrade_2(); + case CB_EXIT_CANCELED_TRADE: + CB_ExitCanceledTrade(); break; - case TRADEMENUFUNC_START_LINK_TRADE: - SetLinkTradeCallbacks(); + case CB_START_LINK_TRADE: + CB_StartLinkTrade(); break; - case TRADEMENUFUNC_DELAY_TRADE_CONFIRM: - DelayTradeConfirmation(); + case CB_INIT_CONFIRM_TRADE_PROMPT: + CB_InitConfirmTradePrompt(); break; - case TRADEMENUFUNC_UNUSED_15: - ChooseMonAfterButtonPress(); + case CB_UNUSED_CLOSE_MSG: + CB_ChooseMonAfterButtonPress(); break; - case TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE: - LinkTradeWaitForQueue(); + case CB_WAIT_TO_START_RFU_TRADE: + CB_WaitToStartRfuTrade(); break; - case TRADEMENUFUNC_PARTNER_MON_INVALID: - PartnersMonWasInvalid(); + case CB_PARTNER_MON_INVALID: + CB_PartnersMonWasInvalid(); break; - //case TRADEMENUFUNC_STANDBY: is nop + //case CB_IDLE: is nop } } @@ -1786,14 +1852,16 @@ static void SetSelectedMon(u8 cursorPosition) //cursorPosition 0-5 are the player's mons, 6-11 are the partner's u8 whichParty = cursorPosition / PARTY_SIZE; - if (sTradeMenuData->drawPartyState[whichParty] == 0) + if (sTradeMenu->drawSelectedMonState[whichParty] == 0) { - sTradeMenuData->drawPartyState[whichParty] = 1; - sTradeMenuData->selectedMonIdx[whichParty] = cursorPosition; + // Start the animation to display just the selected + // pokemon in the middle of the screen + sTradeMenu->drawSelectedMonState[whichParty] = 1; + sTradeMenu->selectedMonIdx[whichParty] = cursorPosition; } } -static void DrawTradeMenuParty(u8 whichParty) +static void DrawSelectedMonScreen(u8 whichParty) { s8 nameStringWidth; u8 nickname[20]; @@ -1801,105 +1869,111 @@ static void DrawTradeMenuParty(u8 whichParty) u8 i; u8 partyIdx; u8 selectedMonParty; - u8 selectedMonIdx = sTradeMenuData->selectedMonIdx[whichParty]; + u8 selectedMonIdx = sTradeMenu->selectedMonIdx[whichParty]; selectedMonParty = TRADE_PARTNER; - if (sTradeMenuData->selectedMonIdx[whichParty] < PARTY_SIZE) + if (sTradeMenu->selectedMonIdx[whichParty] < PARTY_SIZE) selectedMonParty = TRADE_PLAYER; partyIdx = selectedMonIdx % PARTY_SIZE; nameStringWidth = 0; - switch (sTradeMenuData->drawPartyState[whichParty]) + switch (sTradeMenu->drawSelectedMonState[whichParty]) { + default: + // Idle while state is 0, and once it reaches the final state (DRAW_SELECTED_FINISH) + break; case 1: - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) - { - gSprites[sTradeMenuData->partySpriteIds[0][i + (selectedMonParty * PARTY_SIZE)]].invisible = TRUE; - } - - for (i = 0; i < 6; i++) - { + // Erase the rest of the party + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][i]].invisible = TRUE; + for (i = 0; i < PARTY_SIZE; i++) ClearWindowTilemap(i + (whichParty * PARTY_SIZE + 2)); - } - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].invisible = FALSE; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[0] = 20; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] - + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; - StoreSpriteCallbackInData6(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]], SpriteCB_MonIcon); - sTradeMenuData->drawPartyState[whichParty]++; - TradeMenuBouncePartySprites(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]]); + // Re-display the selected pokemon + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].invisible = FALSE; + + // Move the selected pokemon to the center + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[0] = 20; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]], SpriteCB_MonIcon); + sTradeMenu->drawSelectedMonState[whichParty]++; + Trade_MoveSelectedMonToTarget(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]]); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); if (selectedMonParty == TRADE_PLAYER) - PrintNicknamesForTradeMenu(); + PrintTradePartnerPartyNicknames(); break; case 2: - if (gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) - sTradeMenuData->drawPartyState[whichParty] = 3; + // Wait for the selected pokemon's sprite to move to the correct position + if (gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].callback == SpriteCB_MonIcon) + sTradeMenu->drawSelectedMonState[whichParty] = 3; break; case 3: + // Redisplay the bg box CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, selectedMonParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] - + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].x2 = 0; - gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].y2 = 0; + + // Finalize the selected pokemon's position + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].x2 = 0; + gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]].y2 = 0; + + // Print selected pokemon's name and moves nameStringWidth = GetMonNicknameWidth(nickname, selectedMonParty, partyIdx); AddTextPrinterParameterized3((whichParty * 2) + 14, FONT_SMALL, (80 - nameStringWidth) / 2, 4, sTradeTextColors, 0, nickname); - BufferTradeMonMoves(movesString, selectedMonParty, partyIdx); + BufferMovesString(movesString, selectedMonParty, partyIdx); AddTextPrinterParameterized4((whichParty * 2) + 15, FONT_NORMAL, 0, 0, 0, 0, sTradeTextColors, 0, movesString); PutWindowTilemap((whichParty * 2) + 14); CopyWindowToVram((whichParty * 2) + 14, COPYWIN_FULL); PutWindowTilemap((whichParty * 2) + 15); CopyWindowToVram((whichParty * 2) + 15, COPYWIN_FULL); - sTradeMenuData->drawPartyState[whichParty]++; + + sTradeMenu->drawSelectedMonState[whichParty]++; break; case 4: - DrawTradeMenuPartyMonInfo(whichParty, partyIdx, - sTradeMenuPartyMonBoxDimensions[whichParty][0] + 4, - sTradeMenuPartyMonBoxDimensions[whichParty][1] + 1, - sTradeMenuPartyMonBoxDimensions[whichParty][0], - sTradeMenuPartyMonBoxDimensions[whichParty][1]); - sTradeMenuData->drawPartyState[whichParty]++; + PrintLevelAndGender(whichParty, partyIdx, + sSelectedMonLevelGenderCoords[whichParty][0] + 4, + sSelectedMonLevelGenderCoords[whichParty][1] + 1, + sSelectedMonLevelGenderCoords[whichParty][0], + sSelectedMonLevelGenderCoords[whichParty][1]); + sTradeMenu->drawSelectedMonState[whichParty]++; break; } } -static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 monIdx) +static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 partyIdx) { - u8 nickname[12]; + u8 nickname[POKEMON_NAME_LENGTH]; if (whichParty == TRADE_PLAYER) - GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); + GetMonData(&gPlayerParty[partyIdx], MON_DATA_NICKNAME, nickname); else - GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); + GetMonData(&gEnemyParty[partyIdx], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(str, nickname); return GetStringWidth(FONT_SMALL, str, GetFontAttribute(FONT_SMALL, FONTATTR_LETTER_SPACING)); } -static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) +static void BufferMovesString(u8 *str, u8 whichParty, u8 partyIdx) { u16 moves[MAX_MON_MOVES]; u16 i; - if (!sTradeMenuData->isEgg[whichParty][partyIdx]) + if (!sTradeMenu->isEgg[whichParty][partyIdx]) { for (i = 0; i < MAX_MON_MOVES; i++) { if (whichParty == TRADE_PLAYER) - { moves[i] = GetMonData(&gPlayerParty[partyIdx], i + MON_DATA_MOVE1, NULL); - } else - { moves[i] = GetMonData(&gEnemyParty[partyIdx], i + MON_DATA_MOVE1, NULL); - } } StringCopy(str, sText_EmptyString); @@ -1907,9 +1981,7 @@ static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE) - { StringAppend(str, gMoveNames[moves[i]]); - } StringAppend(str, sText_NewLine); } @@ -1921,7 +1993,7 @@ static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) } } -static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nickname) +static void PrintPartyMonNickname(u8 whichParty, u8 windowId, u8 *nickname) { u8 xPos; windowId += (whichParty * PARTY_SIZE) + 2; @@ -1931,27 +2003,27 @@ static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nicknam CopyWindowToVram(windowId, COPYWIN_FULL); } -static void PrintPartyNicknamesForTradeMenu(u8 whichParty) +static void PrintPartyNicknames(u8 whichParty) { u8 i; u8 nickname[20]; u8 str[32]; struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { GetMonData(&party[i], MON_DATA_NICKNAME, nickname); StringCopy_Nickname(str, nickname); - PrintMonNicknameForTradeMenu(whichParty, i, str); + PrintPartyMonNickname(whichParty, i, str); } } -static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 height) +static void PrintLevelAndGender(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 height) { u8 level; u32 symbolTile; u8 gender; - u8 nickname[12]; + u8 nickname[POKEMON_NAME_LENGTH]; CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0); CopyBgTilemapBufferToVram(1); @@ -1961,20 +2033,20 @@ static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 w else level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); - if (!sTradeMenuData->isEgg[whichParty][monIdx]) + if (!sTradeMenu->isEgg[whichParty][monIdx]) { if (level / 10 != 0) - sTradeMenuData->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; + sTradeMenu->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; - sTradeMenuData->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; + sTradeMenu->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; } else { - sTradeMenuData->tilemapBuffer[x + (y * 32) - 32] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 33]; - sTradeMenuData->tilemapBuffer[x + (y * 32) - 31] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 36] | 0x400; + sTradeMenu->tilemapBuffer[x + (y * 32) - 32] = sTradeMenu->tilemapBuffer[x + (y * 32) - 33]; + sTradeMenu->tilemapBuffer[x + (y * 32) - 31] = sTradeMenu->tilemapBuffer[x + (y * 32) - 36] | 0x400; } - if (sTradeMenuData->isEgg[whichParty][monIdx]) + if (sTradeMenu->isEgg[whichParty][monIdx]) { symbolTile = 0x480; } @@ -2004,62 +2076,57 @@ static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 w break; } } - sTradeMenuData->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile; + sTradeMenu->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile; } -static void DrawTradeMenuPartyInfo(u8 whichParty) +static void PrintPartyLevelsAndGenders(u8 whichParty) { s32 i; - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { - const u8 (*r5)[2]; - const u8 (*r4)[2]; - u32 r0 = 3 * whichParty; - const u8 (*r1)[2][2] = sTradeMonLevelCoords; - - r5 = r1[r0]; - r4 = sTradeMonBoxCoords[r0]; - DrawTradeMenuPartyMonInfo( + s32 j = i + PARTY_SIZE * whichParty; + PrintLevelAndGender( whichParty, i, - r5[i][0], - r5[i][1], - r4[i][0], - r4[i][1] + sTradeMonLevelCoords[j][0], + sTradeMonLevelCoords[j][1], + sTradeMonBoxCoords[j][0], + sTradeMonBoxCoords[j][1] ); } } -static void ResetTradeMenuPartyPositions(u8 whichParty) +static void ShowTradePartyMonIcons(u8 whichParty) { int i; - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].invisible = FALSE; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].x2 = 0; - gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].y2 = 0; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].invisible = FALSE; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].x2 = 0; + gSprites[sTradeMenu->partySpriteIds[whichParty][i]].y2 = 0; } } -static void PrintNicknamesForTradeMenu(void) +static void PrintTradePartnerPartyNicknames(void) { rbox_fill_rectangle(1); - //PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); ? - PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); + //PrintPartyNicknames(TRADE_PLAYER); ? + PrintPartyNicknames(TRADE_PARTNER); } -static void RedrawTradeMenuParty(u8 whichParty) +// Returning to the party selection screen from the "is this trade ok?" screen +static void RedrawPartyWindow(u8 whichParty) { CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - DrawTradeMenuPartyInfo(whichParty); - PrintPartyNicknamesForTradeMenu(whichParty); - ResetTradeMenuPartyPositions(whichParty); - DrawBottomRowText(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24); - sTradeMenuData->drawPartyState[whichParty] = 0; + PrintPartyLevelsAndGenders(whichParty); + PrintPartyNicknames(whichParty); + ShowTradePartyMonIcons(whichParty); + DrawBottomRowText(sActionTexts[TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenu->bottomTextTileStart * 32)), 24); + sTradeMenu->drawSelectedMonState[whichParty] = 0; } static void Task_DrawSelectionSummary(u8 taskId) @@ -2078,13 +2145,14 @@ static void QueueAction(u16 delay, u8 actionId) { int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - if (!sTradeMenuData->queuedActions[i].queued) + // Find first available spot + if (!sTradeMenu->queuedActions[i].active) { - sTradeMenuData->queuedActions[i].queueDelay = delay; - sTradeMenuData->queuedActions[i].actionId = actionId; - sTradeMenuData->queuedActions[i].queued = TRUE; + sTradeMenu->queuedActions[i].delay = delay; + sTradeMenu->queuedActions[i].actionId = actionId; + sTradeMenu->queuedActions[i].active = TRUE; break; } } @@ -2095,9 +2163,9 @@ static u32 GetNumQueuedActions(void) u32 numActions = 0; int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - numActions += sTradeMenuData->queuedActions[i].queued; + numActions += sTradeMenu->queuedActions[i].active; } return numActions; @@ -2107,43 +2175,43 @@ static void DoQueuedActions(void) { int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->queuedActions); i++) { - if (sTradeMenuData->queuedActions[i].queued) + if (sTradeMenu->queuedActions[i].active) { - if (sTradeMenuData->queuedActions[i].queueDelay) + if (sTradeMenu->queuedActions[i].delay != 0) { - sTradeMenuData->queuedActions[i].queueDelay--; + sTradeMenu->queuedActions[i].delay--; } else { - switch (sTradeMenuData->queuedActions[i].actionId) + switch (sTradeMenu->queuedActions[i].actionId) { case QUEUE_SEND_DATA: - SendLinkData(sTradeMenuData->linkData, 20); + SendLinkData(sTradeMenu->linkData, 20); break; case QUEUE_STANDBY: - PrintTradeMessage(TRADE_MSG_STANDBY); + PrintTradeMessage(MSG_STANDBY); break; case QUEUE_ONLY_MON1: - PrintTradeMessage(TRADE_MSG_ONLY_MON1); + PrintTradeMessage(MSG_ONLY_MON1); break; case QUEUE_ONLY_MON2: case QUEUE_UNUSED1: case QUEUE_UNUSED2: - PrintTradeMessage(TRADE_MSG_ONLY_MON2); + PrintTradeMessage(MSG_ONLY_MON2); break; case QUEUE_MON_CANT_BE_TRADED: - PrintTradeMessage(TRADE_MSG_MON_CANT_BE_TRADED); + PrintTradeMessage(MSG_MON_CANT_BE_TRADED); break; case QUEUE_EGG_CANT_BE_TRADED: - PrintTradeMessage(TRADE_MSG_EGG_CANT_BE_TRADED); + PrintTradeMessage(MSG_EGG_CANT_BE_TRADED); break; case QUEUE_FRIENDS_MON_CANT_BE_TRADED: - PrintTradeMessage(TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED); + PrintTradeMessage(MSG_FRIENDS_MON_CANT_BE_TRADED); break; } - sTradeMenuData->queuedActions[i].queued = FALSE; + sTradeMenu->queuedActions[i].active = FALSE; } } } @@ -2152,24 +2220,24 @@ static void DoQueuedActions(void) static void PrintTradeMessage(u8 messageId) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, FONT_NORMAL, sTradeMessages[messageId], 0, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(0, FONT_NORMAL, sMessages[messageId], 0, 1, TEXT_SKIP_DRAW, NULL); DrawTextBorderOuter(0, 20, 12); PutWindowTilemap(0); CopyWindowToVram(0, COPYWIN_FULL); } -static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) +static bool8 LoadUISpriteGfx(void) { struct SpriteSheet sheet; - if (sTradeMenuData->timer < GFXTAG_MENU_TEXT_COUNT) + if (sTradeMenu->timer < NUM_MENU_TEXT_SPRITES) { - sheet.data = sMenuTextTileBuffers[sTradeMenuData->timer]; + sheet.data = sMenuTextTileBuffers[sTradeMenu->timer]; sheet.size = 0x100; - sheet.tag = GFXTAG_MENU_TEXT + sTradeMenuData->timer; + sheet.tag = GFXTAG_MENU_TEXT + sTradeMenu->timer; } - switch (sTradeMenuData->timer) + switch (sTradeMenu->timer) { case GFXTAG_PLAYER_NAME_L: case GFXTAG_PLAYER_NAME_M: @@ -2180,11 +2248,11 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) case GFXTAG_CANCEL_L: case GFXTAG_CANCEL_R: LoadSpriteSheet(&sheet); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; case GFXTAG_CHOOSE_PKMN_L: - sTradeMenuData->bottomTextTileStart = LoadSpriteSheet(&sheet); - sTradeMenuData->timer++; + sTradeMenu->bottomTextTileStart = LoadSpriteSheet(&sheet); + sTradeMenu->timer++; break; case GFXTAG_CHOOSE_PKMN_M: case GFXTAG_CHOOSE_PKMN_R: @@ -2192,22 +2260,22 @@ static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) case GFXTAG_CHOOSE_PKMN_EMPTY_2: case GFXTAG_CHOOSE_PKMN_EMPTY_3: LoadSpriteSheet(&sheet); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT: - LoadSpritePalette(&sSpritePalette_TradeScreenText); - sTradeMenuData->timer++; + case NUM_MENU_TEXT_SPRITES: + LoadSpritePalette(&sSpritePalette_MenuText); + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT + 1: + case NUM_MENU_TEXT_SPRITES + 1: LoadSpritePalette(&sCursor_SpritePalette); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT + 2: + case NUM_MENU_TEXT_SPRITES + 2: LoadSpriteSheet(&sCursor_SpriteSheet); - sTradeMenuData->timer++; + sTradeMenu->timer++; break; - case GFXTAG_MENU_TEXT_COUNT + 3: - sTradeMenuData->timer = 0; + case NUM_MENU_TEXT_SPRITES + 3: + sTradeMenu->timer = 0; return TRUE; } @@ -2219,75 +2287,75 @@ static void DrawBottomRowText(const u8 *str, u8 *dest, u8 unused) DrawTextWindowAndBufferTiles(str, dest, 0, 0, 6); } -static void SetTradePartyLiveStatuses(u8 whichParty) +static void ComputePartyTradeableFlags(u8 whichParty) { int i; switch (whichParty) { case TRADE_PLAYER: - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = TRUE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = TRUE; } else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } else { - sTradeMenuData->isLiveMon[whichParty][i] = TRUE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = TRUE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } } break; case TRADE_PARTNER: - for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenu->partyCounts[whichParty]; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = TRUE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = TRUE; } else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) { - sTradeMenuData->isLiveMon[whichParty][i] = FALSE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = FALSE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } else { - sTradeMenuData->isLiveMon[whichParty][i] = TRUE; - sTradeMenuData->isEgg[whichParty][i] = FALSE; + sTradeMenu->isLiveMon[whichParty][i] = TRUE; + sTradeMenu->isEgg[whichParty][i] = FALSE; } } break; } } -static void GetTradePartyHPBarLevels(u8 who) +static void ComputePartyHPBarLevels(u8 whichParty) { u16 i, curHp, maxHp; - switch (who) + switch (whichParty) { case TRADE_PLAYER: - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - sTradeMenuData->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenu->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp); } break; case TRADE_PARTNER: - for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); - sTradeMenuData->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp); + sTradeMenu->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp); } break; } @@ -2299,10 +2367,8 @@ static void SetTradePartyHPBarSprites(void) for (i = 0; i < 2; i++) { - for (j = 0; j < sTradeMenuData->partyCounts[i]; j++) - { - SetPartyHPBarSprite(&gSprites[sTradeMenuData->partySpriteIds[i][j]], 4 - sTradeMenuData->hpBarLevels[i][j]); - } + for (j = 0; j < sTradeMenu->partyCounts[i]; j++) + SetPartyHPBarSprite(&gSprites[sTradeMenu->partySpriteIds[i][j]], 4 - sTradeMenu->hpBarLevels[i][j]); } } @@ -2310,12 +2376,12 @@ static void SaveTradeGiftRibbons(void) { int i; - for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->giftRibbons); i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenu->giftRibbons); i++) { - if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuData->giftRibbons[i] != 0) + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenu->giftRibbons[i] != 0) { - if (sTradeMenuData->giftRibbons[i] < 64) - gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuData->giftRibbons[i]; + if (sTradeMenu->giftRibbons[i] < 64) + gSaveBlock1Ptr->giftRibbons[i] = sTradeMenu->giftRibbons[i]; } } } @@ -2323,7 +2389,7 @@ static void SaveTradeGiftRibbons(void) static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int monIdx) { int i, numMonsLeft; - struct LinkPlayer *player; + struct LinkPlayer *partner; u32 species[PARTY_SIZE]; u32 species2[PARTY_SIZE]; @@ -2343,15 +2409,15 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int return CANT_TRADE_NATIONAL; } - player = &gLinkPlayers[GetMultiplayerId() ^ 1]; - if ((player->version & 0xFF) != VERSION_RUBY && - (player->version & 0xFF) != VERSION_SAPPHIRE) + partner = &gLinkPlayers[GetMultiplayerId() ^ 1]; + if ((partner->version & 0xFF) != VERSION_RUBY && + (partner->version & 0xFF) != VERSION_SAPPHIRE) { // Does partner not have National Dex - if (!(player->progressFlagsCopy & 0xF)) + if (!(partner->progressFlagsCopy & 0xF)) { if (species2[monIdx] == SPECIES_EGG) - return CANT_TRADE_EGG_YET2; + return CANT_TRADE_PARTNER_EGG_YET; if (!IsSpeciesInHoennDex(species2[monIdx])) return CANT_TRADE_INVALID_MON; @@ -2386,30 +2452,30 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int s32 GetGameProgressForLinkTrade(void) { - // isGameFrLg could have been a bool but they use 2 and > 0 instead - // possible other checks (for other game versions?) were planned/removed - s32 isGameFrLg; + // The usage of this value is a little unusual given it's treated as a bool, + // but it's the result of its usage in FRLG, where 0 is FRLG, 1 is RS, and 2 is Emerald. + s32 versionId; // 0: RSE, 2: FRLG u16 version; if (gReceivedRemoteLinkPlayers) { - isGameFrLg = 0; + versionId = 0; version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF); if (version == VERSION_RUBY || version == VERSION_SAPPHIRE || version == VERSION_EMERALD) - isGameFrLg = 0; + versionId = 0; else if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - isGameFrLg = 2; + versionId = 2; - // If trading with FRLG, both players must be champion - if (isGameFrLg > 0) + // If trading with FRLG, both players must have progessed the story enough + if (versionId > 0) { // Is player champion if (gLinkPlayers[GetMultiplayerId()].progressFlagsCopy & 0xF0) { - if (isGameFrLg == 2) //unnecessary check, isGameFrLg always 2 here + if (versionId == 2) // Check is only relevant in FRLG, this will always be true { - // Is partner champion + // Has FRLG partner finished the Sevii Islands if (gLinkPlayers[GetMultiplayerId() ^ 1].progressFlagsCopy & 0xF0) return TRADE_BOTH_PLAYERS_READY; else @@ -2438,17 +2504,18 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) { bool8 playerHasNationalDex = player.hasNationalDex; - bool8 playerIsChampion = player.isChampion; + bool8 playerCanLinkNationally = player.canLinkNationally; bool8 partnerHasNationalDex = partner.hasNationalDex; - bool8 partnerIsChampion = partner.isChampion; + bool8 partnerCanLinkNationally = partner.canLinkNationally; u8 partnerVersion = partner.version; - // If partner is not using Emerald, both players must be champion + // If partner is not using Emerald, both players must have progressed the story + // to a certain point (becoming champion in RSE, finishing the Sevii islands in FRLG) if (partnerVersion != VERSION_EMERALD) { - if (!playerIsChampion) + if (!playerCanLinkNationally) return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1; - else if (!partnerIsChampion) + else if (!partnerCanLinkNationally) return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2; } @@ -4377,14 +4444,14 @@ static void UpdateTradeFinishFlags(void) SetMainCallback2(CB2_TryLinkTradeEvolution); if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE) - sTradeData->playerLinkFlagFinishTrade = READY_FINISH_TRADE; + sTradeData->playerLinkFlagFinishTrade = STATUS_READY; ResetBlockReceivedFlag(0); } if (blockReceivedStatus & 0x02) { if (gBlockRecvBuffer[1][0] == LINKCMD_READY_FINISH_TRADE) - sTradeData->partnerLinkFlagFinishTrade = READY_FINISH_TRADE; + sTradeData->partnerLinkFlagFinishTrade = STATUS_READY; ResetBlockReceivedFlag(1); } @@ -4596,13 +4663,13 @@ static void CB2_TryFinishTrade(void) { UpdateTradeFinishFlags(); if (mpId == 0 - && sTradeData->playerLinkFlagFinishTrade == READY_FINISH_TRADE - && sTradeData->partnerLinkFlagFinishTrade == READY_FINISH_TRADE) + && sTradeData->playerLinkFlagFinishTrade == STATUS_READY + && sTradeData->partnerLinkFlagFinishTrade == STATUS_READY) { sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); - sTradeData->playerLinkFlagFinishTrade = FINISH_TRADE; - sTradeData->partnerLinkFlagFinishTrade = FINISH_TRADE; + sTradeData->playerLinkFlagFinishTrade = STATUS_CANCEL; + sTradeData->partnerLinkFlagFinishTrade = STATUS_CANCEL; } } RunTasks(); diff --git a/src/trainer_see.c b/src/trainer_see.c index b333e03241..44bc774f5d 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -689,8 +689,8 @@ void TryPrepareSecondApproachingTrainer(void) #define sLocalId data[0] #define sMapNum data[1] #define sMapGroup data[2] -#define sData3 data[3] -#define sData4 data[4] +#define sYVelocity data[3] +#define sYOffset data[4] #define sFldEffId data[7] u8 FldEff_ExclamationMarkIcon(void) @@ -736,7 +736,7 @@ static void SetIconSpriteData(struct Sprite *sprite, u16 fldEffId, u8 spriteAnim sprite->sLocalId = gFieldEffectArguments[0]; sprite->sMapNum = gFieldEffectArguments[1]; sprite->sMapGroup = gFieldEffectArguments[2]; - sprite->sData3 = -5; + sprite->sYVelocity = -5; sprite->sFldEffId = fldEffId; StartSpriteAnim(sprite, spriteAnimNum); @@ -754,23 +754,23 @@ static void SpriteCB_TrainerIcons(struct Sprite *sprite) else { struct Sprite *objEventSprite = &gSprites[gObjectEvents[objEventId].spriteId]; - sprite->sData4 += sprite->sData3; + sprite->sYOffset += sprite->sYVelocity; sprite->x = objEventSprite->x; sprite->y = objEventSprite->y - 16; sprite->x2 = objEventSprite->x2; - sprite->y2 = objEventSprite->y2 + sprite->sData4; - if (sprite->sData4) - sprite->sData3++; + sprite->y2 = objEventSprite->y2 + sprite->sYOffset; + if (sprite->sYOffset) + sprite->sYVelocity++; else - sprite->sData3 = 0; + sprite->sYVelocity = 0; } } #undef sLocalId #undef sMapNum #undef sMapGroup -#undef sData3 -#undef sData4 +#undef sYVelocity +#undef sYOffset #undef sFldEffId u8 GetCurrentApproachingTrainerObjectEventId(void) diff --git a/src/union_room.c b/src/union_room.c index aad8dbaa9e..e1c80468de 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1271,7 +1271,7 @@ static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *data, { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return UR_TRADE_PLAYER_NOT_READY; - else if (partner->rfu.data.compatibility.isChampion) + else if (partner->rfu.data.compatibility.canLinkNationally) return UR_TRADE_READY; } else From ae482ed1f4648fb5f09e0c4c382ff401ce2cec96 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 12 Dec 2022 21:08:46 -0300 Subject: [PATCH 022/290] Implemented Ceaseless Edge's effect --- data/battle_scripts_1.s | 35 +++++++++++++++++++++++++ include/constants/battle_move_effects.h | 3 ++- src/data/battle_moves.h | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 94a220608a..d1d1e670f3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -416,6 +416,18 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectDoubleShock @ EFFECT_DOUBLE_SHOCK .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE + .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + +BattleScript_EffectCeaselessEdge:: + call BattleScript_EffectHit_Ret + trysetspikes BattleScript_ButItFailedAtkStringPpReduce + attackstring + ppreduce + attackanimation + waitanimation + printstring STRINGID_SPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_AffectionBasedEndurance:: playanimation BS_TARGET, B_ANIM_AFFECTION_HANGED_ON @@ -3029,6 +3041,29 @@ BattleScript_MoveEnd:: moveendall end +BattleScript_EffectHit_Ret:: + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET + return + BattleScript_EffectNaturalGift: attackcanceler attackstring diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 5af1017a9d..1ac102c35b 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -397,7 +397,8 @@ #define EFFECT_DOUBLE_SHOCK 391 #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 +#define EFFECT_CEASELESS_EDGE 394 -#define NUM_BATTLE_MOVE_EFFECTS 394 +#define NUM_BATTLE_MOVE_EFFECTS 395 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index ef4d150396..225da6ff71 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13598,7 +13598,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CEASELESS_EDGE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_CEASELESS_EDGE, + .effect = EFFECT_CEASELESS_EDGE, .power = 65, .type = TYPE_DARK, .accuracy = 90, From 3ce486976640d517f34188be08124bce9461d33a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 12 Dec 2022 21:41:13 -0300 Subject: [PATCH 023/290] Implemented Shell Trap's effect --- data/battle_scripts_1.s | 18 ++++++++++++++++++ include/battle_scripts.h | 1 + include/constants/battle_move_effects.h | 3 ++- include/constants/battle_string_ids.h | 4 +++- src/battle_main.c | 13 ++++++++----- src/battle_message.c | 4 ++++ src/battle_script_commands.c | 7 ++++--- src/data/battle_moves.h | 2 +- 8 files changed, 41 insertions(+), 11 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d1d1e670f3..f2a0223cf4 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,6 +417,24 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + +BattleScript_EffectShellTrap: + jumpifnodamage BattleScript_EffectShellTrap_Failed + goto BattleScript_EffectHit + +BattleScript_EffectShellTrap_Failed: + printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + +BattleScript_ShellTrapSetUp:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 1 + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + printstring STRINGID_ATTACKERSETASHELLTRAP + waitmessage B_WAIT_TIME_LONG + end2 BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 75afdbf633..89ad9302bb 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -433,6 +433,7 @@ extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_DoubleShockRemoveType[]; +extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 1ac102c35b..c16084c308 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,7 +398,8 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 +#define EFFECT_SHELL_TRAP 395 -#define NUM_BATTLE_MOVE_EFFECTS 395 +#define NUM_BATTLE_MOVE_EFFECTS 396 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 8dd94cca4d..64ddcbebd5 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -632,8 +632,10 @@ #define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 +#define STRINGID_ATTACKERSETASHELLTRAP 633 +#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634 -#define BATTLESTRINGS_COUNT 633 +#define BATTLESTRINGS_COUNT 635 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_main.c b/src/battle_main.c index d138cf2311..8ba87133eb 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +static void CheckChosenMoveForEffectsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +static void CheckChosenMoveForEffectsBeforeTurnStarts(void) { u32 i; @@ -4921,7 +4921,7 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch(gChosenMoveByBattler[gActiveBattler]) + switch (gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -4929,6 +4929,9 @@ static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; + case MOVE_SHELL_TRAP: + BattleScriptExecute(BattleScript_ShellTrapSetUp); + return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 031261a289..60578897e7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -761,9 +761,13 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); +static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!"); +static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork, + [STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9c780c28ee..3d85d13795 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10031,7 +10031,7 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = gLastUsedItem; break; case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; + gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; break; case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); @@ -11926,8 +11926,9 @@ static void Cmd_trysetencore(void) } if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE + || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) { i = MAX_MON_MOVES; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 225da6ff71..6badf0ee51 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, + .effect = EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, From 2cb9400ef0b6b732da416d10a12065ffd38191e4 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 13 Dec 2022 02:19:41 -0300 Subject: [PATCH 024/290] Implemented Dire Claw's effect --- data/battle_scripts_1.s | 5 +++++ include/constants/battle.h | 3 ++- include/constants/battle_move_effects.h | 3 ++- src/battle_script_commands.c | 16 ++++++++++++++++ src/data/battle_moves.h | 4 ++-- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f2a0223cf4..b3313abbe1 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,6 +418,11 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW + +BattleScript_EffectDireClaw:: + setmoveeffect MOVE_EFFECT_DIRE_CLAW + goto BattleScript_EffectHit BattleScript_EffectShellTrap: jumpifnodamage BattleScript_EffectShellTrap_Failed diff --git a/include/constants/battle.h b/include/constants/battle.h index be44c21cbe..fa9d4bd186 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -371,8 +371,9 @@ #define MOVE_EFFECT_RELIC_SONG 69 #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 +#define MOVE_EFFECT_DIRE_CLAW 72 -#define NUM_MOVE_EFFECTS 72 +#define NUM_MOVE_EFFECTS 73 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index c16084c308..fa3184855b 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,7 +399,8 @@ #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 #define EFFECT_SHELL_TRAP 395 +#define EFFECT_DIRE_CLAW 396 -#define NUM_BATTLE_MOVE_EFFECTS 396 +#define NUM_BATTLE_MOVE_EFFECTS 397 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3d85d13795..e5d7935fd5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3647,6 +3647,22 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; + case MOVE_EFFECT_DIRE_CLAW: + if (gBattleMons[gEffectBattler].status1) + { + gBattlescriptCurrInstr++; + } + else + { + DIRE_CLAW_STATUS_PICK: + gBattleScripting.moveEffect = Random() % 6; + if (gBattleScripting.moveEffect == MOVE_EFFECT_NONE + || gBattleScripting.moveEffect == MOVE_EFFECT_BURN + || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) + goto DIRE_CLAW_STATUS_PICK; + SetMoveEffect(FALSE, 0); + } + break; } } } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6badf0ee51..6481b7d450 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13279,11 +13279,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #else .power = 60, #endif - .effect = EFFECT_PLACEHOLDER, // EFFECT_DIRE_CLAW, + .effect = EFFECT_DIRE_CLAW, .type = TYPE_POISON, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, From 1229fa752a3b711e802f401e4a5e09d3160b9bfd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 14 Dec 2022 09:14:40 -0300 Subject: [PATCH 025/290] Fixed Triple Axe's target, added its effect and fixed Ceaseless Edge's --- data/battle_scripts_1.s | 12 ++++++++---- include/constants/battle_move_effects.h | 3 ++- src/data/battle_moves.h | 4 ++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b3313abbe1..6224638309 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -419,6 +419,14 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW + .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE + +BattleScript_EffectStoneAxe:: + call BattleScript_EffectHit_Ret + setstealthrock BattleScript_ButItFailed + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW @@ -444,10 +452,6 @@ BattleScript_ShellTrapSetUp:: BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret trysetspikes BattleScript_ButItFailedAtkStringPpReduce - attackstring - ppreduce - attackanimation - waitanimation printstring STRINGID_SPIKESSCATTERED waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index fa3184855b..16aac52843 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -400,7 +400,8 @@ #define EFFECT_CEASELESS_EDGE 394 #define EFFECT_SHELL_TRAP 395 #define EFFECT_DIRE_CLAW 396 +#define EFFECT_STONE_AXE 397 -#define NUM_BATTLE_MOVE_EFFECTS 397 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 6481b7d450..22b695fc43 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13326,13 +13326,13 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STONE_AXE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_STONE_AXE, + .effect = EFFECT_STONE_AXE, .power = 65, .type = TYPE_ROCK, .accuracy = 90, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_USER, + .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, From 4bb86c5d961a68da83f5798a0dd06be4a8507c97 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 14 Dec 2022 09:33:09 -0300 Subject: [PATCH 026/290] Implemented Barb Barrage's effect --- data/battle_scripts_1.s | 2 ++ include/constants/battle_move_effects.h | 3 ++- src/battle_util.c | 4 ++++ src/data/battle_moves.h | 10 +++++++--- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6224638309..ec604ebc62 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -420,6 +420,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE + .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE BattleScript_EffectStoneAxe:: call BattleScript_EffectHit_Ret @@ -3265,6 +3266,7 @@ BattleScript_CantMakeAsleep:: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd +BattleScript_EffectBarbBarrage: BattleScript_EffectPoisonHit: setmoveeffect MOVE_EFFECT_POISON goto BattleScript_EffectHit diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 16aac52843..f51ae08c18 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -401,7 +401,8 @@ #define EFFECT_SHELL_TRAP 395 #define EFFECT_DIRE_CLAW 396 #define EFFECT_STONE_AXE 397 +#define EFFECT_BARB_BARRAGE 398 -#define NUM_BATTLE_MOVE_EFFECTS 398 +#define NUM_BATTLE_MOVE_EFFECTS 399 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/src/battle_util.c b/src/battle_util.c index 00e3b869b1..08eea7f41d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8483,6 +8483,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; + case EFFECT_BARB_BARRAGE: + if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) + basePower *= 2; + break; } // Move-specific base power changes diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 22b695fc43..227f77daf8 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13490,12 +13490,16 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_BARB_BARRAGE] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_BARB_BARRAGE, + .effect = EFFECT_BARB_BARRAGE, .power = 60, .type = TYPE_POISON, .accuracy = 100, - .pp = 15, - .secondaryEffectChance = 0, + #if B_UPDATED_MOVE_DATA >= GEN_9 + .pp = 10, + #else + .pp = 15, + #endif + .secondaryEffectChance = 50, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, From 9972cce0ec3ad30c7acf2c853aec3fc996a93833 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 21 Dec 2022 20:05:10 -0300 Subject: [PATCH 027/290] Updated MOVE_EFFECT_DIRE_CLAW --- src/battle_script_commands.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index e5d7935fd5..bb0d201992 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3656,7 +3656,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { DIRE_CLAW_STATUS_PICK: gBattleScripting.moveEffect = Random() % 6; - if (gBattleScripting.moveEffect == MOVE_EFFECT_NONE + if (gBattleScripting.moveEffect == 0 || gBattleScripting.moveEffect == MOVE_EFFECT_BURN || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) goto DIRE_CLAW_STATUS_PICK; From 0159065deaf90c3d8296c1ecca6b2912fdc6a8b9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 28 Dec 2022 07:51:11 -0300 Subject: [PATCH 028/290] Removed Shell Trap It's time to let it go for my own mental sanity. Besides, it's a Gen. 7 move. I shouldn't have added it here. --- data/battle_scripts_1.s | 18 ------------------ include/battle_scripts.h | 1 - include/constants/battle_move_effects.h | 9 ++++----- include/constants/battle_string_ids.h | 4 +--- src/battle_main.c | 13 +++++-------- src/battle_message.c | 4 ---- src/battle_script_commands.c | 5 ++--- src/data/battle_moves.h | 2 +- 8 files changed, 13 insertions(+), 43 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ec604ebc62..49d06a033d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,6 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE @@ -433,23 +432,6 @@ BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit -BattleScript_EffectShellTrap: - jumpifnodamage BattleScript_EffectShellTrap_Failed - goto BattleScript_EffectHit - -BattleScript_EffectShellTrap_Failed: - printstring STRINGID_ATTACKERSHELLTRAPDIDNTWORK - waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd - -BattleScript_ShellTrapSetUp:: - printstring STRINGID_EMPTYSTRING3 - waitmessage 1 - playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL - printstring STRINGID_ATTACKERSETASHELLTRAP - waitmessage B_WAIT_TIME_LONG - end2 - BattleScript_EffectCeaselessEdge:: call BattleScript_EffectHit_Ret trysetspikes BattleScript_ButItFailedAtkStringPpReduce diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 89ad9302bb..75afdbf633 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -433,7 +433,6 @@ extern const u8 BattleScript_MultiHitPrintStrings[]; extern const u8 BattleScript_BurnUpRemoveType[]; extern const u8 BattleScript_TargetAbilityStatRaiseRet[]; extern const u8 BattleScript_DoubleShockRemoveType[]; -extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index f51ae08c18..423fa9a58c 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,11 +398,10 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 392 #define EFFECT_VICTORY_DANCE 393 #define EFFECT_CEASELESS_EDGE 394 -#define EFFECT_SHELL_TRAP 395 -#define EFFECT_DIRE_CLAW 396 -#define EFFECT_STONE_AXE 397 -#define EFFECT_BARB_BARRAGE 398 +#define EFFECT_DIRE_CLAW 395 +#define EFFECT_STONE_AXE 396 +#define EFFECT_BARB_BARRAGE 397 -#define NUM_BATTLE_MOVE_EFFECTS 399 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 64ddcbebd5..8dd94cca4d 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -632,10 +632,8 @@ #define STRINGID_TARGETTOUGHEDITOUT 630 #define STRINGID_ATTACKERLOSTELECTRICTYPE 631 #define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 632 -#define STRINGID_ATTACKERSETASHELLTRAP 633 -#define STRINGID_ATTACKERSHELLTRAPDIDNTWORK 634 -#define BATTLESTRINGS_COUNT 635 +#define BATTLESTRINGS_COUNT 633 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_main.c b/src/battle_main.c index 8ba87133eb..d138cf2311 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -101,7 +101,7 @@ static void SetActionsAndBattlersTurnOrder(void); static void UpdateBattlerPartyOrdersOnSwitch(void); static bool8 AllAtActionConfirmed(void); static void TryChangeTurnOrder(void); -static void CheckChosenMoveForEffectsBeforeTurnStarts(void); +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); static void CheckMegaEvolutionBeforeTurn(void); static void CheckQuickClaw_CustapBerryActivation(void); static void FreeResetData_ReturnToOvOrDoEvolutions(void); @@ -4878,7 +4878,7 @@ static void CheckMegaEvolutionBeforeTurn(void) } #if B_MEGA_EVO_TURN_ORDER <= GEN_6 - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; #else gBattleMainFunc = TryChangeTurnOrder; // This will just do nothing if no mon has mega evolved @@ -4903,11 +4903,11 @@ static void TryChangeTurnOrder(void) } } } - gBattleMainFunc = CheckChosenMoveForEffectsBeforeTurnStarts; + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; gBattleStruct->focusPunchBattlerId = 0; } -static void CheckChosenMoveForEffectsBeforeTurnStarts(void) +static void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { u32 i; @@ -4921,7 +4921,7 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) && !(gDisableStructs[gBattlerAttacker].truantCounter) && !(gProtectStructs[gActiveBattler].noValidMoves)) { - switch (gChosenMoveByBattler[gActiveBattler]) + switch(gChosenMoveByBattler[gActiveBattler]) { case MOVE_FOCUS_PUNCH: BattleScriptExecute(BattleScript_FocusPunchSetUp); @@ -4929,9 +4929,6 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; - case MOVE_SHELL_TRAP: - BattleScriptExecute(BattleScript_ShellTrapSetUp); - return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 60578897e7..031261a289 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -761,13 +761,9 @@ static const u8 sText_AttackerMeltedTheIce[] = _("{B_ATK_NAME_WITH_PREFIX} melte static const u8 sText_TargetToughedItOut[] = _("{B_DEF_NAME_WITH_PREFIX} toughed it out\nto show you its best side!"); static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} used up all\nof its electricity!"); static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!"); -static const u8 sText_AttackerSetAShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set\na shell trap!"); -static const u8 sText_AttackerShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap\ndidn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { - [STRINGID_ATTACKERSHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_AttackerShellTrapDidntWork, - [STRINGID_ATTACKERSETASHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_AttackerSetAShellTrap, [STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget, [STRINGID_TARGETTOUGHEDITOUT - BATTLESTRINGS_TABLE_START] = sText_TargetToughedItOut, [STRINGID_ATTACKERMELTEDTHEICE - BATTLESTRINGS_TABLE_START] = sText_AttackerMeltedTheIce, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bb0d201992..6e0f4c05dd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10047,7 +10047,7 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].item = gLastUsedItem; break; case VARIOUS_SET_BEAK_BLAST: - gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; + gProtectStructs[gBattlerAttacker].beakBlastCharge = TRUE; break; case VARIOUS_SWAP_SIDE_STATUSES: CourtChangeSwapSideStatuses(); @@ -11943,8 +11943,7 @@ static void Cmd_trysetencore(void) if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE - || gLastMoves[gBattlerTarget] == MOVE_SHELL_TRAP) + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { i = MAX_MON_MOVES; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 227f77daf8..40663a4216 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11616,7 +11616,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_SHELL_TRAP, + .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, From f5c165ff0ccc0801ff0a9b93619103cc81940f91 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 28 Dec 2022 08:18:15 -0300 Subject: [PATCH 029/290] Updated Dire Claw's effect again Thanks to MGriffin for providing a much nicer code for it. --- src/battle_script_commands.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6e0f4c05dd..df995ef60b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3654,13 +3654,9 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - DIRE_CLAW_STATUS_PICK: - gBattleScripting.moveEffect = Random() % 6; - if (gBattleScripting.moveEffect == 0 - || gBattleScripting.moveEffect == MOVE_EFFECT_BURN - || gBattleScripting.moveEffect == MOVE_EFFECT_FREEZE) - goto DIRE_CLAW_STATUS_PICK; - SetMoveEffect(FALSE, 0); + static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; + gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; + SetMoveEffect(TRUE, 0); } break; } @@ -11942,8 +11938,8 @@ static void Cmd_trysetencore(void) } if (gLastMoves[gBattlerTarget] == MOVE_STRUGGLE - || gLastMoves[gBattlerTarget] == MOVE_ENCORE - || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) + || gLastMoves[gBattlerTarget] == MOVE_ENCORE + || gLastMoves[gBattlerTarget] == MOVE_MIRROR_MOVE) { i = MAX_MON_MOVES; } From 9a6bdfb74f50d9133860944c8824382d907aba4c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:13:34 -0300 Subject: [PATCH 030/290] Added AI conditionals for the new move effects in this batch --- src/battle_ai_main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 92866a7c2c..5ec8e91aa4 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1486,6 +1486,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_SPIKES: + case EFFECT_CEASELESS_EDGE: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) score -= 10; else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) @@ -1493,6 +1494,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: + case EFFECT_STONE_AXE: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks score -= 10; @@ -3472,6 +3474,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_TOXIC: case EFFECT_POISON: + case EFFECT_BARB_BARRAGE: IncreasePoisonScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_LIGHT_SCREEN: @@ -3865,7 +3868,9 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SPIKES: + case EFFECT_CEASELESS_EDGE: case EFFECT_STEALTH_ROCK: + case EFFECT_STONE_AXE: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) @@ -4596,6 +4601,10 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; }*/ break; + case EFFECT_DIRE_CLAW: + if (gBattleMons[battlerDef].status1 & STATUS1_NONE) + score += 3; + break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) score += 3; @@ -4900,6 +4909,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_HAIL: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: + case EFFECT_STONE_AXE: score += 2; break; default: From 2414283bb76739b5f24e0926a08e9366744a196d Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:32:17 -0300 Subject: [PATCH 031/290] Removed BattleScript_EffectHit_Ret --- data/battle_scripts_1.s | 71 +++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 27 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d606809ed9..d64336638b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -423,22 +423,62 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE BattleScript_EffectStoneAxe:: - call BattleScript_EffectHit_Ret + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET setstealthrock BattleScript_ButItFailed printstring STRINGID_POINTEDSTONESFLOAT waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendall + end BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit BattleScript_EffectCeaselessEdge:: - call BattleScript_EffectHit_Ret + attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE + attackstring + ppreduce + critcalc + damagecalc + adjustdamage + attackanimation + waitanimation + effectivenesssound + hitanimation BS_TARGET + waitstate + healthbarupdate BS_TARGET + datahpupdate BS_TARGET + critmessage + waitmessage B_WAIT_TIME_LONG + resultmessage + waitmessage B_WAIT_TIME_LONG + seteffectwithchance + tryfaintmon BS_TARGET trysetspikes BattleScript_ButItFailedAtkStringPpReduce printstring STRINGID_SPIKESSCATTERED waitmessage B_WAIT_TIME_LONG - goto BattleScript_MoveEnd + moveendall + end BattleScript_EffectTeatime:: attackcanceler @@ -3151,29 +3191,6 @@ BattleScript_MoveEnd:: moveendall end -BattleScript_EffectHit_Ret:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - seteffectwithchance - tryfaintmon BS_TARGET - return - BattleScript_EffectNaturalGift: attackcanceler attackstring From 7e398ce80e1858833d33110e469becd5c7c334f9 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 4 Jan 2023 12:45:49 -0300 Subject: [PATCH 032/290] Corrected the AI conditionals --- src/battle_ai_main.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 5ec8e91aa4..2f9690250c 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1486,7 +1486,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_SPIKES: - case EFFECT_CEASELESS_EDGE: if (gSideTimers[GetBattlerSide(battlerDef)].spikesAmount >= 3) score -= 10; else if (PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove) @@ -1494,7 +1493,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score -= 10; // only one mon needs to set up the last layer of Spikes break; case EFFECT_STEALTH_ROCK: - case EFFECT_STONE_AXE: if (gSideTimers[GetBattlerSide(battlerDef)].stealthRockAmount > 0 || PartnerMoveIsSameNoTarget(BATTLE_PARTNER(battlerAtk), move, AI_DATA->partnerMove)) //Only one mon needs to set up Stealth Rocks score -= 10; @@ -4601,10 +4599,6 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; }*/ break; - case EFFECT_DIRE_CLAW: - if (gBattleMons[battlerDef].status1 & STATUS1_NONE) - score += 3; - break; case EFFECT_FEINT: if (gBattleMoves[predictedMove].effect == EFFECT_PROTECT) score += 3; From 72566e63230497ebf8533d8b254ea33ba7f9216a Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 5 Jan 2023 03:01:18 -0300 Subject: [PATCH 033/290] Turned Stone Axe's and Ceaseless Edge's effects into MOVE_EFFECTs --- data/battle_scripts_1.s | 24 ++++++++++++++++-------- include/battle_scripts.h | 2 ++ include/constants/battle.h | 4 +++- src/battle_script_commands.c | 20 ++++++++++++++++++++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d64336638b..238c0e21bd 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -441,14 +441,18 @@ BattleScript_EffectStoneAxe:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - seteffectwithchance tryfaintmon BS_TARGET - setstealthrock BattleScript_ButItFailed - printstring STRINGID_POINTEDSTONESFLOAT - waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_STEALTH_ROCK + seteffectprimary moveendall end +BattleScript_StealthRockActivates:: + setstealthrock BattleScript_MoveEnd + printstring STRINGID_POINTEDSTONESFLOAT + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit @@ -472,14 +476,18 @@ BattleScript_EffectCeaselessEdge:: waitmessage B_WAIT_TIME_LONG resultmessage waitmessage B_WAIT_TIME_LONG - seteffectwithchance tryfaintmon BS_TARGET - trysetspikes BattleScript_ButItFailedAtkStringPpReduce - printstring STRINGID_SPIKESSCATTERED - waitmessage B_WAIT_TIME_LONG + setmoveeffect MOVE_EFFECT_SPIKES + seteffectprimary moveendall end +BattleScript_SpikesActivate:: + trysetspikes BattleScript_MoveEnd + printstring STRINGID_SPIKESSCATTERED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectTeatime:: attackcanceler attackstring diff --git a/include/battle_scripts.h b/include/battle_scripts.h index d79566a44b..55caf9022f 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -448,6 +448,8 @@ extern const u8 BattleScript_SupremeOverlordActivates[]; extern const u8 BattleScript_CostarActivates[]; extern const u8 BattleScript_ToxicDebrisActivates[]; extern const u8 BattleScript_EarthEaterActivates[]; +extern const u8 BattleScript_StealthRockActivates[]; +extern const u8 BattleScript_SpikesActivate[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index fa9d4bd186..e7e65951b1 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -372,8 +372,10 @@ #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 #define MOVE_EFFECT_DIRE_CLAW 72 +#define MOVE_EFFECT_STEALTH_ROCK 73 +#define MOVE_EFFECT_SPIKES 74 -#define NUM_MOVE_EFFECTS 73 +#define NUM_MOVE_EFFECTS 75 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fcf09641f5..9a8a2cabf6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2789,6 +2789,7 @@ void SetMoveEffect(bool32 primary, u32 certain) bool32 mirrorArmorReflected = (GetBattlerAbility(gBattlerTarget) == ABILITY_MIRROR_ARMOR); u32 flags = 0; u16 battlerAbility; + bool8 activateAfterFaint = FALSE; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0 @@ -2806,6 +2807,10 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattleStruct->moveEffect2 = gBattleScripting.moveEffect; gBattlescriptCurrInstr++; return; + case MOVE_EFFECT_STEALTH_ROCK: + case MOVE_EFFECT_SPIKES: + activateAfterFaint = TRUE; + break; } if (gBattleScripting.moveEffect & MOVE_EFFECT_AFFECTS_USER) @@ -2838,6 +2843,7 @@ void SetMoveEffect(bool32 primary, u32 certain) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 + && !activateAfterFaint && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM && gBattleScripting.moveEffect != MOVE_EFFECT_BUG_BITE) @@ -3659,6 +3665,20 @@ void SetMoveEffect(bool32 primary, u32 certain) SetMoveEffect(TRUE, 0); } break; + case MOVE_EFFECT_STEALTH_ROCK: + if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_StealthRockActivates; + } + break; + case MOVE_EFFECT_SPIKES: + if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) + { + BattleScriptPush(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = BattleScript_SpikesActivate; + } + break; } } } From f39f48fc5102c10eeed978e9832f501c607e64d5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 5 Jan 2023 03:07:28 -0300 Subject: [PATCH 034/290] Made MOVE_EFFECT_DIRE_CLAW a tiny bit prettier --- src/battle_script_commands.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9a8a2cabf6..74e5f31ef0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3654,11 +3654,7 @@ void SetMoveEffect(bool32 primary, u32 certain) gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; case MOVE_EFFECT_DIRE_CLAW: - if (gBattleMons[gEffectBattler].status1) - { - gBattlescriptCurrInstr++; - } - else + if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; From b873d69679933181d29c69122c1c179141fef44a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 15 Dec 2022 16:00:53 -0500 Subject: [PATCH 035/290] Sync trade anim --- include/constants/trade.h | 2 - src/data/trade.h | 30 +- src/trade.c | 1760 ++++++++++++++++++------------------- 3 files changed, 884 insertions(+), 908 deletions(-) diff --git a/include/constants/trade.h b/include/constants/trade.h index 0f205d6d2f..df1f8d279c 100644 --- a/include/constants/trade.h +++ b/include/constants/trade.h @@ -4,8 +4,6 @@ #define TRADE_PLAYER 0 #define TRADE_PARTNER 1 -#define LINK_TRADE_TIMEOUT 300 - // In-game Trade IDs #define INGAME_TRADE_SEEDOT 0 #define INGAME_TRADE_PLUSLE 1 diff --git a/src/data/trade.h b/src/data/trade.h index 433e362478..ef7e9231de 100644 --- a/src/data/trade.h +++ b/src/data/trade.h @@ -287,15 +287,15 @@ static const u8 sCursorMoveDestinations[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] = { // Player's party - {COL0_X, ROW0_Y }, - {COL1_X, ROW0_Y }, + {COL0_X, ROW0_Y}, + {COL1_X, ROW0_Y}, {COL0_X, ROW1_Y}, {COL1_X, ROW1_Y}, {COL0_X, ROW2_Y}, {COL1_X, ROW2_Y}, // Partners's party - {COL2_X, ROW0_Y }, - {COL3_X, ROW0_Y }, + {COL2_X, ROW0_Y}, + {COL3_X, ROW0_Y}, {COL2_X, ROW1_Y}, {COL3_X, ROW1_Y}, {COL2_X, ROW2_Y}, @@ -624,8 +624,8 @@ static const u8 sSelectedMonLevelGenderCoords[3][2] = static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/trade/pokeball.gbapal"); static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/trade/pokeball.4bpp"); static const u8 sPokeballSymbol_Gfx[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // unused -static const u16 sCrossingHighlightCable_Tilemap[] = INCBIN_U16("graphics/trade/crossing_highlight_cable.bin"); -static const u16 sTradeTilemap_PokeBallSymbol[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused? +static const u16 sCableCloseup_Map[] = INCBIN_U16("graphics/trade/crossing_highlight_cable.bin"); +static const u16 sPokeballSymbol_Map[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused? static const u16 sUnusedPal1[] = INCBIN_U16("graphics/trade/unused1.gbapal"); static const u16 sGba_Pal[] = INCBIN_U16("graphics/trade/gba.gbapal"); static const u16 sUnusedPal2[] = INCBIN_U16("graphics/trade/unused2.gbapal"); @@ -638,11 +638,11 @@ static const u8 sGbaScreen_Gfx[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); const u16 gTradePlatform_Tilemap[] = INCBIN_U16("graphics/trade/platform.bin"); static const u8 sGbaAffine_Gfx[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); // Only the gfx for when the GBA is zooming in/out static const u8 sEmptyGfx[64] = {}; -static const u8 sGbaCable_AffineTilemap[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); -static const u8 sGbaWireless_AffineTilemap[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); -static const u16 sGbaWireless_Tilemap[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); -static const u16 sGbaCable_Tilemap[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -static const u32 sCrossingHighlightWireless_Tilemap[] = INCBIN_U32("graphics/trade/crossing_highlight_wireless.bin.lz"); +static const u8 sGbaAffineMapCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +static const u8 sGbaAffineMapWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +static const u16 sGbaMapWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +static const u16 sGbaMapCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +static const u32 sWirelessCloseup_Map[] = INCBIN_U32("graphics/trade/crossing_highlight_wireless.bin.lz"); static const u16 sWirelessSignalSend_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); static const u16 sWirelessSignalRecv_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); static const u16 sWirelessSignalNone_Pal[] = INCBIN_U16("graphics/trade/wireless_signal_none.gbapal"); @@ -730,7 +730,7 @@ static const union AffineAnimCmd *const sAffineAnims_Pokeball[] = static const struct SpriteSheet sPokeBallSpriteSheet = { .data = sPokeball_Gfx, - .size = 0x600, + .size = sizeof(sPokeball_Gfx), .tag = GFXTAG_POKEBALL }; @@ -786,7 +786,7 @@ static const union AffineAnimCmd *const sAffineAnims_LinkMonGlow[] = static const struct SpriteSheet sSpriteSheet_LinkMonGlow = { .data = sLinkMonGlow_Gfx, - .size = 0x200, + .size = sizeof(sLinkMonGlow_Gfx), .tag = GFXTAG_LINK_MON_GLOW }; @@ -943,7 +943,7 @@ static const union AnimCmd *const sAnims_GbaScreen_Short[] = static const struct SpriteSheet sSpriteSheet_GbaScreen = { .data = sGbaScreen_Gfx, - .size = 0x1000, + .size = sizeof(sGbaScreen_Gfx), .tag = GFXTAG_GBA_SCREEN }; @@ -1166,7 +1166,7 @@ static const s8 sTradeBallVerticalVelocityTable[] = 0, 0, 0, 1, 0, 1, 1, 2, 3 }; -static const u8 sWirelessSignalTiming[][2] = +static const u8 sWirelessSignalAnimParams[][2] = { { 0, 1}, { 1, 1}, diff --git a/src/trade.c b/src/trade.c index 1032d0d5df..b95cdd2356 100644 --- a/src/trade.c +++ b/src/trade.c @@ -148,19 +148,19 @@ enum { #define DRAW_SELECTED_FINISH 5 struct InGameTrade { - /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0C*/ u16 species; - /*0x0E*/ u8 ivs[NUM_STATS]; - /*0x14*/ u8 abilityNum; - /*0x18*/ u32 otId; - /*0x1C*/ u8 conditions[CONTEST_CATEGORIES_COUNT]; - /*0x24*/ u32 personality; - /*0x28*/ u16 heldItem; - /*0x2A*/ u8 mailNum; - /*0x2B*/ u8 otName[11]; - /*0x36*/ u8 otGender; - /*0x37*/ u8 sheen; - /*0x38*/ u16 requestedSpecies; + u8 nickname[POKEMON_NAME_LENGTH + 1]; + u16 species; + u8 ivs[NUM_STATS]; + u8 abilityNum; + u32 otId; + u8 conditions[CONTEST_CATEGORIES_COUNT]; + u32 personality; + u16 heldItem; + u8 mailNum; + u8 otName[11]; + u8 otGender; + u8 sheen; + u16 requestedSpecies; }; static EWRAM_DATA u8 *sMenuTextTileBuffer = NULL; @@ -212,50 +212,50 @@ static EWRAM_DATA struct { } *sTradeMenu = NULL; static EWRAM_DATA struct { - /*0x00*/ struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon - /*0x64*/ u32 timer; - /*0x68*/ u32 monPersonalities[2]; - /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 playerLinkFlagFinishTrade; - /*0x73*/ u8 partnerLinkFlagFinishTrade; - /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 linkTimeoutZero1; - /*0x89*/ u8 linkTimeoutZero2; - /*0x8A*/ u16 linkTimeoutCounter; - /*0x8C*/ u16 neverRead_8C; - /*0x8E*/ u8 monSpriteIds[2]; - /*0x90*/ u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence - /*0x91*/ u8 connectionSpriteId2; - /*0x92*/ u8 cableEndSpriteId; - /*0x93*/ u8 sendTradeFinishState; - /*0x94*/ u16 state; - /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 releasePokeballSpriteId; - /*0xD3*/ u8 bouncingPokeballSpriteId; - /*0xD4*/ u16 texX; - /*0xD6*/ u16 texY; - /*0xD8*/ u16 neverRead_D8; - /*0xDA*/ u16 neverRead_DA; - /*0xDC*/ u16 scrX; - /*0xDE*/ u16 scrY; - /*0xE0*/ s16 bg1vofs; - /*0xE2*/ s16 bg1hofs; - /*0xE4*/ s16 bg2vofs; - /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 sXY; - /*0xEA*/ u16 gbaScale; - /*0xEC*/ u16 alpha; - /*0xEE*/ bool8 isLinkTrade; - /*0xF0*/ u16 monSpecies[2]; - /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 textColors[3]; - /*0xF9*/ u8 filler_F9; - /*0xFA*/ bool8 isCableTrade; - /*0xFB*/ u8 wirelessWinLeft; - /*0xFC*/ u8 wirelessWinTop; - /*0xFD*/ u8 wirelessWinRight; - /*0xFE*/ u8 wirelessWinBottom; -} *sTradeData = {NULL}; + struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon + u32 timer; + u32 monPersonalities[2]; + u8 filler_70[2]; + u8 playerFinishStatus; + u8 partnerFinishStatus; + u16 linkData[10]; + u8 linkTimeoutZero1; + u8 linkTimeoutZero2; + u16 linkTimeoutTimer; + u16 neverRead_8C; + u8 monSpriteIds[2]; + u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence + u8 connectionSpriteId2; + u8 cableEndSpriteId; + u8 scheduleLinkTransfer; + u16 state; + u8 filler_96[0x3C]; + u8 releasePokeballSpriteId; + u8 bouncingPokeballSpriteId; + u16 texX; + u16 texY; + u16 neverRead_D8; + u16 neverRead_DA; + u16 scrX; + u16 scrY; + s16 bg1vofs; + s16 bg1hofs; + s16 bg2vofs; + s16 bg2hofs; + u16 sXY; + u16 gbaScale; + u16 alpha; + bool8 isLinkTrade; + u16 monSpecies[2]; + u16 cachedMapMusic; + u8 textColors[3]; + u8 filler_F9; + bool8 isCableTrade; + u8 wirelessWinLeft; + u8 wirelessWinTop; + u8 wirelessWinRight; + u8 wirelessWinBottom; +} *sTradeAnim = NULL; static bool32 IsWirelessTrade(void); static void CB2_CreateTradeMenu(void); @@ -293,29 +293,29 @@ static void SpriteCB_LinkMonShadow(struct Sprite *); static void SpriteCB_CableEndSending(struct Sprite *); static void SpriteCB_CableEndReceiving(struct Sprite *); static void SpriteCB_GbaScreen(struct Sprite *); -static void InitTradeBgInternal(void); -static void CB2_UpdateInGameTrade(void); +static void TradeAnimInit_LoadGfx(void); +static void CB2_InGameTrade(void); static void SetTradeSequenceBgGpuRegs(u8); static void LoadTradeSequenceSpriteSheetsAndPalettes(void); static void BufferTradeSceneStrings(void); -static bool8 AnimateTradeSequence(void); -static bool8 AnimateTradeSequenceCable(void); -static bool8 AnimateTradeSequenceWireless(void); +static bool8 DoTradeAnim(void); +static bool8 DoTradeAnim_Cable(void); +static bool8 DoTradeAnim_Wireless(void); static void SpriteCB_BouncingPokeball(struct Sprite *); static void SpriteCB_BouncingPokeballDepart(struct Sprite *); static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *); static void SpriteCB_BouncingPokeballArrive(struct Sprite *); static void BufferInGameTradeMonName(void); -static void SetInGameTradeMail(struct Mail *, const struct InGameTrade *); +static void GetInGameTradeMail(struct Mail *, const struct InGameTrade *); static void CB2_UpdateLinkTrade(void); -static void CB2_TryFinishTrade(void); +static void CB2_WaitTradeComplete(void); static void CB2_SaveAndEndTrade(void); -static void CB2_FreeTradeData(void); +static void CB2_FreeTradeAnim(void); static void Task_InGameTrade(u8); static void CheckPartnersMonForRibbons(void); static void Task_AnimateWirelessSignal(u8); -static void Task_NarrowWindowForCrossing_Wireless(u8); -static void Task_NarrowWindowForCrossing_Cable(u8); +static void Task_OpenCenterWhiteColumn(u8); +static void Task_CloseCenterWhiteColumn(u8); static void CB2_SaveAndEndWirelessTrade(void); #include "data/trade.h" @@ -1028,7 +1028,7 @@ static void SetActiveMenuOptions(void) } else { - // Absent partner pokemno + // Absent partner pokemon sTradeMenu->optionsActive[i + PARTY_SIZE] = FALSE; } } @@ -2665,6 +2665,7 @@ static void SpriteCB_LinkMonGlowWireless(struct Sprite *sprite) } } +// Palette flash for trade glow core static void SpriteCB_LinkMonShadow(struct Sprite *sprite) { if (!sprite->data[1]) @@ -2709,7 +2710,7 @@ static void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, sTradeData->texX * 0x100, sTradeData->texY * 0x100, sTradeData->scrX, sTradeData->scrY, sTradeData->sXY, sTradeData->sXY, sTradeData->alpha); + DoBgAffineSet(&affine, sTradeAnim->texX * 0x100, sTradeAnim->texY * 0x100, sTradeAnim->scrX, sTradeAnim->scrY, sTradeAnim->sXY, sTradeAnim->sXY, sTradeAnim->alpha); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -2724,14 +2725,14 @@ static void SetTradeGpuRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeAnim->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeAnim->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeAnim->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeAnim->bg2hofs); } else { @@ -2739,7 +2740,7 @@ static void SetTradeGpuRegs(void) } } -static void VBlankCB_Trade(void) +static void VBlankCB_TradeAnim(void) { SetTradeGpuRegs(); LoadOam(); @@ -2747,30 +2748,30 @@ static void VBlankCB_Trade(void) TransferPlttBuffer(); } -static void ClearLinkTimeoutCounter(void) +static void ClearLinkTimeoutTimer(void) { - sTradeData->linkTimeoutCounter = 0; - sTradeData->linkTimeoutZero1 = 0; - sTradeData->linkTimeoutZero2 = 0; + sTradeAnim->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutZero1 = 0; + sTradeAnim->linkTimeoutZero2 = 0; } static void CheckForLinkTimeout(void) { - if (sTradeData->linkTimeoutZero1 == sTradeData->linkTimeoutZero2) - sTradeData->linkTimeoutCounter++; + if (sTradeAnim->linkTimeoutZero1 == sTradeAnim->linkTimeoutZero2) + sTradeAnim->linkTimeoutTimer++; else - sTradeData->linkTimeoutCounter = 0; + sTradeAnim->linkTimeoutTimer = 0; - if (sTradeData->linkTimeoutCounter > LINK_TRADE_TIMEOUT) + if (sTradeAnim->linkTimeoutTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); - sTradeData->linkTimeoutCounter = 0; - sTradeData->linkTimeoutZero2 = 0; - sTradeData->linkTimeoutZero1 = 0; + sTradeAnim->linkTimeoutTimer = 0; + sTradeAnim->linkTimeoutZero2 = 0; + sTradeAnim->linkTimeoutZero1 = 0; } - sTradeData->linkTimeoutZero2 = sTradeData->linkTimeoutZero1; + sTradeAnim->linkTimeoutZero2 = sTradeAnim->linkTimeoutZero1; } static u32 TradeGetMultiplayerId(void) @@ -2811,14 +2812,14 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[whichParty * 2 + B_POSITION_OPPONENT_LEFT], species, personality); LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - sTradeData->monSpecies[whichParty] = species; - sTradeData->monPersonalities[whichParty] = personality; + sTradeAnim->monSpecies[whichParty] = species; + sTradeAnim->monPersonalities[whichParty] = personality; break; case 1: SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - sTradeData->monSpriteIds[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[sTradeData->monSpriteIds[whichParty]].invisible = TRUE; - gSprites[sTradeData->monSpriteIds[whichParty]].callback = SpriteCallbackDummy; + sTradeAnim->monSpriteIds[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeAnim->monSpriteIds[whichParty]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[whichParty]].callback = SpriteCallbackDummy; break; } } @@ -2833,34 +2834,34 @@ void CB2_LinkTrade(void) gLinkType = LINKTYPE_TRADE_DISCONNECTED; CloseLink(); } - sTradeData = AllocZeroed(sizeof(*sTradeData)); + sTradeAnim = AllocZeroed(sizeof(*sTradeAnim)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_Trade); - InitTradeBgInternal(); - ClearLinkTimeoutCounter(); + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + ClearLinkTimeoutTimer(); gMain.state++; - sTradeData->neverRead_8C = 0; - sTradeData->state = 0; - sTradeData->isLinkTrade = TRUE; - sTradeData->texX = 64; - sTradeData->texY = 64; - sTradeData->neverRead_D8 = 0; - sTradeData->neverRead_DA = 0; - sTradeData->scrX = 120; - sTradeData->scrY = 80; - sTradeData->sXY = 256; - sTradeData->alpha = 0; + sTradeAnim->neverRead_8C = 0; + sTradeAnim->state = 0; + sTradeAnim->isLinkTrade = TRUE; + sTradeAnim->texX = 64; + sTradeAnim->texY = 64; + sTradeAnim->neverRead_D8 = 0; + sTradeAnim->neverRead_DA = 0; + sTradeAnim->scrX = DISPLAY_WIDTH / 2; + sTradeAnim->scrY = DISPLAY_HEIGHT / 2; + sTradeAnim->sXY = 256; + sTradeAnim->alpha = 0; break; case 1: if (!gReceivedRemoteLinkPlayers) { - sTradeData->isCableTrade = TRUE; + sTradeAnim->isCableTrade = TRUE; OpenLink(); gMain.state++; - sTradeData->timer = 0; + sTradeAnim->timer = 0; } else { @@ -2868,9 +2869,9 @@ void CB2_LinkTrade(void) } break; case 2: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state++; } break; @@ -2879,7 +2880,7 @@ void CB2_LinkTrade(void) { if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) { - if (++sTradeData->timer > 30) + if (++sTradeAnim->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -2901,9 +2902,9 @@ void CB2_LinkTrade(void) gMain.state++; break; case 5: - sTradeData->playerLinkFlagFinishTrade = 0; - sTradeData->partnerLinkFlagFinishTrade = 0; - sTradeData->sendTradeFinishState = 0; + sTradeAnim->playerFinishStatus = 0; + sTradeAnim->partnerFinishStatus = 0; + sTradeAnim->scheduleLinkTransfer = 0; LoadTradeMonPic(TRADE_PLAYER, 0); gMain.state++; break; @@ -2968,7 +2969,7 @@ void LinkTradeDrawWindow(void) CopyWindowToVram(0, COPYWIN_FULL); } -static void InitTradeBgInternal(void) +static void TradeAnimInit_LoadGfx(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); @@ -2979,18 +2980,20 @@ static void InitTradeBgInternal(void) SetBgTilemapBuffer(1, Alloc(BG_SCREEN_SIZE)); SetBgTilemapBuffer(3, Alloc(BG_SCREEN_SIZE)); DeactivateAllTextPrinters(); + // Doing the graphics load... DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); InitWindows(sTradeSequenceWindowTemplates); + // ... and doing the same load again DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); - CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0); + CopyToBgTilemapBuffer(0, gDecompressionBuffer, BG_SCREEN_SIZE, 0); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); } -static void CB2_InGameTrade(void) +static void CB2_InitInGameTrade(void) { u8 otName[11]; @@ -3004,25 +3007,25 @@ static void CB2_InGameTrade(void) StringCopy(gLinkPlayers[1].name, otName); gLinkPlayers[0].language = GAME_LANGUAGE; gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE); - sTradeData = AllocZeroed(sizeof(*sTradeData)); + sTradeAnim = AllocZeroed(sizeof(*sTradeAnim)); AllocateMonSpritesGfx(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); - SetVBlankCallback(VBlankCB_Trade); - InitTradeBgInternal(); - sTradeData->isLinkTrade = FALSE; - sTradeData->neverRead_8C = 0; - sTradeData->state = 0; - sTradeData->texX = 64; - sTradeData->texY = 64; - sTradeData->neverRead_D8 = 0; - sTradeData->neverRead_DA = 0; - sTradeData->scrX = 120; - sTradeData->scrY = 80; - sTradeData->sXY = 256; - sTradeData->alpha = 0; - sTradeData->timer = 0; + SetVBlankCallback(VBlankCB_TradeAnim); + TradeAnimInit_LoadGfx(); + sTradeAnim->isLinkTrade = FALSE; + sTradeAnim->neverRead_8C = 0; + sTradeAnim->state = 0; + sTradeAnim->texX = 64; + sTradeAnim->texY = 64; + sTradeAnim->neverRead_D8 = 0; + sTradeAnim->neverRead_DA = 0; + sTradeAnim->scrX = DISPLAY_WIDTH / 2; + sTradeAnim->scrY = DISPLAY_HEIGHT / 2; + sTradeAnim->sXY = 256; + sTradeAnim->alpha = 0; + sTradeAnim->timer = 0; gMain.state = 5; break; case 5: @@ -3062,7 +3065,7 @@ static void CB2_InGameTrade(void) gMain.state++; break; case 12: - SetMainCallback2(CB2_UpdateInGameTrade); + SetMainCallback2(CB2_InGameTrade); break; } @@ -3106,11 +3109,14 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); + // The mail attached to the sent Pokemon no longer exists in your file. if (playerMail != MAIL_NONE) ClearMail(&gSaveBlock1Ptr->mail[playerMail]); - SWAP(*playerMon, *partnerMon, sTradeData->tempMon); + SWAP(*playerMon, *partnerMon, sTradeAnim->tempMon); + // By default, a Pokemon received from a trade will have 70 Friendship. + // Eggs use Friendship to track egg cycles, so don't set this on Eggs. friendship = 70; if (!GetMonData(playerMon, MON_DATA_IS_EGG)) SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); @@ -3123,26 +3129,26 @@ static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) TryEnableNationalDexFromLinkPartner(); } -static void TrySendTradeFinishData(void) +static void HandleLinkDataSend(void) { - switch (sTradeData->sendTradeFinishState) + switch (sTradeAnim->scheduleLinkTransfer) { case 1: if (IsLinkTaskFinished()) { - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); - sTradeData->sendTradeFinishState++; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeAnim->linkData, sizeof(sTradeAnim->linkData)); + sTradeAnim->scheduleLinkTransfer++; } // fallthrough case 2: - sTradeData->sendTradeFinishState = 0; + sTradeAnim->scheduleLinkTransfer = 0; break; } } -static void CB2_UpdateInGameTrade(void) +static void CB2_InGameTrade(void) { - AnimateTradeSequence(); + DoTradeAnim(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -3155,8 +3161,8 @@ static void SetTradeSequenceBgGpuRegs(u8 state) switch (state) { case 0: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 180; + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 180; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -3172,8 +3178,8 @@ static void SetTradeSequenceBgGpuRegs(u8 state) DmaCopy16Defvars(3, gTradePlatform_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000); break; case 1: - sTradeData->bg1hofs = 0; - sTradeData->bg1vofs = 348; + sTradeAnim->bg1hofs = 0; + sTradeAnim->bg1vofs = 348; SetGpuReg(REG_OFFSET_BG1VOFS, 348); SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | @@ -3186,13 +3192,13 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_SCREENBASE(18) | BGCNT_TXT256x512); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { - DmaCopy16Defvars(3, sGbaCable_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, sGbaMapCable, (void *) BG_SCREEN_ADDR(5), 0x1000); } else { - DmaCopy16Defvars(3, sGbaWireless_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x1000); + DmaCopy16Defvars(3, sGbaMapWireless, (void *) BG_SCREEN_ADDR(5), 0x1000); } DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000); @@ -3202,15 +3208,15 @@ static void SetTradeSequenceBgGpuRegs(u8 state) DISPCNT_OBJ_ON); break; case 2: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; - if (!sTradeData->isCableTrade) + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; + if (!sTradeAnim->isCableTrade) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - LZ77UnCompVram(sCrossingHighlightWireless_Tilemap, (void *) BG_SCREEN_ADDR(5)); + LZ77UnCompVram(sWirelessCloseup_Map, (void *) BG_SCREEN_ADDR(5)); BlendPalettes(0x8, 16, RGB_BLACK); } else @@ -3219,7 +3225,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state) DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - DmaCopy16Defvars(3, sCrossingHighlightCable_Tilemap, (void *) BG_SCREEN_ADDR(5), 0x800); + DmaCopy16Defvars(3, sCableCloseup_Map, (void *) BG_SCREEN_ADDR(5), 0x800); BlendPalettes(0x1, 16, RGB_BLACK); } break; @@ -3227,7 +3233,7 @@ static void SetTradeSequenceBgGpuRegs(u8 state) LoadPalette(sWirelessSignalNone_Pal, 48, 0x20); LZ77UnCompVram(sWirelessSignal_Gfx, (void *) BG_CHAR_ADDR(1)); LZ77UnCompVram(sWirelessSignal_Tilemap, (void *) BG_SCREEN_ADDR(18)); - sTradeData->bg2vofs = 80; + sTradeAnim->bg2vofs = 80; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | @@ -3244,26 +3250,26 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->texX = 64; - sTradeData->texY = 92; - sTradeData->sXY = 32; - sTradeData->gbaScale = 1024; - sTradeData->alpha = 0; + sTradeAnim->texX = 64; + sTradeAnim->texY = 92; + sTradeAnim->sXY = 32; + sTradeAnim->gbaScale = 1024; + sTradeAnim->alpha = 0; DmaCopyLarge16(3, sGbaAffine_Gfx, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { - DmaCopy16Defvars(3, sGbaCable_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapCable, (void *) BG_SCREEN_ADDR(18), 0x100); } else { - DmaCopy16Defvars(3, sGbaWireless_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapWireless, (void *) BG_SCREEN_ADDR(18), 0x100); } break; case 5: - sTradeData->bg1vofs = 0; - sTradeData->bg1hofs = 0; + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; break; case 6: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | @@ -3275,28 +3281,28 @@ static void SetTradeSequenceBgGpuRegs(u8 state) BGCNT_256COLOR | BGCNT_SCREENBASE(18) | BGCNT_AFF128x128); - sTradeData->texX = 64; - sTradeData->texY = 92; - sTradeData->sXY = 256; - sTradeData->gbaScale = 128; - sTradeData->scrX = 120; - sTradeData->scrY = 80; - sTradeData->alpha = 0; + sTradeAnim->texX = 64; + sTradeAnim->texY = 92; + sTradeAnim->sXY = 256; + sTradeAnim->gbaScale = 128; + sTradeAnim->scrX = 120; + sTradeAnim->scrY = 80; + sTradeAnim->alpha = 0; DmaCopyLarge16(3, sGbaAffine_Gfx, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); - if (sTradeData->isCableTrade) + if (sTradeAnim->isCableTrade) { - DmaCopy16Defvars(3, sGbaCable_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapCable, (void *) BG_SCREEN_ADDR(18), 0x100); } else { - DmaCopy16Defvars(3, sGbaWireless_AffineTilemap, (void *) BG_SCREEN_ADDR(18), 0x100); + DmaCopy16Defvars(3, sGbaAffineMapWireless, (void *) BG_SCREEN_ADDR(18), 0x100); } break; case 7: - sTradeData->bg2vofs = 0; - sTradeData->bg2hofs = 0; + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 0; SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | @@ -3327,7 +3333,7 @@ static void BufferTradeSceneStrings(void) u8 name[20]; const struct InGameTrade *ingameTrade; - if (sTradeData->isLinkTrade) + if (sTradeAnim->isLinkTrade) { mpId = GetMultiplayerId(); StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); @@ -3347,476 +3353,476 @@ static void BufferTradeSceneStrings(void) } // returns TRUE if it finished a link trade, FALSE if it finished an in-game trade or if sequence is still going -static bool8 AnimateTradeSequence(void) +static bool8 DoTradeAnim(void) { - if (sTradeData->isCableTrade) - return AnimateTradeSequenceCable(); + if (sTradeAnim->isCableTrade) + return DoTradeAnim_Cable(); else - return AnimateTradeSequenceWireless(); + return DoTradeAnim_Wireless(); } -// Below are the states for the main switch in AnimateTradeSequenceCable and AnimateTradeSequenceWireless -// When AnimateTradeSequenceWireless has a unique version of a -// state used by AnimateTradeSequenceCable, it adds the below modifier -#define TS_WIRELESS_STATE 100 +// Below are the states for the main switch in DoTradeAnim_Cable and DoTradeAnim_Wireless +// When DoTradeAnim_Wireless has a unique version of a state used by DoTradeAnim_Cable, it adds the below modifier +#define STATE_WIRELESS 100 enum { - TS_STATE_START, - TS_STATE_MON_SLIDE_IN, + STATE_START, + STATE_MON_SLIDE_IN, // 2-9 unused - TS_STATE_SEND_MSG = 10, - TS_STATE_BYE_BYE, - TS_STATE_POKEBALL_DEPART, - TS_STATE_POKEBALL_DEPART_WAIT, - TS_STATE_FADE_OUT_TO_GBA_SEND, + STATE_SEND_MSG = 10, + STATE_BYE_BYE, + STATE_POKEBALL_DEPART, + STATE_POKEBALL_DEPART_WAIT, + STATE_FADE_OUT_TO_GBA_SEND, // 15-19 unused - TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND = 20, - TS_STATE_FADE_IN_TO_GBA_SEND, - TS_STATE_WAIT_FADE_IN_TO_GBA_SEND, - TS_STATE_GBA_ZOOM_OUT, - TS_STATE_GBA_FLASH_SEND, - TS_STATE_GBA_STOP_FLASH_SEND, - TS_STATE_PAN_AWAY_GBA, - TS_STATE_CREATE_LINK_MON_LEAVING, - TS_STATE_LINK_MON_TRAVEL_OUT, - TS_STATE_FADE_OUT_TO_CROSSING, - TS_STATE_WAIT_FADE_OUT_TO_CROSSING, - TS_STATE_FADE_IN_TO_CROSSING, - TS_STATE_WAIT_FADE_IN_TO_CROSSING, - TS_STATE_CROSSING_LINK_MONS_ENTER, - TS_STATE_CROSSING_BLEND_WHITE_1, - TS_STATE_CROSSING_BLEND_WHITE_2, - TS_STATE_CROSSING_BLEND_WHITE_3, - TS_STATE_CROSSING_CREATE_MON_PICS, - TS_STATE_CROSSING_MON_PICS_MOVE, - TS_STATE_CROSSING_LINK_MONS_EXIT, - TS_STATE_CREATE_LINK_MON_ARRIVING, - TS_STATE_FADE_OUT_TO_GBA_RECV, - TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV, - TS_STATE_LINK_MON_TRAVEL_IN, - TS_STATE_PAN_TO_GBA, - TS_STATE_DESTROY_LINK_MON, - TS_STATE_LINK_MON_ARRIVED_DELAY, - TS_STATE_MOVE_GBA_TO_CENTER, - TS_STATE_GBA_FLASH_RECV, - TS_STATE_UNUSED, - TS_STATE_GBA_STOP_FLASH_RECV, - TS_STATE_GBA_ZOOM_IN, - TS_STATE_FADE_OUT_TO_NEW_MON, + STATE_WAIT_FADE_OUT_TO_GBA_SEND = 20, + STATE_FADE_IN_TO_GBA_SEND, + STATE_WAIT_FADE_IN_TO_GBA_SEND, + STATE_GBA_ZOOM_OUT, + STATE_GBA_FLASH_SEND, + STATE_GBA_STOP_FLASH_SEND, + STATE_PAN_AWAY_GBA, + STATE_CREATE_LINK_MON_LEAVING, + STATE_LINK_MON_TRAVEL_OUT, + STATE_FADE_OUT_TO_CROSSING, + STATE_WAIT_FADE_OUT_TO_CROSSING, + STATE_FADE_IN_TO_CROSSING, + STATE_WAIT_FADE_IN_TO_CROSSING, + STATE_CROSSING_LINK_MONS_ENTER, + STATE_CROSSING_BLEND_WHITE_1, + STATE_CROSSING_BLEND_WHITE_2, + STATE_CROSSING_BLEND_WHITE_3, + STATE_CROSSING_CREATE_MON_PICS, + STATE_CROSSING_MON_PICS_MOVE, + STATE_CROSSING_LINK_MONS_EXIT, + STATE_CREATE_LINK_MON_ARRIVING, + STATE_FADE_OUT_TO_GBA_RECV, + STATE_WAIT_FADE_OUT_TO_GBA_RECV, + STATE_LINK_MON_TRAVEL_IN, + STATE_PAN_TO_GBA, + STATE_DESTROY_LINK_MON, + STATE_LINK_MON_ARRIVED_DELAY, + STATE_MOVE_GBA_TO_CENTER, + STATE_GBA_FLASH_RECV, + STATE_UNUSED, + STATE_GBA_STOP_FLASH_RECV, + STATE_GBA_ZOOM_IN, + STATE_FADE_OUT_TO_NEW_MON, // 53-59 unused - TS_STATE_WAIT_FADE_OUT_TO_NEW_MON = 60, - TS_STATE_FADE_IN_TO_NEW_MON, - TS_STATE_WAIT_FADE_IN_TO_NEW_MON, - TS_STATE_POKEBALL_ARRIVE, - TS_STATE_FADE_POKEBALL_TO_NORMAL, - TS_STATE_POKEBALL_ARRIVE_WAIT, - TS_STATE_SHOW_NEW_MON, - TS_STATE_NEW_MON_MSG, - TS_STATE_TAKE_CARE_OF_MON, - TS_STATE_AFTER_NEW_MON_DELAY, - TS_STATE_CHECK_RIBBONS, - TS_STATE_END_LINK_TRADE, - TS_STATE_TRY_EVOLUTION, - TS_STATE_FADE_OUT_END, - TS_STATE_WAIT_FADE_OUT_END, + STATE_WAIT_FADE_OUT_TO_NEW_MON = 60, + STATE_FADE_IN_TO_NEW_MON, + STATE_WAIT_FADE_IN_TO_NEW_MON, + STATE_POKEBALL_ARRIVE, + STATE_FADE_POKEBALL_TO_NORMAL, + STATE_POKEBALL_ARRIVE_WAIT, + STATE_SHOW_NEW_MON, + STATE_NEW_MON_MSG, + STATE_TAKE_CARE_OF_MON, + STATE_AFTER_NEW_MON_DELAY, + STATE_CHECK_RIBBONS, + STATE_END_LINK_TRADE, + STATE_TRY_EVOLUTION, + STATE_FADE_OUT_END, + STATE_WAIT_FADE_OUT_END, // Special states - TS_STATE_GBA_FLASH_SEND_WIRELESS = TS_STATE_GBA_FLASH_SEND + TS_WIRELESS_STATE, - TS_STATE_GBA_STOP_FLASH_SEND_WIRELESS, - TS_STATE_WAIT_WIRELESS_SIGNAL_SEND, - TS_STATE_PAN_TO_GBA_WIRELESS = TS_STATE_PAN_TO_GBA + TS_WIRELESS_STATE, - TS_STATE_DESTROY_LINK_MON_WIRELESS, - TS_STATE_WAIT_WIRELESS_SIGNAL_RECV, - TS_STATE_DELAY_FOR_MON_ANIM = 167, - TS_STATE_LINK_MON_TRAVEL_OFFSCREEN = 200, - TS_STATE_WAIT_FOR_MON_CRY = 267, + STATE_GBA_FLASH_SEND_WIRELESS = STATE_GBA_FLASH_SEND + STATE_WIRELESS, + STATE_GBA_STOP_FLASH_SEND_WIRELESS, + STATE_WAIT_WIRELESS_SIGNAL_SEND, + STATE_PAN_TO_GBA_WIRELESS = STATE_PAN_TO_GBA + STATE_WIRELESS, + STATE_DESTROY_LINK_MON_WIRELESS, + STATE_WAIT_WIRELESS_SIGNAL_RECV, + STATE_DELAY_FOR_MON_ANIM = 167, + STATE_LINK_MON_TRAVEL_OFFSCREEN = 200, + STATE_WAIT_FOR_MON_CRY = 267, }; -static bool8 AnimateTradeSequenceCable(void) +static bool8 DoTradeAnim_Cable(void) { u16 evoTarget; - switch (sTradeData->state) + switch (sTradeAnim->state) { - case TS_STATE_START: - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = -180; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); + case STATE_START: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = -180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PLAYER]].y_offset; + sTradeAnim->state++; + sTradeAnim->cachedMapMusic = GetCurrentMapMusic(); PlayNewMapMusic(MUS_EVOLUTION); break; - case TS_STATE_MON_SLIDE_IN: - if (sTradeData->bg2hofs > 0) + case STATE_MON_SLIDE_IN: + if (sTradeAnim->bg2hofs > 0) { // Sliding - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 += 3; - sTradeData->bg2hofs -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 += 3; + sTradeAnim->bg2hofs -= 3; } else { // Pokémon has arrived onscreen - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = TS_STATE_SEND_MSG; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = 0; + sTradeAnim->bg2hofs = 0; + sTradeAnim->state = STATE_SEND_MSG; } break; - case TS_STATE_SEND_MSG: + case STATE_SEND_MSG: StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); DrawTextOnTradeWindow(0, gStringVar4, 0); - if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); + if (sTradeAnim->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PLAYER], 0); - sTradeData->state = TS_STATE_BYE_BYE; - sTradeData->timer = 0; + sTradeAnim->state = STATE_BYE_BYE; + sTradeAnim->timer = 0; break; - case TS_STATE_BYE_BYE: - if (++sTradeData->timer == 80) + case STATE_BYE_BYE: + if (++sTradeAnim->timer == 80) { - sTradeData->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeData->monSpriteIds[0], gSprites[sTradeData->monSpriteIds[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; + sTradeAnim->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeAnim->monSpriteIds[TRADE_PLAYER], gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); DrawTextOnTradeWindow(0, gStringVar4, 0); } break; - case TS_STATE_POKEBALL_DEPART: - if (gSprites[sTradeData->releasePokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_DEPART: + if (gSprites[sTradeAnim->releasePokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; - DestroySprite(&gSprites[sTradeData->releasePokeballSpriteId]); - sTradeData->state++; + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; + DestroySprite(&gSprites[sTradeAnim->releasePokeballSpriteId]); + sTradeAnim->state++; } break; - case TS_STATE_POKEBALL_DEPART_WAIT: + case STATE_POKEBALL_DEPART_WAIT: // The game waits here for the sprite to finish its animation sequence. break; - case TS_STATE_FADE_OUT_TO_GBA_SEND: + case STATE_FADE_OUT_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_GBA_SEND; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND: + case STATE_WAIT_FADE_OUT_TO_GBA_SEND: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); CopyWindowToVram(0, COPYWIN_FULL); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_GBA_SEND: + case STATE_FADE_IN_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_GBA_SEND: + case STATE_WAIT_FADE_IN_TO_GBA_SEND: if (!gPaletteFade.active) - sTradeData->state = TS_STATE_GBA_ZOOM_OUT; + sTradeAnim->state = STATE_GBA_ZOOM_OUT; break; - case TS_STATE_GBA_ZOOM_OUT: - if (sTradeData->gbaScale > 0x100) + case STATE_GBA_ZOOM_OUT: + if (sTradeAnim->gbaScale > 0x100) { - sTradeData->gbaScale -= 0x34; + sTradeAnim->gbaScale -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->gbaScale = 0x80; - sTradeData->state++; - sTradeData->timer = 0; + sTradeAnim->gbaScale = 0x80; + sTradeAnim->state++; + sTradeAnim->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_GBA_FLASH_SEND: - if (++sTradeData->timer > 20) + case STATE_GBA_FLASH_SEND: + if (++sTradeAnim->timer > 20) { SetTradeBGAffine(); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state++; } break; - case TS_STATE_GBA_STOP_FLASH_SEND: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_SEND: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_PAN_AWAY_GBA: - if (--sTradeData->bg1vofs == 316) - sTradeData->state++; + case STATE_PAN_AWAY_GBA: + if (--sTradeAnim->bg1vofs == 316) + sTradeAnim->state++; - if (sTradeData->bg1vofs == 328) - sTradeData->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); + if (sTradeAnim->bg1vofs == 328) + sTradeAnim->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); break; - case TS_STATE_CREATE_LINK_MON_LEAVING: - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, 80, 3); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); - sTradeData->state++; + case STATE_CREATE_LINK_MON_LEAVING: + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, 80, 3); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_OUT: - if ((sTradeData->bg1vofs -= 2) == 166) - sTradeData->state = TS_STATE_LINK_MON_TRAVEL_OFFSCREEN; + case STATE_LINK_MON_TRAVEL_OUT: + if ((sTradeAnim->bg1vofs -= 2) == 166) + sTradeAnim->state = STATE_LINK_MON_TRAVEL_OFFSCREEN; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; - case TS_STATE_LINK_MON_TRAVEL_OFFSCREEN: - gSprites[sTradeData->connectionSpriteId1].y -= 2; - gSprites[sTradeData->connectionSpriteId2].y -= 2; - if (gSprites[sTradeData->connectionSpriteId1].y < -8) - sTradeData->state = TS_STATE_FADE_OUT_TO_CROSSING; + case STATE_LINK_MON_TRAVEL_OFFSCREEN: + gSprites[sTradeAnim->connectionSpriteId1].y -= 2; + gSprites[sTradeAnim->connectionSpriteId2].y -= 2; + if (gSprites[sTradeAnim->connectionSpriteId1].y < -8) + sTradeAnim->state = STATE_FADE_OUT_TO_CROSSING; break; - case TS_STATE_FADE_OUT_TO_CROSSING: + case STATE_FADE_OUT_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_CROSSING; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_CROSSING; break; - case TS_STATE_WAIT_FADE_OUT_TO_CROSSING: + case STATE_WAIT_FADE_OUT_TO_CROSSING: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_CROSSING: + case STATE_FADE_IN_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_CROSSING: + case STATE_WAIT_FADE_IN_TO_CROSSING: if (!gPaletteFade.active) { PlaySE(SE_WARP_OUT); - sTradeData->state++; + sTradeAnim->state++; } - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; break; - case TS_STATE_CROSSING_LINK_MONS_ENTER: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -90) + case STATE_CROSSING_LINK_MONS_ENTER: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -90) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 1; - gSprites[sTradeData->connectionSpriteId2].data[1] = 1; - sTradeData->state++; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 1; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 1; + sTradeAnim->state++; } break; - case TS_STATE_CROSSING_BLEND_WHITE_1: + case STATE_CROSSING_BLEND_WHITE_1: BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_2: + case STATE_CROSSING_BLEND_WHITE_2: BlendPalettes(0x1, 0, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_3: + case STATE_CROSSING_BLEND_WHITE_3: BlendPalettes(0x1, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_CREATE_MON_PICS: - if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER])) + case STATE_CROSSING_CREATE_MON_PICS: + if (!IsMonSpriteNotFlipped(sTradeAnim->monSpecies[TRADE_PLAYER])) { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } else { - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x = 60; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 180; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y = 192; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = -32; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; - sTradeData->state++; + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x = 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y = 192; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = -32; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_MON_PICS_MOVE: - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 -= 3; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 += 3; - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT - && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) + case STATE_CROSSING_MON_PICS_MOVE: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 += 3; + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + && gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); } - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -222) + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -222) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 0; - gSprites[sTradeData->connectionSpriteId2].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 0; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 0; + sTradeAnim->state++; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; BlendPalettes(0x1, 0, RGB_WHITEALPHA); } break; - case TS_STATE_CROSSING_LINK_MONS_EXIT: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -222) + case STATE_CROSSING_LINK_MONS_EXIT: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -222) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + sTradeAnim->state++; + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); } break; - case TS_STATE_CREATE_LINK_MON_ARRIVING: + case STATE_CREATE_LINK_MON_ARRIVING: if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, -20, 3); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->bg1vofs = 166; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 128, -20, 3); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); } break; - case TS_STATE_FADE_OUT_TO_GBA_RECV: + case STATE_FADE_OUT_TO_GBA_RECV: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV: + case STATE_WAIT_FADE_OUT_TO_GBA_RECV: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_IN: - gSprites[sTradeData->connectionSpriteId1].y2 += 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 + gSprites[sTradeData->connectionSpriteId1].y == 64) + case STATE_LINK_MON_TRAVEL_IN: + gSprites[sTradeAnim->connectionSpriteId1].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 + gSprites[sTradeAnim->connectionSpriteId1].y == 64) + sTradeAnim->state++; + break; + case STATE_PAN_TO_GBA: + if ((sTradeAnim->bg1vofs += 2) > 316) { - sTradeData->state++; + sTradeAnim->bg1vofs = 316; + sTradeAnim->state++; } break; - case TS_STATE_PAN_TO_GBA: - if ((sTradeData->bg1vofs += 2) > 316) + case STATE_DESTROY_LINK_MON: + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); + sTradeAnim->state++; + sTradeAnim->timer = 0; + break; + case STATE_LINK_MON_ARRIVED_DELAY: + if (++sTradeAnim->timer == 10) + sTradeAnim->state++; + break; + case STATE_MOVE_GBA_TO_CENTER: + if (++sTradeAnim->bg1vofs > 348) { - sTradeData->bg1vofs = 316; - sTradeData->state++; + sTradeAnim->bg1vofs = 348; + sTradeAnim->state++; + } + if (sTradeAnim->bg1vofs == 328 && sTradeAnim->isCableTrade) + { + sTradeAnim->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); + gSprites[sTradeAnim->cableEndSpriteId].callback = SpriteCB_CableEndReceiving; } break; - case TS_STATE_DESTROY_LINK_MON: - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_GBA_FLASH_RECV: + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state = STATE_GBA_STOP_FLASH_RECV; break; - case TS_STATE_LINK_MON_ARRIVED_DELAY: - if (++sTradeData->timer == 10) - sTradeData->state++; - break; - case TS_STATE_MOVE_GBA_TO_CENTER: - if (++sTradeData->bg1vofs > 348) + case STATE_GBA_STOP_FLASH_RECV: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - sTradeData->bg1vofs = 348; - sTradeData->state++; - } - if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) - { - sTradeData->cableEndSpriteId = CreateSprite(&sSpriteTemplate_CableEnd, 128, 65, 0); - gSprites[sTradeData->cableEndSpriteId].callback = SpriteCB_CableEndReceiving; - } - break; - case TS_STATE_GBA_FLASH_RECV: - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); - sTradeData->state = TS_STATE_GBA_STOP_FLASH_RECV; - break; - case TS_STATE_GBA_STOP_FLASH_RECV: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) - { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; + sTradeAnim->state++; PlaySE(SE_M_SAND_ATTACK); } break; - case TS_STATE_GBA_ZOOM_IN: - if (sTradeData->gbaScale < 0x400) + case STATE_GBA_ZOOM_IN: + if (sTradeAnim->gbaScale < 0x400) { - sTradeData->gbaScale += 0x34; + sTradeAnim->gbaScale += 0x34; } else { - sTradeData->gbaScale = 0x400; - sTradeData->state++; + sTradeAnim->gbaScale = 0x400; + sTradeAnim->state++; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_FADE_OUT_TO_NEW_MON: + case STATE_FADE_OUT_TO_NEW_MON: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_NEW_MON; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_NEW_MON; break; - case TS_STATE_WAIT_FADE_OUT_TO_NEW_MON: + case STATE_WAIT_FADE_OUT_TO_NEW_MON: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(7); gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_NEW_MON: + case STATE_FADE_IN_TO_NEW_MON: gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_NEW_MON: + case STATE_WAIT_FADE_IN_TO_NEW_MON: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_POKEBALL_ARRIVE: - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].data[3] = 74; - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; - StartSpriteAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_POKEBALL_ARRIVE: + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case TS_STATE_FADE_POKEBALL_TO_NORMAL: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeAnim->state++; break; - case TS_STATE_POKEBALL_ARRIVE_WAIT: - if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sTradeAnim->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); - sTradeData->state++; + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeAnim->monSpecies[TRADE_PARTNER]], + gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], + sTradeAnim->monSpecies[TRADE_PARTNER], + sTradeAnim->monPersonalities[TRADE_PARTNER]); + sTradeAnim->state++; } break; - case TS_STATE_SHOW_NEW_MON: - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 120; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x2 = 0; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 = 0; - StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); - FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); - DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); - sTradeData->state++; + case STATE_SHOW_NEW_MON: + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 120; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x2 = 0; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 = 0; + StartSpriteAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeAnim->monSpriteIds[TRADE_PARTNER], gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeAnim->monSpecies[TRADE_PARTNER]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + sTradeAnim->state++; break; - case TS_STATE_NEW_MON_MSG: + case STATE_NEW_MON_MSG: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -3824,76 +3830,70 @@ static bool8 AnimateTradeSequenceCable(void) DISPCNT_OBJ_ON); StringExpandPlaceholders(gStringVar4, gText_XSentOverY); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = TS_STATE_DELAY_FOR_MON_ANIM; - sTradeData->timer = 0; + sTradeAnim->state = STATE_DELAY_FOR_MON_ANIM; + sTradeAnim->timer = 0; break; - case TS_STATE_DELAY_FOR_MON_ANIM: - if (++sTradeData->timer > 60) + case STATE_DELAY_FOR_MON_ANIM: + if (++sTradeAnim->timer > 60) { - sTradeData->state = TS_STATE_WAIT_FOR_MON_CRY; - sTradeData->timer = 0; + sTradeAnim->state = STATE_WAIT_FOR_MON_CRY; + sTradeAnim->timer = 0; } break; - case TS_STATE_WAIT_FOR_MON_CRY: + case STATE_WAIT_FOR_MON_CRY: if (IsCryFinished()) - sTradeData->state = TS_STATE_TAKE_CARE_OF_MON; + sTradeAnim->state = STATE_TAKE_CARE_OF_MON; break; - case TS_STATE_TAKE_CARE_OF_MON: - if (++sTradeData->timer == 10) + case STATE_TAKE_CARE_OF_MON: + if (++sTradeAnim->timer == 10) PlayFanfare(MUS_EVOLVED); - if (sTradeData->timer == 250) + if (sTradeAnim->timer == 250) { - sTradeData->state++; + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; - case TS_STATE_AFTER_NEW_MON_DELAY: - if (++sTradeData->timer == 60) - sTradeData->state++; + case STATE_AFTER_NEW_MON_DELAY: + if (++sTradeAnim->timer == 60) + sTradeAnim->state++; break; - case TS_STATE_CHECK_RIBBONS: + case STATE_CHECK_RIBBONS: CheckPartnersMonForRibbons(); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_END_LINK_TRADE: - if (sTradeData->isLinkTrade) - { + case STATE_END_LINK_TRADE: + if (sTradeAnim->isLinkTrade) return TRUE; - } else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } + sTradeAnim->state++; break; - case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution + case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_UpdateInGameTrade; + gCB2_AfterEvolution = CB2_InGameTrade; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); - } - sTradeData->state++; + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + sTradeAnim->state++; break; - case TS_STATE_FADE_OUT_END: + case STATE_FADE_OUT_END: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_END: + case STATE_WAIT_FADE_OUT_END: if (!gPaletteFade.active) { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) + PlayNewMapMusic(sTradeAnim->cachedMapMusic); + if (sTradeAnim) { FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); } SetMainCallback2(CB2_ReturnToField); BufferInGameTradeMonName(); @@ -3903,111 +3903,116 @@ static bool8 AnimateTradeSequenceCable(void) return FALSE; } -static bool8 AnimateTradeSequenceWireless(void) +// Task data for Task_AnimateWirelessSignal +#define tIdx data[0] +#define tCounter data[1] +#define tSignalComingBack data[2] + +static bool8 DoTradeAnim_Wireless(void) { u16 evoTarget; - switch (sTradeData->state) + switch (sTradeAnim->state) { - case TS_STATE_START: - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = -180; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset; - sTradeData->state++; - sTradeData->cachedMapMusic = GetCurrentMapMusic(); + case STATE_START: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = -180; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PLAYER]].y_offset; + sTradeAnim->state++; + sTradeAnim->cachedMapMusic = GetCurrentMapMusic(); PlayNewMapMusic(MUS_EVOLUTION); break; - case TS_STATE_MON_SLIDE_IN: - if (sTradeData->bg2hofs > 0) + case STATE_MON_SLIDE_IN: + if (sTradeAnim->bg2hofs > 0) { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 += 3; - sTradeData->bg2hofs -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 += 3; + sTradeAnim->bg2hofs -= 3; } else { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x2 = 0; - sTradeData->bg2hofs = 0; - sTradeData->state = TS_STATE_SEND_MSG; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x2 = 0; + sTradeAnim->bg2hofs = 0; + sTradeAnim->state = STATE_SEND_MSG; } break; - case TS_STATE_SEND_MSG: + case STATE_SEND_MSG: StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); DrawTextOnTradeWindow(0, gStringVar4, 0); - if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) - PlayCry_Normal(sTradeData->monSpecies[TRADE_PLAYER], 0); + if (sTradeAnim->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + PlayCry_Normal(sTradeAnim->monSpecies[TRADE_PLAYER], 0); - sTradeData->state = TS_STATE_BYE_BYE; - sTradeData->timer = 0; + sTradeAnim->state = STATE_BYE_BYE; + sTradeAnim->timer = 0; break; - case TS_STATE_BYE_BYE: - if (++sTradeData->timer == 80) + case STATE_BYE_BYE: + if (++sTradeAnim->timer == 80) { - sTradeData->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeData->monSpriteIds[0], gSprites[sTradeData->monSpriteIds[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - sTradeData->state++; + sTradeAnim->releasePokeballSpriteId = CreateTradePokeballSprite(sTradeAnim->monSpriteIds[TRADE_PLAYER], gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); DrawTextOnTradeWindow(0, gStringVar4, 0); } break; - case TS_STATE_POKEBALL_DEPART: - if (gSprites[sTradeData->releasePokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_DEPART: + if (gSprites[sTradeAnim->releasePokeballSpriteId].callback == SpriteCallbackDummy) { - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; - DestroySprite(&gSprites[sTradeData->releasePokeballSpriteId]); - sTradeData->state++; + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, 32, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballDepart; + DestroySprite(&gSprites[sTradeAnim->releasePokeballSpriteId]); + sTradeAnim->state++; } break; - case TS_STATE_POKEBALL_DEPART_WAIT: + case STATE_POKEBALL_DEPART_WAIT: // The game waits here for the sprite to finish its animation sequence. break; - case TS_STATE_FADE_OUT_TO_GBA_SEND: + case STATE_FADE_OUT_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_GBA_SEND; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_SEND: + case STATE_WAIT_FADE_OUT_TO_GBA_SEND: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(4); FillWindowPixelBuffer(0, PIXEL_FILL(15)); CopyWindowToVram(0, COPYWIN_FULL); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_GBA_SEND: + case STATE_FADE_IN_TO_GBA_SEND: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_GBA_SEND: + case STATE_WAIT_FADE_IN_TO_GBA_SEND: if (!gPaletteFade.active) - sTradeData->state = TS_STATE_GBA_ZOOM_OUT; + sTradeAnim->state = STATE_GBA_ZOOM_OUT; break; - case TS_STATE_GBA_ZOOM_OUT: - if (sTradeData->gbaScale > 0x100) + case STATE_GBA_ZOOM_OUT: + if (sTradeAnim->gbaScale > 0x100) { - sTradeData->gbaScale -= 0x34; + sTradeAnim->gbaScale -= 0x34; } else { SetTradeSequenceBgGpuRegs(1); - sTradeData->gbaScale = 0x80; - sTradeData->state = TS_STATE_GBA_FLASH_SEND_WIRELESS; - sTradeData->timer = 0; + sTradeAnim->gbaScale = 0x80; + sTradeAnim->state = STATE_GBA_FLASH_SEND_WIRELESS; + sTradeAnim->timer = 0; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_GBA_FLASH_SEND_WIRELESS: - if (++sTradeData->timer > 20) + case STATE_GBA_FLASH_SEND_WIRELESS: + if (++sTradeAnim->timer > 20) { SetTradeSequenceBgGpuRegs(3); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Short, 120, 80, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Short, 120, 80, 0); + sTradeAnim->state++; } break; - case TS_STATE_GBA_STOP_FLASH_SEND_WIRELESS: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_SEND_WIRELESS: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_BLEND | @@ -4016,307 +4021,305 @@ static bool8 AnimateTradeSequenceWireless(void) // Start wireless signal effect CreateTask(Task_AnimateWirelessSignal, 5); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_WAIT_WIRELESS_SIGNAL_SEND: + case STATE_WAIT_WIRELESS_SIGNAL_SEND: if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) - sTradeData->state = TS_STATE_PAN_AWAY_GBA; + sTradeAnim->state = STATE_PAN_AWAY_GBA; break; - case TS_STATE_PAN_AWAY_GBA: - if (--sTradeData->bg1vofs == 316) - sTradeData->state++; + case STATE_PAN_AWAY_GBA: + if (--sTradeAnim->bg1vofs == 316) + sTradeAnim->state++; break; - case TS_STATE_CREATE_LINK_MON_LEAVING: - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, 80, 3); - gSprites[sTradeData->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, 80, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); - sTradeData->state++; + case STATE_CREATE_LINK_MON_LEAVING: + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, 80, 3); + gSprites[sTradeAnim->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_OUT: - if ((sTradeData->bg1vofs -= 3) == 166) - sTradeData->state = TS_STATE_LINK_MON_TRAVEL_OFFSCREEN; + case STATE_LINK_MON_TRAVEL_OUT: + if ((sTradeAnim->bg1vofs -= 3) == 166) + sTradeAnim->state = STATE_LINK_MON_TRAVEL_OFFSCREEN; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); break; - case TS_STATE_LINK_MON_TRAVEL_OFFSCREEN: - gSprites[sTradeData->connectionSpriteId1].y -= 2; - gSprites[sTradeData->connectionSpriteId2].y -= 2; - if (gSprites[sTradeData->connectionSpriteId1].y < -8) - { - sTradeData->state = TS_STATE_FADE_OUT_TO_CROSSING; - } + case STATE_LINK_MON_TRAVEL_OFFSCREEN: + gSprites[sTradeAnim->connectionSpriteId1].y -= 2; + gSprites[sTradeAnim->connectionSpriteId2].y -= 2; + if (gSprites[sTradeAnim->connectionSpriteId1].y < -8) + sTradeAnim->state = STATE_FADE_OUT_TO_CROSSING; break; - case TS_STATE_FADE_OUT_TO_CROSSING: + case STATE_FADE_OUT_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_CROSSING; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_CROSSING; break; - case TS_STATE_WAIT_FADE_OUT_TO_CROSSING: + case STATE_WAIT_FADE_OUT_TO_CROSSING: if (!gPaletteFade.active) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(2); - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_CROSSING: + case STATE_FADE_IN_TO_CROSSING: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); - sTradeData->state++; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 111, 170, 0); + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 129, -10, 0); + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_CROSSING: + case STATE_WAIT_FADE_IN_TO_CROSSING: if (!gPaletteFade.active) { PlaySE(SE_WARP_OUT); - sTradeData->state++; + sTradeAnim->state++; } - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; break; - case TS_STATE_CROSSING_LINK_MONS_ENTER: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -90) + case STATE_CROSSING_LINK_MONS_ENTER: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -90) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 1; - gSprites[sTradeData->connectionSpriteId2].data[1] = 1; - sTradeData->state++; - CreateTask(Task_NarrowWindowForCrossing_Wireless, 5); + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 1; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 1; + sTradeAnim->state++; + CreateTask(Task_OpenCenterWhiteColumn, 5); } break; - case TS_STATE_CROSSING_BLEND_WHITE_1: + case STATE_CROSSING_BLEND_WHITE_1: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_2: + case STATE_CROSSING_BLEND_WHITE_2: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_BLEND_WHITE_3: + case STATE_CROSSING_BLEND_WHITE_3: BlendPalettes(0x8, 16, RGB_WHITEALPHA); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_CREATE_MON_PICS: - if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER])) + case STATE_CROSSING_CREATE_MON_PICS: + if (!IsMonSpriteNotFlipped(sTradeAnim->monSpecies[TRADE_PLAYER])) { - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].affineAnims = sAffineAnims_CrossingMonPics; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } else { - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]], 0); + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]], 0); } - StartSpriteAffineAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].x = 40; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 200; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y = 192; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = -32; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; - sTradeData->state++; + StartSpriteAffineAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].x = 40; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 200; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y = 192; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = -32; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = FALSE; + sTradeAnim->state++; break; - case TS_STATE_CROSSING_MON_PICS_MOVE: - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 -= 3; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 += 3; - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT - && gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) + case STATE_CROSSING_MON_PICS_MOVE: + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 -= 3; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 += 3; + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -DISPLAY_HEIGHT + && gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 >= -DISPLAY_HEIGHT - 3) { PlaySE(SE_WARP_IN); } - if (gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].y2 < -222) + if (gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].y2 < -222) { - gSprites[sTradeData->connectionSpriteId1].data[1] = 0; - gSprites[sTradeData->connectionSpriteId2].data[1] = 0; - sTradeData->state++; - gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; - CreateTask(Task_NarrowWindowForCrossing_Cable, 5); + gSprites[sTradeAnim->connectionSpriteId1].data[1] = 0; + gSprites[sTradeAnim->connectionSpriteId2].data[1] = 0; + sTradeAnim->state++; + gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].invisible = TRUE; + CreateTask(Task_CloseCenterWhiteColumn, 5); } break; - case TS_STATE_CROSSING_LINK_MONS_EXIT: - gSprites[sTradeData->connectionSpriteId1].y2 -= 3; - gSprites[sTradeData->connectionSpriteId2].y2 += 3; - if (gSprites[sTradeData->connectionSpriteId1].y2 <= -222) + case STATE_CROSSING_LINK_MONS_EXIT: + gSprites[sTradeAnim->connectionSpriteId1].y2 -= 3; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 3; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 <= -222) { BeginNormalPaletteFade(PALETTES_ALL, -1, 0, 16, RGB_BLACK); - sTradeData->state++; - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + sTradeAnim->state++; + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); } break; - case TS_STATE_CREATE_LINK_MON_ARRIVING: + case STATE_CREATE_LINK_MON_ARRIVING: if (!gPaletteFade.active) { - sTradeData->state++; + sTradeAnim->state++; SetTradeSequenceBgGpuRegs(1); - sTradeData->bg1vofs = 166; + sTradeAnim->bg1vofs = 166; SetTradeSequenceBgGpuRegs(3); - sTradeData->bg2vofs = 412; - sTradeData->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, -20, 3); - gSprites[sTradeData->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, -20, 0); - StartSpriteAnim(&gSprites[sTradeData->connectionSpriteId2], ANIM_LINKMON_SMALL); + sTradeAnim->bg2vofs = 412; + sTradeAnim->connectionSpriteId1 = CreateSprite(&sSpriteTemplate_LinkMonGlow, 120, -20, 3); + gSprites[sTradeAnim->connectionSpriteId1].callback = SpriteCB_LinkMonGlowWireless; + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_LinkMonShadow, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeAnim->connectionSpriteId2], ANIM_LINKMON_SMALL); } break; - case TS_STATE_FADE_OUT_TO_GBA_RECV: + case STATE_FADE_OUT_TO_GBA_RECV: BeginNormalPaletteFade(PALETTES_ALL, -1, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_TO_GBA_RECV: + case STATE_WAIT_FADE_OUT_TO_GBA_RECV: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_LINK_MON_TRAVEL_IN: - gSprites[sTradeData->connectionSpriteId1].y2 += 4; - gSprites[sTradeData->connectionSpriteId2].y2 += 4; - if (gSprites[sTradeData->connectionSpriteId1].y2 + gSprites[sTradeData->connectionSpriteId1].y == 64) + case STATE_LINK_MON_TRAVEL_IN: + gSprites[sTradeAnim->connectionSpriteId1].y2 += 4; + gSprites[sTradeAnim->connectionSpriteId2].y2 += 4; + if (gSprites[sTradeAnim->connectionSpriteId1].y2 + gSprites[sTradeAnim->connectionSpriteId1].y == 64) { - sTradeData->state = TS_STATE_PAN_TO_GBA_WIRELESS; - sTradeData->timer = 0; + sTradeAnim->state = STATE_PAN_TO_GBA_WIRELESS; + sTradeAnim->timer = 0; } break; - case TS_STATE_PAN_TO_GBA_WIRELESS: + case STATE_PAN_TO_GBA_WIRELESS: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); - sTradeData->bg1vofs += 3; - sTradeData->bg2vofs += 3; - if (++sTradeData->timer == 10) + sTradeAnim->bg1vofs += 3; + sTradeAnim->bg2vofs += 3; + if (++sTradeAnim->timer == 10) { u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); - gTasks[taskId].data[2] = TRUE; + gTasks[taskId].tSignalComingBack = TRUE; } - if (sTradeData->bg1vofs > 316) + if (sTradeAnim->bg1vofs > 316) { - sTradeData->bg1vofs = 316; - sTradeData->state++; + sTradeAnim->bg1vofs = 316; + sTradeAnim->state++; } break; - case TS_STATE_DESTROY_LINK_MON_WIRELESS: - DestroySprite(&gSprites[sTradeData->connectionSpriteId1]); - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_DESTROY_LINK_MON_WIRELESS: + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId1]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case TS_STATE_WAIT_WIRELESS_SIGNAL_RECV: + case STATE_WAIT_WIRELESS_SIGNAL_RECV: if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) { - sTradeData->state = TS_STATE_LINK_MON_ARRIVED_DELAY; - sTradeData->timer = 0; + sTradeAnim->state = STATE_LINK_MON_ARRIVED_DELAY; + sTradeAnim->timer = 0; } break; - case TS_STATE_LINK_MON_ARRIVED_DELAY: - if (++sTradeData->timer == 10) - sTradeData->state++; + case STATE_LINK_MON_ARRIVED_DELAY: + if (++sTradeAnim->timer == 10) + sTradeAnim->state++; break; - case TS_STATE_MOVE_GBA_TO_CENTER: - if (++sTradeData->bg1vofs > 348) + case STATE_MOVE_GBA_TO_CENTER: + if (++sTradeAnim->bg1vofs > 348) { - sTradeData->bg1vofs = 348; - sTradeData->state++; + sTradeAnim->bg1vofs = 348; + sTradeAnim->state++; } break; - case TS_STATE_GBA_FLASH_RECV: - sTradeData->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); - sTradeData->state = TS_STATE_GBA_STOP_FLASH_RECV; + case STATE_GBA_FLASH_RECV: + sTradeAnim->connectionSpriteId2 = CreateSprite(&sSpriteTemplate_GbaScreenFlash_Long, 120, 80, 0); + sTradeAnim->state = STATE_GBA_STOP_FLASH_RECV; break; - case TS_STATE_GBA_STOP_FLASH_RECV: - if (gSprites[sTradeData->connectionSpriteId2].animEnded) + case STATE_GBA_STOP_FLASH_RECV: + if (gSprites[sTradeAnim->connectionSpriteId2].animEnded) { - DestroySprite(&gSprites[sTradeData->connectionSpriteId2]); + DestroySprite(&gSprites[sTradeAnim->connectionSpriteId2]); SetTradeSequenceBgGpuRegs(6); - sTradeData->state++; + sTradeAnim->state++; PlaySE(SE_M_SAND_ATTACK); } break; - case TS_STATE_GBA_ZOOM_IN: - if (sTradeData->gbaScale < 0x400) + case STATE_GBA_ZOOM_IN: + if (sTradeAnim->gbaScale < 0x400) { - sTradeData->gbaScale += 0x34; + sTradeAnim->gbaScale += 0x34; } else { - sTradeData->gbaScale = 0x400; - sTradeData->state++; + sTradeAnim->gbaScale = 0x400; + sTradeAnim->state++; } - sTradeData->sXY = 0x8000 / sTradeData->gbaScale; + sTradeAnim->sXY = 0x8000 / sTradeAnim->gbaScale; break; - case TS_STATE_FADE_OUT_TO_NEW_MON: + case STATE_FADE_OUT_TO_NEW_MON: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state = TS_STATE_WAIT_FADE_OUT_TO_NEW_MON; + sTradeAnim->state = STATE_WAIT_FADE_OUT_TO_NEW_MON; break; - case TS_STATE_WAIT_FADE_OUT_TO_NEW_MON: + case STATE_WAIT_FADE_OUT_TO_NEW_MON: if (!gPaletteFade.active) { SetTradeSequenceBgGpuRegs(5); SetTradeSequenceBgGpuRegs(7); gPaletteFade.bufferTransferDisabled = TRUE; - sTradeData->state++; + sTradeAnim->state++; } break; - case TS_STATE_FADE_IN_TO_NEW_MON: + case STATE_FADE_IN_TO_NEW_MON: gPaletteFade.bufferTransferDisabled = FALSE; BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_IN_TO_NEW_MON: + case STATE_WAIT_FADE_IN_TO_NEW_MON: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON); if (!gPaletteFade.active) - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_POKEBALL_ARRIVE: - sTradeData->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); - gSprites[sTradeData->bouncingPokeballSpriteId].data[3] = 74; - gSprites[sTradeData->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; - StartSpriteAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 1); - StartSpriteAffineAnim(&gSprites[sTradeData->bouncingPokeballSpriteId], 2); - BlendPalettes(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); - sTradeData->state++; - sTradeData->timer = 0; + case STATE_POKEBALL_ARRIVE: + sTradeAnim->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sTradeAnim->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sTradeAnim->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sTradeAnim->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeAnim->state++; + sTradeAnim->timer = 0; break; - case TS_STATE_FADE_POKEBALL_TO_NORMAL: - BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - sTradeData->state++; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeAnim->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeAnim->state++; break; - case TS_STATE_POKEBALL_ARRIVE_WAIT: - if (gSprites[sTradeData->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sTradeAnim->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeAnim->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_RIGHT], - sTradeData->monSpecies[TRADE_PARTNER], - sTradeData->monPersonalities[TRADE_PARTNER]); - sTradeData->state++; + sTradeAnim->monSpecies[TRADE_PARTNER], + sTradeAnim->monPersonalities[TRADE_PARTNER]); + sTradeAnim->state++; } break; - case TS_STATE_SHOW_NEW_MON: - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x = 120; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].x2 = 0; - gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].y2 = 0; - StartSpriteAnim(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]], 0); - CreatePokeballSpriteToReleaseMon(sTradeData->monSpriteIds[TRADE_PARTNER], gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeData->monSpecies[TRADE_PARTNER]); - FreeSpriteOamMatrix(&gSprites[sTradeData->bouncingPokeballSpriteId]); - DestroySprite(&gSprites[sTradeData->bouncingPokeballSpriteId]); - sTradeData->state++; + case STATE_SHOW_NEW_MON: + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x = 120; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y = gMonFrontPicCoords[sTradeAnim->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].x2 = 0; + gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].y2 = 0; + StartSpriteAnim(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeAnim->monSpriteIds[TRADE_PARTNER], gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sTradeAnim->monSpecies[TRADE_PARTNER]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sTradeAnim->bouncingPokeballSpriteId]); + sTradeAnim->state++; break; - case TS_STATE_NEW_MON_MSG: + case STATE_NEW_MON_MSG: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | @@ -4324,76 +4327,70 @@ static bool8 AnimateTradeSequenceWireless(void) DISPCNT_OBJ_ON); StringExpandPlaceholders(gStringVar4, gText_XSentOverY); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->state = TS_STATE_DELAY_FOR_MON_ANIM; - sTradeData->timer = 0; + sTradeAnim->state = STATE_DELAY_FOR_MON_ANIM; + sTradeAnim->timer = 0; break; - case TS_STATE_DELAY_FOR_MON_ANIM: - if (++sTradeData->timer > 60) + case STATE_DELAY_FOR_MON_ANIM: + if (++sTradeAnim->timer > 60) { - sTradeData->state = TS_STATE_WAIT_FOR_MON_CRY; - sTradeData->timer = 0; + sTradeAnim->state = STATE_WAIT_FOR_MON_CRY; + sTradeAnim->timer = 0; } break; - case TS_STATE_WAIT_FOR_MON_CRY: + case STATE_WAIT_FOR_MON_CRY: if (IsCryFinished()) - sTradeData->state = TS_STATE_TAKE_CARE_OF_MON; + sTradeAnim->state = STATE_TAKE_CARE_OF_MON; break; - case TS_STATE_TAKE_CARE_OF_MON: - if (++sTradeData->timer == 10) + case STATE_TAKE_CARE_OF_MON: + if (++sTradeAnim->timer == 10) PlayFanfare(MUS_EVOLVED); - if (sTradeData->timer == 250) + if (sTradeAnim->timer == 250) { - sTradeData->state++; + sTradeAnim->state++; StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); DrawTextOnTradeWindow(0, gStringVar4, 0); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; - case TS_STATE_AFTER_NEW_MON_DELAY: - if (++sTradeData->timer == 60) - sTradeData->state++; + case STATE_AFTER_NEW_MON_DELAY: + if (++sTradeAnim->timer == 60) + sTradeAnim->state++; break; - case TS_STATE_CHECK_RIBBONS: + case STATE_CHECK_RIBBONS: CheckPartnersMonForRibbons(); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_END_LINK_TRADE: - if (sTradeData->isLinkTrade) - { + case STATE_END_LINK_TRADE: + if (sTradeAnim->isLinkTrade) return TRUE; - } else if (JOY_NEW(A_BUTTON)) - { - sTradeData->state++; - } + sTradeAnim->state++; break; - case TS_STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution + case STATE_TRY_EVOLUTION: // Only if in-game trade, link trades use CB2_TryLinkTradeEvolution TradeMons(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = CB2_UpdateInGameTrade; + gCB2_AfterEvolution = CB2_InGameTrade; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); - } - sTradeData->state++; + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + sTradeAnim->state++; break; - case TS_STATE_FADE_OUT_END: + case STATE_FADE_OUT_END: BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); - sTradeData->state++; + sTradeAnim->state++; break; - case TS_STATE_WAIT_FADE_OUT_END: + case STATE_WAIT_FADE_OUT_END: if (!gPaletteFade.active) { - PlayNewMapMusic(sTradeData->cachedMapMusic); - if (sTradeData) + PlayNewMapMusic(sTradeAnim->cachedMapMusic); + if (sTradeAnim) { FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); } SetMainCallback2(CB2_ReturnToField); BufferInGameTradeMonName(); @@ -4404,7 +4401,7 @@ static bool8 AnimateTradeSequenceWireless(void) } // Try to evolve a Pokémon received in a link trade -// In-game trades resolve evolution during the trade sequence, in TS_STATE_TRY_EVOLUTION +// In-game trades resolve evolution during the trade sequence, in STATE_TRY_EVOLUTION static void CB2_TryLinkTradeEvolution(void) { u16 evoTarget; @@ -4418,7 +4415,7 @@ static void CB2_TryLinkTradeEvolution(void) gCB2_AfterEvolution = CB2_SaveAndEndTrade; evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeAnim->monSpriteIds[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); else if (IsWirelessTrade()) SetMainCallback2(CB2_SaveAndEndWirelessTrade); else @@ -4433,25 +4430,25 @@ static void CB2_TryLinkTradeEvolution(void) UpdatePaletteFade(); } -static void UpdateTradeFinishFlags(void) +static void HandleLinkDataReceive(void) { - u8 blockReceivedStatus; + u8 recvStatus; TradeGetMultiplayerId(); // no effect call, ret val ignored - blockReceivedStatus = GetBlockReceivedStatus(); - if (blockReceivedStatus & 0x01) + recvStatus = GetBlockReceivedStatus(); + if (recvStatus & (1 << 0)) { if (gBlockRecvBuffer[0][0] == LINKCMD_CONFIRM_FINISH_TRADE) SetMainCallback2(CB2_TryLinkTradeEvolution); if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE) - sTradeData->playerLinkFlagFinishTrade = STATUS_READY; + sTradeAnim->playerFinishStatus = STATUS_READY; ResetBlockReceivedFlag(0); } - if (blockReceivedStatus & 0x02) + if (recvStatus & (1 << 1)) { if (gBlockRecvBuffer[1][0] == LINKCMD_READY_FINISH_TRADE) - sTradeData->partnerLinkFlagFinishTrade = STATUS_READY; + sTradeAnim->partnerFinishStatus = STATUS_READY; ResetBlockReceivedFlag(1); } @@ -4502,7 +4499,7 @@ static void SpriteCB_BouncingPokeballDepartEnd(struct Sprite *sprite) if (++ sprite->data[0] == 23) { DestroySprite(sprite); - sTradeData->state = TS_STATE_FADE_OUT_TO_GBA_SEND; // Resume the master trade animation + sTradeAnim->state = STATE_FADE_OUT_TO_GBA_SEND; // Resume the master trade animation } } } @@ -4549,14 +4546,14 @@ static void BufferInGameTradeMonName(void) StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); } -static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) +static void CreateInGameTradePokemonInternal(u8 whichPlayerMon, u8 whichInGameTrade) { const struct InGameTrade *inGameTrade = &sIngameTrades[whichInGameTrade]; u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL); struct Mail mail; u8 metLocation = METLOC_IN_GAME_TRADE; - u8 isMail; + u8 mailNum; struct Pokemon *pokemon = &gEnemyParty[0]; CreateMon(pokemon, inGameTrade->species, level, USE_RANDOM_IVS, TRUE, inGameTrade->personality, OT_ID_PRESET, inGameTrade->otId); @@ -4579,14 +4576,14 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen); SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation); - isMail = FALSE; + mailNum = 0; if (inGameTrade->heldItem != ITEM_NONE) { if (ItemIsMail(inGameTrade->heldItem)) { - SetInGameTradeMail(&mail, inGameTrade); + GetInGameTradeMail(&mail, inGameTrade); gTradeMail[0] = mail; - SetMonData(pokemon, MON_DATA_MAIL, &isMail); + SetMonData(pokemon, MON_DATA_MAIL, &mailNum); SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); } else @@ -4597,14 +4594,12 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) CalculateMonStats(&gEnemyParty[0]); } -static void SetInGameTradeMail(struct Mail *mail, const struct InGameTrade *trade) +static void GetInGameTradeMail(struct Mail *mail, const struct InGameTrade *trade) { s32 i; for (i = 0; i < MAIL_WORDS_COUNT; i++) - { mail->words[i] = sIngameTradeMail[trade->mailNum][i]; - } StringCopy(mail->playerName, trade->otName); PadNameString(mail->playerName, CHAR_SPACE); @@ -4626,25 +4621,25 @@ u16 GetTradeSpecies(void) void CreateInGameTradePokemon(void) { - _CreateInGameTradePokemon(gSpecialVar_0x8005, gSpecialVar_0x8004); + CreateInGameTradePokemonInternal(gSpecialVar_0x8005, gSpecialVar_0x8004); } static void CB2_UpdateLinkTrade(void) { - if (AnimateTradeSequence() == TRUE) + if (DoTradeAnim() == TRUE) { - DestroySprite(&gSprites[sTradeData->monSpriteIds[TRADE_PLAYER]]); - FreeSpriteOamMatrix(&gSprites[sTradeData->monSpriteIds[TRADE_PARTNER]]); + DestroySprite(&gSprites[sTradeAnim->monSpriteIds[TRADE_PLAYER]]); + FreeSpriteOamMatrix(&gSprites[sTradeAnim->monSpriteIds[TRADE_PARTNER]]); TradeMons(gSelectedTradeMonPositions[TRADE_PLAYER], gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE); if (!IsWirelessTrade()) { - sTradeData->linkData[0] = LINKCMD_READY_FINISH_TRADE; - sTradeData->sendTradeFinishState = 1; + sTradeAnim->linkData[0] = LINKCMD_READY_FINISH_TRADE; + sTradeAnim->scheduleLinkTransfer = 1; } - SetMainCallback2(CB2_TryFinishTrade); + SetMainCallback2(CB2_WaitTradeComplete); } - TrySendTradeFinishData(); - UpdateTradeFinishFlags(); + HandleLinkDataSend(); + HandleLinkDataReceive(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -4652,7 +4647,7 @@ static void CB2_UpdateLinkTrade(void) UpdatePaletteFade(); } -static void CB2_TryFinishTrade(void) +static void CB2_WaitTradeComplete(void) { u8 mpId = TradeGetMultiplayerId(); if (IsWirelessTrade()) @@ -4661,15 +4656,15 @@ static void CB2_TryFinishTrade(void) } else { - UpdateTradeFinishFlags(); + HandleLinkDataReceive(); if (mpId == 0 - && sTradeData->playerLinkFlagFinishTrade == STATUS_READY - && sTradeData->partnerLinkFlagFinishTrade == STATUS_READY) + && sTradeAnim->playerFinishStatus == STATUS_READY + && sTradeAnim->partnerFinishStatus == STATUS_READY) { - sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; - SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, sizeof(sTradeData->linkData)); - sTradeData->playerLinkFlagFinishTrade = STATUS_CANCEL; - sTradeData->partnerLinkFlagFinishTrade = STATUS_CANCEL; + sTradeAnim->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeAnim->linkData, sizeof(sTradeAnim->linkData)); + sTradeAnim->playerFinishStatus = STATUS_CANCEL; + sTradeAnim->partnerFinishStatus = STATUS_CANCEL; } } RunTasks(); @@ -4690,24 +4685,20 @@ static void CB2_SaveAndEndTrade(void) case 1: SetTradeLinkStandbyCallback(0); gMain.state = 100; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 100: - if (++sTradeData->timer > 180) + if (++sTradeAnim->timer > 180) { gMain.state = 101; - sTradeData->timer = 0; + sTradeAnim->timer = 0; } if (_IsLinkTaskFinished()) - { gMain.state = 2; - } break; case 101: if (_IsLinkTaskFinished()) - { gMain.state = 2; - } break; case 2: gMain.state = 50; @@ -4723,10 +4714,10 @@ static void CB2_SaveAndEndTrade(void) SetContinueGameWarpStatusToDynamicWarp(); LinkFullSave_Init(); gMain.state++; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 51: - if (++sTradeData->timer == 5) + if (++sTradeAnim->timer == 5) gMain.state++; break; case 52: @@ -4738,38 +4729,34 @@ static void CB2_SaveAndEndTrade(void) else { // Save isn't finished, delay again - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state = 51; } break; case 4: LinkFullSave_ReplaceLastSector(); gMain.state = 40; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 40: - if (++sTradeData->timer > 50) + if (++sTradeAnim->timer > 50) { if (GetMultiplayerId() == 0) - { - sTradeData->timer = Random() % 30; - } + sTradeAnim->timer = Random() % 30; else - { - sTradeData->timer = 0; - } + sTradeAnim->timer = 0; gMain.state = 41; } break; case 41: - if (sTradeData->timer == 0) + if (sTradeAnim->timer == 0) { SetTradeLinkStandbyCallback(1); gMain.state = 42; } else { - sTradeData->timer--; + sTradeAnim->timer--; } break; case 42: @@ -4780,7 +4767,7 @@ static void CB2_SaveAndEndTrade(void) } break; case 5: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { gMain.state++; SetTradeLinkStandbyCallback(2); @@ -4804,13 +4791,9 @@ static void CB2_SaveAndEndTrade(void) if (IsBGMStopped() == TRUE) { if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) - { SetTradeLinkStandbyCallback(3); - } else - { SetCloseLinkCallback(); - } gMain.state++; } break; @@ -4820,13 +4803,13 @@ static void CB2_SaveAndEndTrade(void) if (_IsLinkTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(CB2_FreeTradeData); + SetMainCallback2(CB2_FreeTradeAnim); } } else if (!gReceivedRemoteLinkPlayers) { gSoftResetDisabled = FALSE; - SetMainCallback2(CB2_FreeTradeData); + SetMainCallback2(CB2_FreeTradeAnim); } break; } @@ -4839,7 +4822,7 @@ static void CB2_SaveAndEndTrade(void) UpdatePaletteFade(); } -static void CB2_FreeTradeData(void) +static void CB2_FreeTradeAnim(void) { if (!gPaletteFade.active) { @@ -4848,7 +4831,7 @@ static void CB2_FreeTradeData(void) Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(sTradeData); + FREE_AND_SET_NULL(sTradeAnim); if (gWirelessCommType) DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(gMain.savedCallback); @@ -4870,7 +4853,7 @@ static void Task_InGameTrade(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(CB2_InGameTrade); + SetMainCallback2(CB2_InitInGameTrade); gFieldCallback = FieldCB_ContinueScriptHandleMusic; DestroyTask(taskId); } @@ -4880,40 +4863,35 @@ static void CheckPartnersMonForRibbons(void) { u8 i; u8 numRibbons = 0; - for (i = 0; i < (MON_DATA_UNUSED_RIBBONS - MON_DATA_CHAMPION_RIBBON); i ++) - { + for (i = 0; i < (MON_DATA_UNUSED_RIBBONS - MON_DATA_CHAMPION_RIBBON); i++) numRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_CHAMPION_RIBBON + i); - } + if (numRibbons != 0) FlagSet(FLAG_SYS_RIBBON_GET); } void LoadTradeAnimGfx(void) { - InitTradeBgInternal(); + TradeAnimInit_LoadGfx(); } void DrawTextOnTradeWindow(u8 windowId, const u8 *str, u8 speed) { FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sTradeData->textColors[0] = TEXT_DYNAMIC_COLOR_6; - sTradeData->textColors[1] = TEXT_COLOR_WHITE; - sTradeData->textColors[2] = TEXT_COLOR_GREEN; - AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 0, sTradeData->textColors, speed, str); + sTradeAnim->textColors[0] = TEXT_DYNAMIC_COLOR_6; + sTradeAnim->textColors[1] = TEXT_COLOR_WHITE; + sTradeAnim->textColors[2] = TEXT_COLOR_GREEN; + AddTextPrinterParameterized4(windowId, FONT_NORMAL, 0, 2, 0, 0, sTradeAnim->textColors, speed, str); CopyWindowToVram(windowId, COPYWIN_FULL); } -#define idx data[0] -#define counter data[1] -#define signalComingBack data[2] - static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 paletteIdx = sWirelessSignalTiming[idx][0] * 16; + u16 paletteIdx = sWirelessSignalAnimParams[tIdx][0] * 16; - if (!signalComingBack) + if (!tSignalComingBack) { if (paletteIdx == 256) LoadPalette(sWirelessSignalNone_Pal, 0x30, 32); @@ -4928,37 +4906,37 @@ static void Task_AnimateWirelessSignal(u8 taskId) LoadPalette(&sWirelessSignalRecv_Pal[paletteIdx], 0x30, 32); } - if (sWirelessSignalTiming[idx][0] == 0 && counter == 0) + if (sWirelessSignalAnimParams[tIdx][0] == 0 && tCounter == 0) PlaySE(SE_M_HEAL_BELL); - if (counter == sWirelessSignalTiming[idx][1]) + if (tCounter == sWirelessSignalAnimParams[tIdx][1]) { - idx++; - counter = 0; - if (sWirelessSignalTiming[idx][1] == 0xFF) + tIdx++; + tCounter = 0; + if (sWirelessSignalAnimParams[tIdx][1] == 0xFF) { DestroyTask(taskId); } } else { - counter++; + tCounter++; } } -#undef idx -#undef counter -#undef signalComingBack +#undef tIdx +#undef tCounter +#undef tSignalComingBack -static void Task_NarrowWindowForCrossing_Wireless(u8 taskId) +static void Task_OpenCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) { - sTradeData->wirelessWinLeft = sTradeData->wirelessWinRight = DISPLAY_WIDTH / 2; - sTradeData->wirelessWinTop = 0; - sTradeData->wirelessWinBottom = DISPLAY_HEIGHT; + sTradeAnim->wirelessWinLeft = sTradeAnim->wirelessWinRight = DISPLAY_WIDTH / 2; + sTradeAnim->wirelessWinTop = 0; + sTradeAnim->wirelessWinBottom = DISPLAY_HEIGHT; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | @@ -4966,41 +4944,41 @@ static void Task_NarrowWindowForCrossing_Wireless(u8 taskId) WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeAnim->wirelessWinLeft, sTradeAnim->wirelessWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeAnim->wirelessWinTop, sTradeAnim->wirelessWinBottom)); data[0]++; - sTradeData->wirelessWinLeft -= 5; - sTradeData->wirelessWinRight += 5; + sTradeAnim->wirelessWinLeft -= 5; + sTradeAnim->wirelessWinRight += 5; - if (sTradeData->wirelessWinLeft < 80) + if (sTradeAnim->wirelessWinLeft < 80) DestroyTask(taskId); } -static void Task_NarrowWindowForCrossing_Cable(u8 taskId) +static void Task_CloseCenterWhiteColumn(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) { - sTradeData->wirelessWinLeft = 80; - sTradeData->wirelessWinRight = DISPLAY_WIDTH - 80; + sTradeAnim->wirelessWinLeft = 80; + sTradeAnim->wirelessWinRight = DISPLAY_WIDTH - 80; SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeAnim->wirelessWinLeft, sTradeAnim->wirelessWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeAnim->wirelessWinTop, sTradeAnim->wirelessWinBottom)); - if (sTradeData->wirelessWinLeft != DISPLAY_WIDTH / 2) + if (sTradeAnim->wirelessWinLeft != DISPLAY_WIDTH / 2) { data[0]++; - sTradeData->wirelessWinLeft += 5; - sTradeData->wirelessWinRight -= 5; + sTradeAnim->wirelessWinLeft += 5; + sTradeAnim->wirelessWinRight -= 5; - if (sTradeData->wirelessWinLeft > DISPLAY_WIDTH / 2 - 5) + if (sTradeAnim->wirelessWinLeft > DISPLAY_WIDTH / 2 - 5) BlendPalettes(0x8, 0, RGB_WHITEALPHA); } else @@ -5022,7 +5000,7 @@ static void CB2_SaveAndEndWirelessTrade(void) case 1: SetTradeLinkStandbyCallback(0); gMain.state = 2; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 2: if (_IsLinkTaskFinished()) @@ -5032,11 +5010,11 @@ static void CB2_SaveAndEndWirelessTrade(void) DrawTextOnTradeWindow(0, gStringVar4, 0); IncrementGameStat(GAME_STAT_POKEMON_TRADES); LinkFullSave_Init(); - sTradeData->timer = 0; + sTradeAnim->timer = 0; } break; case 3: - if (++sTradeData->timer == 5) + if (++sTradeAnim->timer == 5) gMain.state = 4; break; case 4: @@ -5046,34 +5024,34 @@ static void CB2_SaveAndEndWirelessTrade(void) } else { - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state = 3; } break; case 5: LinkFullSave_ReplaceLastSector(); gMain.state = 6; - sTradeData->timer = 0; + sTradeAnim->timer = 0; break; case 6: - if (++sTradeData->timer > 10) + if (++sTradeAnim->timer > 10) { if (GetMultiplayerId() == 0) - sTradeData->timer = Random() % 30; + sTradeAnim->timer = Random() % 30; else - sTradeData->timer = 0; + sTradeAnim->timer = 0; gMain.state = 7; } break; case 7: - if (sTradeData->timer == 0) + if (sTradeAnim->timer == 0) { SetTradeLinkStandbyCallback(1); gMain.state = 8; } else { - sTradeData->timer--; + sTradeAnim->timer--; } break; case 8: @@ -5084,7 +5062,7 @@ static void CB2_SaveAndEndWirelessTrade(void) } break; case 9: - if (++sTradeData->timer > 60) + if (++sTradeAnim->timer > 60) { gMain.state++; SetTradeLinkStandbyCallback(2); @@ -5109,7 +5087,7 @@ static void CB2_SaveAndEndWirelessTrade(void) if (_IsLinkTaskFinished()) { gSoftResetDisabled = FALSE; - SetMainCallback2(CB2_FreeTradeData); + SetMainCallback2(CB2_FreeTradeAnim); } break; } From 65d476d57539a7680dea2e51b462d4019ad4e8fe Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 09:32:41 -0500 Subject: [PATCH 036/290] Remove some incorrect color constant usage --- src/battle_message.c | 371 ++++++++++++++++--------------------------- 1 file changed, 136 insertions(+), 235 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index 9a0ba84b4c..586fdd268b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1481,288 +1481,236 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 1, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xF), .fontId = FONT_NORMAL, .x = 1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 2, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = 32, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_DARK_GRAY, + .fgColor = 1, + .shadowColor = 2, }, [B_WIN_VS_PLAYER] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_OPPONENT] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_1] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_2] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_3] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_MULTI_PLAYER_4] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_VS_OUTCOME_DRAW] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .shadowColor = 6, }, [B_WIN_VS_OUTCOME_LEFT] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .shadowColor = 6, }, [B_WIN_VS_OUTCOME_RIGHT] = { .fillValue = PIXEL_FILL(0x0), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .shadowColor = 6, }, }; @@ -1773,276 +1721,229 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] = .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 1, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_PROMPT] = { .fillValue = PIXEL_FILL(0xF), .fontId = FONT_NORMAL, .x = 1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_6, - .shadowColor = TEXT_COLOR_GREEN, + .fgColor = 1, + .bgColor = 15, + .shadowColor = 6, }, [B_WIN_ACTION_MENU] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_1] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_2] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_3] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_MOVE_NAME_4] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_DUMMY] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_PP_REMAINING] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 2, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_3, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_2, + .fgColor = 12, + .bgColor = 14, + .shadowColor = 11, }, [B_WIN_MOVE_TYPE] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_SWITCH_PROMPT] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NARROW, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_YESNO] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BOX] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [B_WIN_LEVEL_UP_BANNER] = { .fillValue = PIXEL_FILL(0), .fontId = FONT_NORMAL, .x = 32, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_COLOR_TRANSPARENT, - .shadowColor = TEXT_COLOR_DARK_GRAY, + .fgColor = 1, + .shadowColor = 2, }, [ARENA_WIN_PLAYER_NAME] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_COLOR_WHITE, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 1, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_VS] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_OPPONENT_NAME] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_MIND] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_SKILL] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_BODY] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_JUDGMENT_TITLE] = { .fillValue = PIXEL_FILL(0xE), .fontId = FONT_NORMAL, .x = -1, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 0, - .fgColor = TEXT_DYNAMIC_COLOR_4, - .bgColor = TEXT_DYNAMIC_COLOR_5, - .shadowColor = TEXT_DYNAMIC_COLOR_6, + .fgColor = 13, + .bgColor = 14, + .shadowColor = 15, }, [ARENA_WIN_JUDGMENT_TEXT] = { .fillValue = PIXEL_FILL(0x1), .fontId = FONT_NORMAL, .x = 0, .y = 1, - .letterSpacing = 0, - .lineSpacing = 0, .speed = 1, - .fgColor = TEXT_COLOR_DARK_GRAY, - .bgColor = TEXT_COLOR_WHITE, - .shadowColor = TEXT_COLOR_LIGHT_GRAY, + .fgColor = 2, + .bgColor = 1, + .shadowColor = 3, }, }; From 603d870ea0f4fb510a894bde4a1f999a021c9ac9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 09:36:18 -0500 Subject: [PATCH 037/290] Fix debug printing negative values --- src/mini_printf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mini_printf.c b/src/mini_printf.c index 8345a3935e..d96a9379a1 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -142,7 +142,7 @@ static s32 mini_strlen(const char *s) return len; } -static s32 mini_itoa(u32 value, u32 radix, s32 uppercase, bool32 unsig, char *buffer) +static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *buffer) { char *pbuffer = buffer; s32 negative = 0; From 27a5e05f757271cdbf8c6eaf7c5111267ad9dca2 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 10:20:18 -0500 Subject: [PATCH 038/290] Label data for screen effect tasks --- src/field_specials.c | 123 +++++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 45 deletions(-) diff --git a/src/field_specials.c b/src/field_specials.c index a2023196ba..dd03358ebf 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -94,8 +94,8 @@ static void LoadLinkPartnerObjectEventSpritePalette(u8, u8, u8); static void Task_PetalburgGymSlideOpenRoomDoors(u8); static void PetalburgGymSetDoorMetatiles(u8, u16); static void Task_PCTurnOnEffect(u8); -static void PCTurnOnEffect_0(struct Task *); -static void PCTurnOnEffect_1(s16, s8, s8); +static void PCTurnOnEffect(struct Task *); +static void PCTurnOnEffect_SetMetatile(s16, s8, s8); static void PCTurnOffEffect(void); static void Task_LotteryCornerComputerEffect(u8); static void LotteryCornerComputerEffect(struct Task *); @@ -966,34 +966,44 @@ void FieldShowRegionMap(void) SetMainCallback2(CB2_FieldShowRegionMap); } +// Task data for Task_PCTurnOnEffect and Task_LotteryCornerComputerEffect +#define tPaused data[0] // Never set +#define tTaskId data[1] +#define tFlickerCount data[2] +#define tTimer data[3] +#define tIsScreenOn data[4] + +// For this special, gSpecialVar_0x8004 is expected to be some PC_LOCATION_* value. void DoPCTurnOnEffect(void) { if (FuncIsActiveTask(Task_PCTurnOnEffect) != TRUE) { u8 taskId = CreateTask(Task_PCTurnOnEffect, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tPaused = FALSE; + gTasks[taskId].tTaskId = taskId; + gTasks[taskId].tFlickerCount = 0; + gTasks[taskId].tTimer = 0; + gTasks[taskId].tIsScreenOn = FALSE; } } static void Task_PCTurnOnEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->data[0] == 0) - PCTurnOnEffect_0(task); + if (!task->tPaused) + PCTurnOnEffect(task); } -static void PCTurnOnEffect_0(struct Task *task) +static void PCTurnOnEffect(struct Task *task) { u8 playerDirection; s8 dx = 0; s8 dy = 0; - if (task->data[3] == 6) + if (task->tTimer == 6) { - task->data[3] = 0; + task->tTimer = 0; + + // Get where the PC should be, depending on where the player is looking. playerDirection = GetPlayerFacingDirection(); switch (playerDirection) { @@ -1010,39 +1020,47 @@ static void PCTurnOnEffect_0(struct Task *task) dy = -1; break; } - PCTurnOnEffect_1(task->data[4], dx, dy); + + // Update map + PCTurnOnEffect_SetMetatile(task->tIsScreenOn, dx, dy); DrawWholeMapView(); - task->data[4] ^= 1; - if ((++task->data[2]) == 5) - DestroyTask(task->data[1]); + + // Screen flickers 5 times. Odd number and starting with the + // screen off means the animation ends with the screen on. + task->tIsScreenOn ^= 1; + if (++task->tFlickerCount == 5) + DestroyTask(task->tTaskId); } - task->data[3]++; + task->tTimer++; } -static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy) +static void PCTurnOnEffect_SetMetatile(s16 isScreenOn, s8 dx, s8 dy) { - u16 tileId = 0; - if (isPcTurnedOn) + u16 metatileId = 0; + if (isScreenOn) { + // Screen is off, set it on if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - tileId = METATILE_Building_PC_Off; + metatileId = METATILE_Building_PC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; + metatileId = METATILE_BrendansMaysHouse_BrendanPC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - tileId = METATILE_BrendansMaysHouse_MayPC_Off; + metatileId = METATILE_BrendansMaysHouse_MayPC_Off; } else { + // Screen is on, set it off if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - tileId = METATILE_Building_PC_On; + metatileId = METATILE_Building_PC_On; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - tileId = METATILE_BrendansMaysHouse_BrendanPC_On; + metatileId = METATILE_BrendansMaysHouse_BrendanPC_On; else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - tileId = METATILE_BrendansMaysHouse_MayPC_On; + metatileId = METATILE_BrendansMaysHouse_MayPC_On; } - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK); + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK); } +// For this special, gSpecialVar_0x8004 is expected to be some PC_LOCATION_* value. void DoPCTurnOffEffect(void) { PCTurnOffEffect(); @@ -1052,7 +1070,9 @@ static void PCTurnOffEffect(void) { s8 dx = 0; s8 dy = 0; - u16 tileId = 0; + u16 metatileId = 0; + + // Get where the PC should be, depending on where the player is looking. u8 playerDirection = GetPlayerFacingDirection(); switch (playerDirection) { @@ -1069,13 +1089,15 @@ static void PCTurnOffEffect(void) dy = -1; break; } + if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) - tileId = METATILE_Building_PC_Off; + metatileId = METATILE_Building_PC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) - tileId = METATILE_BrendansMaysHouse_BrendanPC_Off; + metatileId = METATILE_BrendansMaysHouse_BrendanPC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE) - tileId = METATILE_BrendansMaysHouse_MayPC_Off; - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, tileId | MAPGRID_COLLISION_MASK); + metatileId = METATILE_BrendansMaysHouse_MayPC_Off; + + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + MAP_OFFSET, gSaveBlock1Ptr->pos.y + dy + MAP_OFFSET, metatileId | MAPGRID_COLLISION_MASK); DrawWholeMapView(); } @@ -1084,42 +1106,47 @@ void DoLotteryCornerComputerEffect(void) if (FuncIsActiveTask(Task_LotteryCornerComputerEffect) != TRUE) { u8 taskId = CreateTask(Task_LotteryCornerComputerEffect, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = taskId; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tPaused = FALSE; + gTasks[taskId].tTaskId = taskId; + gTasks[taskId].tFlickerCount = 0; + gTasks[taskId].tTimer = 0; + gTasks[taskId].tIsScreenOn = FALSE; } } static void Task_LotteryCornerComputerEffect(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->data[0] == 0) + if (!task->tPaused) LotteryCornerComputerEffect(task); } static void LotteryCornerComputerEffect(struct Task *task) { - if (task->data[3] == 6) + if (task->tTimer == 6) { - task->data[3] = 0; - if (task->data[4] != 0) + task->tTimer = 0; + if (task->tIsScreenOn) { + // Screen is on, set it off MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Normal | MAPGRID_COLLISION_MASK); MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Normal | MAPGRID_COLLISION_MASK); } else { + // Screen is off, set it on MapGridSetMetatileIdAt(11 + MAP_OFFSET, 1 + MAP_OFFSET, METATILE_Shop_Laptop1_Flash | MAPGRID_COLLISION_MASK); MapGridSetMetatileIdAt(11 + MAP_OFFSET, 2 + MAP_OFFSET, METATILE_Shop_Laptop2_Flash | MAPGRID_COLLISION_MASK); } DrawWholeMapView(); - task->data[4] ^= 1; - if ((++task->data[2]) == 5) - DestroyTask(task->data[1]); + + // Screen flickers 5 times. Odd number and starting with the + // screen off means the animation ends with the screen on. + task->tIsScreenOn ^= 1; + if (++task->tFlickerCount == 5) + DestroyTask(task->tTaskId); } - task->data[3]++; + task->tTimer++; } void EndLotteryCornerComputerEffect(void) @@ -1129,6 +1156,12 @@ void EndLotteryCornerComputerEffect(void) DrawWholeMapView(); } +#undef tPaused +#undef tTaskId +#undef tFlickerCount +#undef tTimer +#undef tIsScreenOn + void SetTrickHouseNuggetFlag(void) { u16 *specVar = &gSpecialVar_0x8004; From 43af7d46ca500de5244a94f1dab51988f833dce5 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 10:37:11 -0500 Subject: [PATCH 039/290] Label data for elevator effects --- src/field_specials.c | 124 +++++++++++++++++++++++++++---------------- 1 file changed, 79 insertions(+), 45 deletions(-) diff --git a/src/field_specials.c b/src/field_specials.c index dd03358ebf..cfa12a4181 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1664,7 +1664,7 @@ void OffsetCameraForBattle(void) SetCameraPanning(8, 0); } -const struct WindowTemplate gElevatorFloor_WindowTemplate = +static const struct WindowTemplate sWindowTemplate_ElevatorFloor = { .bg = 0, .tilemapLeft = 21, @@ -1675,7 +1675,7 @@ const struct WindowTemplate gElevatorFloor_WindowTemplate = .baseBlock = 8, }; -const u8 *const gDeptStoreFloorNames[] = +static const u8 *const sDeptStoreFloorNames[] = { [DEPT_STORE_FLOORNUM_B4F] = gText_B4F, [DEPT_STORE_FLOORNUM_B3F] = gText_B3F, @@ -1695,7 +1695,11 @@ const u8 *const gDeptStoreFloorNames[] = [DEPT_STORE_FLOORNUM_ROOFTOP] = gText_Rooftop }; -static const u16 sElevatorWindowTiles_Ascending[][3] = +#define ELEVATOR_WINDOW_WIDTH 3 +#define ELEVATOR_WINDOW_HEIGHT 3 +#define ELEVATOR_LIGHT_STAGES 3 + +static const u16 sElevatorWindowTiles_Ascending[ELEVATOR_WINDOW_HEIGHT][ELEVATOR_LIGHT_STAGES] = { { METATILE_BattleFrontier_Elevator_Top0, @@ -1714,7 +1718,7 @@ static const u16 sElevatorWindowTiles_Ascending[][3] = }, }; -static const u16 sElevatorWindowTiles_Descending[][3] = +static const u16 sElevatorWindowTiles_Descending[ELEVATOR_WINDOW_HEIGHT][ELEVATOR_LIGHT_STAGES] = { { METATILE_BattleFrontier_Elevator_Top0, @@ -1798,53 +1802,66 @@ u16 GetDeptStoreDefaultFloorChoice(void) return sLilycoveDeptStore_DefaultFloorChoice; } +// Task data for Task_MoveElevator +#define tTimer data[1] +#define tMoveCounter data[2] +#define tVerticalPan data[4] +#define tTotalMoves data[5] +#define tDescending data[6] + +// The maximum considered difference between floors. +// Elevator trips with a larger difference are treated the same +// (i.e. traveling 9 floors and 200 floors would take the same amount of time). +#define MAX_ELEVATOR_TRIP 9 + +// gSpecialVar_0x8005 here is expected to be the current floor number, and +// gSpecialVar_0x8006 is expected to be the destination floor number. void MoveElevator(void) { - static const u8 sElevatorTripLength[] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 }; + static const u8 sElevatorTripLength[MAX_ELEVATOR_TRIP] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 }; s16 *data = gTasks[CreateTask(Task_MoveElevator, 9)].data; u16 floorDelta; - data[1] = 0; - data[2] = 0; - data[4] = 1; + tTimer = 0; + tMoveCounter = 0; + tVerticalPan = 1; - // descending if (gSpecialVar_0x8005 > gSpecialVar_0x8006) { floorDelta = gSpecialVar_0x8005 - gSpecialVar_0x8006; - data[6] = TRUE; + tDescending = TRUE; } else { floorDelta = gSpecialVar_0x8006 - gSpecialVar_0x8005; - data[6] = FALSE; + tDescending = FALSE; } - if (floorDelta > 8) - floorDelta = 8; + if (floorDelta > MAX_ELEVATOR_TRIP - 1) + floorDelta = MAX_ELEVATOR_TRIP - 1; - data[5] = sElevatorTripLength[floorDelta]; + tTotalMoves = sElevatorTripLength[floorDelta]; SetCameraPanningCallback(NULL); - MoveElevatorWindowLights(floorDelta, data[6]); + MoveElevatorWindowLights(floorDelta, tDescending); PlaySE(SE_ELEVATOR); } static void Task_MoveElevator(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1]++; - if (data[1] % 3 == 0) + tTimer++; + if (tTimer % 3 == 0) { - data[1] = 0; - data[2]++; - data[4] = -data[4]; - SetCameraPanning(0, data[4]); + tTimer = 0; + tMoveCounter++; + tVerticalPan = -tVerticalPan; + SetCameraPanning(0, tVerticalPan); - // arrived at floor - if (data[2] == data[5]) + if (tMoveCounter == tTotalMoves) { + // Arrived at floor PlaySE(SE_DING_DONG); DestroyTask(taskId); ScriptContext_Enable(); @@ -1853,18 +1870,24 @@ static void Task_MoveElevator(u8 taskId) } } +#undef tTimer +#undef tMoveCounter +#undef tVerticalPan +#undef tTotalMoves +#undef tDescending + void ShowDeptStoreElevatorFloorSelect(void) { int xPos; - sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate); + sTutorMoveAndElevatorWindowId = AddWindow(&sWindowTemplate_ElevatorFloor); SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, FALSE); xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gText_ElevatorNowOn, 64); AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gText_ElevatorNowOn, xPos, 1, TEXT_SKIP_DRAW, NULL); - xPos = GetStringCenterAlignXOffset(FONT_NORMAL, gDeptStoreFloorNames[gSpecialVar_0x8005], 64); - AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SKIP_DRAW, NULL); + xPos = GetStringCenterAlignXOffset(FONT_NORMAL, sDeptStoreFloorNames[gSpecialVar_0x8005], 64); + AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, FONT_NORMAL, sDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SKIP_DRAW, NULL); PutWindowTilemap(sTutorMoveAndElevatorWindowId); CopyWindowToVram(sTutorMoveAndElevatorWindowId, COPYWIN_FULL); @@ -1876,17 +1899,23 @@ void CloseDeptStoreElevatorWindow(void) RemoveWindow(sTutorMoveAndElevatorWindowId); } +// Task data for Task_MoveElevatorWindowLights +#define tMoveCounter data[0] +#define tTimer data[1] +#define tDescending data[2] +#define tTotalMoves data[3] + static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending) { - static const u8 sElevatorLightCycles[] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 }; + static const u8 sElevatorLightCycles[MAX_ELEVATOR_TRIP] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 }; if (FuncIsActiveTask(Task_MoveElevatorWindowLights) != TRUE) { u8 taskId = CreateTask(Task_MoveElevatorWindowLights, 8); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = descending; - gTasks[taskId].data[3] = sElevatorLightCycles[floorDelta]; + gTasks[taskId].tMoveCounter = 0; + gTasks[taskId].tTimer = 0; + gTasks[taskId].tDescending = descending; + gTasks[taskId].tTotalMoves = sElevatorLightCycles[floorDelta]; } } @@ -1895,36 +1924,41 @@ static void Task_MoveElevatorWindowLights(u8 taskId) u8 x, y; s16 *data = gTasks[taskId].data; - if (data[1] == 6) + if (tTimer == 6) { - data[0]++; + tMoveCounter++; - // ascending - if (data[2] == FALSE) + if (!tDescending) { - for (y = 0; y < 3; y++) + // Ascending + for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++) { - for (x = 0; x < 3; x++) - MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][data[0] % 3] | MAPGRID_COLLISION_MASK); + for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++) + MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Ascending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_COLLISION_MASK); } } - // descending else { - for (y = 0; y < 3; y++) + // Descending + for (y = 0; y < ELEVATOR_WINDOW_HEIGHT; y++) { - for (x = 0; x < 3; x++) - MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][data[0] % 3] | MAPGRID_COLLISION_MASK); + for (x = 0; x < ELEVATOR_WINDOW_WIDTH; x++) + MapGridSetMetatileIdAt(x + MAP_OFFSET + 1, y + MAP_OFFSET, sElevatorWindowTiles_Descending[y][tMoveCounter % ELEVATOR_LIGHT_STAGES] | MAPGRID_COLLISION_MASK); } } DrawWholeMapView(); - data[1] = 0; - if (data[0] == data[3]) + tTimer = 0; + if (tMoveCounter == tTotalMoves) DestroyTask(taskId); } - data[1]++; + tTimer++; } +#undef tMoveCounter +#undef tTimer +#undef tDescending +#undef tTotalMoves + void BufferVarsForIVRater(void) { u8 i; From 9003966fcc4e3081db28774c26941a588d49ffbe Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 11:43:21 -0500 Subject: [PATCH 040/290] Misc field_specials cleanup --- data/maps/BirthIsland_Exterior/scripts.inc | 17 +-- data/maps/PetalburgCity/scripts.inc | 2 +- data/specials.inc | 2 +- include/constants/battle_pyramid.h | 2 +- include/constants/field_specials.h | 6 + src/battle_pyramid.c | 20 +-- .../battle_pyramid_open_level_wild_mons.h | 2 +- src/field_effect.c | 71 +++++++---- src/field_specials.c | 119 ++++++++++-------- 9 files changed, 141 insertions(+), 100 deletions(-) diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 68d3124d95..d2174eee99 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -48,21 +48,24 @@ BirthIsland_Exterior_EventScript_Triangle:: special DoDeoxysRockInteraction waitstate switch VAR_RESULT - case 0, BirthIsland_Exterior_EventScript_NotSolved1 - case 1, BirthIsland_Exterior_EventScript_NotSolved2 - case 2, BirthIsland_Exterior_EventScript_Deoxys - case 3, BirthIsland_Exterior_EventScript_NotSolved3 + case DEOXYS_ROCK_FAILED, BirthIsland_Exterior_EventScript_Failed + case DEOXYS_ROCK_PROGRESSED, BirthIsland_Exterior_EventScript_Progressed + case DEOXYS_ROCK_SOLVED, BirthIsland_Exterior_EventScript_Deoxys + case DEOXYS_ROCK_COMPLETE, BirthIsland_Exterior_EventScript_Complete end -BirthIsland_Exterior_EventScript_NotSolved1:: +@ The actual rock triangle movement is handled by DoDeoxysRockInteraction. +@ Unless the player has solved the puzzle and needs to encounter Deoxys, +@ there's nothing else the script needs to do. +BirthIsland_Exterior_EventScript_Failed:: release end -BirthIsland_Exterior_EventScript_NotSolved2:: +BirthIsland_Exterior_EventScript_Progressed:: release end -BirthIsland_Exterior_EventScript_NotSolved3:: +BirthIsland_Exterior_EventScript_Complete:: release end diff --git a/data/maps/PetalburgCity/scripts.inc b/data/maps/PetalburgCity/scripts.inc index 3609b26226..a9dd1014f2 100644 --- a/data/maps/PetalburgCity/scripts.inc +++ b/data/maps/PetalburgCity/scripts.inc @@ -38,7 +38,7 @@ PetalburgCity_OnFrame: PetalburgCity_EventScript_WallyTutorial:: lockall special SavePlayerParty - special PutZigzagoonInPlayerParty + special LoadWallyZigzagoon applymovement LOCALID_WALLY, PetalburgCity_Movement_WallyTutorialWally applymovement OBJ_EVENT_ID_PLAYER, PetalburgCity_Movement_WallyTutorialPlayer waitmovement 0 diff --git a/data/specials.inc b/data/specials.inc index 187e49ec77..26eb4e134b 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -311,7 +311,7 @@ gSpecials:: def_special TryUpdateRusturfTunnelState def_special IsGrassTypeInParty def_special DoContestHallWarp - def_special PutZigzagoonInPlayerParty + def_special LoadWallyZigzagoon def_special IsStarterInParty def_special CopyCurSecretBaseOwnerName_StrVar1 def_special ScriptCheckFreePokemonStorageSpace diff --git a/include/constants/battle_pyramid.h b/include/constants/battle_pyramid.h index 297f3b1fff..ac80a2d7d3 100644 --- a/include/constants/battle_pyramid.h +++ b/include/constants/battle_pyramid.h @@ -1,7 +1,7 @@ #ifndef GUARD_CONSTANTS_BATTLE_PYRAMID_H #define GUARD_CONSTANTS_BATTLE_PYRAMID_H -#define TOTAL_ROUNDS 20 +#define TOTAL_PYRAMID_ROUNDS 20 #define PICKUP_ITEMS_PER_ROUND 10 #define HINT_EXIT_DIRECTION 0 diff --git a/include/constants/field_specials.h b/include/constants/field_specials.h index a01151378b..6659403313 100644 --- a/include/constants/field_specials.h +++ b/include/constants/field_specials.h @@ -80,4 +80,10 @@ #define FANCOUNTER_FINISHED_CONTEST 2 #define FANCOUNTER_USED_BATTLE_TOWER 3 +// Return values for DoDeoxysRockInteraction +#define DEOXYS_ROCK_FAILED 0 +#define DEOXYS_ROCK_PROGRESSED 1 +#define DEOXYS_ROCK_SOLVED 2 +#define DEOXYS_ROCK_COMPLETE 3 + #endif // GUARD_CONSTANTS_FIELD_SPECIALS_H diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 32fab34026..84a439037d 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -284,7 +284,7 @@ static const u8 sFloorTemplateOffsets[FRONTIER_STAGES_PER_CHALLENGE] = 0, 4, 9, 14, 19, 24, 29 }; -static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = +static const u16 sPickupItemsLvl50[TOTAL_PYRAMID_ROUNDS][PICKUP_ITEMS_PER_ROUND] = { {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_CHERI_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_PECHA_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, @@ -308,7 +308,7 @@ static const u16 sPickupItemsLvl50[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = {ITEM_HYPER_POTION, ITEM_X_DEFEND, ITEM_LUM_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_QUICK_CLAW, ITEM_KINGS_ROCK, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, }; -static const u16 sPickupItemsLvlOpen[TOTAL_ROUNDS][PICKUP_ITEMS_PER_ROUND] = +static const u16 sPickupItemsLvlOpen[TOTAL_PYRAMID_ROUNDS][PICKUP_ITEMS_PER_ROUND] = { {ITEM_HYPER_POTION, ITEM_FLUFFY_TAIL, ITEM_CHERI_BERRY, ITEM_ETHER, ITEM_LUM_BERRY, ITEM_REVIVE, ITEM_BRIGHT_POWDER, ITEM_SHELL_BELL, ITEM_MAX_REVIVE, ITEM_SACRED_ASH}, {ITEM_HYPER_POTION, ITEM_DIRE_HIT, ITEM_PECHA_BERRY, ITEM_ETHER, ITEM_LEPPA_BERRY, ITEM_REVIVE, ITEM_LEFTOVERS, ITEM_CHOICE_BAND, ITEM_FULL_RESTORE, ITEM_MAX_ELIXIR}, @@ -977,10 +977,10 @@ static void SetPickupItem(void) u8 id; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 floor = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; + u32 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_PYRAMID_ROUNDS; - if (round >= TOTAL_ROUNDS) - round = TOTAL_ROUNDS - 1; + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; id = GetPyramidFloorTemplateId(); itemIndex = (gSpecialVar_LastTalked - sPyramidFloorTemplates[id].numTrainers) - 1; @@ -1345,10 +1345,10 @@ void GenerateBattlePyramidWildMon(void) const struct PyramidWildMon *wildMons; u32 id; u32 lvl = gSaveBlock2Ptr->frontier.lvlMode; - u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_ROUNDS; + u16 round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvl] / FRONTIER_STAGES_PER_CHALLENGE) % TOTAL_PYRAMID_ROUNDS; - if (round >= TOTAL_ROUNDS) - round = TOTAL_ROUNDS - 1; + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; if (lvl != FRONTIER_LVL_50) wildMons = sOpenLevelWildMonPointers[round]; @@ -1961,8 +1961,8 @@ u16 GetBattlePyramidPickupItemId(void) u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; int round = (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / FRONTIER_STAGES_PER_CHALLENGE); - if (round >= TOTAL_ROUNDS) - round = TOTAL_ROUNDS - 1; + if (round >= TOTAL_PYRAMID_ROUNDS) + round = TOTAL_PYRAMID_ROUNDS - 1; rand = Random() % 100; diff --git a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h index f09448b82c..792bc28dd5 100644 --- a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h +++ b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h @@ -1038,7 +1038,7 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round20[] = } }; -static const struct PyramidWildMon *const sOpenLevelWildMonPointers[TOTAL_ROUNDS] = +static const struct PyramidWildMon *const sOpenLevelWildMonPointers[TOTAL_PYRAMID_ROUNDS] = { sOpenLevelWildMons_Round1, sOpenLevelWildMons_Round2, diff --git a/src/field_effect.c b/src/field_effect.c index 8ffc9b3a64..7cae89d22f 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3831,26 +3831,38 @@ static void SpriteCB_DeoxysRockFragment(struct Sprite *sprite) DestroySprite(sprite); } +// Task data for Task_MoveDeoxysRock +#define tState data[0] +#define tSpriteId data[1] +#define tTargetX data[2] +#define tTargetY data[3] +#define tCurX data[4] +#define tCurY data[5] +#define tVelocityX data[6] +#define tVelocityY data[7] +#define tMoveSteps data[8] +#define tObjEventId data[9] + bool8 FldEff_MoveDeoxysRock(struct Sprite *sprite) { - u8 objectEventIdBuffer; - if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventIdBuffer)) + u8 objectEventId; + if (!TryGetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &objectEventId)) { struct ObjectEvent *object; int xPos, yPos; u8 taskId; - object = &gObjectEvents[objectEventIdBuffer]; + object = &gObjectEvents[objectEventId]; xPos = object->currentCoords.x - MAP_OFFSET; yPos = object->currentCoords.y - MAP_OFFSET; xPos = (gFieldEffectArguments[3] - xPos) * 16; yPos = (gFieldEffectArguments[4] - yPos) * 16; ShiftObjectEventCoords(object, gFieldEffectArguments[3] + MAP_OFFSET, gFieldEffectArguments[4] + MAP_OFFSET); taskId = CreateTask(Task_MoveDeoxysRock, 80); - gTasks[taskId].data[1] = object->spriteId; - gTasks[taskId].data[2] = gSprites[object->spriteId].x + xPos; - gTasks[taskId].data[3] = gSprites[object->spriteId].y + yPos; - gTasks[taskId].data[8] = gFieldEffectArguments[5]; - gTasks[taskId].data[9] = objectEventIdBuffer; + gTasks[taskId].tSpriteId = object->spriteId; + gTasks[taskId].tTargetX = gSprites[object->spriteId].x + xPos; + gTasks[taskId].tTargetY = gSprites[object->spriteId].y + yPos; + gTasks[taskId].tMoveSteps = gFieldEffectArguments[5]; + gTasks[taskId].tObjEventId = objectEventId; } return FALSE; } @@ -3858,29 +3870,30 @@ bool8 FldEff_MoveDeoxysRock(struct Sprite *sprite) static void Task_MoveDeoxysRock(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite *sprite = &gSprites[data[1]]; - switch (data[0]) + struct Sprite *sprite = &gSprites[tSpriteId]; + switch (tState) { case 0: - data[4] = sprite->x << 4; - data[5] = sprite->y << 4; - data[6] = SAFE_DIV(data[2] * 16 - data[4], data[8]); - data[7] = SAFE_DIV(data[3] * 16 - data[5], data[8]); - data[0]++; + tCurX = sprite->x << 4; + tCurY = sprite->y << 4; + tVelocityX = SAFE_DIV(tTargetX * 16 - tCurX, tMoveSteps); + tVelocityY = SAFE_DIV(tTargetY * 16 - tCurY, tMoveSteps); + tState++; + // fallthrough case 1: - if (data[8] != 0) + if (tMoveSteps != 0) { - data[8]--; - data[4] += data[6]; - data[5] += data[7]; - sprite->x = data[4] >> 4; - sprite->y = data[5] >> 4; + tMoveSteps--; + tCurX += tVelocityX; + tCurY += tVelocityY; + sprite->x = tCurX >> 4; + sprite->y = tCurY >> 4; } else { - struct ObjectEvent *object = &gObjectEvents[data[9]]; - sprite->x = data[2]; - sprite->y = data[3]; + struct ObjectEvent *object = &gObjectEvents[tObjEventId]; + sprite->x = tTargetX; + sprite->y = tTargetY; ShiftStillObjectEventCoords(object); object->triggerGroundEffectsOnStop = TRUE; FieldEffectActiveListRemove(FLDEFF_MOVE_DEOXYS_ROCK); @@ -3890,3 +3903,13 @@ static void Task_MoveDeoxysRock(u8 taskId) } } +#undef tState +#undef tSpriteId +#undef tTargetX +#undef tTargetY +#undef tCurX +#undef tCurY +#undef tVelocityX +#undef tVelocityY +#undef tMoveSteps +#undef tObjEventId diff --git a/src/field_specials.c b/src/field_specials.c index cfa12a4181..7e8d102563 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -46,6 +46,7 @@ #include "wallclock.h" #include "window.h" #include "constants/battle_frontier.h" +#include "constants/battle_pyramid.h" #include "constants/battle_tower.h" #include "constants/decorations.h" #include "constants/event_objects.h" @@ -66,6 +67,15 @@ #include "constants/metatile_labels.h" #include "palette.h" +#define TAG_ITEM_ICON 5500 + +#define GFXTAG_MULTICHOICE_SCROLL_ARROWS 2000 +#define PALTAG_MULTICHOICE_SCROLL_ARROWS 100 + +#define ELEVATOR_WINDOW_WIDTH 3 +#define ELEVATOR_WINDOW_HEIGHT 3 +#define ELEVATOR_LIGHT_STAGES 3 + EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; static EWRAM_DATA u32 sBikeCyclingTimer = 0; @@ -1246,7 +1256,7 @@ void SpawnCameraObject(void) OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->pos.x + MAP_OFFSET, gSaveBlock1Ptr->pos.y + MAP_OFFSET, - 3); + 3); // elevation gObjectEvents[obj].invisible = TRUE; CameraObjectSetFollowedSpriteId(gObjectEvents[obj].spriteId); } @@ -1411,7 +1421,7 @@ void SetShoalItemFlag(u16 unused) FlagSet(FLAG_SYS_SHOAL_ITEM); } -void PutZigzagoonInPlayerParty(void) +void LoadWallyZigzagoon(void) { u16 monData; CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); @@ -1451,20 +1461,21 @@ bool8 IsPokerusInParty(void) return TRUE; } -#define horizontalPan data[0] -#define delayCounter data[1] -#define numShakes data[2] -#define delay data[3] -#define verticalPan data[4] +// Task data for Task_ShakeCamera +#define tHorizontalPan data[0] +#define tDelayCounter data[1] +#define tNumShakes data[2] +#define tDelay data[3] +#define tVerticalPan data[4] void ShakeCamera(void) { u8 taskId = CreateTask(Task_ShakeCamera, 9); - gTasks[taskId].horizontalPan = gSpecialVar_0x8005; - gTasks[taskId].delayCounter = 0; - gTasks[taskId].numShakes = gSpecialVar_0x8006; - gTasks[taskId].delay = gSpecialVar_0x8007; - gTasks[taskId].verticalPan = gSpecialVar_0x8004; + gTasks[taskId].tHorizontalPan = gSpecialVar_0x8005; + gTasks[taskId].tDelayCounter = 0; + gTasks[taskId].tNumShakes = gSpecialVar_0x8006; + gTasks[taskId].tDelay = gSpecialVar_0x8007; + gTasks[taskId].tVerticalPan = gSpecialVar_0x8004; SetCameraPanningCallback(NULL); PlaySE(SE_M_STRENGTH); } @@ -1473,15 +1484,15 @@ static void Task_ShakeCamera(u8 taskId) { s16 *data = gTasks[taskId].data; - delayCounter++; - if (delayCounter % delay == 0) + tDelayCounter++; + if (tDelayCounter % tDelay == 0) { - delayCounter = 0; - numShakes--; - horizontalPan = -horizontalPan; - verticalPan = -verticalPan; - SetCameraPanning(horizontalPan, verticalPan); - if (numShakes == 0) + tDelayCounter = 0; + tNumShakes--; + tHorizontalPan = -tHorizontalPan; + tVerticalPan = -tVerticalPan; + SetCameraPanning(tHorizontalPan, tVerticalPan); + if (tNumShakes == 0) { StopCameraShake(taskId); InstallCameraPanAheadCallback(); @@ -1495,11 +1506,11 @@ static void StopCameraShake(u8 taskId) ScriptContext_Enable(); } -#undef horizontalPan -#undef delayCounter -#undef numShakes -#undef delay -#undef verticalPan +#undef tHorizontalPan +#undef tDelayCounter +#undef tNumShakes +#undef tDelay +#undef tVerticalPan bool8 FoundBlackGlasses(void) { @@ -1524,7 +1535,8 @@ u8 GetLeadMonIndex(void) u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != 0) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE) return i; } return 0; @@ -1695,10 +1707,6 @@ static const u8 *const sDeptStoreFloorNames[] = [DEPT_STORE_FLOORNUM_ROOFTOP] = gText_Rooftop }; -#define ELEVATOR_WINDOW_WIDTH 3 -#define ELEVATOR_WINDOW_HEIGHT 3 -#define ELEVATOR_LIGHT_STAGES 3 - static const u16 sElevatorWindowTiles_Ascending[ELEVATOR_WINDOW_HEIGHT][ELEVATOR_LIGHT_STAGES] = { { @@ -2020,13 +2028,13 @@ bool8 UsedPokemonCenterWarp(void) MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F, MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F, MAP_UNION_ROOM, - 0xFFFF + MAP_UNDEFINED }; int i; u16 map = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum; - for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) + for (i = 0; sPokemonCenters[i] != MAP_UNDEFINED; i++) { if (sPokemonCenters[i] == map) return TRUE; @@ -2724,21 +2732,21 @@ static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId) .secondY = 0, .fullyUpThreshold = 0, .fullyDownThreshold = 0, - .tileTag = 2000, - .palTag = 100, + .tileTag = GFXTAG_MULTICHOICE_SCROLL_ARROWS, + .palTag = PALTAG_MULTICHOICE_SCROLL_ARROWS, .palNum = 0 }; struct Task *task = &gTasks[taskId]; struct ScrollArrowsTemplate template = sScrollableMultichoice_ScrollArrowsTemplate; - if (task->tMaxItemsOnScreen != task->data[1]) + if (task->tMaxItemsOnScreen != task->tNumItems) { template.firstX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; template.firstY = 8; template.secondX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8; template.secondY = task->tHeight * 8 + 10; template.fullyUpThreshold = 0; - template.fullyDownThreshold = task->data[1] - task->tMaxItemsOnScreen; + template.fullyDownThreshold = task->tNumItems - task->tMaxItemsOnScreen; task->tScrollArrowId = AddScrollIndicatorArrowPair(&template, &sScrollableMultichoice_ScrollOffset); } } @@ -2746,10 +2754,8 @@ static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId) static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId) { struct Task *task = &gTasks[taskId]; - if (task->tMaxItemsOnScreen != task->data[1]) - { + if (task->tMaxItemsOnScreen != task->tNumItems) RemoveScrollIndicatorArrowPair(task->tScrollArrowId); - } } // Removed for Emerald (replaced by ShowScrollableMultichoice) @@ -2973,8 +2979,6 @@ void CloseFrontierExchangeCornerItemIconWindow(void) RemoveWindow(sFrontierExchangeCorner_ItemIconWindowId); } -#define TAG_ITEM_ICON 5500 - static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection) { #include "data/battle_frontier/battle_frontier_exchange_corner.h" @@ -3255,12 +3259,14 @@ void ScrollableMultichoice_ClosePersistentMenu(void) #undef tListTaskId #undef tTaskId +#define DEOXYS_ROCK_LEVELS 11 + void DoDeoxysRockInteraction(void) { CreateTask(Task_DeoxysRockInteraction, 8); } -static const u16 sDeoxysRockPalettes[][16] = { +static const u16 sDeoxysRockPalettes[DEOXYS_ROCK_LEVELS][16] = { INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_1.gbapal"), INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_2.gbapal"), INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_3.gbapal"), @@ -3274,7 +3280,7 @@ static const u16 sDeoxysRockPalettes[][16] = { INCBIN_U16("graphics/field_effects/palettes/deoxys_rock_11.gbapal"), }; -static const u8 sDeoxysRockCoords[][2] = { +static const u8 sDeoxysRockCoords[DEOXYS_ROCK_LEVELS][2] = { { 15, 12 }, { 11, 14 }, { 15, 8 }, @@ -3290,11 +3296,11 @@ static const u8 sDeoxysRockCoords[][2] = { static void Task_DeoxysRockInteraction(u8 taskId) { - static const u8 sStoneMaxStepCounts[] = { 4, 8, 8, 8, 4, 4, 4, 6, 3, 3 }; + static const u8 sStoneMaxStepCounts[DEOXYS_ROCK_LEVELS - 1] = { 4, 8, 8, 8, 4, 4, 4, 6, 3, 3 }; if (FlagGet(FLAG_DEOXYS_ROCK_COMPLETE) == TRUE) { - gSpecialVar_Result = 3; + gSpecialVar_Result = DEOXYS_ROCK_COMPLETE; ScriptContext_Enable(); DestroyTask(taskId); } @@ -3309,13 +3315,13 @@ static void Task_DeoxysRockInteraction(u8 taskId) // Player failed to take the shortest path to the stone, so it resets. ChangeDeoxysRockLevel(0); VarSet(VAR_DEOXYS_ROCK_LEVEL, 0); - gSpecialVar_Result = 0; + gSpecialVar_Result = DEOXYS_ROCK_FAILED; DestroyTask(taskId); } - else if (rockLevel == 10) + else if (rockLevel == DEOXYS_ROCK_LEVELS - 1) { FlagSet(FLAG_DEOXYS_ROCK_COMPLETE); - gSpecialVar_Result = 2; + gSpecialVar_Result = DEOXYS_ROCK_SOLVED; ScriptContext_Enable(); DestroyTask(taskId); } @@ -3324,7 +3330,7 @@ static void Task_DeoxysRockInteraction(u8 taskId) rockLevel++; ChangeDeoxysRockLevel(rockLevel); VarSet(VAR_DEOXYS_ROCK_LEVEL, rockLevel); - gSpecialVar_Result = 1; + gSpecialVar_Result = DEOXYS_ROCK_PROGRESSED; DestroyTask(taskId); } } @@ -3337,9 +3343,9 @@ static void ChangeDeoxysRockLevel(u8 rockLevel) TryGetObjectEventIdByLocalIdAndMap(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); if (rockLevel == 0) - PlaySE(SE_M_CONFUSE_RAY); + PlaySE(SE_M_CONFUSE_RAY); // Failure sound else - PlaySE(SE_RG_DEOXYS_MOVE); + PlaySE(SE_RG_DEOXYS_MOVE); // Success sound CreateTask(WaitForDeoxysRockMovement, 8); gFieldEffectArguments[0] = LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK; @@ -3348,6 +3354,8 @@ static void ChangeDeoxysRockLevel(u8 rockLevel) gFieldEffectArguments[3] = sDeoxysRockCoords[rockLevel][0]; gFieldEffectArguments[4] = sDeoxysRockCoords[rockLevel][1]; + // Set number of movement steps. + // Resetting for failure is slow, successful movement is fast. if (rockLevel == 0) gFieldEffectArguments[5] = 60; else @@ -3865,8 +3873,9 @@ static void Task_CloseBattlePikeCurtain(u8 taskId) void GetBattlePyramidHint(void) { - gSpecialVar_Result = gSpecialVar_0x8004 / 7; - gSpecialVar_Result -= (gSpecialVar_Result / 20) * 20; + // gSpecialVar_0x8004 here is expected to be the current Battle Pyramid win streak. + gSpecialVar_Result = gSpecialVar_0x8004 / FRONTIER_STAGES_PER_CHALLENGE; + gSpecialVar_Result -= (gSpecialVar_Result / TOTAL_PYRAMID_ROUNDS) * TOTAL_PYRAMID_ROUNDS; } // Used to avoid a potential softlock if the player respawns on Dewford with no way off @@ -3901,13 +3910,13 @@ bool8 InPokemonCenter(void) MAP_TRADE_CENTER, MAP_RECORD_CORNER, MAP_BATTLE_COLOSSEUM_4P, - 0xFFFF + MAP_UNDEFINED }; int i; u16 map = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; - for (i = 0; sPokemonCenters[i] != 0xFFFF; i++) + for (i = 0; sPokemonCenters[i] != MAP_UNDEFINED; i++) { if (sPokemonCenters[i] == map) return TRUE; From 30f893f2558ed8ae95ad23c2813006edd109229d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 11:52:32 -0500 Subject: [PATCH 041/290] Fix comment mistake --- src/field_specials.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/field_specials.c b/src/field_specials.c index 7e8d102563..6251a4db7e 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1049,7 +1049,7 @@ static void PCTurnOnEffect_SetMetatile(s16 isScreenOn, s8 dx, s8 dy) u16 metatileId = 0; if (isScreenOn) { - // Screen is off, set it on + // Screen is on, set it off if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) metatileId = METATILE_Building_PC_Off; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) @@ -1059,7 +1059,7 @@ static void PCTurnOnEffect_SetMetatile(s16 isScreenOn, s8 dx, s8 dy) } else { - // Screen is on, set it off + // Screen is off, set it on if (gSpecialVar_0x8004 == PC_LOCATION_OTHER) metatileId = METATILE_Building_PC_On; else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE) From 07e00b2e41cf0180acbf57b3573cf99fbecacd16 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 15:24:15 -0500 Subject: [PATCH 042/290] Additional window id constant usage --- src/berry_tag_screen.c | 12 ++++++------ src/contest.c | 4 ++-- src/pokeblock.c | 4 ++-- src/wireless_communication_status_screen.c | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index b65341e67e..e43d686001 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -599,7 +599,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) switch (data[0]) { case 0x30: - FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; case 0x40: PrintBerryNumberAndName(); @@ -609,7 +609,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) CreateBerrySprite(); break; case 0x60: - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; case 0x70: PrintBerrySize(); @@ -621,7 +621,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) SetFlavorCirclesVisiblity(); break; case 0xA0: - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; case 0xB0: PrintBerryDescription1(); @@ -636,7 +636,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) switch (data[0]) { case 0x30: - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_DESC, PIXEL_FILL(0)); break; case 0x40: PrintBerryDescription2(); @@ -648,7 +648,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) SetFlavorCirclesVisiblity(); break; case 0x70: - FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_SIZE_FIRM, PIXEL_FILL(0)); break; case 0x80: PrintBerryFirmness(); @@ -661,7 +661,7 @@ static void Task_DisplayAnotherBerry(u8 taskId) CreateBerrySprite(); break; case 0xB0: - FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_BERRY_NAME, PIXEL_FILL(0)); break; case 0xC0: PrintBerryNumberAndName(); diff --git a/src/contest.c b/src/contest.c index 2a0e163a5c..2c0f66f6bd 100644 --- a/src/contest.c +++ b/src/contest.c @@ -5459,7 +5459,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) u8 speed; printerTemplate.currentChar = currChar; - printerTemplate.windowId = 4; + printerTemplate.windowId = WIN_GENERAL_TEXT; printerTemplate.fontId = FONT_NORMAL; printerTemplate.x = 0; printerTemplate.y = 1; @@ -5485,7 +5485,7 @@ static void Contest_StartTextPrinter(const u8 *currChar, bool32 b) AddTextPrinter(&printerTemplate, speed, 0); } - PutWindowTilemap(4); + PutWindowTilemap(WIN_GENERAL_TEXT); Contest_SetBgCopyFlags(0); } diff --git a/src/pokeblock.c b/src/pokeblock.c index 3f0b3b5c5f..e490f372c4 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -765,7 +765,7 @@ static void DrawPokeblockInfo(s32 pkblId) struct Pokeblock *pokeblock; u16 rectTilemapSrc[2]; - FillWindowPixelBuffer(7, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_FEEL, PIXEL_FILL(0)); if (pkblId != LIST_CANCEL) { @@ -802,7 +802,7 @@ static void DrawPokeblockInfo(s32 pkblId) for (i = 0; i < FLAVOR_COUNT; i++) CopyToBgTilemapBufferRect(2, rectTilemapSrc, (i / 3 * 6) + 1, (i % 3 * 2) + 13, 1, 2); - CopyWindowToVram(7, COPYWIN_GFX); + CopyWindowToVram(WIN_FEEL, COPYWIN_GFX); } ScheduleBgCopyTilemapToVram(0); diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 488a3291e6..dd99188eaa 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -266,7 +266,7 @@ static void PrintHeaderTexts(void) s32 i; FillWindowPixelBuffer(WIN_TITLE, PIXEL_FILL(0)); FillWindowPixelBuffer(WIN_GROUP_NAMES, PIXEL_FILL(0)); - FillWindowPixelBuffer(2, PIXEL_FILL(0)); + FillWindowPixelBuffer(WIN_GROUP_COUNTS, PIXEL_FILL(0)); // Print title WCSS_AddTextPrinterParameterized(WIN_TITLE, FONT_NORMAL, sHeaderTexts[0], GetStringCenterAlignXOffset(FONT_NORMAL, sHeaderTexts[0], 0xC0), 6, COLORMODE_GREEN); From 020266463c0bdd279db78981d14391d366e86e06 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 1 Feb 2023 15:44:48 -0500 Subject: [PATCH 043/290] Add fix for described UB --- src/wireless_communication_status_screen.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index a3c2f4e228..dc60f591d8 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -126,7 +126,6 @@ static const u8 *const sHeaderTexts[NUM_GROUPTYPES + 1] = { // Activity, group type, number of players // 0 players means the number of players can change and should be counted dynamically // GROUPTYPE_TOTAL have no unique group and are simply counted in the total of "people communicating" -// UB: GROUPTYPE_NONE (-1) can potentially be used as an index into a u8[4] in CountPlayersInGroupAndGetActivity static const u8 sActivityGroupInfo[][3] = { {ACTIVITY_BATTLE_SINGLE, GROUPTYPE_BATTLE, 2}, {ACTIVITY_BATTLE_DOUBLE, GROUPTYPE_BATTLE, 2}, @@ -382,6 +381,13 @@ static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * gr for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { +#ifdef UBFIX + // GROUPTYPE_NONE is -1, and shouldn't be used as an index into groupCounts. + // In theory the only activity with this group type (ACTIVITY_SEARCH) wouldn't + // satisfy the condition below, but not necessarily. + if (group_type(i) == GROUPTYPE_NONE) + continue; +#endif if (activity == group_activity(i) && player->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { if (group_players(i) == 0) From 62aed217fe7fcb162bfcef13cc4bb856465590e1 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 15 Aug 2022 14:09:07 -0400 Subject: [PATCH 044/290] Remove unused common symbols in window.c --- common_syms/window.txt | 3 --- gflib/window.c | 3 --- gflib/window.h | 3 --- 3 files changed, 9 deletions(-) diff --git a/common_syms/window.txt b/common_syms/window.txt index 416d9d7325..24c093a226 100644 --- a/common_syms/window.txt +++ b/common_syms/window.txt @@ -1,5 +1,2 @@ -gUnusedWindowVar1 -gUnusedWindowVar2 gTransparentTileNumber -gUnusedWindowVar3 gWindowBgTilemapBuffers diff --git a/gflib/window.c b/gflib/window.c index ff9e8a6e01..1621a08842 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -4,11 +4,8 @@ #include "bg.h" #include "blit.h" -u32 gUnusedWindowVar1; -u32 gUnusedWindowVar2; // This global is set to 0 and never changed. u8 gTransparentTileNumber; -u32 gUnusedWindowVar3; void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; extern u32 gWindowTileAutoAllocEnabled; diff --git a/gflib/window.h b/gflib/window.h index 583e7e1673..0000dd864d 100644 --- a/gflib/window.h +++ b/gflib/window.h @@ -74,8 +74,5 @@ void CopyWindowToVram8Bit(u8 windowId, u8 mode); extern struct Window gWindows[]; extern void *gWindowBgTilemapBuffers[]; -extern u32 gUnusedWindowVar1; -extern u32 gUnusedWindowVar2; -extern u32 gUnusedWindowVar3; #endif // GUARD_WINDOW_H From 5793a1a5e7865cd2a70706501c6ed801705b7fe3 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 2 Feb 2023 00:09:53 -0500 Subject: [PATCH 045/290] Correct some union room chat documentation --- ..._palette2.pal => chat_messages_window.pal} | 0 .../{window_1.pal => input_text.pal} | 0 .../{border.bin => keyboard.bin} | Bin .../{border.png => keyboard.png} | Bin graphics/union_room_chat/r_button.png | Bin 188 -> 177 bytes .../{unk_palette1.pal => unused.pal} | 0 graphics/union_room_chat/window_2.pal | 19 --- include/graphics.h | 8 +- src/graphics.c | 8 +- src/union_room_chat.c | 158 ++++++++++-------- 10 files changed, 94 insertions(+), 99 deletions(-) rename graphics/union_room_chat/{unk_palette2.pal => chat_messages_window.pal} (100%) rename graphics/union_room_chat/{window_1.pal => input_text.pal} (100%) rename graphics/union_room_chat/{border.bin => keyboard.bin} (100%) rename graphics/union_room_chat/{border.png => keyboard.png} (100%) rename graphics/union_room_chat/{unk_palette1.pal => unused.pal} (100%) delete mode 100644 graphics/union_room_chat/window_2.pal diff --git a/graphics/union_room_chat/unk_palette2.pal b/graphics/union_room_chat/chat_messages_window.pal similarity index 100% rename from graphics/union_room_chat/unk_palette2.pal rename to graphics/union_room_chat/chat_messages_window.pal diff --git a/graphics/union_room_chat/window_1.pal b/graphics/union_room_chat/input_text.pal similarity index 100% rename from graphics/union_room_chat/window_1.pal rename to graphics/union_room_chat/input_text.pal diff --git a/graphics/union_room_chat/border.bin b/graphics/union_room_chat/keyboard.bin similarity index 100% rename from graphics/union_room_chat/border.bin rename to graphics/union_room_chat/keyboard.bin diff --git a/graphics/union_room_chat/border.png b/graphics/union_room_chat/keyboard.png similarity index 100% rename from graphics/union_room_chat/border.png rename to graphics/union_room_chat/keyboard.png diff --git a/graphics/union_room_chat/r_button.png b/graphics/union_room_chat/r_button.png index 168a293f35474ee97ea6a9ed3754d59a6b5c978f..06079ca2113a79e665b763c48c086075818cf5ad 100644 GIT binary patch delta 123 zcmdnPxRFt@Gr-TCmrII^fq{Y7)59eQNDF{43p0>>d-qY$L`C~R8&4O<5RRF(y$3lN z3^HM^k*qXReihuNE+> WXz3gaE13i`mBG{1&t;ucLK6TA3MyOx delta 134 zcmdnUxQ9`(Gr-TCmrII^fq{Y7)59eQNOJ(O0t+*cyn9dO@kB-Y7#}JO0sl69D z84Nj`?=JYwFK+GVEj}S8=vOIQ4NIrtqD+a@$+LvGe)50hm~p60=bFvN>Eh;p7(^%h kZJiPzv9Ce4QhK)Cgm*f}KJN&=3pAR+)78&qol`;+056*@5dZ)H diff --git a/graphics/union_room_chat/unk_palette1.pal b/graphics/union_room_chat/unused.pal similarity index 100% rename from graphics/union_room_chat/unk_palette1.pal rename to graphics/union_room_chat/unused.pal diff --git a/graphics/union_room_chat/window_2.pal b/graphics/union_room_chat/window_2.pal deleted file mode 100644 index a8c95a3c04..0000000000 --- a/graphics/union_room_chat/window_2.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -156 197 98 -41 131 222 -0 82 172 -197 255 106 -172 230 49 -246 246 213 -255 49 49 -255 148 148 -131 164 213 -238 238 90 -65 65 65 -115 115 115 -172 172 172 -230 230 255 -0 0 0 -255 255 255 diff --git a/include/graphics.h b/include/graphics.h index 45dd9175de..135eaa95e3 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4992,10 +4992,10 @@ extern const u32 gUsePokeblockCondition_Gfx[]; extern const u16 gUnionRoomChat_Background_Pal[]; extern const u32 gUnionRoomChat_Background_Gfx[]; extern const u32 gUnionRoomChat_Background_Tilemap[]; -extern const u16 gUnionRoomChat_Window_Pal1[]; -extern const u16 gUnionRoomChat_Window_Pal2[]; -extern const u32 gUnionRoomChat_Border_Gfx[]; -extern const u32 gUnionRoomChat_Border_Tilemap[]; +extern const u16 gUnionRoomChat_InputText_Pal[]; +extern const u16 gUnionRoomChat_Keyboard_Pal[]; +extern const u32 gUnionRoomChat_Keyboard_Gfx[]; +extern const u32 gUnionRoomChat_Keyboard_Tilemap[]; extern const u32 gUnionRoomChat_RButtonLabels[]; // Use Pokeblock diff --git a/src/graphics.c b/src/graphics.c index e0045ba6b3..f288b98bf1 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1427,10 +1427,10 @@ const u32 gNamingScreenKeyboardSymbols_Tilemap[] = INCBIN_U32("graphics/naming_s const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal"); const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz"); const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.bin.lz"); -const u16 gUnionRoomChat_Window_Pal1[] = INCBIN_U16("graphics/union_room_chat/window_1.gbapal"); -const u16 gUnionRoomChat_Window_Pal2[] = INCBIN_U16("graphics/union_room_chat/window_2.gbapal"); -const u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz"); -const u32 gUnionRoomChat_Border_Tilemap[] = INCBIN_U32("graphics/union_room_chat/border.bin.lz"); +const u16 gUnionRoomChat_InputText_Pal[] = INCBIN_U16("graphics/union_room_chat/input_text.gbapal"); +const u16 gUnionRoomChat_Keyboard_Pal[] = INCBIN_U16("graphics/union_room_chat/keyboard.gbapal"); +const u32 gUnionRoomChat_Keyboard_Gfx[] = INCBIN_U32("graphics/union_room_chat/keyboard.4bpp.lz"); +const u32 gUnionRoomChat_Keyboard_Tilemap[] = INCBIN_U32("graphics/union_room_chat/keyboard.bin.lz"); const u32 gUnionRoomChat_RButtonLabels[] = INCBIN_U32("graphics/union_room_chat/r_button_labels.4bpp.lz"); const u16 gTilesetPalettes_General[][16] = diff --git a/src/union_room_chat.c b/src/union_room_chat.c index af4ec2721f..253e025689 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -116,6 +116,13 @@ enum { // Shared by all above #define PALTAG_INTERFACE 0 +enum { + WIN_CHAT_HISTORY, + WIN_TEXT_ENTRY, + WIN_KEYBOARD, + WIN_SWAP_MENU, +}; + struct UnionRoomChat { u32 filler1; @@ -166,8 +173,7 @@ struct UnionRoomChatDisplay u8 bg1Buffer[BG_SCREEN_SIZE]; u8 bg3Buffer[BG_SCREEN_SIZE]; u8 bg2Buffer[BG_SCREEN_SIZE]; - u8 unk2128[0x20]; - u8 unk2148[0x20]; + u8 textEntryTiles[TILE_SIZE_4BPP * 2]; }; struct UnionRoomChatSprites @@ -247,11 +253,11 @@ static void FreeSprites(void); static void ResetGpuBgState(void); static void SetBgTilemapBuffers(void); static void ClearBg0(void); -static void LoadChatWindowBorderGfx(void); +static void LoadKeyboardWindowGfx(void); static void LoadChatWindowGfx(void); static void LoadChatUnkPalette(void); static void LoadChatMessagesWindow(void); -static void LoadKeyboardWindow(void); +static void DrawKeyboardWindow(void); static void LoadKeyboardSwapWindow(void); static void LoadTextEntryWindow(void); static void CreateKeyboardCursorSprite(void); @@ -520,8 +526,8 @@ static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT - 1][UNIO } }; -static const u16 sUnk_Palette1[] = INCBIN_U16("graphics/union_room_chat/unk_palette1.gbapal"); -static const u16 sUnk_Palette2[] = INCBIN_U16("graphics/union_room_chat/unk_palette2.gbapal"); +static const u16 sUnusedPalette[] = INCBIN_U16("graphics/union_room_chat/unused.gbapal"); // Loaded but never apparently used +static const u16 sChatMessagesWindow_Pal[] = INCBIN_U16("graphics/union_room_chat/chat_messages_window.gbapal"); static const struct BgTemplate sBgTemplates[] = { { @@ -560,7 +566,7 @@ static const struct BgTemplate sBgTemplates[] = { }; static const struct WindowTemplate sWinTemplates[] = { - { + [WIN_CHAT_HISTORY] = { .bg = 3, .tilemapLeft = 8, .tilemapTop = 1, @@ -568,7 +574,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 19, .paletteNum = 15, .baseBlock = 0x0001, - }, { + }, + [WIN_TEXT_ENTRY] = { .bg = 1, .tilemapLeft = 9, .tilemapTop = 18, @@ -576,7 +583,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 2, .paletteNum = 12, .baseBlock = 0x007a, - }, { + }, + [WIN_KEYBOARD] = { .bg = 1, .tilemapLeft = 0, .tilemapTop = 2, @@ -584,7 +592,8 @@ static const struct WindowTemplate sWinTemplates[] = { .height = 15, .paletteNum = 7, .baseBlock = 0x0020, - }, { + }, + [WIN_SWAP_MENU] = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 2, @@ -749,15 +758,15 @@ static const u32 sTextEntryArrowTiles[] = INCBIN_U32("graphics/union_room_chat/t static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/r_button.4bpp.lz"); static const struct CompressedSpriteSheet sSpriteSheets[] = { - {sKeyboardCursorTiles, 0x1000, 0}, - {sTextEntryArrowTiles, 0x0040, 1}, - {sTextEntryCursorTiles, 0x0040, 2}, - {sRButtonGfxTiles, 0x0080, 3}, - {gUnionRoomChat_RButtonLabels, 0x0400, 4} + {.data = sKeyboardCursorTiles, .size = 0x1000, .tag = GFXTAG_KEYBOARD_CURSOR}, + {.data = sTextEntryArrowTiles, .size = 0x0040, .tag = GFXTAG_TEXT_ENTRY_ARROW}, + {.data = sTextEntryCursorTiles, .size = 0x0040, .tag = GFXTAG_TEXT_ENTRY_CURSOR}, + {.data = sRButtonGfxTiles, .size = 0x0080, .tag = GFXTAG_RBUTTON_ICON}, + {.data = gUnionRoomChat_RButtonLabels, .size = 0x0400, .tag = GFXTAG_RBUTTON_LABELS} }; static const struct SpritePalette sSpritePalette = { - sUnionRoomChatInterfacePal, 0 + .data = sUnionRoomChatInterfacePal, .tag = PALTAG_INTERFACE }; static const struct OamData sOam_KeyboardCursor = { @@ -960,7 +969,7 @@ static void CB2_LoadInterface(void) sChat->handleInputTask = CreateTask(Task_HandlePlayerInput, 8); sChat->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7); LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(232, 150); + CreateWirelessStatusIndicatorSprite(DISPLAY_WIDTH - 8, DISPLAY_HEIGHT - 10); } break; } @@ -1749,7 +1758,7 @@ static void RegisterTextAtRow(void) static void ResetMessageEntryBuffer(void) { sChat->messageEntryBuffer[0] = EOS; - sChat->lastBufferCursorPos = 15; + sChat->lastBufferCursorPos = MAX_MESSAGE_LENGTH; sChat->bufferCursorPos = 0; } @@ -2053,10 +2062,10 @@ static void Task_ReceiveChatMessage(u8 taskId) tState = 3; // fall through case 3: - for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) + for (; tI < MAX_RFU_PLAYERS && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) ; - if (tI == 5) + if (tI == MAX_RFU_PLAYERS) { tState = 1; return; @@ -2244,7 +2253,7 @@ static bool32 Display_LoadGfx(u8 *state) ClearBg0(); break; case 2: - LoadChatWindowBorderGfx(); + LoadKeyboardWindowGfx(); break; case 3: LoadChatWindowGfx(); @@ -2254,7 +2263,7 @@ static bool32 Display_LoadGfx(u8 *state) break; case 5: LoadChatMessagesWindow(); - LoadKeyboardWindow(); + DrawKeyboardWindow(); LoadKeyboardSwapWindow(); LoadTextEntryWindow(); break; @@ -2280,7 +2289,7 @@ static bool32 Display_ShowKeyboardSwapMenu(u8 *state) { case 0: ShowKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2296,7 +2305,7 @@ static bool32 Display_HideKeyboardSwapMenu(u8 *state) { case 0: HideKeyboardSwapMenu(); - CopyWindowToVram(3, COPYWIN_FULL); + CopyWindowToVram(WIN_SWAP_MENU, COPYWIN_FULL); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -2316,7 +2325,7 @@ static bool32 Display_SwitchPages(u8 *state) return TRUE; PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2393,7 +2402,7 @@ static bool32 Display_UpdateMessageBuffer(u8 *state) FillTextEntryWindow(x, width, 0); str = GetMessageEntryBuffer(); DrawTextEntryMessage(0, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2422,7 +2431,7 @@ static bool32 Display_AskRegisterText(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(6)); DrawTextEntryMessage(x, str, 0, 4, 5); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2463,7 +2472,7 @@ static bool32 Display_CancelRegister(u8 *state) length = StringLength_Multibyte(str); FillTextEntryWindow(x, length, PIXEL_FILL(0)); DrawTextEntryMessage(x, str, 3, 1, 2); - CopyWindowToVram(1, COPYWIN_GFX); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_GFX); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) @@ -2501,7 +2510,7 @@ static bool32 Display_ReturnToKeyboard(u8 *state) { case 0: PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_GFX); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_GFX); (*state)++; break; case 1: @@ -2527,7 +2536,7 @@ static bool32 Display_ScrollChat(u8 *state) str = GetLastReceivedMessage(); colorIdx = GetReceivedPlayerIndex(); PrintChatMessage(row, str, colorIdx); - CopyWindowToVram(0, COPYWIN_GFX); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) @@ -2546,8 +2555,8 @@ static bool32 Display_ScrollChat(u8 *state) } // fall through case 2: - ScrollWindow(0, 0, 5, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_GFX); + ScrollWindow(WIN_CHAT_HISTORY, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_GFX); sDisplay->scrollCount++; (*state)++; // fall through @@ -2864,7 +2873,7 @@ static void DestroyStdMessageWindow(void) static void FillTextEntryWindow(u16 x, u16 width, u8 fillValue) { - FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); + FillWindowPixelRect(WIN_TEXT_ENTRY, fillValue, x * 8, 1, width * 8, 14); } static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) @@ -2881,7 +2890,7 @@ static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shad strBuffer[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; strBuffer[2] = 8; StringCopy(&strBuffer[3], str); - AddTextPrinterParameterized3(1, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); + AddTextPrinterParameterized3(WIN_TEXT_ENTRY, FONT_SHORT, x * 8, 1, color, TEXT_SKIP_DRAW, strBuffer); } static void PrintCurrentKeyboardPage(void) @@ -2894,7 +2903,7 @@ static void PrintCurrentKeyboardPage(void) u8 str[45]; u8 *str2; - FillWindowPixelBuffer(2, PIXEL_FILL(15)); + FillWindowPixelBuffer(WIN_KEYBOARD, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); color[0] = TEXT_COLOR_TRANSPARENT; color[1] = TEXT_DYNAMIC_COLOR_5; @@ -2916,7 +2925,7 @@ static void PrintCurrentKeyboardPage(void) return; StringCopy(&str[3], sUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); } } else @@ -2927,7 +2936,7 @@ static void PrintCurrentKeyboardPage(void) str2 = GetRegisteredTextByRow(i); if (GetStringWidth(FONT_SMALL, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str2); } else { @@ -2938,8 +2947,8 @@ static void PrintCurrentKeyboardPage(void) StringCopyN_Multibyte(str, str2, length); } while (GetStringWidth(FONT_SMALL, str, 0) > 35); - AddTextPrinterParameterized3(2, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); - AddTextPrinterParameterized3(2, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left, top, color, TEXT_SKIP_DRAW, str); + AddTextPrinterParameterized3(WIN_KEYBOARD, FONT_SMALL, left + 35, top, color, TEXT_SKIP_DRAW, sText_Ellipsis); } } } @@ -2989,17 +2998,17 @@ static bool32 SlideKeyboardPageIn(void) static void ShowKeyboardSwapMenu(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - DrawTextBorderOuter(3, 1, 13); - PrintMenuActionTextsAtPos(3, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); - InitMenuNormal(3, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); - PutWindowTilemap(3); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + DrawTextBorderOuter(WIN_SWAP_MENU, 1, 13); + PrintMenuActionTextsAtPos(WIN_SWAP_MENU, FONT_SHORT, 8, 1, 14, ARRAY_COUNT(sKeyboardPageTitleTexts), sKeyboardPageTitleTexts); + InitMenuNormal(WIN_SWAP_MENU, FONT_SHORT, 0, 1, 14, 5, GetCurrentKeyboardPage()); + PutWindowTilemap(WIN_SWAP_MENU); } static void HideKeyboardSwapMenu(void) { - ClearStdWindowAndFrameToTransparent(3, FALSE); - ClearWindowTilemap(3); + ClearStdWindowAndFrameToTransparent(WIN_SWAP_MENU, FALSE); + ClearWindowTilemap(WIN_SWAP_MENU); } static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) @@ -3009,8 +3018,8 @@ static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx) color[0] = TEXT_COLOR_WHITE; color[1] = colorIdx * 2 + 2; color[2] = colorIdx * 2 + 3; - FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); - AddTextPrinterParameterized3(0, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); + FillWindowPixelRect(WIN_CHAT_HISTORY, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(WIN_CHAT_HISTORY, FONT_SHORT, 0, row * 15 + 1, color, TEXT_SKIP_DRAW, str); } static void ResetGpuBgState(void) @@ -3053,12 +3062,12 @@ static void ClearBg0(void) CopyBgTilemapBufferToVram(0); } -static void LoadChatWindowBorderGfx(void) +static void LoadKeyboardWindowGfx(void) { - LoadPalette(gUnionRoomChat_Window_Pal2, BG_PLTT_ID(7), PLTT_SIZE_4BPP); - LoadPalette(gUnionRoomChat_Window_Pal1, BG_PLTT_ID(12), PLTT_SIZE_4BPP); - DecompressAndCopyTileDataToVram(1, gUnionRoomChat_Border_Gfx, 0, 0, 0); - CopyToBgTilemapBuffer(1, gUnionRoomChat_Border_Tilemap, 0, 0); + LoadPalette(gUnionRoomChat_Keyboard_Pal, BG_PLTT_ID(7), PLTT_SIZE_4BPP); + LoadPalette(gUnionRoomChat_InputText_Pal, BG_PLTT_ID(12), PLTT_SIZE_4BPP); + DecompressAndCopyTileDataToVram(1, gUnionRoomChat_Keyboard_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnionRoomChat_Keyboard_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); } @@ -3070,8 +3079,12 @@ static void LoadChatWindowGfx(void) ptr = DecompressAndCopyTileDataToVram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0); if (ptr) { - CpuFastCopy(&ptr[0x220], sDisplay->unk2128, sizeof(sDisplay->unk2128)); - CpuFastCopy(&ptr[0x420], sDisplay->unk2148, sizeof(sDisplay->unk2148)); + // The below is nonsense. Tiles 0x11 and 0x21 of the background tileset are + // the second half of "OK" and the "T" in "START" in the instructions header. + // They're later blitted onto the text entry window, then immediately cleared. + // The window has a different palette as well, so the tiles would appear mostly black anyway. + CpuFastCopy(&ptr[0x11 * TILE_SIZE_4BPP], &sDisplay->textEntryTiles[TILE_SIZE_4BPP * 0], TILE_SIZE_4BPP); + CpuFastCopy(&ptr[0x21 * TILE_SIZE_4BPP], &sDisplay->textEntryTiles[TILE_SIZE_4BPP * 1], TILE_SIZE_4BPP); } CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0); @@ -3080,23 +3093,23 @@ static void LoadChatWindowGfx(void) static void LoadChatUnkPalette(void) { - LoadPalette(sUnk_Palette1, BG_PLTT_ID(8), sizeof(sUnk_Palette1)); - RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); + LoadPalette(sUnusedPalette, BG_PLTT_ID(8), sizeof(sUnusedPalette)); + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + TILE_SIZE_4BPP, TILE_SIZE_4BPP, 1); } static void LoadChatMessagesWindow(void) { - LoadPalette(sUnk_Palette2, BG_PLTT_ID(15), sizeof(sUnk_Palette2)); - PutWindowTilemap(0); - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - CopyWindowToVram(0, COPYWIN_FULL); + LoadPalette(sChatMessagesWindow_Pal, BG_PLTT_ID(15), sizeof(sChatMessagesWindow_Pal)); + PutWindowTilemap(WIN_CHAT_HISTORY); + FillWindowPixelBuffer(WIN_CHAT_HISTORY, PIXEL_FILL(1)); + CopyWindowToVram(WIN_CHAT_HISTORY, COPYWIN_FULL); } -static void LoadKeyboardWindow(void) +static void DrawKeyboardWindow(void) { - PutWindowTilemap(2); + PutWindowTilemap(WIN_KEYBOARD); PrintCurrentKeyboardPage(); - CopyWindowToVram(2, COPYWIN_FULL); + CopyWindowToVram(WIN_KEYBOARD, COPYWIN_FULL); } static void LoadTextEntryWindow(void) @@ -3106,20 +3119,21 @@ static void LoadTextEntryWindow(void) unused[0] = 0; unused[1] = 0xFF; + // Pointless, cleared below. The tiles are nonsense anyway, see LoadChatWindowGfx. for (i = 0; i < MAX_MESSAGE_LENGTH; i++) - BlitBitmapToWindow(1, sDisplay->unk2128, i * 8, 0, 8, 16); + BlitBitmapToWindow(WIN_TEXT_ENTRY, sDisplay->textEntryTiles, i * 8, 0, 8, 16); - FillWindowPixelBuffer(1, PIXEL_FILL(0)); - PutWindowTilemap(1); - CopyWindowToVram(1, COPYWIN_FULL); + FillWindowPixelBuffer(WIN_TEXT_ENTRY, PIXEL_FILL(0)); + PutWindowTilemap(WIN_TEXT_ENTRY); + CopyWindowToVram(WIN_TEXT_ENTRY, COPYWIN_FULL); } static void LoadKeyboardSwapWindow(void) { - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - LoadUserWindowBorderGfx(3, 1, BG_PLTT_ID(13)); - LoadUserWindowBorderGfx_(3, 0xA, BG_PLTT_ID(2)); - LoadPalette(gStandardMenuPalette, BG_PLTT_ID(14), PLTT_SIZE_4BPP); + FillWindowPixelBuffer(WIN_SWAP_MENU, PIXEL_FILL(1)); + LoadUserWindowBorderGfx(WIN_SWAP_MENU, 1, BG_PLTT_ID(13)); + LoadUserWindowBorderGfx_(WIN_SWAP_MENU, 0xA, BG_PLTT_ID(2)); + LoadPalette(gStandardMenuPalette, BG_PLTT_ID(14), PLTT_SIZE_4BPP); } static void InitScanlineEffect(void) From 717ba22ea1d453b248b23b4857d39e33362c8e89 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 3 Feb 2023 15:49:22 +0100 Subject: [PATCH 046/290] Make contest opponents an enum I'm sure that at least 2 people eventually might consider editing them, this makes it easier. --- src/data/contest_opponents.h | 194 ++++++++++++++++++----------------- 1 file changed, 98 insertions(+), 96 deletions(-) diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 19019be918..7c3aad3151 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -2,102 +2,104 @@ #include "global.h" #include "contest.h" -#define CONTEST_OPPONENT_JIMMY 0 -#define CONTEST_OPPONENT_EDITH 1 -#define CONTEST_OPPONENT_EVAN 2 -#define CONTEST_OPPONENT_KELSEY 3 -#define CONTEST_OPPONENT_MADISON 4 -#define CONTEST_OPPONENT_RAYMOND 5 -#define CONTEST_OPPONENT_GRANT 6 -#define CONTEST_OPPONENT_PAIGE 7 -#define CONTEST_OPPONENT_ALEC 8 -#define CONTEST_OPPONENT_SYDNEY 9 -#define CONTEST_OPPONENT_MORRIS 10 -#define CONTEST_OPPONENT_MARIAH 11 -#define CONTEST_OPPONENT_RUSSELL 12 -#define CONTEST_OPPONENT_MELANIE 13 -#define CONTEST_OPPONENT_CHANCE 14 -#define CONTEST_OPPONENT_AGATHA 15 -#define CONTEST_OPPONENT_BEAU 16 -#define CONTEST_OPPONENT_KAY 17 -#define CONTEST_OPPONENT_CALE 18 -#define CONTEST_OPPONENT_CAITLIN 19 -#define CONTEST_OPPONENT_COLBY 20 -#define CONTEST_OPPONENT_KYLIE 21 -#define CONTEST_OPPONENT_LIAM 22 -#define CONTEST_OPPONENT_MILO 23 -#define CONTEST_OPPONENT_KARINA 24 -#define CONTEST_OPPONENT_BOBBY 25 -#define CONTEST_OPPONENT_CLAIRE 26 -#define CONTEST_OPPONENT_WILLIE 27 -#define CONTEST_OPPONENT_CASSIDY 28 -#define CONTEST_OPPONENT_MORGAN 29 -#define CONTEST_OPPONENT_SUMMER 30 -#define CONTEST_OPPONENT_MILES 31 -#define CONTEST_OPPONENT_AUDREY 32 -#define CONTEST_OPPONENT_AVERY 33 -#define CONTEST_OPPONENT_ARIANA 34 -#define CONTEST_OPPONENT_ASHTON 35 -#define CONTEST_OPPONENT_SANDRA 36 -#define CONTEST_OPPONENT_CARSON 37 -#define CONTEST_OPPONENT_KATRINA 38 -#define CONTEST_OPPONENT_LUKE 39 -#define CONTEST_OPPONENT_RAUL 40 -#define CONTEST_OPPONENT_JADA 41 -#define CONTEST_OPPONENT_ZEEK 42 -#define CONTEST_OPPONENT_DIEGO 43 -#define CONTEST_OPPONENT_ALIYAH 44 -#define CONTEST_OPPONENT_NATALIA 45 -#define CONTEST_OPPONENT_DEVIN 46 -#define CONTEST_OPPONENT_TYLOR 47 -#define CONTEST_OPPONENT_RONNIE 48 -#define CONTEST_OPPONENT_CLAUDIA 49 -#define CONTEST_OPPONENT_ELIAS 50 -#define CONTEST_OPPONENT_JADE 51 -#define CONTEST_OPPONENT_FRANCIS 52 -#define CONTEST_OPPONENT_ALISHA 53 -#define CONTEST_OPPONENT_SAUL 54 -#define CONTEST_OPPONENT_FELICIA 55 -#define CONTEST_OPPONENT_EMILIO 56 -#define CONTEST_OPPONENT_KARLA 57 -#define CONTEST_OPPONENT_DARRYL 58 -#define CONTEST_OPPONENT_SELENA 59 -#define CONTEST_OPPONENT_NOEL 60 -#define CONTEST_OPPONENT_LACEY 61 -#define CONTEST_OPPONENT_CORBIN 62 -#define CONTEST_OPPONENT_GRACIE 63 -#define CONTEST_OPPONENT_COLTIN 64 -#define CONTEST_OPPONENT_ELLIE 65 -#define CONTEST_OPPONENT_MARCUS 66 -#define CONTEST_OPPONENT_KIARA 67 -#define CONTEST_OPPONENT_BRYCE 68 -#define CONTEST_OPPONENT_JAMIE 69 -#define CONTEST_OPPONENT_JORGE 70 -#define CONTEST_OPPONENT_DEVON 71 -#define CONTEST_OPPONENT_JUSTINA 72 -#define CONTEST_OPPONENT_RALPH 73 -#define CONTEST_OPPONENT_ROSA 74 -#define CONTEST_OPPONENT_KEATON 75 -#define CONTEST_OPPONENT_MAYRA 76 -#define CONTEST_OPPONENT_LAMAR 77 -#define CONTEST_OPPONENT_AUBREY 78 -#define CONTEST_OPPONENT_NIGEL 79 -#define CONTEST_OPPONENT_CAMILLE 80 -#define CONTEST_OPPONENT_DEON 81 -#define CONTEST_OPPONENT_JANELLE 82 -#define CONTEST_OPPONENT_HEATH 83 -#define CONTEST_OPPONENT_SASHA 84 -#define CONTEST_OPPONENT_FRANKIE 85 -#define CONTEST_OPPONENT_HELEN 86 -#define CONTEST_OPPONENT_CAMILE 87 -#define CONTEST_OPPONENT_MARTIN 88 -#define CONTEST_OPPONENT_SERGIO 89 -#define CONTEST_OPPONENT_KAILEY 90 -#define CONTEST_OPPONENT_PERLA 91 -#define CONTEST_OPPONENT_CLARA 92 -#define CONTEST_OPPONENT_JAKOB 93 -#define CONTEST_OPPONENT_TREY 94 -#define CONTEST_OPPONENT_LANE 95 +enum { + CONTEST_OPPONENT_JIMMY, + CONTEST_OPPONENT_EDITH, + CONTEST_OPPONENT_EVAN, + CONTEST_OPPONENT_KELSEY, + CONTEST_OPPONENT_MADISON, + CONTEST_OPPONENT_RAYMOND, + CONTEST_OPPONENT_GRANT, + CONTEST_OPPONENT_PAIGE, + CONTEST_OPPONENT_ALEC, + CONTEST_OPPONENT_SYDNEY, + CONTEST_OPPONENT_MORRIS, + CONTEST_OPPONENT_MARIAH, + CONTEST_OPPONENT_RUSSELL, + CONTEST_OPPONENT_MELANIE, + CONTEST_OPPONENT_CHANCE, + CONTEST_OPPONENT_AGATHA, + CONTEST_OPPONENT_BEAU, + CONTEST_OPPONENT_KAY, + CONTEST_OPPONENT_CALE, + CONTEST_OPPONENT_CAITLIN, + CONTEST_OPPONENT_COLBY, + CONTEST_OPPONENT_KYLIE, + CONTEST_OPPONENT_LIAM, + CONTEST_OPPONENT_MILO, + CONTEST_OPPONENT_KARINA, + CONTEST_OPPONENT_BOBBY, + CONTEST_OPPONENT_CLAIRE, + CONTEST_OPPONENT_WILLIE, + CONTEST_OPPONENT_CASSIDY, + CONTEST_OPPONENT_MORGAN, + CONTEST_OPPONENT_SUMMER, + CONTEST_OPPONENT_MILES, + CONTEST_OPPONENT_AUDREY, + CONTEST_OPPONENT_AVERY, + CONTEST_OPPONENT_ARIANA, + CONTEST_OPPONENT_ASHTON, + CONTEST_OPPONENT_SANDRA, + CONTEST_OPPONENT_CARSON, + CONTEST_OPPONENT_KATRINA, + CONTEST_OPPONENT_LUKE, + CONTEST_OPPONENT_RAUL, + CONTEST_OPPONENT_JADA, + CONTEST_OPPONENT_ZEEK, + CONTEST_OPPONENT_DIEGO, + CONTEST_OPPONENT_ALIYAH, + CONTEST_OPPONENT_NATALIA, + CONTEST_OPPONENT_DEVIN, + CONTEST_OPPONENT_TYLOR, + CONTEST_OPPONENT_RONNIE, + CONTEST_OPPONENT_CLAUDIA, + CONTEST_OPPONENT_ELIAS, + CONTEST_OPPONENT_JADE, + CONTEST_OPPONENT_FRANCIS, + CONTEST_OPPONENT_ALISHA, + CONTEST_OPPONENT_SAUL, + CONTEST_OPPONENT_FELICIA, + CONTEST_OPPONENT_EMILIO, + CONTEST_OPPONENT_KARLA, + CONTEST_OPPONENT_DARRYL, + CONTEST_OPPONENT_SELENA, + CONTEST_OPPONENT_NOEL, + CONTEST_OPPONENT_LACEY, + CONTEST_OPPONENT_CORBIN, + CONTEST_OPPONENT_GRACIE, + CONTEST_OPPONENT_COLTIN, + CONTEST_OPPONENT_ELLIE, + CONTEST_OPPONENT_MARCUS, + CONTEST_OPPONENT_KIARA, + CONTEST_OPPONENT_BRYCE, + CONTEST_OPPONENT_JAMIE, + CONTEST_OPPONENT_JORGE, + CONTEST_OPPONENT_DEVON, + CONTEST_OPPONENT_JUSTINA, + CONTEST_OPPONENT_RALPH, + CONTEST_OPPONENT_ROSA, + CONTEST_OPPONENT_KEATON, + CONTEST_OPPONENT_MAYRA, + CONTEST_OPPONENT_LAMAR, + CONTEST_OPPONENT_AUBREY, + CONTEST_OPPONENT_NIGEL, + CONTEST_OPPONENT_CAMILLE, + CONTEST_OPPONENT_DEON, + CONTEST_OPPONENT_JANELLE, + CONTEST_OPPONENT_HEATH, + CONTEST_OPPONENT_SASHA, + CONTEST_OPPONENT_FRANKIE, + CONTEST_OPPONENT_HELEN, + CONTEST_OPPONENT_CAMILE, + CONTEST_OPPONENT_MARTIN, + CONTEST_OPPONENT_SERGIO, + CONTEST_OPPONENT_KAILEY, + CONTEST_OPPONENT_PERLA, + CONTEST_OPPONENT_CLARA, + CONTEST_OPPONENT_JAKOB, + CONTEST_OPPONENT_TREY, + CONTEST_OPPONENT_LANE +}; // All contest opponents have a common set of AI flags (which contains all of the actually // useful AI scripts, as well as some dummys) and a random combination of 2-3 dummy flags. From c1cfd3ac665b939be0e853b12e110ff8f3471bae Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 3 Feb 2023 16:01:13 -0500 Subject: [PATCH 047/290] Add fix for commented bug --- src/frontier_pass.c | 15 +++++++++++++-- src/graphics.c | 1 - 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 61bd1d4091..07e06ad3b9 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -30,6 +30,17 @@ #include "constants/region_map_sections.h" #include "constants/songs.h" +// gFrontierPassBg_Pal has 8*16 colors, but they attempt to load 13*16 colors. +// As a result it goes out of bounds and interprets 160 bytes of whatever comes +// after gFrontierPassBg_Pal (by default, gFrontierPassBg_Gfx) as a palette. +// Nothing uses these colors (except the Trainer Card, which correctly writes them) +// so in practice this bug has no effect on the game. +#ifdef BUGFIX +#define NUM_BG_PAL_SLOTS 8 +#else +#define NUM_BG_PAL_SLOTS 13 +#endif + // All windows displayed in the frontier pass. enum { @@ -768,7 +779,7 @@ static bool32 InitFrontierPass(void) CopyBgTilemapBufferToVram(2); break; case 8: - LoadPalette(gFrontierPassBg_Pal[0], 0, 13 * PLTT_SIZE_4BPP); + LoadPalette(gFrontierPassBg_Pal, 0, NUM_BG_PAL_SLOTS * PLTT_SIZE_4BPP); LoadPalette(gFrontierPassBg_Pal[1 + sPassData->trainerStars], BG_PLTT_ID(1), PLTT_SIZE_4BPP); LoadPalette(GetTextWindowPalette(0), BG_PLTT_ID(15), PLTT_SIZE_4BPP); DrawFrontierPassBg(); @@ -1412,7 +1423,7 @@ static bool32 InitFrontierMap(void) case 5: if (FreeTempTileDataBuffersIfPossible()) return FALSE; - LoadPalette(gFrontierPassBg_Pal[0], BG_PLTT_ID(0), 13 * PLTT_SIZE_4BPP); + LoadPalette(gFrontierPassBg_Pal, BG_PLTT_ID(0), NUM_BG_PAL_SLOTS * PLTT_SIZE_4BPP); LoadPalette(GetTextWindowPalette(0), BG_PLTT_ID(15), PLTT_SIZE_4BPP); CopyToBgTilemapBuffer(2, sMapScreen_Tilemap, 0, 0); CopyBgTilemapBufferToVram(2); diff --git a/src/graphics.c b/src/graphics.c index e0045ba6b3..f6b3ce0af2 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1520,7 +1520,6 @@ const u16 gTitleScreenPressStartPal[] = INCBIN_U16("graphics/title_screen/p const u32 gTitleScreenPressStartGfx[] = INCBIN_U32("graphics/title_screen/press_start.4bpp.lz"); const u32 gTitleScreenPokemonLogoTilemap[] = INCBIN_U32("graphics/title_screen/pokemon_logo.bin.lz"); -// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well const u16 gFrontierPassBg_Pal[][16] = INCBIN_U16("graphics/frontier_pass/bg.gbapal"); const u32 gFrontierPassBg_Gfx[] = INCBIN_U32("graphics/frontier_pass/bg.4bpp.lz"); const u32 gFrontierPassMapAndCard_Gfx[] = INCBIN_U32("graphics/frontier_pass/map_and_card.8bpp.lz"); From bbf0cf0103de221fd54b9348f1ee0b1e5510c2ce Mon Sep 17 00:00:00 2001 From: GriffinR Date: Sat, 4 Feb 2023 00:00:38 -0500 Subject: [PATCH 048/290] Stop hard-coding number of preset names --- src/main_menu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main_menu.c b/src/main_menu.c index 8459396746..6808a8f11a 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -503,7 +503,9 @@ static const u8 *const sFemalePresetNames[] = { gText_DefaultNameHalie }; -// .text +// The number of male vs. female names is assumed to be the same. +// If they aren't, the smaller of the two sizes will be used and any extra names will be ignored. +#define NUM_PRESET_NAMES min(ARRAY_COUNT(sMalePresetNames), ARRAY_COUNT(sFemalePresetNames)) enum { @@ -1597,7 +1599,7 @@ static void Task_NewGameBirchSpeech_StartNamingScreen(u8 taskId) { FreeAllWindowBuffers(); FreeAndDestroyMonPicSprite(gTasks[taskId].tLotadSpriteId); - NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20); + NewGameBirchSpeech_SetDefaultPlayerName(Random() % NUM_PRESET_NAMES); DestroyTask(taskId); DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_NewGameBirchSpeech_ReturnFromNamingScreen); } From 8c257bde9940ade994e1e64afed71f35407c0493 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Feb 2023 10:24:19 +0100 Subject: [PATCH 049/290] Fix 1 vs 2 battles with eggs --- src/battle_gfx_sfx_util.c | 3 +++ src/battle_main.c | 2 +- src/battle_script_commands.c | 5 ++++- src/reshow_battle_screen.c | 4 +++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 193452613b..389832fb20 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -557,6 +557,9 @@ static void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battlerId, bool32 op if (illusionMon != NULL) mon = illusionMon; + if (GetMonData(mon, MON_DATA_IS_EGG)) // Don't load GFX of egg pokemon. + return; + monsPersonality = GetMonData(mon, MON_DATA_PERSONALITY); if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) { diff --git a/src/battle_main.c b/src/battle_main.c index 90540fa922..b23d8af553 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3655,7 +3655,7 @@ static void TryDoEventsBeforeFirstTurn(void) { for (i = 0; i < gBattlersCount; i++) { - if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE) + if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(GetBattlerPartyData(i), MON_DATA_IS_EGG)) gAbsentBattlerFlags |= gBitTable[i]; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be5e2ee215..3227168dcc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4036,6 +4036,8 @@ static void Cmd_getexp(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) continue; + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + continue; if (gBitTable[i] & sentIn) viaSentIn++; @@ -4125,7 +4127,8 @@ static void Cmd_getexp(void) gBattleStruct->wildVictorySong++; } - if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP)) + if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_HP) + && !GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_IS_EGG)) { if (gBattleStruct->sentInPokes & 1) gBattleMoveDamage = *exp; diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index 16310a7c36..b24db3f876 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -258,6 +258,8 @@ static void CreateBattlerSprite(u8 battler) { if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) return; + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_IS_EGG)) + return; SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler)); gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2), posY, GetBattlerSpriteSubpriority(battler)); @@ -311,7 +313,7 @@ static void CreateHealthboxSprite(u8 battler) } else if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) { - if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0) + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_HP) == 0 || GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_IS_EGG)) SetHealthboxSpriteInvisible(healthboxSpriteId); } } From 896b575c07171c76c3a146f369447f836f47cca2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Feb 2023 12:42:38 +0100 Subject: [PATCH 050/290] Fix volt switch breaking ace pokemon --- data/battle_scripts_1.s | 2 +- include/battle.h | 1 + src/battle_ai_switch_items.c | 90 +++++++++++++++++++++++------------- src/battle_script_commands.c | 3 ++ src/data/trainer_parties.h | 32 +++++++++++-- src/data/trainers.h | 4 +- 6 files changed, 92 insertions(+), 40 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 25386dbf01..a707d7bcea 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3055,7 +3055,7 @@ BattleScript_EffectHitEscape: jumpifbyte CMP_NOT_EQUAL gBattleOutcome 0, BattleScript_HitEscapeEnd jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_HitEscapeEnd jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_HitEscapeEnd - jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd + jumpifemergencyexited BS_TARGET, BattleScript_HitEscapeEnd openpartyscreen BS_ATTACKER, BattleScript_HitEscapeEnd switchoutabilities BS_ATTACKER waitstate diff --git a/include/battle.h b/include/battle.h index 79413441c8..cfeec46639 100644 --- a/include/battle.h +++ b/include/battle.h @@ -643,6 +643,7 @@ struct BattleStruct struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + u8 forcedSwitch:4; // For each battler u8 ballSpriteIds[2]; // item gfx, window gfx u8 stickyWebUser; u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 5bcd17716e..f976b47e3e 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -27,6 +27,15 @@ static bool32 AiExpectsToFaintPlayer(void); static bool32 AI_ShouldHeal(u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); +static bool32 isAceMon(u32 battlerId, u32 monPartyId) +{ + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON + && !(gBattleStruct->forcedSwitch) + && monPartyId == CalculateEnemyPartyCount()-1) + return TRUE; + return FALSE; +} + void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId) { if (BATTLE_TWO_VS_ONE_OPPONENT && (battlerId & BIT_SIDE) == B_SIDE_OPPONENT) @@ -109,8 +118,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; if (i == gBattlerPartyIndexes[gActiveBattler]) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) continue; for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) @@ -202,10 +210,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) continue; - + species = GetMonData(&party[i], MON_DATA_SPECIES); if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) @@ -267,7 +274,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) ) switchMon = FALSE; - if (IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)) + if (IsBattlerAlive(BATTLE_PARTNER(gActiveBattler)) && (gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_MISTY_TERRAIN || gBattleMoves[AI_DATA->partnerMove].effect == EFFECT_ELECTRIC_TERRAIN) && IsBattlerGrounded(gActiveBattler) @@ -277,15 +284,14 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) if (*(gBattleStruct->AI_monToSwitchIntoId + BATTLE_PARTNER(gActiveBattler)) != PARTY_SIZE) //Partner is switching { GetAIPartyIndexes(gActiveBattler, &firstId, &lastId); - + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; - + for (i = firstId; i < lastId; i++) { - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) - break; + if (isAceMon(gActiveBattler, i)) + continue; //Look for mon in party that is able to be switched into and has ability that sets terrain if (GetMonData(&party[i], MON_DATA_HP) != 0 @@ -305,7 +311,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) } } } - + //Check if Active Pokemon can KO opponent instead of switching //Will still fall asleep, but take out opposing Pokemon first if (AiExpectsToFaintPlayer()) @@ -328,7 +334,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) && AI_DATA->abilities[opposingBattler] != ABILITY_UNAWARE && AI_DATA->abilities[opposingBattler] != ABILITY_KEEN_EYE && !(gBattleMons[gActiveBattler].status2 & STATUS2_FORESIGHT) - && !(gStatuses3[gActiveBattler] & STATUS3_MIRACLE_EYED)) + && !(gStatuses3[gActiveBattler] & STATUS3_MIRACLE_EYED)) switchMon = FALSE; } @@ -343,7 +349,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) && gBattleMons[gActiveBattler].hp >= (gBattleMons[gActiveBattler].maxHP / 3) && (Random() % (moduloChance*chanceReducer)) == 0) switchMon = TRUE; - + //Cursed moduloChance = 2; //50% if (gBattleMons[gActiveBattler].status2 & STATUS2_CURSED @@ -370,7 +376,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) //Todo //Pass Wish Heal - + //Semi-Invulnerable if (gStatuses3[opposingBattler] & STATUS3_SEMI_INVULNERABLE) { @@ -416,7 +422,7 @@ static bool8 ShouldSwitchIfAbilityBenefit(void) switch(AI_DATA->abilities[gActiveBattler]) { case ABILITY_NATURAL_CURE: moduloChance = 4; //25% - //Attempt to cure bad ailment + //Attempt to cure bad ailment if (gBattleMons[gActiveBattler].status1 & (STATUS1_SLEEP | STATUS1_FREEZE | STATUS1_TOXIC_POISON) && GetMostSuitableMonToSwitchInto() != PARTY_SIZE) break; @@ -432,17 +438,17 @@ static bool8 ShouldSwitchIfAbilityBenefit(void) case ABILITY_REGENERATOR: moduloChance = 2; //50% //Don't switch if ailment - if (gBattleMons[gActiveBattler].status1 & STATUS1_ANY) - return FALSE; + if (gBattleMons[gActiveBattler].status1 & STATUS1_ANY) + return FALSE; if ((gBattleMons[gActiveBattler].hp <= ((gBattleMons[gActiveBattler].maxHP * 2) / 3)) && GetMostSuitableMonToSwitchInto() != PARTY_SIZE && Random() % (moduloChance*chanceReducer) == 0) break; - + return FALSE; default: - return FALSE; + return FALSE; } *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; @@ -576,8 +582,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) continue; @@ -619,6 +624,7 @@ bool32 ShouldSwitch(void) struct Pokemon *party; s32 i; s32 availableToSwitch; + bool32 hasAceMon = FALSE; if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) return FALSE; @@ -668,15 +674,22 @@ bool32 ShouldSwitch(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && i == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, i)) + { + hasAceMon = TRUE; continue; + } availableToSwitch++; } if (availableToSwitch == 0) - return FALSE; + { + 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. @@ -694,14 +707,14 @@ bool32 ShouldSwitch(void) return TRUE; if (ShouldSwitchIfAbilityBenefit()) return TRUE; - + //Removing switch capabilites under specific conditions //These Functions prevent the "FindMonWithFlagsAndSuperEffective" from getting out of hand. if (HasSuperEffectiveMoveAgainstOpponents(FALSE)) return FALSE; if (AreStatsRaised()) return FALSE; - + //Default Function //Can prompt switch if AI has a pokemon in party that resists current opponent & has super effective move if (FindMonWithFlagsAndSuperEffective(MOVE_RESULT_DOESNT_AFFECT_FOE, 2) @@ -758,8 +771,7 @@ void AI_TrySwitchOrUseItem(void) continue; if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && monToSwitchId == (CalculateEnemyPartyCount()-1)) + if (isAceMon(gActiveBattler, monToSwitchId)) continue; break; @@ -916,7 +928,7 @@ u8 GetMostSuitableMonToSwitchInto(void) s32 lastId = 0; // + 1 struct Pokemon *party; s32 i, j, aliveCount = 0; - u8 invalidMons = 0; + u32 invalidMons = 0, aceMonId = PARTY_SIZE; if (*(gBattleStruct->monToSwitchIntoId + gActiveBattler) != PARTY_SIZE) return *(gBattleStruct->monToSwitchIntoId + gActiveBattler); @@ -958,12 +970,19 @@ u8 GetMostSuitableMonToSwitchInto(void) || gBattlerPartyIndexes[battlerIn2] == i || i == *(gBattleStruct->monToSwitchIntoId + battlerIn1) || i == *(gBattleStruct->monToSwitchIntoId + battlerIn2) - || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(gActiveBattler, opposingBattler)) // While not really invalid per say, not really wise to switch into this mon. - || ((AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON) - && i == (CalculateEnemyPartyCount() - 1))) //Save Ace Pokemon for last + || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(gActiveBattler, opposingBattler))) // While not really invalid per say, not really wise to switch into this mon.) + { invalidMons |= gBitTable[i]; + } + else if (isAceMon(gActiveBattler, i))// Save Ace Pokemon for last. + { + aceMonId = i; + invalidMons |= gBitTable[i]; + } else + { aliveCount++; + } } bestMonId = GetBestMonBatonPass(party, firstId, lastId, invalidMons, aliveCount); @@ -978,6 +997,11 @@ u8 GetMostSuitableMonToSwitchInto(void) if (bestMonId != PARTY_SIZE) return bestMonId; + // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. + if (aceMonId != PARTY_SIZE + && (gBattleMoves[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gBattleMoves[gLastUsedMove].effect == EFFECT_PARTING_SHOT)) + return aceMonId; + return PARTY_SIZE; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be5e2ee215..0e447bbfc8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6844,6 +6844,7 @@ static void Cmd_switchineffects(void) gBattlerFainted++; } } + gBattleStruct->forcedSwitch &= ~(gBitTable[gActiveBattler]); gBattlescriptCurrInstr += 2; } } @@ -11410,6 +11411,8 @@ static void Cmd_forcerandomswitch(void) *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; + gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; + do { i = Random() % monsCount; diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f..d04d250090 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -1706,12 +1706,36 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica5[] = { } }; -static const struct TrainerMonItemDefaultMoves sParty_Winston1[] = { +static const struct TrainerMonItemCustomMoves sParty_Winston1[] = { { .iv = 0, - .lvl = 7, - .species = SPECIES_ZIGZAGOON, - .heldItem = ITEM_NUGGET + .lvl = 10, + .species = SPECIES_EMOLGA, + .heldItem = ITEM_NONE, + .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + }, + /* + { + .iv = 0, + .lvl = 4, + .species = SPECIES_ABRA, + .heldItem = ITEM_NONE, + .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + }, + { + .iv = 0, + .lvl = 8, + .species = SPECIES_KADABRA, + .heldItem = ITEM_NONE, + .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + }, + */ + { + .iv = 250, + .lvl = 24, + .species = SPECIES_ZEBSTRIKA, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH}, } }; diff --git a/src/data/trainers.h b/src/data/trainers.h index 75f7edc8b7..6ffdee13ae 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -1641,8 +1641,8 @@ const struct Trainer gTrainers[] = { .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .party = ITEM_DEFAULT_MOVES(sParty_Winston1), + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_ACE_POKEMON, + .party = ITEM_CUSTOM_MOVES(sParty_Winston1), }, [TRAINER_MOLLIE] = From 84d7024add9a0e7e21896dea61b87ad9a3768f95 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Feb 2023 12:48:48 +0100 Subject: [PATCH 051/290] cleanup --- src/data/trainer_parties.h | 32 ++++---------------------------- src/data/trainers.h | 4 ++-- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index d04d250090..1759120b7f 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -1706,36 +1706,12 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica5[] = { } }; -static const struct TrainerMonItemCustomMoves sParty_Winston1[] = { +static const struct TrainerMonItemDefaultMoves sParty_Winston1[] = { { .iv = 0, - .lvl = 10, - .species = SPECIES_EMOLGA, - .heldItem = ITEM_NONE, - .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - }, - /* - { - .iv = 0, - .lvl = 4, - .species = SPECIES_ABRA, - .heldItem = ITEM_NONE, - .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - }, - { - .iv = 0, - .lvl = 8, - .species = SPECIES_KADABRA, - .heldItem = ITEM_NONE, - .moves = {MOVE_VOLT_SWITCH, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - }, - */ - { - .iv = 250, - .lvl = 24, - .species = SPECIES_ZEBSTRIKA, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH, MOVE_VOLT_SWITCH}, + .lvl = 7, + .species = SPECIES_ZIGZAGOON, + .heldItem = ITEM_NUGGET } }; diff --git a/src/data/trainers.h b/src/data/trainers.h index 6ffdee13ae..75f7edc8b7 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -1641,8 +1641,8 @@ const struct Trainer gTrainers[] = { .trainerName = _("WINSTON"), .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_ACE_POKEMON, - .party = ITEM_CUSTOM_MOVES(sParty_Winston1), + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .party = ITEM_DEFAULT_MOVES(sParty_Winston1), }, [TRAINER_MOLLIE] = From db5edc49d76eaf0e67c0d80e34feb8f6f1f7e37c Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 12:10:17 -0500 Subject: [PATCH 052/290] Sync mapjson --- tools/mapjson/mapjson.cpp | 140 +++++++++++++++++++++++++------------- 1 file changed, 92 insertions(+), 48 deletions(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 1a3058f3da..0f2f4f5bb6 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -29,6 +29,7 @@ using json11::Json; #include "mapjson.h" +string version; string read_text_file(string filepath) { ifstream in_file(filepath); @@ -61,7 +62,7 @@ void write_text_file(string filepath, string text) { } -string json_to_string(const Json &data, const string &field = "") { +string json_to_string(const Json &data, const string &field = "", bool silent = false) { const Json value = !field.empty() ? data[field] : data; string output = ""; switch (value.type()) { @@ -75,12 +76,14 @@ string json_to_string(const Json &data, const string &field = "") { output = value.bool_value() ? "TRUE" : "FALSE"; break; default:{ - string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; - FATAL_ERROR("%s is unexpected type; expected string, number, or bool.\n", s.c_str()); + if (!silent) { + string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; + FATAL_ERROR("%s is unexpected type; expected string, number, or bool.\n", s.c_str()); + } } } - if (output.empty()){ + if (!silent && output.empty()) { string s = !field.empty() ? ("Value for '" + field + "'") : "JSON field"; FATAL_ERROR("%s cannot be empty.\n", s.c_str()); } @@ -88,14 +91,14 @@ string json_to_string(const Json &data, const string &field = "") { return output; } -string generate_map_header_text(Json map_data, Json layouts_data, string version) { +string generate_map_header_text(Json map_data, Json layouts_data) { string map_layout_id = json_to_string(map_data, "layout"); vector matched; - for (auto &field : layouts_data["layouts"].array_items()) { - if (map_layout_id == json_to_string(field, "id")) - matched.push_back(field); + for (auto &layout : layouts_data["layouts"].array_items()) { + if (map_layout_id == json_to_string(layout, "id", true)) + matched.push_back(layout); } if (matched.size() != 1) @@ -123,28 +126,33 @@ string generate_map_header_text(Json map_data, Json layouts_data, string version text << "\t.4byte " << mapName << "_MapScripts\n"; if (map_data.object_items().find("connections") != map_data.object_items().end() - && map_data["connections"].array_items().size() > 0) + && map_data["connections"].array_items().size() > 0 && json_to_string(map_data, "connections_no_include", true) != "TRUE") text << "\t.4byte " << mapName << "_MapConnections\n"; else - text << "\t.4byte 0x0\n"; + text << "\t.4byte NULL\n"; text << "\t.2byte " << json_to_string(map_data, "music") << "\n" << "\t.2byte " << json_to_string(layout, "id") << "\n" << "\t.byte " << json_to_string(map_data, "region_map_section") << "\n" << "\t.byte " << json_to_string(map_data, "requires_flash") << "\n" << "\t.byte " << json_to_string(map_data, "weather") << "\n" - << "\t.byte " << json_to_string(map_data, "map_type") << "\n" - << "\t.2byte 0\n"; + << "\t.byte " << json_to_string(map_data, "map_type") << "\n"; + + if (version != "firered") + text << "\t.2byte 0\n"; if (version == "ruby") text << "\t.byte " << json_to_string(map_data, "show_map_name") << "\n"; - else if (version == "emerald") + else if (version == "emerald" || version == "firered") text << "\tmap_header_flags " << "allow_cycling=" << json_to_string(map_data, "allow_cycling") << ", " << "allow_escaping=" << json_to_string(map_data, "allow_escaping") << ", " << "allow_running=" << json_to_string(map_data, "allow_running") << ", " << "show_map_name=" << json_to_string(map_data, "show_map_name") << "\n"; + if (version == "firered") + text << "\t.byte " << json_to_string(map_data, "floor_number") << "\n"; + text << "\t.byte " << json_to_string(map_data, "battle_scene") << "\n\n"; return text.str(); @@ -193,22 +201,34 @@ string generate_map_events_text(Json map_data) { text << objects_label << ":\n"; for (unsigned int i = 0; i < map_data["object_events"].array_items().size(); i++) { auto obj_event = map_data["object_events"].array_items()[i]; - text << "\tobject_event " << i + 1 << ", " - << json_to_string(obj_event, "graphics_id") << ", 0, " - << json_to_string(obj_event, "x") << ", " - << json_to_string(obj_event, "y") << ", " - << json_to_string(obj_event, "elevation") << ", " - << json_to_string(obj_event, "movement_type") << ", " - << json_to_string(obj_event, "movement_range_x") << ", " - << json_to_string(obj_event, "movement_range_y") << ", " - << json_to_string(obj_event, "trainer_type") << ", " - << json_to_string(obj_event, "trainer_sight_or_berry_tree_id") << ", " - << json_to_string(obj_event, "script") << ", " - << json_to_string(obj_event, "flag") << "\n"; + string type = json_to_string(obj_event, "type", true); + + // If no type field is present, assume it's a regular object event. + if (type == "" || type == "object") { + text << "\tobject_event " << i + 1 << ", " + << json_to_string(obj_event, "graphics_id") << ", 0, " + << json_to_string(obj_event, "x") << ", " + << json_to_string(obj_event, "y") << ", " + << json_to_string(obj_event, "elevation") << ", " + << json_to_string(obj_event, "movement_type") << ", " + << json_to_string(obj_event, "movement_range_x") << ", " + << json_to_string(obj_event, "movement_range_y") << ", " + << json_to_string(obj_event, "trainer_type") << ", " + << json_to_string(obj_event, "trainer_sight_or_berry_tree_id") << ", " + << json_to_string(obj_event, "script") << ", " + << json_to_string(obj_event, "flag") << "\n"; + } else if (type == "clone") { + text << "\tclone_event " << i + 1 << ", " + << json_to_string(obj_event, "graphics_id") << ", " + << json_to_string(obj_event, "x") << ", " + << json_to_string(obj_event, "y") << ", " + << json_to_string(obj_event, "target_local_id") << ", " + << json_to_string(obj_event, "target_map") << "\n"; + } } text << "\n"; } else { - objects_label = "0x0"; + objects_label = "NULL"; } if (map_data["warp_events"].array_items().size() > 0) { @@ -224,14 +244,15 @@ string generate_map_events_text(Json map_data) { } text << "\n"; } else { - warps_label = "0x0"; + warps_label = "NULL"; } if (map_data["coord_events"].array_items().size() > 0) { coords_label = mapName + "_MapCoordEvents"; text << coords_label << ":\n"; for (auto &coord_event : map_data["coord_events"].array_items()) { - if (json_to_string(coord_event, "type") == "trigger") { + string type = json_to_string(coord_event, "type"); + if (type == "trigger") { text << "\tcoord_event " << json_to_string(coord_event, "x") << ", " << json_to_string(coord_event, "y") << ", " @@ -240,7 +261,7 @@ string generate_map_events_text(Json map_data) { << json_to_string(coord_event, "var_value") << ", " << json_to_string(coord_event, "script") << "\n"; } - else if (coord_event["type"] == "weather") { + else if (type == "weather") { text << "\tcoord_weather_event " << json_to_string(coord_event, "x") << ", " << json_to_string(coord_event, "y") << ", " @@ -250,14 +271,15 @@ string generate_map_events_text(Json map_data) { } text << "\n"; } else { - coords_label = "0x0"; + coords_label = "NULL"; } if (map_data["bg_events"].array_items().size() > 0) { bgs_label = mapName + "_MapBGEvents"; text << bgs_label << ":\n"; for (auto &bg_event : map_data["bg_events"].array_items()) { - if (bg_event["type"] == "sign") { + string type = json_to_string(bg_event, "type"); + if (type == "sign") { text << "\tbg_sign_event " << json_to_string(bg_event, "x") << ", " << json_to_string(bg_event, "y") << ", " @@ -265,15 +287,21 @@ string generate_map_events_text(Json map_data) { << json_to_string(bg_event, "player_facing_dir") << ", " << json_to_string(bg_event, "script") << "\n"; } - else if (bg_event["type"] == "hidden_item") { + else if (type == "hidden_item") { text << "\tbg_hidden_item_event " << json_to_string(bg_event, "x") << ", " << json_to_string(bg_event, "y") << ", " << json_to_string(bg_event, "elevation") << ", " << json_to_string(bg_event, "item") << ", " - << json_to_string(bg_event, "flag") << "\n"; + << json_to_string(bg_event, "flag"); + if (version == "firered") { + text << ", " + << json_to_string(bg_event, "quantity") << ", " + << json_to_string(bg_event, "underfoot"); + } + text << "\n"; } - else if (bg_event["type"] == "secret_base") { + else if (type == "secret_base") { text << "\tbg_secret_base_event " << json_to_string(bg_event, "x") << ", " << json_to_string(bg_event, "y") << ", " @@ -283,7 +311,7 @@ string generate_map_events_text(Json map_data) { } text << "\n"; } else { - bgs_label = "0x0"; + bgs_label = "NULL"; } text << mapName << "_MapEvents::\n" @@ -299,7 +327,7 @@ string get_directory_name(string filename) { return filename.substr(0, dir_pos + 1); } -void process_map(string map_filepath, string layouts_filepath, string version) { +void process_map(string map_filepath, string layouts_filepath) { string mapdata_err, layouts_err; string mapdata_json_text = read_text_file(map_filepath); @@ -313,7 +341,7 @@ void process_map(string map_filepath, string layouts_filepath, string version) { if (layouts_data == Json()) FATAL_ERROR("%s\n", layouts_err.c_str()); - string header_text = generate_map_header_text(map_data, layouts_data, version); + string header_text = generate_map_header_text(map_data, layouts_data); string events_text = generate_map_events_text(map_data); string connections_text = generate_map_connections_text(map_data); @@ -337,7 +365,10 @@ string generate_groups_text(Json groups_data) { text << "\n"; } - text << "\t.align 2\n" << "gMapGroups::\n"; + if (version != "firered") + text << "\t.align 2\n"; + + text << "gMapGroups::\n"; for (auto &group : groups_data["group_order"].array_items()) text << "\t.4byte " << json_to_string(group) << "\n"; text << "\n"; @@ -484,6 +515,7 @@ string generate_layout_headers_text(Json layouts_data) { 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; string layoutName = json_to_string(layout, "name"); string border_label = layoutName + "_Border"; string blockdata_label = layoutName + "_Blockdata"; @@ -498,7 +530,13 @@ string generate_layout_headers_text(Json layouts_data) { << "\t.4byte " << border_label << "\n" << "\t.4byte " << blockdata_label << "\n" << "\t.4byte " << json_to_string(layout, "primary_tileset") << "\n" - << "\t.4byte " << json_to_string(layout, "secondary_tileset") << "\n\n"; + << "\t.4byte " << json_to_string(layout, "secondary_tileset") << "\n"; + if (version == "firered") { + text << "\t.byte " << json_to_string(layout, "border_width") << "\n" + << "\t.byte " << json_to_string(layout, "border_height") << "\n" + << "\t.2byte 0\n"; + } + text << "\n"; } return text.str(); @@ -512,8 +550,11 @@ string generate_layouts_table_text(Json layouts_data) { text << "\t.align 2\n" << json_to_string(layouts_data, "layouts_table_label") << "::\n"; - for (auto &layout : layouts_data["layouts"].array_items()) - text << "\t.4byte " << json_to_string(layout, "name") << "\n"; + for (auto &layout : layouts_data["layouts"].array_items()) { + string layout_name = json_to_string(layout, "name", true); + if (layout_name.empty()) layout_name = "NULL"; + text << "\t.4byte " << layout_name << "\n"; + } return text.str(); } @@ -526,9 +567,12 @@ string generate_layouts_constants_text(Json layouts_data) { text << "//\n// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json\n//\n\n"; - int i = 0; - for (auto &layout : layouts_data["layouts"].array_items()) - text << "#define " << json_to_string(layout, "id") << " " << ++i << "\n"; + int i = 1; + for (auto &layout : layouts_data["layouts"].array_items()) { + if (layout != Json::object()) + text << "#define " << json_to_string(layout, "id") << " " << i << "\n"; + i++; + } text << "\n#endif // GUARD_CONSTANTS_LAYOUTS_H\n"; @@ -559,9 +603,9 @@ int main(int argc, char *argv[]) { FATAL_ERROR("USAGE: mapjson [options]\n"); char *version_arg = argv[2]; - string version(version_arg); - if (version != "emerald" && version != "ruby") - FATAL_ERROR("ERROR: must be 'emerald' or 'ruby'.\n"); + version = string(version_arg); + if (version != "emerald" && version != "ruby" && version != "firered") + FATAL_ERROR("ERROR: must be 'emerald', 'firered', or 'ruby'.\n"); char *mode_arg = argv[1]; string mode(mode_arg); @@ -575,7 +619,7 @@ int main(int argc, char *argv[]) { string filepath(argv[3]); string layouts_filepath(argv[4]); - process_map(filepath, layouts_filepath, version); + process_map(filepath, layouts_filepath); } else if (mode == "groups") { if (argc != 4) From 118a9701c94730a563afe271a3502800464cc771 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 12:52:28 -0500 Subject: [PATCH 053/290] Add event type errors --- tools/mapjson/mapjson.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 0f2f4f5bb6..10283eb08b 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -224,6 +224,8 @@ string generate_map_events_text(Json map_data) { << json_to_string(obj_event, "y") << ", " << json_to_string(obj_event, "target_local_id") << ", " << json_to_string(obj_event, "target_map") << "\n"; + } else { + FATAL_ERROR("Unknown object event type '%s'. Expected 'object' or 'clone'.\n", type.c_str()); } } text << "\n"; @@ -267,6 +269,8 @@ string generate_map_events_text(Json map_data) { << json_to_string(coord_event, "y") << ", " << json_to_string(coord_event, "elevation") << ", " << json_to_string(coord_event, "weather") << "\n"; + } else { + FATAL_ERROR("Unknown coord event type '%s'. Expected 'trigger' or 'weather'.\n", type.c_str()); } } text << "\n"; @@ -307,6 +311,8 @@ string generate_map_events_text(Json map_data) { << json_to_string(bg_event, "y") << ", " << json_to_string(bg_event, "elevation") << ", " << json_to_string(bg_event, "secret_base_id") << "\n"; + } else { + FATAL_ERROR("Unknown bg event type '%s'. Expected 'sign', 'hidden_item', or 'secret_base'.\n", type.c_str()); } } text << "\n"; From de56e400ffd5791fd6975323295a7bce642bed80 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 13:11:10 -0500 Subject: [PATCH 054/290] Sync clone object macro --- asm/macros/map.inc | 28 ++++++++++++++++++++++------ include/constants/event_objects.h | 3 +++ include/global.fieldmap.h | 2 +- src/event_object_movement.c | 2 +- tools/mapjson/mapjson.cpp | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 662257e416..21445138de 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -19,11 +19,11 @@ .4byte \script .endm - @ Defines an object event template for map data. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h - .macro object_event index:req, gfx:req, inConnection:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req + @ Defines an object event template for map data, to be used by a normal object. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h + .macro object_event index:req, gfx:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req .byte \index .byte \gfx - .byte \inConnection + .byte OBJ_KIND_NORMAL .space 1 @ Padding .2byte \x, \y .byte \elevation @@ -38,6 +38,22 @@ inc _num_npcs .endm + @ Defines an object event template for map data, to be used by a clone object. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h + @ NOTE: The handling for this type of event does not exist in Emerald by default; it is exclusive to FRLG. + .macro clone_event index:req, gfx:req, x:req, y:req, target_local_id:req, target_map_id:req + .byte \index + .byte \gfx + .byte OBJ_KIND_CLONE + .space 1 @ Padding + .2byte \x, \y + .byte \target_local_id + .space 3 @ Padding + .2byte \target_map_id & 0xFF @ map num + .2byte \target_map_id >> 8 @ map group + .space 8 @ Padding + inc _num_npcs + .endm + @ Defines a warp event for map data. Mirrors the struct layout of WarpEvent in include/global.fieldmap.h .macro warp_def x:req, y:req, elevation:req, warpId:req, map_id:req .2byte \x, \y @@ -49,12 +65,12 @@ .endm @ Defines a coord event for map data. Mirrors the struct layout of CoordEvent in include/global.fieldmap.h - .macro coord_event x:req, y:req, elevation:req, trigger:req, index:req, script:req + .macro coord_event x:req, y:req, elevation:req, var:req, varValue:req, script:req .2byte \x, \y .byte \elevation .space 1 @ Padding - .2byte \trigger - .2byte \index + .2byte \var + .2byte \varValue .space 2 @ Padding .4byte \script inc _num_traps diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 8278c6a66b..c8fa942655 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -288,6 +288,9 @@ #define FIRST_DECORATION_SPRITE_GFX OBJ_EVENT_GFX_PICHU_DOLL +#define OBJ_KIND_NORMAL 0 +#define OBJ_KIND_CLONE 255 // Exclusive to FRLG + // Special object event local ids #define OBJ_EVENT_ID_PLAYER 0xFF #define OBJ_EVENT_ID_CAMERA 0x7F diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 26e5c44bf1..d8fea5b23c 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -67,7 +67,7 @@ struct ObjectEventTemplate { /*0x00*/ u8 localId; /*0x01*/ u8 graphicsId; - /*0x02*/ u8 inConnection; // Leftover from FRLG + /*0x02*/ u8 kind; // Always OBJ_KIND_NORMAL in Emerald. /*0x03*/ //u8 padding1; /*0x04*/ s16 x; /*0x06*/ s16 y; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 870f55081f..be0c4ce26d 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1498,7 +1498,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l y -= MAP_OFFSET; objectEventTemplate.localId = localId; objectEventTemplate.graphicsId = graphicsId; - objectEventTemplate.inConnection = 0; + objectEventTemplate.kind = OBJ_KIND_NORMAL; objectEventTemplate.x = x; objectEventTemplate.y = y; objectEventTemplate.elevation = elevation; diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 10283eb08b..460e5e8aff 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -206,7 +206,7 @@ string generate_map_events_text(Json map_data) { // If no type field is present, assume it's a regular object event. if (type == "" || type == "object") { text << "\tobject_event " << i + 1 << ", " - << json_to_string(obj_event, "graphics_id") << ", 0, " + << json_to_string(obj_event, "graphics_id") << ", " << json_to_string(obj_event, "x") << ", " << json_to_string(obj_event, "y") << ", " << json_to_string(obj_event, "elevation") << ", " From c29cf5a5e5a017c9b5f479c46965cc6da2bf6eef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Feb 2023 13:34:38 -0500 Subject: [PATCH 055/290] Remove unnecessary version check --- tools/mapjson/mapjson.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tools/mapjson/mapjson.cpp b/tools/mapjson/mapjson.cpp index 460e5e8aff..cfe95c485a 100644 --- a/tools/mapjson/mapjson.cpp +++ b/tools/mapjson/mapjson.cpp @@ -371,10 +371,7 @@ string generate_groups_text(Json groups_data) { text << "\n"; } - if (version != "firered") - text << "\t.align 2\n"; - - text << "gMapGroups::\n"; + text << "\t.align 2\n" << "gMapGroups::\n"; for (auto &group : groups_data["group_order"].array_items()) text << "\t.4byte " << json_to_string(group) << "\n"; text << "\n"; From ce416be29723bc672c734663f79b7da58bd510b3 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 11 Feb 2023 18:32:07 +0100 Subject: [PATCH 056/290] z_move switch move bug --- src/battle_controller_player.c | 2 ++ src/battle_util.c | 18 +++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index a57bd2995b..aeb0203c2c 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -882,6 +882,7 @@ static void HandleMoveSwitching(void) if (JOY_NEW(A_BUTTON | SELECT_BUTTON)) { + struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); PlaySE(SE_SELECT); if (gMoveSelectionCursor[gActiveBattler] != gMultiUsePlayerCursor) @@ -973,6 +974,7 @@ static void HandleMoveSwitching(void) MoveSelectionDisplayPpString(); MoveSelectionDisplayPpNumber(); MoveSelectionDisplayMoveType(); + GetUsableZMoves(gActiveBattler, moveInfo->moves); } else if (JOY_NEW(B_BUTTON | SELECT_BUTTON)) { diff --git a/src/battle_util.c b/src/battle_util.c index 4333d0b44f..17784935c4 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3814,7 +3814,7 @@ u8 AtkCanceller_UnableToUseMove(void) { SetRandomMultiHitCounter(); } - + PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) } else if (gBattleMoves[gCurrentMove].flags & FLAG_TWO_STRIKES) @@ -3841,7 +3841,7 @@ u8 AtkCanceller_UnableToUseMove(void) party = gPlayerParty; else party = gEnemyParty; - + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) @@ -5487,7 +5487,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_ABILITY_SHIELD); break; } - + gLastUsedAbility = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gLastUsedAbility; @@ -6858,7 +6858,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) { u8 effect = 0; u32 i; - + switch (holdEffect) { #if B_HP_BERRIES >= GEN_4 @@ -7027,7 +7027,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) && !(gBattleMons[battlerId].status2 & STATUS2_FOCUS_ENERGY) && HasEnoughHpToEatBerry(battlerId, GetBattlerItemHoldEffectParam(battlerId, gLastUsedItem), gLastUsedItem)) { - gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; + gBattleMons[battlerId].status2 |= STATUS2_FOCUS_ENERGY; gBattleScripting.battler = battlerId; gPotentialItemEffectBattler = battlerId; BattleScriptPushCursor(); @@ -7036,7 +7036,7 @@ static u8 ItemEffectMoveEnd(u32 battlerId, u16 holdEffect) } break; } - + return effect; } @@ -7053,7 +7053,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) gLastUsedItem = gBattleMons[battlerId].item; battlerHoldEffect = GetBattlerHoldEffect(battlerId, TRUE); } - + atkItem = gBattleMons[gBattlerAttacker].item; atkHoldEffect = GetBattlerHoldEffect(gBattlerAttacker, TRUE); atkHoldEffectParam = GetBattlerHoldEffectParam(gBattlerAttacker); @@ -8184,7 +8184,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return ItemId_GetHoldEffect(gBattleMons[battlerId].item); } -// +// static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { if (item == ITEM_ENIGMA_BERRY) @@ -8234,7 +8234,7 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move) else if (gProtectStructs[battlerId].protected) return FALSE; } - + if (move == MOVE_TEATIME) { return FALSE; From d363ed8152678b5945b4a428dc79207e1c2f0cc6 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 11 Feb 2023 19:55:08 +0100 Subject: [PATCH 057/290] z indicator in double battles --- src/battle_z_move.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 2eccd82f52..2406c6bb31 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -372,7 +372,7 @@ static void ShowZMoveTriggerSprite(void) { struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; gBattleStruct->zmove.viable = TRUE; - CreateZMoveTriggerSprite(sprite->tBattler, TRUE); + CreateZMoveTriggerSprite(gActiveBattler, TRUE); } void DestroyZMoveTriggerSprite(void) From 6da5e0a280d481d3eab0ca292dd53277f75d120a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 11 Feb 2023 17:13:53 -0300 Subject: [PATCH 058/290] Rename eventLegal to fatefulEncounter --- asm/macros/event.inc | 14 +++++++------- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/FarawayIsland_Interior/scripts.inc | 2 +- data/maps/NavelRock_Bottom/scripts.inc | 2 +- data/maps/NavelRock_Top/scripts.inc | 2 +- data/maps/SouthernIsland_Interior/scripts.inc | 4 ++-- data/script_cmd_table.inc | 4 ++-- data/scripts/gift_pichu.inc | 2 +- data/specials.inc | 2 +- include/pokemon.h | 8 ++++---- include/trade.h | 4 ++-- src/battle_util.c | 6 +++--- src/egg_hatch.c | 6 +++--- src/party_menu.c | 8 ++++---- src/pokemon.c | 18 +++++++++--------- src/scrcmd.c | 12 ++++++------ src/trade.c | 16 ++++++++-------- 17 files changed, 56 insertions(+), 56 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 6c0c3856b9..ed2e95c6c7 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1576,15 +1576,15 @@ .4byte \value .endm - @ Sets the eventLegal bit for the Pokemon in the specified slot of the player's party. - .macro setmoneventlegal slot:req + @ Sets the fatefulEncounter bit for the Pokemon in the specified slot of the player's party. + .macro setfatefulencounter slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the eventLegal bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, + @ Checks if the fatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. - .macro checkmoneventlegal slot:req + .macro checkfatefulencounter slot:req .byte 0xce .2byte \slot .endm @@ -1932,10 +1932,10 @@ closebraillemessage .endm - @ Creates an "event legal" Pokémon for an encounter - .macro seteventmon species:req, level:req, item=ITEM_NONE + @ Creates a Pokémon with the fatefulEncounter bit set for an encounter + .macro setfatefulencountermon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateEventLegalEnemyMon + special CreateFatefulEncounterEnemyMon .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index d2174eee99..2b5d6ba1ad 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -85,7 +85,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - seteventmon SPECIES_DEOXYS, 30 + setfatefulencountermon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index d3d519ed15..1a7eb43c6b 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -129,7 +129,7 @@ FarawayIsland_Interior_EventScript_Mew:: special DestroyMewEmergingGrassSprite delay 40 waitmoncry - seteventmon SPECIES_MEW, 30 + setfatefulencountermon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index 90cc229895..cee6242f66 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -53,7 +53,7 @@ NavelRock_Bottom_EventScript_Lugia:: playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - seteventmon SPECIES_LUGIA, 70 + setfatefulencountermon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index 10969367a1..c25fbdb22b 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -57,7 +57,7 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - seteventmon SPECIES_HO_OH, 70 + setfatefulencountermon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index 8486739d93..a0eaabff3c 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -105,11 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - seteventmon SPECIES_LATIOS, 50, ITEM_SOUL_DEW + setfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - seteventmon SPECIES_LATIAS, 50, ITEM_SOUL_DEW + setfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 51b7f966e4..7957e34eb4 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -205,8 +205,8 @@ gScriptCmdTable:: .4byte ScrCmd_nop1 @ 0xca .4byte ScrCmd_nop1 @ 0xcb .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmoneventlegal @ 0xcd - .4byte ScrCmd_checkmoneventlegal @ 0xce + .4byte ScrCmd_setmonfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonfatefulencounter @ 0xce .4byte ScrCmd_trywondercardscript @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 .4byte ScrCmd_warpspinenter @ 0xd1 diff --git a/data/scripts/gift_pichu.inc b/data/scripts/gift_pichu.inc index d2cd381b53..de2346a0a2 100644 --- a/data/scripts/gift_pichu.inc +++ b/data/scripts/gift_pichu.inc @@ -29,7 +29,7 @@ SurfPichu_FullParty: SurfPichu_GiveEgg: giveegg SPECIES_PICHU - setmoneventlegal VAR_GIFT_PICHU_SLOT + setfatefulencounter VAR_GIFT_PICHU_SLOT setmonmetlocation VAR_GIFT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER vgoto_if_eq VAR_GIFT_PICHU_SLOT, 1, SurfPichu_Slot1 vgoto_if_eq VAR_GIFT_PICHU_SLOT, 2, SurfPichu_Slot2 diff --git a/data/specials.inc b/data/specials.inc index 26eb4e134b..9ea7df31a1 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -490,7 +490,7 @@ gSpecials:: def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette - def_special CreateEventLegalEnemyMon + def_special CreateFatefulEncounterEnemyMon def_special StartMirageTowerDisintegration def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink diff --git a/include/pokemon.h b/include/pokemon.h index ab102000a3..8087d7b318 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -85,7 +85,7 @@ enum { MON_DATA_EARTH_RIBBON, MON_DATA_WORLD_RIBBON, MON_DATA_UNUSED_RIBBONS, - MON_DATA_EVENT_LEGAL, + MON_DATA_FATEFUL_ENCOUNTER, MON_DATA_KNOWN_MOVES, MON_DATA_RIBBON_COUNT, MON_DATA_RIBBONS, @@ -165,7 +165,7 @@ struct PokemonSubstruct3 /* 0x0B */ u32 earthRibbon:1; /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners /* 0x0B */ u32 unusedRibbons:4; // discarded in Gen 4 - /* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in Gen 4+; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. + /* 0x0B */ u32 fatefulEncounter:1; // controls Mew & Deoxys obedience; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. }; // Number of bytes in the largest Pokémon substruct. @@ -401,12 +401,12 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); +void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateEventLegalEnemyMon(void); +void CreateFatefulEncounterEnemyMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); diff --git a/include/trade.h b/include/trade.h index d63749653a..f89d203e9c 100644 --- a/include/trade.h +++ b/include/trade.h @@ -12,8 +12,8 @@ extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate; s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal); -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal); +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter); +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter); int CanSpinTradeMon(struct Pokemon *, u16); void InitTradeSequenceBgGpuRegs(void); void LinkTradeDrawWindow(void); diff --git a/src/battle_util.c b/src/battle_util.c index bbf34ab316..c3186671f5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3885,14 +3885,14 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 IsMonEventLegal(u8 battlerId) +static bool32 IsBattlerFatefulEncounter(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) return TRUE; if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_EVENT_LEGAL, NULL); + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_FATEFUL_ENCOUNTER, NULL); } u8 IsMonDisobedient(void) @@ -3906,7 +3906,7 @@ u8 IsMonDisobedient(void) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return 0; - if (IsMonEventLegal(gBattlerAttacker)) // only false if illegal Mew or Deoxys + if (IsBattlerFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == 2) return 0; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 8c0bb5f79a..b741a9b15a 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -313,7 +313,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isEventLegal; + u8 i, friendship, language, gameMet, markings, isFatefulEncounter; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; @@ -332,7 +332,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isEventLegal = GetMonData(egg, MON_DATA_EVENT_LEGAL); + isFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -350,7 +350,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); *egg = *temp; } diff --git a/src/party_menu.c b/src/party_menu.c index da2cb0fd19..571af54a41 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3591,9 +3591,9 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); + u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); - switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isEventLegal)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isFatefulEncounter)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3618,8 +3618,8 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); + u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6ac..e08a08103b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2623,12 +2623,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - bool32 isEventLegal = TRUE; + bool32 isFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2763,14 +2763,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateEventLegalEnemyMon(void) +void CreateFatefulEncounterEnemyMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateEventLegalMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3957,8 +3957,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_UNUSED_RIBBONS: retVal = substruct3->unusedRibbons; break; - case MON_DATA_EVENT_LEGAL: - retVal = substruct3->eventLegal; + case MON_DATA_FATEFUL_ENCOUNTER: + retVal = substruct3->fatefulEncounter; break; case MON_DATA_SPECIES2: retVal = substruct0->species; @@ -4341,8 +4341,8 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_UNUSED_RIBBONS: SET8(substruct3->unusedRibbons); break; - case MON_DATA_EVENT_LEGAL: - SET8(substruct3->eventLegal); + case MON_DATA_FATEFUL_ENCOUNTER: + SET8(substruct3->fatefulEncounter); break; case MON_DATA_IVS: { diff --git a/src/scrcmd.c b/src/scrcmd.c index 45cb65afb1..56bea0843e 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2206,21 +2206,21 @@ bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) } } -// This command will set a Pokémon's eventLegal bit; there is no similar command to clear it. -bool8 ScrCmd_setmoneventlegal(struct ScriptContext *ctx) +// This command will set a Pokémon's fatefulEncounter bit; there is no similar command to clear it. +bool8 ScrCmd_setmonfatefulencounter(struct ScriptContext *ctx) { - bool8 isEventLegal = TRUE; + bool8 isFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, &isEventLegal); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); return FALSE; } -bool8 ScrCmd_checkmoneventlegal(struct ScriptContext *ctx) +bool8 ScrCmd_checkmonfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_EVENT_LEGAL, NULL); + gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, NULL); return FALSE; } diff --git a/src/trade.c b/src/trade.c index f8817421f2..a02cad9df1 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1577,7 +1577,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player // Partner cant trade illegitimate Deoxys or Mew if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) { - if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_EVENT_LEGAL)) + if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_FATEFUL_ENCOUNTER)) return PARTNER_MON_INVALID; } @@ -2426,7 +2426,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&playerParty[monIdx], MON_DATA_EVENT_LEGAL)) + if (!GetMonData(&playerParty[monIdx], MON_DATA_FATEFUL_ENCOUNTER)) return CANT_TRADE_INVALID_MON; } @@ -2491,17 +2491,17 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isEventLegal) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isFatefulEncounter) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { - if (!isEventLegal) + if (!isFatefulEncounter) return TRUE; } return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isEventLegal) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter) { bool8 playerHasNationalDex = player.hasNationalDex; bool8 playerCanLinkNationally = player.canLinkNationally; @@ -2520,7 +2520,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf } // Cannot trade illegitimate Deoxys/Mew - if (IsDeoxysOrMewUntradable(playerSpecies, isEventLegal)) + if (IsDeoxysOrMewUntradable(playerSpecies, isFatefulEncounter)) return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; if (partnerSpecies == SPECIES_EGG) @@ -2563,11 +2563,11 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isEventLegal) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter) { bool8 hasNationalDex = player.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isEventLegal)) + if (IsDeoxysOrMewUntradable(species, isFatefulEncounter)) return CANT_REGISTER_MON; if (hasNationalDex) From 96865f66afc9872e142e6c26e597e4f5db32f42e Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 11 Feb 2023 22:36:42 -0300 Subject: [PATCH 059/290] Updated term to modernFatefulEncounter --- asm/macros/event.inc | 14 +++++----- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/FarawayIsland_Interior/scripts.inc | 2 +- data/maps/NavelRock_Bottom/scripts.inc | 2 +- data/maps/NavelRock_Top/scripts.inc | 2 +- data/maps/SouthernIsland_Interior/scripts.inc | 4 +-- data/script_cmd_table.inc | 4 +-- data/scripts/gift_pichu.inc | 2 +- data/specials.inc | 2 +- include/pokemon.h | 27 ++++++++++++------- include/trade.h | 4 +-- src/battle_util.c | 4 +-- src/egg_hatch.c | 6 ++--- src/party_menu.c | 8 +++--- src/pokemon.c | 14 +++++----- src/scrcmd.c | 10 +++---- src/trade.c | 12 ++++----- 17 files changed, 63 insertions(+), 56 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index ed2e95c6c7..26a7e81579 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1576,15 +1576,15 @@ .4byte \value .endm - @ Sets the fatefulEncounter bit for the Pokemon in the specified slot of the player's party. - .macro setfatefulencounter slot:req + @ Sets the modernFatefulEncounter bit for the Pokemon in the specified slot of the player's party. + .macro setmodernfatefulencounter slot:req .byte 0xcd .2byte \slot .endm - @ Checks if the fatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, + @ Checks if the modernFatefulEncounter bit is set for the Pokemon in the specified slot of the player's party. If it isn't set, @ VAR_RESULT is TRUE. If the bit is set (or if the specified slot is empty or invalid), VAR_RESULT is FALSE. - .macro checkfatefulencounter slot:req + .macro checkmodernfatefulencounter slot:req .byte 0xce .2byte \slot .endm @@ -1932,10 +1932,10 @@ closebraillemessage .endm - @ Creates a Pokémon with the fatefulEncounter bit set for an encounter - .macro setfatefulencountermon species:req, level:req, item=ITEM_NONE + @ Creates a Pokémon with the modernFatefulEncounter bit set for an encounter + .macro setmodernfatefulencountermon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateFatefulEncounterEnemyMon + special CreateModernFatefulEncounterEnemyMon .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 2b5d6ba1ad..4e38d8855e 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -85,7 +85,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - setfatefulencountermon SPECIES_DEOXYS, 30 + setmodernfatefulencountermon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index 1a7eb43c6b..91536c13bf 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -129,7 +129,7 @@ FarawayIsland_Interior_EventScript_Mew:: special DestroyMewEmergingGrassSprite delay 40 waitmoncry - setfatefulencountermon SPECIES_MEW, 30 + setmodernfatefulencountermon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index cee6242f66..4230398d8b 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -53,7 +53,7 @@ NavelRock_Bottom_EventScript_Lugia:: playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - setfatefulencountermon SPECIES_LUGIA, 70 + setmodernfatefulencountermon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index c25fbdb22b..4388c1d5c5 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -57,7 +57,7 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - setfatefulencountermon SPECIES_HO_OH, 70 + setmodernfatefulencountermon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index a0eaabff3c..77350c0768 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -105,11 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - setfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW + setmodernfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - setfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW + setmodernfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 7957e34eb4..d16e25e187 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -205,8 +205,8 @@ gScriptCmdTable:: .4byte ScrCmd_nop1 @ 0xca .4byte ScrCmd_nop1 @ 0xcb .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmonfatefulencounter @ 0xcd - .4byte ScrCmd_checkmonfatefulencounter @ 0xce + .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce .4byte ScrCmd_trywondercardscript @ 0xcf .4byte ScrCmd_nop1 @ 0xd0 .4byte ScrCmd_warpspinenter @ 0xd1 diff --git a/data/scripts/gift_pichu.inc b/data/scripts/gift_pichu.inc index de2346a0a2..56c1e52349 100644 --- a/data/scripts/gift_pichu.inc +++ b/data/scripts/gift_pichu.inc @@ -29,7 +29,7 @@ SurfPichu_FullParty: SurfPichu_GiveEgg: giveegg SPECIES_PICHU - setfatefulencounter VAR_GIFT_PICHU_SLOT + setmodernfatefulencounter VAR_GIFT_PICHU_SLOT setmonmetlocation VAR_GIFT_PICHU_SLOT, METLOC_FATEFUL_ENCOUNTER vgoto_if_eq VAR_GIFT_PICHU_SLOT, 1, SurfPichu_Slot1 vgoto_if_eq VAR_GIFT_PICHU_SLOT, 2, SurfPichu_Slot2 diff --git a/data/specials.inc b/data/specials.inc index 9ea7df31a1..6d53864676 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -490,7 +490,7 @@ gSpecials:: def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette - def_special CreateFatefulEncounterEnemyMon + def_special CreateModernFatefulEncounterEnemyMon def_special StartMirageTowerDisintegration def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink diff --git a/include/pokemon.h b/include/pokemon.h index 8087d7b318..5836d2c34b 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -152,20 +152,27 @@ struct PokemonSubstruct3 /* 0x08 */ u32 cuteRibbon:3; /* 0x09 */ u32 smartRibbon:3; /* 0x09 */ u32 toughRibbon:3; - /* 0x09 */ u32 championRibbon:1; + /* 0x09 */ u32 championRibbon:1; // Shared by bo /* 0x0A */ u32 winningRibbon:1; /* 0x0A */ u32 victoryRibbon:1; /* 0x0A */ u32 artistRibbon:1; /* 0x0A */ u32 effortRibbon:1; - /* 0x0A */ u32 marineRibbon:1; // never distributed - /* 0x0A */ u32 landRibbon:1; // never distributed - /* 0x0A */ u32 skyRibbon:1; // never distributed - /* 0x0A */ u32 countryRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners + /* 0x0A */ u32 marineRibbon:1; // Never distributed. + /* 0x0A */ u32 landRibbon:1; // Never distributed. + /* 0x0A */ u32 skyRibbon:1; // Never distributed. + /* 0x0A */ u32 countryRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. /* 0x0B */ u32 nationalRibbon:1; /* 0x0B */ u32 earthRibbon:1; - /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners - /* 0x0B */ u32 unusedRibbons:4; // discarded in Gen 4 - /* 0x0B */ u32 fatefulEncounter:1; // controls Mew & Deoxys obedience; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness. + /* 0x0B */ u32 worldRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. + /* 0x0B */ u32 unusedRibbons:4; // Discarded in Gen 4. + + // The functionality of this bit changed in FRLG: + // In RS, this bit does nothing, is never set, & is accidentally unset when hatching Eggs. + // In FRLG & Emerald, this controls Mew & Deoxys obedience and whether they can be traded. + // If set, a Pokémon is a fateful encounter in FRLG's summary screen if hatched & for all Pokémon in Gen 4+ summary screens. + // Set for in-game event island legendaries, events distributed after a certain date, & Pokémon from XD: Gale of Darkness. + // Not to be confused with METLOC_FATEFUL_ENCOUNTER. + /* 0x0B */ u32 modernFatefulEncounter:1; }; // Number of bytes in the largest Pokémon substruct. @@ -401,12 +408,12 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); +void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateFatefulEncounterEnemyMon(void); +void CreateModernFatefulEncounterEnemyMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); diff --git a/include/trade.h b/include/trade.h index f89d203e9c..6b621038fc 100644 --- a/include/trade.h +++ b/include/trade.h @@ -12,8 +12,8 @@ extern const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate; s32 GetGameProgressForLinkTrade(void); void CB2_StartCreateTradeMenu(void); void CB2_LinkTrade(void); -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter); -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter); +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter); +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter); int CanSpinTradeMon(struct Pokemon *, u16); void InitTradeSequenceBgGpuRegs(void); void LinkTradeDrawWindow(void); diff --git a/src/battle_util.c b/src/battle_util.c index c3186671f5..007bf68831 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3885,7 +3885,7 @@ u8 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 IsBattlerFatefulEncounter(u8 battlerId) +static bool32 IsBattlerModernFatefulEncounter(u8 battlerId) { if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) return TRUE; @@ -3906,7 +3906,7 @@ u8 IsMonDisobedient(void) if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT) return 0; - if (IsBattlerFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys + if (IsBattlerModernFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == 2) return 0; diff --git a/src/egg_hatch.c b/src/egg_hatch.c index b741a9b15a..bf615be061 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -313,7 +313,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; - u8 i, friendship, language, gameMet, markings, isFatefulEncounter; + u8 i, friendship, language, gameMet, markings, isModernFatefulEncounter; u16 moves[MAX_MON_MOVES]; u32 ivs[NUM_STATS]; @@ -332,7 +332,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); + isModernFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -350,7 +350,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); + SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); *egg = *temp; } diff --git a/src/party_menu.c b/src/party_menu.c index 571af54a41..8c84c5c030 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3591,9 +3591,9 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); - switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isFatefulEncounter)) + switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isModernFatefulEncounter)) { case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); @@ -3618,8 +3618,8 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); - u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isFatefulEncounter); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isModernFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) { diff --git a/src/pokemon.c b/src/pokemon.c index e08a08103b..9b6ee977d6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2623,12 +2623,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { - bool32 isFatefulEncounter = TRUE; + bool32 isModernFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); + SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2763,14 +2763,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateFatefulEncounterEnemyMon(void) +void CreateModernFatefulEncounterEnemyMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateModernFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3958,7 +3958,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) retVal = substruct3->unusedRibbons; break; case MON_DATA_FATEFUL_ENCOUNTER: - retVal = substruct3->fatefulEncounter; + retVal = substruct3->modernFatefulEncounter; break; case MON_DATA_SPECIES2: retVal = substruct0->species; @@ -4342,7 +4342,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) SET8(substruct3->unusedRibbons); break; case MON_DATA_FATEFUL_ENCOUNTER: - SET8(substruct3->fatefulEncounter); + SET8(substruct3->modernFatefulEncounter); break; case MON_DATA_IVS: { diff --git a/src/scrcmd.c b/src/scrcmd.c index 56bea0843e..d055ff3a07 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2206,17 +2206,17 @@ bool8 ScrCmd_lockfortrainer(struct ScriptContext *ctx) } } -// This command will set a Pokémon's fatefulEncounter bit; there is no similar command to clear it. -bool8 ScrCmd_setmonfatefulencounter(struct ScriptContext *ctx) +// This command will set a Pokémon's modernFatefulEncounter bit; there is no similar command to clear it. +bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext *ctx) { - bool8 isFatefulEncounter = TRUE; + bool8 isModernFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isFatefulEncounter); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); return FALSE; } -bool8 ScrCmd_checkmonfatefulencounter(struct ScriptContext *ctx) +bool8 ScrCmd_checkmonmodernfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); diff --git a/src/trade.c b/src/trade.c index a02cad9df1..508cde7cb5 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2491,17 +2491,17 @@ s32 GetGameProgressForLinkTrade(void) return TRADE_BOTH_PLAYERS_READY; } -static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isFatefulEncounter) +static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isModernFatefulEncounter) { if (species == SPECIES_DEOXYS || species == SPECIES_MEW) { - if (!isFatefulEncounter) + if (!isModernFatefulEncounter) return TRUE; } return FALSE; } -int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isFatefulEncounter) +int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct RfuGameCompatibilityData partner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, bool8 isModernFatefulEncounter) { bool8 playerHasNationalDex = player.hasNationalDex; bool8 playerCanLinkNationally = player.canLinkNationally; @@ -2520,7 +2520,7 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf } // Cannot trade illegitimate Deoxys/Mew - if (IsDeoxysOrMewUntradable(playerSpecies, isFatefulEncounter)) + if (IsDeoxysOrMewUntradable(playerSpecies, isModernFatefulEncounter)) return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; if (partnerSpecies == SPECIES_EGG) @@ -2563,11 +2563,11 @@ int GetUnionRoomTradeMessageId(struct RfuGameCompatibilityData player, struct Rf return UR_TRADE_MSG_NONE; } -int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isFatefulEncounter) +int CanRegisterMonForTradingBoard(struct RfuGameCompatibilityData player, u16 species2, u16 species, bool8 isModernFatefulEncounter) { bool8 hasNationalDex = player.hasNationalDex; - if (IsDeoxysOrMewUntradable(species, isFatefulEncounter)) + if (IsDeoxysOrMewUntradable(species, isModernFatefulEncounter)) return CANT_REGISTER_MON; if (hasNationalDex) From a937b3221ac54fc48b9dde2294980d6585f7442c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 11 Feb 2023 23:16:24 -0300 Subject: [PATCH 060/290] Documented Ribbons --- include/pokemon.h | 24 ++++++++++++------------ src/trade.c | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index 5836d2c34b..273cb9175f 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -147,22 +147,22 @@ struct PokemonSubstruct3 /* 0x07 */ u32 isEgg:1; /* 0x07 */ u32 abilityNum:1; - /* 0x08 */ u32 coolRibbon:3; - /* 0x08 */ u32 beautyRibbon:3; - /* 0x08 */ u32 cuteRibbon:3; - /* 0x09 */ u32 smartRibbon:3; - /* 0x09 */ u32 toughRibbon:3; - /* 0x09 */ u32 championRibbon:1; // Shared by bo - /* 0x0A */ u32 winningRibbon:1; - /* 0x0A */ u32 victoryRibbon:1; - /* 0x0A */ u32 artistRibbon:1; - /* 0x0A */ u32 effortRibbon:1; + /* 0x08 */ u32 coolRibbon:3; // Stores the highest contest rank achieved in the Cool category. + /* 0x08 */ u32 beautyRibbon:3; // Stores the highest contest rank achieved in the Beauty category. + /* 0x08 */ u32 cuteRibbon:3; // Stores the highest contest rank achieved in the Cute category. + /* 0x09 */ u32 smartRibbon:3; // Stores the highest contest rank achieved in the Smart category. + /* 0x09 */ u32 toughRibbon:3; // Stores the highest contest rank achieved in the Tough category. + /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion in both RSE and FRLG. + /* 0x0A */ u32 winningRibbon:1; // Given at the Battle Tower's Level 50 challenge by winning a set of seven battles that extends the current streak to 56 or more. + /* 0x0A */ u32 victoryRibbon:1; // Given at the Battle Tower's Level 100 challenge by winning a set of seven battles that extends the current streak to 56 or more. + /* 0x0A */ u32 artistRibbon:1; // Given at the Contest Hall by winning a Master Rank contest with at least 800 points, and agreeing to have the Pokémon's portrait placed in the museum after being offered. + /* 0x0A */ u32 effortRibbon:1; // Given at Slateport's market to Pokémon with maximum EVs. /* 0x0A */ u32 marineRibbon:1; // Never distributed. /* 0x0A */ u32 landRibbon:1; // Never distributed. /* 0x0A */ u32 skyRibbon:1; // Never distributed. /* 0x0A */ u32 countryRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. - /* 0x0B */ u32 nationalRibbon:1; - /* 0x0B */ u32 earthRibbon:1; + /* 0x0B */ u32 nationalRibbon:1; // Given to purified Shadow Pokémon in Colosseum/XD. + /* 0x0B */ u32 earthRibbon:1; // Given to teams that have beaten Mt. Battle's 100-battle challenge in Colosseum/XD. /* 0x0B */ u32 worldRibbon:1; // Distributed during Pokémon Festa '04 and '05 to tournament winners. /* 0x0B */ u32 unusedRibbons:4; // Discarded in Gen 4. diff --git a/src/trade.c b/src/trade.c index 508cde7cb5..9e811888fd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2380,7 +2380,7 @@ static void SaveTradeGiftRibbons(void) { if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenu->giftRibbons[i] != 0) { - if (sTradeMenu->giftRibbons[i] < 64) + if (sTradeMenu->giftRibbons[i] < MAX_GIFT_RIBBON) gSaveBlock1Ptr->giftRibbons[i] = sTradeMenu->giftRibbons[i]; } } From d699d55ba319e68b06af0bcbb23c12c182c16ec4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 12 Feb 2023 01:19:03 -0300 Subject: [PATCH 061/290] Reformatted gNatureStatTable --- src/pokemon.c | 53 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6ac..b4844d740e 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1355,33 +1355,32 @@ const struct SpindaSpot gSpindaSpotGraphics[] = #include "data/pokemon/item_effects.h" const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] = -{ - // Atk Def Spd Sp.Atk Sp.Def - [NATURE_HARDY] = { 0, 0, 0, 0, 0}, - [NATURE_LONELY] = { +1, -1, 0, 0, 0}, - [NATURE_BRAVE] = { +1, 0, -1, 0, 0}, - [NATURE_ADAMANT] = { +1, 0, 0, -1, 0}, - [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1}, - [NATURE_BOLD] = { -1, +1, 0, 0, 0}, - [NATURE_DOCILE] = { 0, 0, 0, 0, 0}, - [NATURE_RELAXED] = { 0, +1, -1, 0, 0}, - [NATURE_IMPISH] = { 0, +1, 0, -1, 0}, - [NATURE_LAX] = { 0, +1, 0, 0, -1}, - [NATURE_TIMID] = { -1, 0, +1, 0, 0}, - [NATURE_HASTY] = { 0, -1, +1, 0, 0}, - [NATURE_SERIOUS] = { 0, 0, 0, 0, 0}, - [NATURE_JOLLY] = { 0, 0, +1, -1, 0}, - [NATURE_NAIVE] = { 0, 0, +1, 0, -1}, - [NATURE_MODEST] = { -1, 0, 0, +1, 0}, - [NATURE_MILD] = { 0, -1, 0, +1, 0}, - [NATURE_QUIET] = { 0, 0, -1, +1, 0}, - [NATURE_BASHFUL] = { 0, 0, 0, 0, 0}, - [NATURE_RASH] = { 0, 0, 0, +1, -1}, - [NATURE_CALM] = { -1, 0, 0, 0, +1}, - [NATURE_GENTLE] = { 0, -1, 0, 0, +1}, - [NATURE_SASSY] = { 0, 0, -1, 0, +1}, - [NATURE_CAREFUL] = { 0, 0, 0, -1, +1}, - [NATURE_QUIRKY] = { 0, 0, 0, 0, 0}, +{ // Attack Defense Speed Sp.Atk Sp.Def + [NATURE_HARDY] = { 0, 0, 0, 0, 0 }, + [NATURE_LONELY] = { +1, -1, 0, 0, 0 }, + [NATURE_BRAVE] = { +1, 0, -1, 0, 0 }, + [NATURE_ADAMANT] = { +1, 0, 0, -1, 0 }, + [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1 }, + [NATURE_BOLD] = { -1, +1, 0, 0, 0 }, + [NATURE_DOCILE] = { 0, 0, 0, 0, 0 }, + [NATURE_RELAXED] = { 0, +1, -1, 0, 0 }, + [NATURE_IMPISH] = { 0, +1, 0, -1, 0 }, + [NATURE_LAX] = { 0, +1, 0, 0, -1 }, + [NATURE_TIMID] = { -1, 0, +1, 0, 0 }, + [NATURE_HASTY] = { 0, -1, +1, 0, 0 }, + [NATURE_SERIOUS] = { 0, 0, 0, 0, 0 }, + [NATURE_JOLLY] = { 0, 0, +1, -1, 0 }, + [NATURE_NAIVE] = { 0, 0, +1, 0, -1 }, + [NATURE_MODEST] = { -1, 0, 0, +1, 0 }, + [NATURE_MILD] = { 0, -1, 0, +1, 0 }, + [NATURE_QUIET] = { 0, 0, -1, +1, 0 }, + [NATURE_BASHFUL] = { 0, 0, 0, 0, 0 }, + [NATURE_RASH] = { 0, 0, 0, +1, -1 }, + [NATURE_CALM] = { -1, 0, 0, 0, +1 }, + [NATURE_GENTLE] = { 0, -1, 0, 0, +1 }, + [NATURE_SASSY] = { 0, 0, -1, 0, +1 }, + [NATURE_CAREFUL] = { 0, 0, 0, -1, +1 }, + [NATURE_QUIRKY] = { 0, 0, 0, 0, 0 }, }; #include "data/pokemon/tmhm_learnsets.h" From 2b32bfcdc1a4fc16641ea1651e5a7355f49b7605 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 12 Feb 2023 19:39:14 +0100 Subject: [PATCH 062/290] add battlerId arg to ShowZMoveTriggerSprite --- src/battle_z_move.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 2406c6bb31..bdbf5674c8 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -50,7 +50,7 @@ static u16 GetSignatureZMove(u16 move, u16 species, u16 item); static u16 GetTypeBasedZMove(u16 move, u8 battler); static void ZMoveSelectionDisplayPpNumber(void); static void ZMoveSelectionDisplayPower(u16 move, u16 zMove); -static void ShowZMoveTriggerSprite(void); +static void ShowZMoveTriggerSprite(u8 battleId); static bool32 AreStatsMaxed(u8 battlerId, u8 n); static u8 GetZMoveScore(u8 battlerAtk, u8 battlerDef, u16 baseMove, u16 zMove); static void ZMoveSelectionDisplayMoveType(u16 zMove); @@ -258,7 +258,7 @@ bool32 TryChangeZIndicator(u8 battlerId, u8 moveIndex) if (gBattleStruct->zmove.viable && !viableZMove) HideZMoveTriggerSprite(); // Was a viable z move, now is not -> slide out else if (!gBattleStruct->zmove.viable && viableZMove) - ShowZMoveTriggerSprite(); // Was not a viable z move, now is -> slide back in + ShowZMoveTriggerSprite(battlerId); // Was not a viable z move, now is -> slide back in } #define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29) @@ -368,11 +368,11 @@ void HideZMoveTriggerSprite(void) gBattleStruct->zmove.viable = FALSE; } -static void ShowZMoveTriggerSprite(void) +static void ShowZMoveTriggerSprite(u8 battlerId) { struct Sprite *sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId]; gBattleStruct->zmove.viable = TRUE; - CreateZMoveTriggerSprite(gActiveBattler, TRUE); + CreateZMoveTriggerSprite(battlerId, TRUE); } void DestroyZMoveTriggerSprite(void) From 0577d8d04d439a0fded1ecb80e3ac89f6e0b0aa0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 13 Feb 2023 14:44:34 +0100 Subject: [PATCH 063/290] Fix Mirror Armor against Clear Body --- data/battle_scripts_1.s | 2 +- include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 25386dbf01..7fecdccd54 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3584,7 +3584,7 @@ BattleScript_MirrorArmorReflect:: call BattleScript_AbilityPopUp jumpifsubstituteblocks BattleScript_AbilityNoSpecificStatLoss BattleScript_MirrorArmorReflectStatLoss: - statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR | STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorArmorReflectEnd jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_MirrorArmorReflectAnim goto BattleScript_MirrorArmorReflectWontFall BattleScript_MirrorArmorReflectAnim: diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 123fb5d49f..9351213946 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -273,6 +273,7 @@ // Cmd_statbuffchange #define STAT_CHANGE_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange +#define STAT_CHANGE_MIRROR_ARMOR (1 << 1) // Stat change redirection caused by Mirror Armor ability. #define STAT_CHANGE_NOT_PROTECT_AFFECTED (1 << 5) #define STAT_CHANGE_UPDATE_MOVE_EFFECT (1 << 6) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be5e2ee215..c9488167f8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10877,8 +10877,9 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr bool32 certain = FALSE; bool32 notProtectAffected = FALSE; u32 index; - bool32 affectsUser = (flags & MOVE_EFFECT_AFFECTS_USER); u16 activeBattlerAbility; + bool32 affectsUser = (flags & MOVE_EFFECT_AFFECTS_USER); + bool32 mirrorArmored = (flags & STAT_CHANGE_MIRROR_ARMOR); if (affectsUser) gActiveBattler = gBattlerAttacker; @@ -10889,10 +10890,10 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr gSpecialStatuses[gActiveBattler].changedStatsBattlerId = gBattlerAttacker; - flags &= ~MOVE_EFFECT_AFFECTS_USER; + flags &= ~(MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_MIRROR_ARMOR); if (flags & MOVE_EFFECT_CERTAIN) - certain++; + certain = TRUE; flags &= ~MOVE_EFFECT_CERTAIN; if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED) @@ -10948,7 +10949,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr || activeBattlerAbility == ABILITY_CLEAR_BODY || activeBattlerAbility == ABILITY_FULL_METAL_BODY || activeBattlerAbility == ABILITY_WHITE_SMOKE) - && !affectsUser && !certain && gCurrentMove != MOVE_CURSE) + && (!affectsUser || mirrorArmored) && !certain && gCurrentMove != MOVE_CURSE) { if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_CLEAR_AMULET) { @@ -11010,7 +11011,7 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr } return STAT_CHANGE_DIDNT_WORK; } - else if (activeBattlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && gBattlerAttacker != gBattlerTarget && gActiveBattler == gBattlerTarget) + else if (activeBattlerAbility == ABILITY_MIRROR_ARMOR && !affectsUser && !mirrorArmored && gBattlerAttacker != gBattlerTarget && gActiveBattler == gBattlerTarget) { if (flags == STAT_CHANGE_ALLOW_PTR) { From 2b4d2a76950f90b7b7481dadc3978a0c8c52caa9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 13 Feb 2023 16:27:21 +0100 Subject: [PATCH 064/290] Fix Jaw Lock locking player pokemon --- 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 be5e2ee215..38fb1e069a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3634,7 +3634,7 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BothCanNoLongerEscape; } - if (!gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION) + if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_ESCAPE_PREVENTION)) gDisableStructs[gBattlerTarget].battlerPreventingEscape = gBattlerAttacker; if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_ESCAPE_PREVENTION)) From 908b509401e497f1df540c5565c5ab498e2bbef1 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Tue, 14 Feb 2023 10:49:50 -0500 Subject: [PATCH 065/290] Fix Round's Base Power calc, Add Turn order effects (#2602) * fix round base power calc, add turn order change * remove unused callnative cmd * fix round turn order update * fix moveTarget getting set incorrectly in HandleAction_UseMove. also redirection doesn't affect MOVE_TARGET_ALL_BATTLERS --------- Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 6 +++- include/constants/battle.h | 3 +- src/battle_script_commands.c | 55 +++++++++++++++++++++++++++++++++++- src/battle_util.c | 24 ++++++++++++---- src/data/battle_moves.h | 2 +- 5 files changed, 81 insertions(+), 9 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 25386dbf01..c404dc37d7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -250,7 +250,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectHit @ EFFECT_GYRO_BALL .4byte BattleScript_EffectHit @ EFFECT_ECHOED_VOICE .4byte BattleScript_EffectHit @ EFFECT_PAYBACK - .4byte BattleScript_EffectHit @ EFFECT_ROUND + .4byte BattleScript_EffectRound @ EFFECT_ROUND .4byte BattleScript_EffectHit @ EFFECT_BRINE .4byte BattleScript_EffectHit @ EFFECT_VENOSHOCK .4byte BattleScript_EffectHit @ EFFECT_RETALIATE @@ -3082,6 +3082,10 @@ BattleScript_EffectPlaceholder: printstring STRINGID_NOTDONEYET goto BattleScript_MoveEnd +BattleScript_EffectRound: + setmoveeffect MOVE_EFFECT_ROUND + goto BattleScript_EffectHit + BattleScript_EffectHit:: BattleScript_HitFromAtkCanceler:: attackcanceler diff --git a/include/constants/battle.h b/include/constants/battle.h index be44c21cbe..c24178cd08 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -371,8 +371,9 @@ #define MOVE_EFFECT_RELIC_SONG 69 #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 +#define MOVE_EFFECT_ROUND 72 -#define NUM_MOVE_EFFECTS 72 +#define NUM_MOVE_EFFECTS 73 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 38fb1e069a..d1c0a7c773 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -318,6 +318,7 @@ static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); static bool8 IsFinalStrikeEffect(u16 move); +static void TryUpdateRoundTurnOrder(void); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -3660,6 +3661,10 @@ void SetMoveEffect(bool32 primary, u32 certain) BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_DoubleShockRemoveType; break; + case MOVE_EFFECT_ROUND: + TryUpdateRoundTurnOrder(); // If another Pokémon uses Round before the user this turn, the user will use Round directly after it + gBattlescriptCurrInstr++; + break; } } } @@ -14960,7 +14965,7 @@ static void Cmd_callnative(void) func(); } -// Callnative Funcs +// Callnative Funcs void BS_CalcMetalBurstDmg(void) { u8 sideAttacker = GetBattlerSide(gBattlerAttacker); @@ -15089,3 +15094,51 @@ static bool8 IsFinalStrikeEffect(u16 move) } return FALSE; } + +static void TryUpdateRoundTurnOrder(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + u32 i; + u32 j = 0; + u32 k = 0; + u32 currRounder; + u8 roundUsers[3] = {0xFF, 0xFF, 0xFF}; + u8 nonRoundUsers[3] = {0xFF, 0xFF, 0xFF}; + for (i = 0; i < gBattlersCount; i++) + { + if (gBattlerByTurnOrder[i] == gBattlerAttacker) + { + currRounder = i + 1; // Current battler going after attacker + break; + } + } + + // Get battlers after us using round + for (i = currRounder; i < gBattlersCount; i++) + { + if (gChosenMoveByBattler[gBattlerByTurnOrder[i]] == MOVE_ROUND) + roundUsers[j++] = gBattlerByTurnOrder[i]; + else + nonRoundUsers[k++] = gBattlerByTurnOrder[i]; + } + + // update turn order for round users + for (i = 0; roundUsers[i] != 0xFF && i < 3; i++) + { + gBattlerByTurnOrder[currRounder] = roundUsers[i]; + gActionsByTurnOrder[currRounder] = gActionsByTurnOrder[roundUsers[i]]; + gProtectStructs[roundUsers[i]].quash = TRUE; // Make it so their turn order can't be changed again + currRounder++; + } + + // Update turn order for non-round users + for (i = 0; nonRoundUsers[i] != 0xFF && i < 3; i++) + { + gBattlerByTurnOrder[currRounder] = nonRoundUsers[i]; + gActionsByTurnOrder[currRounder] = gActionsByTurnOrder[nonRoundUsers[i]]; + currRounder++; + } + } +} + diff --git a/src/battle_util.c b/src/battle_util.c index c515851858..4503c92086 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -259,7 +259,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move) void HandleAction_UseMove(void) { u32 i, side, moveType, var = 4; - u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); + u16 moveTarget; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; if (gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker] || !IsBattlerAlive(gBattlerAttacker)) @@ -323,6 +323,8 @@ void HandleAction_UseMove(void) { gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker]; } + + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); if (gBattleMons[gBattlerAttacker].hp != 0) { @@ -346,7 +348,7 @@ void HandleAction_UseMove(void) } else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gSideTimers[side].followmeTimer == 0 - && (gBattleMoves[gCurrentMove].power != 0 || moveTarget != MOVE_TARGET_USER) + && (gBattleMoves[gCurrentMove].power != 0 || (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))) { @@ -944,6 +946,10 @@ void HandleAction_ActionFinished(void) { u8 battler1 = gBattlerByTurnOrder[i]; u8 battler2 = gBattlerByTurnOrder[j]; + + if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) + continue; + // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should // have been executed before. The only recalculation needed is for moves/switch. Mega evolution is handled in src/battle_main.c/TryChangeOrder if((gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)) @@ -2141,7 +2147,9 @@ u8 DoFieldEndTurnEffects(void) s32 j; for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE)) + if (!gProtectStructs[i].quash + && !gProtectStructs[j].quash + && GetWhoStrikesFirst(gBattlerByTurnOrder[i], gBattlerByTurnOrder[j], FALSE)) SwapTurnOrder(i, j); } } @@ -8689,8 +8697,14 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower *= 2; break; case EFFECT_ROUND: - if (gChosenMoveByBattler[BATTLE_PARTNER(battlerAtk)] == MOVE_ROUND && !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)])) - basePower *= 2; + for (i = 0; i < gBattlersCount; i++) + { + if (i != battlerAtk && IsBattlerAlive(i) && gLastMoves[i] == MOVE_ROUND) + { + basePower *= 2; + break; + } + } break; case EFFECT_FUSION_COMBO: if (gBattleMoves[gLastUsedMove].effect == EFFECT_FUSION_COMBO && move != gLastUsedMove) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index c34ad89d0a..2673815633 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -8914,7 +8914,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_NORMAL, .accuracy = 100, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, From 0df56b808d3f766f22cd65a0061067df9966e46a Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:40:15 -0500 Subject: [PATCH 066/290] Remove duplicate metatile label sections --- include/constants/metatile_labels.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 71aac2308a..9569dad78a 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -47,12 +47,6 @@ #define METATILE_Building_PC_Off 0x004 #define METATILE_Building_PC_On 0x005 -// gTileset_PokemonCenter -#define METATILE_PokemonCenter_Door_CableClub 0x264 - -// gTileset_Shop -#define METATILE_Shop_Door_Elevator 0x285 - // gTileset_Petalburg #define METATILE_Petalburg_Door_Littleroot 0x248 #define METATILE_Petalburg_Door_BirchsLab 0x249 @@ -122,6 +116,7 @@ #define METATILE_BrendansMaysHouse_BookOnTable 0x293 // gTileset_Shop +#define METATILE_Shop_Door_Elevator 0x285 #define METATILE_Shop_Laptop1_Normal 0x29D #define METATILE_Shop_Laptop2_Normal 0x2A5 #define METATILE_Shop_Laptop1_Flash 0x258 @@ -294,6 +289,7 @@ #define METATILE_EverGrande_Door_PokemonLeague 0x21D // gTileset_PokemonCenter +#define METATILE_PokemonCenter_Door_CableClub 0x264 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 #define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 From b656565af0ce22d3ad724728b1361a1681bcaf9d Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:42:13 -0500 Subject: [PATCH 067/290] Standardize RS mossdeep gym metatile labels --- data/maps/MossdeepCity_Gym/scripts.inc | 48 +++++++++++++------------- include/constants/metatile_labels.h | 16 ++++----- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index b47011d680..8892097dee 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -26,26 +26,26 @@ MossdeepCity_Gym_EventScript_CheckSwitch4:: @ All the below set metatile scripts are leftover from RS and are functionally unused MossdeepCity_Gym_EventScript_SetSwitch1Metatiles:: - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch2 end MossdeepCity_Gym_EventScript_SetSwitch2Metatiles:: - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch3 end MossdeepCity_Gym_EventScript_SetSwitch3Metatiles:: - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_CheckSwitch4 end MossdeepCity_Gym_EventScript_SetSwitch4Metatiles:: - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE end MossdeepCity_Gym_EventScript_TateAndLiza:: @@ -116,8 +116,8 @@ MossdeepCity_Gym_EventScript_Switch1:: setflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -131,8 +131,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch1:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_1 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -142,8 +142,8 @@ MossdeepCity_Gym_EventScript_Switch2:: setflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -151,8 +151,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch2:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_2 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Down, FALSE - setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Down, FALSE + setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -162,8 +162,8 @@ MossdeepCity_Gym_EventScript_Switch3:: setflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -171,8 +171,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch3:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_3 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -182,8 +182,8 @@ MossdeepCity_Gym_EventScript_Switch4:: setflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -191,8 +191,8 @@ MossdeepCity_Gym_EventScript_ClearSwitch4:: clearflag FLAG_MOSSDEEP_GYM_SWITCH_4 applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Right, FALSE - setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Up, TRUE + setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Right, FALSE + setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Up, TRUE goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 9569dad78a..76e3d8fde9 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -95,15 +95,15 @@ #define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C #define METATILE_PetalburgGym_Door 0x224 -// gTileset_MossdeepGym from R/S -#define METATILE_RS_MossdeepGym_RedArrow_Right 0x204 -#define METATILE_RS_MossdeepGym_RedArrow_Left 0x20C -#define METATILE_RS_MossdeepGym_RedArrow_Up 0x20D -#define METATILE_RS_MossdeepGym_RedArrow_Down 0x205 -#define METATILE_RS_MossdeepGym_Switch_Up 0x238 -#define METATILE_RS_MossdeepGym_Switch_Down 0x239 +// gTileset_RSMossdeepGym +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 +#define METATILE_RSMossdeepGym_Switch_Down 0x239 -// gTileset_MossdeepGym from Emerald +// gTileset_MossdeepGym #define METATILE_MossdeepGym_YellowArrow_Right 0x250 // gTileset_BrendansMaysHouse From 7885941d3c37d811dde77a56e85a1fb6f2065053 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 13 Feb 2023 19:27:52 -0300 Subject: [PATCH 068/290] Tweaked Task_HandleExpansionIntro to fix the water drops glitch Thanks to Tustin2121. --- src/expansion_intro.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/expansion_intro.c b/src/expansion_intro.c index 63bcce4e94..fa4d44601a 100644 --- a/src/expansion_intro.c +++ b/src/expansion_intro.c @@ -260,6 +260,7 @@ void Task_HandleExpansionIntro(u8 taskId) break; case 3: ResetSpriteData(); + FreeAllSpritePalettes(); DestroyTask(taskId); CreateTask(Task_Scene1_Load, 0); SetMainCallback2(MainCB2_Intro); From d3d680c1dd72f770075a19c3c82ae549ae5876ae Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 14 Feb 2023 11:43:26 -0500 Subject: [PATCH 069/290] Sort metatile labels alphabetically --- include/constants/metatile_labels.h | 1478 +++++++++++++-------------- 1 file changed, 739 insertions(+), 739 deletions(-) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index 76e3d8fde9..c2c018761a 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -1,790 +1,790 @@ #ifndef GUARD_METATILE_LABELS_H #define GUARD_METATILE_LABELS_H -// gTileset_General -#define METATILE_General_Grass 0x001 -#define METATILE_General_TallGrass 0x00D -#define METATILE_General_LongGrass 0x015 -#define METATILE_General_TallGrass_TreeUp 0x025 -#define METATILE_General_Grass_TreeUp 0x00E -#define METATILE_General_TallGrass_TreeLeft 0x1C6 -#define METATILE_General_TallGrass_TreeRight 0x1C7 -#define METATILE_General_Grass_TreeLeft 0x1CE -#define METATILE_General_Grass_TreeRight 0x1CF -#define METATILE_General_MuddySlope_Frame0 0x0E8 -#define METATILE_General_MuddySlope_Frame1 0x0E9 -#define METATILE_General_MuddySlope_Frame2 0x0EA -#define METATILE_General_MuddySlope_Frame3 0x0EB -#define METATILE_General_SandPit_Center 0x121 -#define METATILE_General_Door 0x021 -#define METATILE_General_Door_PokeMart 0x041 -#define METATILE_General_Door_PokeCenter 0x061 -#define METATILE_General_Door_Gym 0x1CD -#define METATILE_General_Door_Contest 0x1DB -#define METATILE_General_CaveEntrance_Top 0x09F -#define METATILE_General_CaveEntrance_Bottom 0x0A7 -#define METATILE_General_RockWall_GrassBase 0x079 -#define METATILE_General_RockWall_RockBase 0x07C -#define METATILE_General_RockWall_SandBase 0x091 -#define METATILE_General_CalmWater 0x170 -#define METATILE_General_RoughWater 0x14E -#define METATILE_General_RoughDeepWater 0x14F -#define METATILE_General_ReflectiveWater 0x0A1 -#define METATILE_General_SecretBase_TreeLeft 0x026 -#define METATILE_General_SecretBase_TreeRight 0x027 -#define METATILE_General_SecretBase_VineLeft 0x036 -#define METATILE_General_SecretBase_VineRight 0x037 -#define METATILE_General_RedCaveIndent 0x1A0 -#define METATILE_General_RedCaveOpen 0x1A1 -#define METATILE_General_YellowCaveIndent 0x1A8 -#define METATILE_General_YellowCaveOpen 0x1A9 -#define METATILE_General_BlueCaveIndent 0x1B0 -#define METATILE_General_BlueCaveOpen 0x1B1 - -// gTileset_Building -#define METATILE_Building_TV_Off 0x002 -#define METATILE_Building_TV_On 0x003 -#define METATILE_Building_PC_Off 0x004 -#define METATILE_Building_PC_On 0x005 - -// gTileset_Petalburg -#define METATILE_Petalburg_Door_Littleroot 0x248 -#define METATILE_Petalburg_Door_BirchsLab 0x249 -#define METATILE_Petalburg_Door_Oldale 0x287 - -// gTileset_Rustboro -#define METATILE_Rustboro_Door_Gray 0x21F -#define METATILE_Rustboro_Door_Tan 0x22F - -// gTileset_MauvilleGym -#define METATILE_MauvilleGym_RaisedSwitch 0x205 -#define METATILE_MauvilleGym_PressedSwitch 0x206 -#define METATILE_MauvilleGym_FloorTile 0x21A -#define METATILE_MauvilleGym_GreenBeamH1_On 0x220 -#define METATILE_MauvilleGym_GreenBeamH2_On 0x221 -#define METATILE_MauvilleGym_GreenBeamH3_On 0x228 -#define METATILE_MauvilleGym_GreenBeamH4_On 0x229 -#define METATILE_MauvilleGym_GreenBeamH1_Off 0x230 -#define METATILE_MauvilleGym_GreenBeamH2_Off 0x231 -#define METATILE_MauvilleGym_GreenBeamH3_Off 0x238 -#define METATILE_MauvilleGym_GreenBeamH4_Off 0x239 -#define METATILE_MauvilleGym_RedBeamH1_On 0x222 -#define METATILE_MauvilleGym_RedBeamH2_On 0x223 -#define METATILE_MauvilleGym_RedBeamH3_On 0x22A -#define METATILE_MauvilleGym_RedBeamH4_On 0x22B -#define METATILE_MauvilleGym_RedBeamH1_Off 0x232 -#define METATILE_MauvilleGym_RedBeamH2_Off 0x233 -#define METATILE_MauvilleGym_RedBeamH3_Off 0x23A -#define METATILE_MauvilleGym_RedBeamH4_Off 0x23B -#define METATILE_MauvilleGym_GreenBeamV1_On 0x240 -#define METATILE_MauvilleGym_GreenBeamV2_On 0x248 -#define METATILE_MauvilleGym_RedBeamV1_On 0x241 -#define METATILE_MauvilleGym_RedBeamV2_On 0x249 -#define METATILE_MauvilleGym_PoleTop_On 0x250 -#define METATILE_MauvilleGym_PoleTop_Off 0x251 -#define METATILE_MauvilleGym_PoleBottom_On 0x242 -#define METATILE_MauvilleGym_PoleBottom_Off 0x243 - -// gTileset_PetalburgGym -#define METATILE_PetalburgGym_RoomEntrance_Left 0x210 -#define METATILE_PetalburgGym_RoomEntrance_Right 0x211 -#define METATILE_PetalburgGym_SlidingDoor_Frame0 0x218 -#define METATILE_PetalburgGym_SlidingDoor_Frame1 0x219 -#define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A -#define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B -#define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C -#define METATILE_PetalburgGym_Door 0x224 - -// gTileset_RSMossdeepGym -#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 -#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C -#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D -#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 -#define METATILE_RSMossdeepGym_Switch_Up 0x238 -#define METATILE_RSMossdeepGym_Switch_Down 0x239 - -// gTileset_MossdeepGym -#define METATILE_MossdeepGym_YellowArrow_Right 0x250 - -// gTileset_BrendansMaysHouse -#define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A -#define METATILE_BrendansMaysHouse_BrendanPC_On 0x27F -#define METATILE_BrendansMaysHouse_MayPC_Off 0x259 -#define METATILE_BrendansMaysHouse_MayPC_On 0x27E -#define METATILE_BrendansMaysHouse_MovingBox_Closed 0x268 -#define METATILE_BrendansMaysHouse_MovingBox_Open 0x270 -#define METATILE_BrendansMaysHouse_BookOnTable 0x293 - -// gTileset_Shop -#define METATILE_Shop_Door_Elevator 0x285 -#define METATILE_Shop_Laptop1_Normal 0x29D -#define METATILE_Shop_Laptop2_Normal 0x2A5 -#define METATILE_Shop_Laptop1_Flash 0x258 -#define METATILE_Shop_Laptop2_Flash 0x260 - -// gTileset_BattleFrontier -#define METATILE_BattleFrontier_Door_Elevator 0x20E -#define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD -#define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 -#define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F -#define METATILE_BattleFrontier_Elevator_Top0 0x329 -#define METATILE_BattleFrontier_Elevator_Top1 0x32A -#define METATILE_BattleFrontier_Elevator_Top2 0x32B -#define METATILE_BattleFrontier_Elevator_Mid0 0x331 -#define METATILE_BattleFrontier_Elevator_Mid1 0x332 -#define METATILE_BattleFrontier_Elevator_Mid2 0x333 -#define METATILE_BattleFrontier_Elevator_Bottom0 0x339 -#define METATILE_BattleFrontier_Elevator_Bottom1 0x33A -#define METATILE_BattleFrontier_Elevator_Bottom2 0x33B - -// gTileset_BattleFrontierOutsideWest -#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 -#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A -#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 -#define METATILE_BattleFrontierOutsideWest_Door 0x3FC - -// gTileset_BattleFrontierOutsideEast -#define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 -#define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 -#define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 -#define METATILE_BattleFrontierOutsideEast_Door 0x3FC - -// gTileset_BattleDome -#define METATILE_BattleDome_Door_Lobby 0x209 -#define METATILE_BattleDome_Door_PreBattleRoom 0x20A -#define METATILE_BattleDome_Door_Corridor 0x25E - // gTileset_BattleArena #define METATILE_BattleArena_Door 0x21B +// gTileset_BattleDome +#define METATILE_BattleDome_Door_Corridor 0x25E +#define METATILE_BattleDome_Door_Lobby 0x209 +#define METATILE_BattleDome_Door_PreBattleRoom 0x20A + +// gTileset_BattleFrontierOutsideEast +#define METATILE_BattleFrontierOutsideEast_Door 0x3FC +#define METATILE_BattleFrontierOutsideEast_Door_BattleArena 0x291 +#define METATILE_BattleFrontierOutsideEast_Door_BattleTower 0x329 +#define METATILE_BattleFrontierOutsideEast_Door_Sliding 0x396 + +// gTileset_BattleFrontierOutsideWest +#define METATILE_BattleFrontierOutsideWest_Door 0x3FC +#define METATILE_BattleFrontierOutsideWest_Door_BattleDome 0x28A +#define METATILE_BattleFrontierOutsideWest_Door_BattleFactory 0x263 +#define METATILE_BattleFrontierOutsideWest_Door_Sliding 0x396 + +// gTileset_BattleFrontier +#define METATILE_BattleFrontier_CorridorOpenDoor_Bottom 0x20F +#define METATILE_BattleFrontier_CorridorOpenDoor_Top 0x207 +#define METATILE_BattleFrontier_Door_Elevator 0x20E +#define METATILE_BattleFrontier_Door_MultiCorridor 0x2AD +#define METATILE_BattleFrontier_Elevator_Bottom0 0x339 +#define METATILE_BattleFrontier_Elevator_Bottom1 0x33A +#define METATILE_BattleFrontier_Elevator_Bottom2 0x33B +#define METATILE_BattleFrontier_Elevator_Mid0 0x331 +#define METATILE_BattleFrontier_Elevator_Mid1 0x332 +#define METATILE_BattleFrontier_Elevator_Mid2 0x333 +#define METATILE_BattleFrontier_Elevator_Top0 0x329 +#define METATILE_BattleFrontier_Elevator_Top1 0x32A +#define METATILE_BattleFrontier_Elevator_Top2 0x32B + // gTileset_BattlePalace #define METATILE_BattlePalace_Door 0x219 +// gTileset_BattlePike +#define METATILE_BattlePike_CurtainFrames_Start 0x201 +#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A +#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 +#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 +#define METATILE_BattlePike_Curtain_Stage0_Tile3 0x253 +#define METATILE_BattlePike_Curtain_Stage0_Tile4 0x259 +#define METATILE_BattlePike_Curtain_Stage0_Tile5 0x25A +#define METATILE_BattlePike_Curtain_Stage0_Tile6 0x25B +#define METATILE_BattlePike_Curtain_Stage1_Tile0 0x22A +#define METATILE_BattlePike_Curtain_Stage1_Tile1 0x231 +#define METATILE_BattlePike_Curtain_Stage1_Tile2 0x232 +#define METATILE_BattlePike_Curtain_Stage1_Tile3 0x233 +#define METATILE_BattlePike_Curtain_Stage1_Tile4 0x239 +#define METATILE_BattlePike_Curtain_Stage1_Tile5 0x23A +#define METATILE_BattlePike_Curtain_Stage1_Tile6 0x23B +#define METATILE_BattlePike_Curtain_Stage2_Tile0 0x20A +#define METATILE_BattlePike_Curtain_Stage2_Tile1 0x211 +#define METATILE_BattlePike_Curtain_Stage2_Tile2 0x212 +#define METATILE_BattlePike_Curtain_Stage2_Tile3 0x213 +#define METATILE_BattlePike_Curtain_Stage2_Tile4 0x219 +#define METATILE_BattlePike_Curtain_Stage2_Tile5 0x21A +#define METATILE_BattlePike_Curtain_Stage2_Tile6 0x21B +#define METATILE_BattlePike_Curtain_Stage3_Tile0 0x2AB +#define METATILE_BattlePike_Curtain_Stage3_Tile1 0x2B2 +#define METATILE_BattlePike_Curtain_Stage3_Tile2 0x2B3 +#define METATILE_BattlePike_Curtain_Stage3_Tile3 0x2B4 +#define METATILE_BattlePike_Curtain_Stage3_Tile4 0x2BA +#define METATILE_BattlePike_Curtain_Stage3_Tile5 0x2BB +#define METATILE_BattlePike_Curtain_Stage3_Tile6 0x2BC + +// gTileset_BattlePyramid +#define METATILE_BattlePyramid_Exit 0x28E +#define METATILE_BattlePyramid_Floor 0x28D + +// gTileset_BattleTent +#define METATILE_BattleTent_Door 0x26B + +// gTileset_BikeShop +#define METATILE_BikeShop_Barrier_Blue_Bottom 0x2CF +#define METATILE_BikeShop_Barrier_Blue_BottomMid 0x2C7 +#define METATILE_BikeShop_Barrier_Blue_Top 0x2B7 +#define METATILE_BikeShop_Barrier_Blue_TopMid 0x2BF +#define METATILE_BikeShop_Barrier_Green_Bottom 0x2CE +#define METATILE_BikeShop_Barrier_Green_BottomMid 0x2C6 +#define METATILE_BikeShop_Barrier_Green_Top 0x2B6 +#define METATILE_BikeShop_Barrier_Green_TopMid 0x2BE +#define METATILE_BikeShop_Barrier_Hidden_Bottom 0x271 +#define METATILE_BikeShop_Barrier_Hidden_Top 0x269 +#define METATILE_BikeShop_Button_Blue 0x236 +#define METATILE_BikeShop_Button_Green 0x22E +#define METATILE_BikeShop_Button_Pressed 0x24F +#define METATILE_BikeShop_Floor_Shadow_Top 0x26D +#define METATILE_BikeShop_Generator_Off_Tile0 0x2F0 +#define METATILE_BikeShop_Generator_Off_Tile1 0x2F1 +#define METATILE_BikeShop_Generator_Off_Tile2 0x2F2 +#define METATILE_BikeShop_Generator_Off_Tile3 0x2F3 +#define METATILE_BikeShop_Generator_Off_Tile4 0x2F4 +#define METATILE_BikeShop_Generator_Off_Tile5 0x2F5 +#define METATILE_BikeShop_Generator_Off_Tile6 0x2F6 +#define METATILE_BikeShop_Generator_Off_Tile7 0x2F7 +#define METATILE_BikeShop_Wall_Edge_Top 0x281 + +// gTileset_BrendansMaysHouse +#define METATILE_BrendansMaysHouse_BookOnTable 0x293 +#define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A +#define METATILE_BrendansMaysHouse_BrendanPC_On 0x27F +#define METATILE_BrendansMaysHouse_MayPC_Off 0x259 +#define METATILE_BrendansMaysHouse_MayPC_On 0x27E +#define METATILE_BrendansMaysHouse_MovingBox_Closed 0x268 +#define METATILE_BrendansMaysHouse_MovingBox_Open 0x270 + +// gTileset_Building +#define METATILE_Building_PC_Off 0x004 +#define METATILE_Building_PC_On 0x005 +#define METATILE_Building_TV_Off 0x002 +#define METATILE_Building_TV_On 0x003 + // gTileset_Cave -#define METATILE_Cave_EntranceCover 0x229 -#define METATILE_Cave_CrackedFloor_Hole 0x206 -#define METATILE_Cave_CrackedFloor 0x22F -#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A -#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B -#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C -#define METATILE_Cave_SealedChamberEntrance_BottomLeft 0x232 -#define METATILE_Cave_SealedChamberEntrance_BottomMid 0x233 -#define METATILE_Cave_SealedChamberEntrance_BottomRight 0x234 -#define METATILE_Cave_SealedChamberBraille_Mid 0x235 -#define METATILE_Cave_ShoalCave_DirtPile_Large 0x358 -#define METATILE_Cave_ShoalCave_DirtPile_Small 0x35A -#define METATILE_Cave_ShoalCave_BlueStone_Large 0x359 -#define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B +#define METATILE_Cave_CrackedFloor 0x22F +#define METATILE_Cave_CrackedFloor_Hole 0x206 +#define METATILE_Cave_EntranceCover 0x229 +#define METATILE_Cave_SealedChamberBraille_Mid 0x235 +#define METATILE_Cave_SealedChamberEntrance_BottomLeft 0x232 +#define METATILE_Cave_SealedChamberEntrance_BottomMid 0x233 +#define METATILE_Cave_SealedChamberEntrance_BottomRight 0x234 +#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A +#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B +#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C +#define METATILE_Cave_ShoalCave_BlueStone_Large 0x359 +#define METATILE_Cave_ShoalCave_BlueStone_Small 0x35B +#define METATILE_Cave_ShoalCave_DirtPile_Large 0x358 +#define METATILE_Cave_ShoalCave_DirtPile_Small 0x35A -// gTileset_Pacifidlog -#define METATILE_Pacifidlog_Door 0x21A -#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 -#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 -#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 -#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 -#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 -#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 -#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 -#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 -#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 -#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 -#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A -#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 -#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA -#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 - -// gTileset_Fortree -#define METATILE_Fortree_LongGrass_Root 0x208 -#define METATILE_Fortree_BridgeOverGrass_Raised 0x24E -#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F -#define METATILE_Fortree_BridgeOverTrees_Raised 0x256 -#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257 -#define METATILE_Fortree_SecretBase_Shrub 0x271 -#define METATILE_Fortree_SecretBase_ShrubOpen 0x278 -#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279 -#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A -#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B -#define METATILE_Fortree_SecretBase_LongGrass_BottomLeft 0x281 -#define METATILE_Fortree_SecretBase_LongGrass_BottomMid 0x282 -#define METATILE_Fortree_SecretBase_LongGrass_BottomRight 0x283 -#define METATILE_Fortree_WoodBridge1_Top 0x297 -#define METATILE_Fortree_WoodBridge1_Bottom 0x29F - -// gTileset_Sootopolis -#define METATILE_Sootopolis_Door 0x21E -#define METATILE_Sootopolis_Door_PeakedRoof 0x21C -#define METATILE_Sootopolis_Door_Closed 0x248 -#define METATILE_Sootopolis_GymDoor_Closed 0x250 -#define METATILE_Sootopolis_RoughWater 0x290 - -// gTileset_SootopolisGym -#define METATILE_SootopolisGym_Ice_Cracked 0x20E -#define METATILE_SootopolisGym_Ice_Broken 0x206 -#define METATILE_SootopolisGym_Stairs 0x207 - -// gTileset_Fallarbor -#define METATILE_Fallarbor_AshGrass 0x20A -#define METATILE_Fallarbor_BrownCaveIndent 0x208 -#define METATILE_Fallarbor_BrownCaveOpen 0x210 -#define METATILE_Fallarbor_NormalGrass 0x212 -#define METATILE_Fallarbor_AshField 0x218 -#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259 -#define METATILE_Fallarbor_BrownCaveEntrance_Bottom 0x261 -#define METATILE_Fallarbor_RedCaveEntrance_Top 0x347 -#define METATILE_Fallarbor_RedCaveEntrance_Bottom 0x34F -#define METATILE_Fallarbor_BrownRockWall 0x265 -#define METATILE_Fallarbor_RedRockWall 0x269 -#define METATILE_Fallarbor_Door_LightRoof 0x2A5 -#define METATILE_Fallarbor_Door_DarkRoof 0x2F7 -#define METATILE_Fallarbor_Door_BattleTent 0x36C - -// gTileset_Lavaridge -#define METATILE_Lavaridge_NormalGrass 0x206 -#define METATILE_Lavaridge_AshGrass 0x207 -#define METATILE_Lavaridge_LavaField 0x271 -#define METATILE_Lavaridge_RockWall 0x274 -#define METATILE_Lavaridge_CaveEntrance_Top 0x256 -#define METATILE_Lavaridge_CaveEntrance_Bottom 0x25E - -// gTileset_Mauville -#define METATILE_Mauville_Door 0x2AC -#define METATILE_Mauville_Door_CyclingRoad 0x289 -#define METATILE_Mauville_Door_Verdanturf 0x3A1 -#define METATILE_Mauville_Door_BattleTent 0x3D4 -#define METATILE_Mauville_DeepSand_Center 0x251 -#define METATILE_Mauville_DeepSand_BottomMid 0x259 -#define METATILE_Mauville_MirageTower_Tile0 0x3D8 -#define METATILE_Mauville_MirageTower_Tile1 0x3D9 -#define METATILE_Mauville_MirageTower_Tile2 0x3DA -#define METATILE_Mauville_MirageTower_Tile3 0x3E0 -#define METATILE_Mauville_MirageTower_Tile4 0x3E1 -#define METATILE_Mauville_MirageTower_Tile5 0x3E2 -#define METATILE_Mauville_MirageTower_Tile6 0x3E8 -#define METATILE_Mauville_MirageTower_Tile7 0x3E9 -#define METATILE_Mauville_MirageTower_Tile8 0x3EA -#define METATILE_Mauville_MirageTower_Tile9 0x3F0 -#define METATILE_Mauville_MirageTower_TileA 0x3F1 -#define METATILE_Mauville_MirageTower_TileB 0x3F2 -#define METATILE_Mauville_MirageTower_TileC 0x3DB -#define METATILE_Mauville_MirageTower_TileD 0x3DC -#define METATILE_Mauville_MirageTower_TileE 0x3DD -#define METATILE_Mauville_MirageTower_TileF 0x3E3 -#define METATILE_Mauville_MirageTower_Tile10 0x3E4 -#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +// gTileset_Contest +#define METATILE_Contest_CounterFlap_Bottom 0x2D9 +#define METATILE_Contest_CounterFlap_Top 0x2D1 +#define METATILE_Contest_FloorShadow 0x261 +#define METATILE_Contest_WallShadow 0x221 // gTileset_Dewford #define METATILE_Dewford_Door 0x225 #define METATILE_Dewford_Door_BattleTower 0x25D -// gTileset_Slateport -#define METATILE_Slateport_Door 0x2DC -#define METATILE_Slateport_Door_BattleTent 0x393 +// gTileset_EliteFour +#define METATILE_EliteFour_EntryDoor_ClosedBottom 0x20E +#define METATILE_EliteFour_EntryDoor_ClosedTop 0x206 +#define METATILE_EliteFour_LeftSpotlightOff 0x2DD +#define METATILE_EliteFour_OpenDoorChampion_Frame 0x346 +#define METATILE_EliteFour_OpenDoorChampion_Opening 0x347 +#define METATILE_EliteFour_OpenDoor_Frame 0x344 +#define METATILE_EliteFour_OpenDoor_Opening 0x345 +#define METATILE_EliteFour_RightSpotlightOff 0x2DE + +// gTileset_EverGrande +#define METATILE_EverGrande_Door_PokemonLeague 0x21D + +// gTileset_Facility +#define METATILE_Facility_DataPad 0x3E4 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile0 0x314 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile1 0x315 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile2 0x316 +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile3 0x31C +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile4 0x31D +#define METATILE_Facility_NewMauvilleDoor_Closed_Tile5 0x31E +#define METATILE_Facility_NewMauvilleDoor_Open_Tile0 0x2C3 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile1 0x2C4 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile2 0x2C5 +#define METATILE_Facility_NewMauvilleDoor_Open_Tile3 0x2CB +#define METATILE_Facility_NewMauvilleDoor_Open_Tile4 0x2CC +#define METATILE_Facility_NewMauvilleDoor_Open_Tile5 0x2CD + +// gTileset_Fallarbor +#define METATILE_Fallarbor_AshField 0x218 +#define METATILE_Fallarbor_AshGrass 0x20A +#define METATILE_Fallarbor_BrownCaveEntrance_Bottom 0x261 +#define METATILE_Fallarbor_BrownCaveEntrance_Top 0x259 +#define METATILE_Fallarbor_BrownCaveIndent 0x208 +#define METATILE_Fallarbor_BrownCaveOpen 0x210 +#define METATILE_Fallarbor_BrownRockWall 0x265 +#define METATILE_Fallarbor_Door_BattleTent 0x36C +#define METATILE_Fallarbor_Door_DarkRoof 0x2F7 +#define METATILE_Fallarbor_Door_LightRoof 0x2A5 +#define METATILE_Fallarbor_NormalGrass 0x212 +#define METATILE_Fallarbor_RedCaveEntrance_Bottom 0x34F +#define METATILE_Fallarbor_RedCaveEntrance_Top 0x347 +#define METATILE_Fallarbor_RedRockWall 0x269 + +// gTileset_Fortree +#define METATILE_Fortree_BridgeOverGrass_Lowered 0x24F +#define METATILE_Fortree_BridgeOverGrass_Raised 0x24E +#define METATILE_Fortree_BridgeOverTrees_Lowered 0x257 +#define METATILE_Fortree_BridgeOverTrees_Raised 0x256 +#define METATILE_Fortree_LongGrass_Root 0x208 +#define METATILE_Fortree_SecretBase_LongGrass_BottomLeft 0x281 +#define METATILE_Fortree_SecretBase_LongGrass_BottomMid 0x282 +#define METATILE_Fortree_SecretBase_LongGrass_BottomRight 0x283 +#define METATILE_Fortree_SecretBase_LongGrass_TopLeft 0x279 +#define METATILE_Fortree_SecretBase_LongGrass_TopMid 0x27A +#define METATILE_Fortree_SecretBase_LongGrass_TopRight 0x27B +#define METATILE_Fortree_SecretBase_Shrub 0x271 +#define METATILE_Fortree_SecretBase_ShrubOpen 0x278 +#define METATILE_Fortree_WoodBridge1_Bottom 0x29F +#define METATILE_Fortree_WoodBridge1_Top 0x297 + +// gTileset_General +#define METATILE_General_BlueCaveIndent 0x1B0 +#define METATILE_General_BlueCaveOpen 0x1B1 +#define METATILE_General_CalmWater 0x170 +#define METATILE_General_CaveEntrance_Bottom 0x0A7 +#define METATILE_General_CaveEntrance_Top 0x09F +#define METATILE_General_Door 0x021 +#define METATILE_General_Door_Contest 0x1DB +#define METATILE_General_Door_Gym 0x1CD +#define METATILE_General_Door_PokeCenter 0x061 +#define METATILE_General_Door_PokeMart 0x041 +#define METATILE_General_Grass 0x001 +#define METATILE_General_Grass_TreeLeft 0x1CE +#define METATILE_General_Grass_TreeRight 0x1CF +#define METATILE_General_Grass_TreeUp 0x00E +#define METATILE_General_LongGrass 0x015 +#define METATILE_General_MuddySlope_Frame0 0x0E8 +#define METATILE_General_MuddySlope_Frame1 0x0E9 +#define METATILE_General_MuddySlope_Frame2 0x0EA +#define METATILE_General_MuddySlope_Frame3 0x0EB +#define METATILE_General_RedCaveIndent 0x1A0 +#define METATILE_General_RedCaveOpen 0x1A1 +#define METATILE_General_ReflectiveWater 0x0A1 +#define METATILE_General_RockWall_GrassBase 0x079 +#define METATILE_General_RockWall_RockBase 0x07C +#define METATILE_General_RockWall_SandBase 0x091 +#define METATILE_General_RoughDeepWater 0x14F +#define METATILE_General_RoughWater 0x14E +#define METATILE_General_SandPit_Center 0x121 +#define METATILE_General_SecretBase_TreeLeft 0x026 +#define METATILE_General_SecretBase_TreeRight 0x027 +#define METATILE_General_SecretBase_VineLeft 0x036 +#define METATILE_General_SecretBase_VineRight 0x037 +#define METATILE_General_TallGrass 0x00D +#define METATILE_General_TallGrass_TreeLeft 0x1C6 +#define METATILE_General_TallGrass_TreeRight 0x1C7 +#define METATILE_General_TallGrass_TreeUp 0x025 +#define METATILE_General_YellowCaveIndent 0x1A8 +#define METATILE_General_YellowCaveOpen 0x1A9 + +// gTileset_GenericBuilding +#define METATILE_GenericBuilding_TableEdge 0x2F1 +#define METATILE_GenericBuilding_TrickHouse_Door_Closed 0x21B +#define METATILE_GenericBuilding_TrickHouse_Stairs_Down 0x219 + +// gTileset_InsideOfTruck +#define METATILE_InsideOfTruck_DoorClosedFloor_Bottom 0x21D +#define METATILE_InsideOfTruck_DoorClosedFloor_Mid 0x215 +#define METATILE_InsideOfTruck_DoorClosedFloor_Top 0x20D +#define METATILE_InsideOfTruck_ExitLight_Bottom 0x218 +#define METATILE_InsideOfTruck_ExitLight_Mid 0x210 +#define METATILE_InsideOfTruck_ExitLight_Top 0x208 + +// gTileset_InsideShip +#define METATILE_InsideShip_DoorIndent_Locked 0x234 +#define METATILE_InsideShip_DoorIndent_Unlocked 0x21A +#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 +#define METATILE_InsideShip_IntactDoor_Bottom_Locked 0x233 +#define METATILE_InsideShip_IntactDoor_Bottom_Unlocked 0x22B + +// gTileset_Lavaridge +#define METATILE_Lavaridge_AshGrass 0x207 +#define METATILE_Lavaridge_CaveEntrance_Bottom 0x25E +#define METATILE_Lavaridge_CaveEntrance_Top 0x256 +#define METATILE_Lavaridge_LavaField 0x271 +#define METATILE_Lavaridge_NormalGrass 0x206 +#define METATILE_Lavaridge_RockWall 0x274 + +// gTileset_LilycoveMuseum +#define METATILE_LilycoveMuseum_Painting0_Left 0x25A +#define METATILE_LilycoveMuseum_Painting0_Right 0x25B +#define METATILE_LilycoveMuseum_Painting1_Left 0x25C +#define METATILE_LilycoveMuseum_Painting1_Right 0x25D +#define METATILE_LilycoveMuseum_Painting2_Left 0x25E +#define METATILE_LilycoveMuseum_Painting2_Right 0x25F +#define METATILE_LilycoveMuseum_Painting3_Left 0x260 +#define METATILE_LilycoveMuseum_Painting3_Right 0x261 +#define METATILE_LilycoveMuseum_Painting4_Left 0x262 +#define METATILE_LilycoveMuseum_Painting4_Right 0x263 + +// gTileset_Lilycove +#define METATILE_Lilycove_Door 0x246 +#define METATILE_Lilycove_Door_DeptStore 0x30C +#define METATILE_Lilycove_Door_SafariZone 0x32D +#define METATILE_Lilycove_Door_Wooden 0x28E +#define METATILE_Lilycove_Wailmer0 0x290 +#define METATILE_Lilycove_Wailmer0_Alt 0x298 +#define METATILE_Lilycove_Wailmer1 0x291 +#define METATILE_Lilycove_Wailmer1_Alt 0x299 +#define METATILE_Lilycove_Wailmer2 0x2A0 +#define METATILE_Lilycove_Wailmer3 0x2A1 + +// gTileset_MauvilleGym +#define METATILE_MauvilleGym_FloorTile 0x21A +#define METATILE_MauvilleGym_GreenBeamH1_Off 0x230 +#define METATILE_MauvilleGym_GreenBeamH1_On 0x220 +#define METATILE_MauvilleGym_GreenBeamH2_Off 0x231 +#define METATILE_MauvilleGym_GreenBeamH2_On 0x221 +#define METATILE_MauvilleGym_GreenBeamH3_Off 0x238 +#define METATILE_MauvilleGym_GreenBeamH3_On 0x228 +#define METATILE_MauvilleGym_GreenBeamH4_Off 0x239 +#define METATILE_MauvilleGym_GreenBeamH4_On 0x229 +#define METATILE_MauvilleGym_GreenBeamV1_On 0x240 +#define METATILE_MauvilleGym_GreenBeamV2_On 0x248 +#define METATILE_MauvilleGym_PoleBottom_Off 0x243 +#define METATILE_MauvilleGym_PoleBottom_On 0x242 +#define METATILE_MauvilleGym_PoleTop_Off 0x251 +#define METATILE_MauvilleGym_PoleTop_On 0x250 +#define METATILE_MauvilleGym_PressedSwitch 0x206 +#define METATILE_MauvilleGym_RaisedSwitch 0x205 +#define METATILE_MauvilleGym_RedBeamH1_Off 0x232 +#define METATILE_MauvilleGym_RedBeamH1_On 0x222 +#define METATILE_MauvilleGym_RedBeamH2_Off 0x233 +#define METATILE_MauvilleGym_RedBeamH2_On 0x223 +#define METATILE_MauvilleGym_RedBeamH3_Off 0x23A +#define METATILE_MauvilleGym_RedBeamH3_On 0x22A +#define METATILE_MauvilleGym_RedBeamH4_Off 0x23B +#define METATILE_MauvilleGym_RedBeamH4_On 0x22B +#define METATILE_MauvilleGym_RedBeamV1_On 0x241 +#define METATILE_MauvilleGym_RedBeamV2_On 0x249 + +// gTileset_Mauville +#define METATILE_Mauville_DeepSand_BottomMid 0x259 +#define METATILE_Mauville_DeepSand_Center 0x251 +#define METATILE_Mauville_Door 0x2AC +#define METATILE_Mauville_Door_BattleTent 0x3D4 +#define METATILE_Mauville_Door_CyclingRoad 0x289 +#define METATILE_Mauville_Door_Verdanturf 0x3A1 +#define METATILE_Mauville_MirageTower_Tile0 0x3D8 +#define METATILE_Mauville_MirageTower_Tile1 0x3D9 +#define METATILE_Mauville_MirageTower_Tile10 0x3E4 +#define METATILE_Mauville_MirageTower_Tile11 0x3E5 +#define METATILE_Mauville_MirageTower_Tile2 0x3DA +#define METATILE_Mauville_MirageTower_Tile3 0x3E0 +#define METATILE_Mauville_MirageTower_Tile4 0x3E1 +#define METATILE_Mauville_MirageTower_Tile5 0x3E2 +#define METATILE_Mauville_MirageTower_Tile6 0x3E8 +#define METATILE_Mauville_MirageTower_Tile7 0x3E9 +#define METATILE_Mauville_MirageTower_Tile8 0x3EA +#define METATILE_Mauville_MirageTower_Tile9 0x3F0 +#define METATILE_Mauville_MirageTower_TileA 0x3F1 +#define METATILE_Mauville_MirageTower_TileB 0x3F2 +#define METATILE_Mauville_MirageTower_TileC 0x3DB +#define METATILE_Mauville_MirageTower_TileD 0x3DC +#define METATILE_Mauville_MirageTower_TileE 0x3DD +#define METATILE_Mauville_MirageTower_TileF 0x3E3 + +// gTileset_MeteorFalls +#define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E +#define METATILE_MeteorFalls_CaveEntrance_Left 0x24D +#define METATILE_MeteorFalls_CaveEntrance_Right 0x24F +#define METATILE_MeteorFalls_CaveEntrance_Top 0x246 + +// gTileset_MossdeepGameCorner +#define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 +#define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A +#define METATILE_MossdeepGameCorner_CounterOpen_Bottom 0x234 +#define METATILE_MossdeepGameCorner_CounterOpen_Top 0x22C + +// gTileset_MossdeepGym +#define METATILE_MossdeepGym_YellowArrow_Right 0x250 // gTileset_Mossdeep #define METATILE_Mossdeep_Door 0x2A1 #define METATILE_Mossdeep_Door_SpaceCenter 0x2ED -// gTileset_EverGrande -#define METATILE_EverGrande_Door_PokemonLeague 0x21D +// gTileset_Pacifidlog +#define METATILE_Pacifidlog_Door 0x21A +#define METATILE_Pacifidlog_FloatingLogs_HorizontalLeft 0x250 +#define METATILE_Pacifidlog_FloatingLogs_HorizontalRight 0x251 +#define METATILE_Pacifidlog_FloatingLogs_VerticalBottom 0x260 +#define METATILE_Pacifidlog_FloatingLogs_VerticalTop 0x258 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalLeft 0x252 +#define METATILE_Pacifidlog_HalfSubmergedLogs_HorizontalRight 0x253 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalBottom 0x261 +#define METATILE_Pacifidlog_HalfSubmergedLogs_VerticalTop 0x259 +#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2 +#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalLeft 0x254 +#define METATILE_Pacifidlog_SubmergedLogs_HorizontalRight 0x255 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalBottom 0x262 +#define METATILE_Pacifidlog_SubmergedLogs_VerticalTop 0x25A + +// gTileset_PetalburgGym +#define METATILE_PetalburgGym_Door 0x224 +#define METATILE_PetalburgGym_RoomEntrance_Left 0x210 +#define METATILE_PetalburgGym_RoomEntrance_Right 0x211 +#define METATILE_PetalburgGym_SlidingDoor_Frame0 0x218 +#define METATILE_PetalburgGym_SlidingDoor_Frame1 0x219 +#define METATILE_PetalburgGym_SlidingDoor_Frame2 0x21A +#define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B +#define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C + +// gTileset_Petalburg +#define METATILE_Petalburg_Door_BirchsLab 0x249 +#define METATILE_Petalburg_Door_Littleroot 0x248 +#define METATILE_Petalburg_Door_Oldale 0x287 // gTileset_PokemonCenter -#define METATILE_PokemonCenter_Door_CableClub 0x264 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 -#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 -#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A -#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B -#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 -#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 -#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA -#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC -#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 -#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E -#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_CounterBarrier 0x25D +#define METATILE_PokemonCenter_Door_CableClub 0x264 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282 +#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283 +#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288 +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A +#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289 +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B +#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2 +#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3 +#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8 +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA +#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC +#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4 +#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E +#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC -// gTileset_InsideOfTruck -#define METATILE_InsideOfTruck_ExitLight_Top 0x208 -#define METATILE_InsideOfTruck_ExitLight_Mid 0x210 -#define METATILE_InsideOfTruck_ExitLight_Bottom 0x218 -#define METATILE_InsideOfTruck_DoorClosedFloor_Top 0x20D -#define METATILE_InsideOfTruck_DoorClosedFloor_Mid 0x215 -#define METATILE_InsideOfTruck_DoorClosedFloor_Bottom 0x21D +// gTileset_RSMossdeepGym +#define METATILE_RSMossdeepGym_RedArrow_Down 0x205 +#define METATILE_RSMossdeepGym_RedArrow_Left 0x20C +#define METATILE_RSMossdeepGym_RedArrow_Right 0x204 +#define METATILE_RSMossdeepGym_RedArrow_Up 0x20D +#define METATILE_RSMossdeepGym_Switch_Down 0x239 +#define METATILE_RSMossdeepGym_Switch_Up 0x238 -// gTileset_MossdeepGameCorner -#define METATILE_MossdeepGameCorner_CounterOpen_Top 0x22C -#define METATILE_MossdeepGameCorner_CounterOpen_Bottom 0x234 -#define METATILE_MossdeepGameCorner_CounterClosed_Top 0x22A -#define METATILE_MossdeepGameCorner_CounterClosed_Bottom 0x232 - -// gTileset_EliteFour -#define METATILE_EliteFour_OpenDoor_Frame 0x344 -#define METATILE_EliteFour_OpenDoor_Opening 0x345 -#define METATILE_EliteFour_OpenDoorChampion_Frame 0x346 -#define METATILE_EliteFour_OpenDoorChampion_Opening 0x347 -#define METATILE_EliteFour_LeftSpotlightOff 0x2DD -#define METATILE_EliteFour_RightSpotlightOff 0x2DE -#define METATILE_EliteFour_EntryDoor_ClosedTop 0x206 -#define METATILE_EliteFour_EntryDoor_ClosedBottom 0x20E - -// gTileset_InsideShip -#define METATILE_InsideShip_IntactDoor_Bottom_Unlocked 0x22B -#define METATILE_InsideShip_IntactDoor_Bottom_Locked 0x233 -#define METATILE_InsideShip_DoorIndent_Unlocked 0x21A -#define METATILE_InsideShip_DoorIndent_Locked 0x234 -#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 - -// gTileset_BattlePike -#define METATILE_BattlePike_CurtainFrames_Start 0x201 -#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A -#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 -#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 -#define METATILE_BattlePike_Curtain_Stage0_Tile3 0x253 -#define METATILE_BattlePike_Curtain_Stage0_Tile4 0x259 -#define METATILE_BattlePike_Curtain_Stage0_Tile5 0x25A -#define METATILE_BattlePike_Curtain_Stage0_Tile6 0x25B -#define METATILE_BattlePike_Curtain_Stage1_Tile0 0x22A -#define METATILE_BattlePike_Curtain_Stage1_Tile1 0x231 -#define METATILE_BattlePike_Curtain_Stage1_Tile2 0x232 -#define METATILE_BattlePike_Curtain_Stage1_Tile3 0x233 -#define METATILE_BattlePike_Curtain_Stage1_Tile4 0x239 -#define METATILE_BattlePike_Curtain_Stage1_Tile5 0x23A -#define METATILE_BattlePike_Curtain_Stage1_Tile6 0x23B -#define METATILE_BattlePike_Curtain_Stage2_Tile0 0x20A -#define METATILE_BattlePike_Curtain_Stage2_Tile1 0x211 -#define METATILE_BattlePike_Curtain_Stage2_Tile2 0x212 -#define METATILE_BattlePike_Curtain_Stage2_Tile3 0x213 -#define METATILE_BattlePike_Curtain_Stage2_Tile4 0x219 -#define METATILE_BattlePike_Curtain_Stage2_Tile5 0x21A -#define METATILE_BattlePike_Curtain_Stage2_Tile6 0x21B -#define METATILE_BattlePike_Curtain_Stage3_Tile0 0x2AB -#define METATILE_BattlePike_Curtain_Stage3_Tile1 0x2B2 -#define METATILE_BattlePike_Curtain_Stage3_Tile2 0x2B3 -#define METATILE_BattlePike_Curtain_Stage3_Tile3 0x2B4 -#define METATILE_BattlePike_Curtain_Stage3_Tile4 0x2BA -#define METATILE_BattlePike_Curtain_Stage3_Tile5 0x2BB -#define METATILE_BattlePike_Curtain_Stage3_Tile6 0x2BC - -// gTileset_Lilycove -#define METATILE_Lilycove_Door 0x246 -#define METATILE_Lilycove_Door_Wooden 0x28E -#define METATILE_Lilycove_Door_DeptStore 0x30C -#define METATILE_Lilycove_Door_SafariZone 0x32D -#define METATILE_Lilycove_Wailmer0 0x290 -#define METATILE_Lilycove_Wailmer1 0x291 -#define METATILE_Lilycove_Wailmer2 0x2A0 -#define METATILE_Lilycove_Wailmer3 0x2A1 -#define METATILE_Lilycove_Wailmer0_Alt 0x298 -#define METATILE_Lilycove_Wailmer1_Alt 0x299 - -// gTileset_Contest -#define METATILE_Contest_WallShadow 0x221 -#define METATILE_Contest_FloorShadow 0x261 -#define METATILE_Contest_CounterFlap_Top 0x2D1 -#define METATILE_Contest_CounterFlap_Bottom 0x2D9 - -// gTileset_BattleTent -#define METATILE_BattleTent_Door 0x26B - -// gTileset_LilycoveMuseum -#define METATILE_LilycoveMuseum_Painting0_Left 0x25A -#define METATILE_LilycoveMuseum_Painting0_Right 0x25B -#define METATILE_LilycoveMuseum_Painting1_Left 0x25C -#define METATILE_LilycoveMuseum_Painting1_Right 0x25D -#define METATILE_LilycoveMuseum_Painting2_Left 0x25E -#define METATILE_LilycoveMuseum_Painting2_Right 0x25F -#define METATILE_LilycoveMuseum_Painting3_Left 0x260 -#define METATILE_LilycoveMuseum_Painting3_Right 0x261 -#define METATILE_LilycoveMuseum_Painting4_Left 0x262 -#define METATILE_LilycoveMuseum_Painting4_Right 0x263 - -// gTileset_MeteorFalls -#define METATILE_MeteorFalls_CaveEntrance_Top 0x246 -#define METATILE_MeteorFalls_CaveEntrance_Left 0x24D -#define METATILE_MeteorFalls_CaveEntrance_Bottom 0x24E -#define METATILE_MeteorFalls_CaveEntrance_Right 0x24F - -// gTileset_Facility -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile0 0x314 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile1 0x315 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile2 0x316 -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile3 0x31C -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile4 0x31D -#define METATILE_Facility_NewMauvilleDoor_Closed_Tile5 0x31E -#define METATILE_Facility_NewMauvilleDoor_Open_Tile0 0x2C3 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile1 0x2C4 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile2 0x2C5 -#define METATILE_Facility_NewMauvilleDoor_Open_Tile3 0x2CB -#define METATILE_Facility_NewMauvilleDoor_Open_Tile4 0x2CC -#define METATILE_Facility_NewMauvilleDoor_Open_Tile5 0x2CD -#define METATILE_Facility_DataPad 0x3E4 - -// gTileset_GenericBuilding -#define METATILE_GenericBuilding_TableEdge 0x2F1 -#define METATILE_GenericBuilding_TrickHouse_Door_Closed 0x21B -#define METATILE_GenericBuilding_TrickHouse_Stairs_Down 0x219 - -// gTileset_TrickHousePuzzle -#define METATILE_TrickHousePuzzle_Stairs_Down 0x20B -#define METATILE_TrickHousePuzzle_Lever_Off 0x23E -#define METATILE_TrickHousePuzzle_Lever_On 0x23F -#define METATILE_TrickHousePuzzle_Button_Up 0x258 -#define METATILE_TrickHousePuzzle_Button_Pressed 0x259 -#define METATILE_TrickHousePuzzle_Door_Shuttered 0x26A -#define METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt 0x252 -#define METATILE_TrickHousePuzzle_Floor_ShadowTop 0x255 -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0 0x24B -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1 0x24C -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2 0x253 -#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3 0x254 -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0 0x23B -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1 0x23C -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2 0x243 -#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3 0x244 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0 0x248 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1 0x249 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2 0x250 -#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3 0x251 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0 0x238 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1 0x239 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2 0x240 -#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3 0x241 -#define METATILE_TrickHousePuzzle_BlueDoorV_Retracted 0x24D -#define METATILE_TrickHousePuzzle_RedDoorV_Retracted 0x24A -#define METATILE_TrickHousePuzzle_RedDoorV_Open0 0x23A -#define METATILE_TrickHousePuzzle_RedDoorV_Open1 0x242 -#define METATILE_TrickHousePuzzle_BlueDoorV_Open0 0x23D -#define METATILE_TrickHousePuzzle_BlueDoorV_Open1 0x245 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right 0x260 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left 0x261 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up 0x262 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B -#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C -#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 - -// gTileset_BikeShop (also used by New Mauville) -#define METATILE_BikeShop_Barrier_Hidden_Top 0x269 -#define METATILE_BikeShop_Barrier_Hidden_Bottom 0x271 -#define METATILE_BikeShop_Floor_Shadow_Top 0x26D -#define METATILE_BikeShop_Wall_Edge_Top 0x281 -#define METATILE_BikeShop_Button_Pressed 0x24F -#define METATILE_BikeShop_Button_Green 0x22E -#define METATILE_BikeShop_Button_Blue 0x236 -#define METATILE_BikeShop_Barrier_Green_Top 0x2B6 -#define METATILE_BikeShop_Barrier_Green_TopMid 0x2BE -#define METATILE_BikeShop_Barrier_Green_BottomMid 0x2C6 -#define METATILE_BikeShop_Barrier_Green_Bottom 0x2CE -#define METATILE_BikeShop_Barrier_Blue_Top 0x2B7 -#define METATILE_BikeShop_Barrier_Blue_TopMid 0x2BF -#define METATILE_BikeShop_Barrier_Blue_BottomMid 0x2C7 -#define METATILE_BikeShop_Barrier_Blue_Bottom 0x2CF -#define METATILE_BikeShop_Generator_Off_Tile0 0x2F0 -#define METATILE_BikeShop_Generator_Off_Tile1 0x2F1 -#define METATILE_BikeShop_Generator_Off_Tile2 0x2F2 -#define METATILE_BikeShop_Generator_Off_Tile3 0x2F3 -#define METATILE_BikeShop_Generator_Off_Tile4 0x2F4 -#define METATILE_BikeShop_Generator_Off_Tile5 0x2F5 -#define METATILE_BikeShop_Generator_Off_Tile6 0x2F6 -#define METATILE_BikeShop_Generator_Off_Tile7 0x2F7 - -// gTileset_TrainerHill -#define METATILE_TrainerHill_GreenFloorTile 0x307 -#define METATILE_TrainerHill_CounterDoor 0x334 -#define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C -#define METATILE_TrainerHill_Door_Elevator_Roof 0x383 - -// gTileset_Underwater -#define METATILE_Underwater_RockWall 0x21E -#define METATILE_Underwater_FloorShadow 0x228 +// gTileset_Rustboro +#define METATILE_Rustboro_Door_Gray 0x21F +#define METATILE_Rustboro_Door_Tan 0x22F // gTileset_SecretBase -#define METATILE_SecretBase_Wall_TopMid 0x202 -#define METATILE_SecretBase_Ground 0x20A -#define METATILE_SecretBase_PC 0x220 -#define METATILE_SecretBase_RegisterPC 0x221 -#define METATILE_SecretBase_PC_On 0x224 -#define METATILE_SecretBase_RedBrick_Top 0x225 -#define METATILE_SecretBase_RedBrick_Bottom 0x22D -#define METATILE_SecretBase_YellowBrick_Top 0x226 -#define METATILE_SecretBase_YellowBrick_Bottom 0x22E -#define METATILE_SecretBase_BlueBrick_Top 0x227 +#define METATILE_SecretBase_AttractMat_BottomLeft 0x313 +#define METATILE_SecretBase_AttractMat_BottomMid 0x314 +#define METATILE_SecretBase_AttractMat_BottomRight 0x315 +#define METATILE_SecretBase_AttractMat_Center 0x30C +#define METATILE_SecretBase_AttractMat_MidLeft 0x30B +#define METATILE_SecretBase_AttractMat_MidRight 0x30D +#define METATILE_SecretBase_AttractMat_TopLeft 0x303 +#define METATILE_SecretBase_AttractMat_TopMid 0x304 +#define METATILE_SecretBase_AttractMat_TopRight 0x305 +#define METATILE_SecretBase_BallPoster 0x330 +#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC +#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE +#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED +#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF +#define METATILE_SecretBase_BigPlant_TopLeft 0x2E4 +#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 +#define METATILE_SecretBase_BlueBalloon 0x33C #define METATILE_SecretBase_BlueBrick_Bottom 0x22F -#define METATILE_SecretBase_MudBall 0x228 -#define METATILE_SecretBase_Fence_Horizontal 0x22C -#define METATILE_SecretBase_Fence_Vertical 0x233 -#define METATILE_SecretBase_SolidBoard_Top 0x234 -#define METATILE_SecretBase_SolidBoard_Bottom 0x23C -#define METATILE_SecretBase_RedTent_TopLeft 0x230 -#define METATILE_SecretBase_RedTent_TopMid 0x231 -#define METATILE_SecretBase_RedTent_TopRight 0x232 -#define METATILE_SecretBase_RedTent_MidLeft 0x238 -#define METATILE_SecretBase_RedTent_DoorTop 0x239 -#define METATILE_SecretBase_RedTent_MidRight 0x23A -#define METATILE_SecretBase_RedTent_BottomLeft 0x240 -#define METATILE_SecretBase_RedTent_Door 0x241 -#define METATILE_SecretBase_RedTent_BottomRight 0x23B +#define METATILE_SecretBase_BlueBrick_Top 0x227 +#define METATILE_SecretBase_BluePoster 0x333 +#define METATILE_SecretBase_BlueTent_BottomLeft 0x258 +#define METATILE_SecretBase_BlueTent_BottomRight 0x269 +#define METATILE_SecretBase_BlueTent_Door 0x259 +#define METATILE_SecretBase_BlueTent_DoorTop 0x251 +#define METATILE_SecretBase_BlueTent_MidLeft 0x250 +#define METATILE_SecretBase_BlueTent_MidRight 0x270 #define METATILE_SecretBase_BlueTent_TopLeft 0x248 #define METATILE_SecretBase_BlueTent_TopMid 0x249 #define METATILE_SecretBase_BlueTent_TopRight 0x268 -#define METATILE_SecretBase_BlueTent_MidLeft 0x250 -#define METATILE_SecretBase_BlueTent_DoorTop 0x251 -#define METATILE_SecretBase_BlueTent_MidRight 0x270 -#define METATILE_SecretBase_BlueTent_BottomLeft 0x258 -#define METATILE_SecretBase_BlueTent_Door 0x259 -#define METATILE_SecretBase_BlueTent_BottomRight 0x269 -#define METATILE_SecretBase_Slide_TopLeft 0x235 -#define METATILE_SecretBase_Slide_TopRight 0x236 -#define METATILE_SecretBase_Slide_StairLanding 0x23D -#define METATILE_SecretBase_Slide_SlideTop 0x23E -#define METATILE_SecretBase_Slide_Stairs 0x263 -#define METATILE_SecretBase_Slide_SlideBottom 0x264 -#define METATILE_SecretBase_Slide_MatLeft 0x26F -#define METATILE_SecretBase_Slide_MatRight 0x277 -#define METATILE_SecretBase_Stand_CornerLeft 0x26A -#define METATILE_SecretBase_Stand_MidLeft 0x26B -#define METATILE_SecretBase_Stand_MidRight 0x26C -#define METATILE_SecretBase_Stand_CornerRight 0x26D -#define METATILE_SecretBase_Stand_StairsLeft 0x272 -#define METATILE_SecretBase_Stand_BaseLeft 0x273 -#define METATILE_SecretBase_Stand_BaseRight 0x274 -#define METATILE_SecretBase_Stand_StairsRight 0x275 -#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237 #define METATILE_SecretBase_BreakableDoor_BottomClosed 0x23F -#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E #define METATILE_SecretBase_BreakableDoor_BottomOpen 0x276 +#define METATILE_SecretBase_BreakableDoor_TopClosed 0x237 +#define METATILE_SecretBase_BreakableDoor_TopOpen 0x26E +#define METATILE_SecretBase_BrickChair 0x2C8 +#define METATILE_SecretBase_BrickDesk_BottomLeft 0x2B0 +#define METATILE_SecretBase_BrickDesk_BottomMid 0x2B1 +#define METATILE_SecretBase_BrickDesk_BottomRight 0x2B2 +#define METATILE_SecretBase_BrickDesk_Center 0x2A9 +#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8 +#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA +#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0 +#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1 +#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2 +#define METATILE_SecretBase_CampChair 0x2C9 +#define METATILE_SecretBase_CampDesk_BottomLeft 0x2B4 +#define METATILE_SecretBase_CampDesk_BottomMid 0x2B5 +#define METATILE_SecretBase_CampDesk_BottomRight 0x2B6 +#define METATILE_SecretBase_CampDesk_Center 0x2AD +#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC +#define METATILE_SecretBase_CampDesk_MidRight 0x2AE +#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4 +#define METATILE_SecretBase_CampDesk_TopMid 0x2A5 +#define METATILE_SecretBase_CampDesk_TopRight 0x2A6 +#define METATILE_SecretBase_ColorfulPlant_BaseLeft1 0x2E8 +#define METATILE_SecretBase_ColorfulPlant_BaseLeft2 0x2EA +#define METATILE_SecretBase_ColorfulPlant_BaseRight1 0x2E9 +#define METATILE_SecretBase_ColorfulPlant_BaseRight2 0x2EB +#define METATILE_SecretBase_ColorfulPlant_TopLeft 0x2E0 +#define METATILE_SecretBase_ColorfulPlant_TopLeftWall 0x2E1 +#define METATILE_SecretBase_ColorfulPlant_TopRight 0x2E2 +#define METATILE_SecretBase_ColorfulPlant_TopRightWall 0x2E3 +#define METATILE_SecretBase_ComfortChair 0x2C1 +#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E +#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F +#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB +#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296 +#define METATILE_SecretBase_ComfortDesk_TopMid 0x297 +#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3 +#define METATILE_SecretBase_CutePoster 0x334 +#define METATILE_SecretBase_CuteTV 0x2F6 +#define METATILE_SecretBase_Fence_Horizontal 0x22C +#define METATILE_SecretBase_Fence_Vertical 0x233 +#define METATILE_SecretBase_FireBlastMat_BottomLeft 0x265 +#define METATILE_SecretBase_FireBlastMat_BottomMid 0x266 +#define METATILE_SecretBase_FireBlastMat_BottomRight 0x267 +#define METATILE_SecretBase_FireBlastMat_Center 0x25E +#define METATILE_SecretBase_FireBlastMat_MidLeft 0x25D +#define METATILE_SecretBase_FireBlastMat_MidRight 0x25F +#define METATILE_SecretBase_FireBlastMat_TopLeft 0x25A +#define METATILE_SecretBase_FireBlastMat_TopMid 0x25B +#define METATILE_SecretBase_FireBlastMat_TopRight 0x25C +#define METATILE_SecretBase_FissureMat_BottomLeft 0x316 +#define METATILE_SecretBase_FissureMat_BottomMid 0x317 +#define METATILE_SecretBase_FissureMat_BottomRight 0x328 +#define METATILE_SecretBase_FissureMat_Center 0x30F +#define METATILE_SecretBase_FissureMat_MidLeft 0x30E +#define METATILE_SecretBase_FissureMat_MidRight 0x320 +#define METATILE_SecretBase_FissureMat_TopLeft 0x306 +#define METATILE_SecretBase_FissureMat_TopMid 0x307 +#define METATILE_SecretBase_FissureMat_TopRight 0x318 +#define METATILE_SecretBase_GlassOrnament_Base1 0x28A +#define METATILE_SecretBase_GlassOrnament_Base2 0x28B +#define METATILE_SecretBase_GlassOrnament_Top 0x282 +#define METATILE_SecretBase_GlassOrnament_TopWall 0x283 #define METATILE_SecretBase_GlitterMat 0x260 +#define METATILE_SecretBase_GoldShield_Base1 0x336 +#define METATILE_SecretBase_GoldShield_Base2 0x337 +#define METATILE_SecretBase_GoldShield_Top 0x32E +#define METATILE_SecretBase_GoldShield_TopWall 0x32F +#define METATILE_SecretBase_GorgeousPlant_BaseLeft1 0x2F8 +#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA +#define METATILE_SecretBase_GorgeousPlant_BaseRight1 0x2F9 +#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB +#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 +#define METATILE_SecretBase_GorgeousPlant_TopLeftWall 0x2F1 +#define METATILE_SecretBase_GorgeousPlant_TopRight 0x2F2 +#define METATILE_SecretBase_GorgeousPlant_TopRightWall 0x2F3 +#define METATILE_SecretBase_GreenPoster 0x331 +#define METATILE_SecretBase_Ground 0x20A +#define METATILE_SecretBase_HardChair 0x2CA +#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7 +#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB +#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC +#define METATILE_SecretBase_HardDesk_Center 0x2C3 +#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF +#define METATILE_SecretBase_HardDesk_MidRight 0x2C4 +#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7 +#define METATILE_SecretBase_HardDesk_TopMid 0x2BB +#define METATILE_SecretBase_HardDesk_TopRight 0x2BC +#define METATILE_SecretBase_HeavyChair 0x2BA +#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298 +#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299 +#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A +#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290 +#define METATILE_SecretBase_HeavyDesk_TopMid 0x291 +#define METATILE_SecretBase_HeavyDesk_TopRight 0x292 #define METATILE_SecretBase_JumpMat 0x261 -#define METATILE_SecretBase_SpinMat 0x262 +#define METATILE_SecretBase_KissPoster_Left 0x32C +#define METATILE_SecretBase_KissPoster_Right 0x32D +#define METATILE_SecretBase_LongPoster_Left 0x31E +#define METATILE_SecretBase_LongPoster_Right 0x31F +#define METATILE_SecretBase_MudBall 0x228 +#define METATILE_SecretBase_NoteMat_A 0x27D +#define METATILE_SecretBase_NoteMat_B 0x27E +#define METATILE_SecretBase_NoteMat_C_High 0x2B3 #define METATILE_SecretBase_NoteMat_C_Low 0x278 #define METATILE_SecretBase_NoteMat_D 0x279 #define METATILE_SecretBase_NoteMat_E 0x27A #define METATILE_SecretBase_NoteMat_F 0x27B #define METATILE_SecretBase_NoteMat_G 0x27C -#define METATILE_SecretBase_NoteMat_A 0x27D -#define METATILE_SecretBase_NoteMat_B 0x27E -#define METATILE_SecretBase_NoteMat_C_High 0x2B3 -#define METATILE_SecretBase_Tire_TopLeft 0x280 -#define METATILE_SecretBase_Tire_TopRight 0x281 -#define METATILE_SecretBase_Tire_BottomLeft 0x288 -#define METATILE_SecretBase_Tire_BottomRight 0x289 -#define METATILE_SecretBase_GlassOrnament_Top 0x282 -#define METATILE_SecretBase_GlassOrnament_Base1 0x28A -#define METATILE_SecretBase_GlassOrnament_TopWall 0x283 -#define METATILE_SecretBase_GlassOrnament_Base2 0x28B -#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284 -#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C -#define METATILE_SecretBase_SandOrnament_Top 0x285 -#define METATILE_SecretBase_SandOrnament_Base1 0x28D -#define METATILE_SecretBase_SandOrnament_TopWall 0x286 -#define METATILE_SecretBase_SandOrnament_Base2 0x28E -#define METATILE_SecretBase_SmallDesk 0x287 -#define METATILE_SecretBase_PokemonDesk 0x28F -#define METATILE_SecretBase_HeavyDesk_TopLeft 0x290 -#define METATILE_SecretBase_HeavyDesk_TopMid 0x291 -#define METATILE_SecretBase_HeavyDesk_TopRight 0x292 -#define METATILE_SecretBase_HeavyDesk_BottomLeft 0x298 -#define METATILE_SecretBase_HeavyDesk_BottomMid 0x299 -#define METATILE_SecretBase_HeavyDesk_BottomRight 0x29A -#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293 -#define METATILE_SecretBase_RaggedDesk_TopMid 0x294 -#define METATILE_SecretBase_RaggedDesk_TopRight 0x295 -#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B -#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C -#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D -#define METATILE_SecretBase_ComfortDesk_TopLeft 0x296 -#define METATILE_SecretBase_ComfortDesk_TopMid 0x297 -#define METATILE_SecretBase_ComfortDesk_TopRight 0x2A3 -#define METATILE_SecretBase_ComfortDesk_BottomLeft 0x29E -#define METATILE_SecretBase_ComfortDesk_BottomMid 0x29F -#define METATILE_SecretBase_ComfortDesk_BottomRight 0x2AB -#define METATILE_SecretBase_BrickDesk_TopLeft 0x2A0 -#define METATILE_SecretBase_BrickDesk_TopMid 0x2A1 -#define METATILE_SecretBase_BrickDesk_TopRight 0x2A2 -#define METATILE_SecretBase_BrickDesk_MidLeft 0x2A8 -#define METATILE_SecretBase_BrickDesk_Center 0x2A9 -#define METATILE_SecretBase_BrickDesk_MidRight 0x2AA -#define METATILE_SecretBase_BrickDesk_BottomLeft 0x2B0 -#define METATILE_SecretBase_BrickDesk_BottomMid 0x2B1 -#define METATILE_SecretBase_BrickDesk_BottomRight 0x2B2 -#define METATILE_SecretBase_CampDesk_TopLeft 0x2A4 -#define METATILE_SecretBase_CampDesk_TopMid 0x2A5 -#define METATILE_SecretBase_CampDesk_TopRight 0x2A6 -#define METATILE_SecretBase_CampDesk_MidLeft 0x2AC -#define METATILE_SecretBase_CampDesk_Center 0x2AD -#define METATILE_SecretBase_CampDesk_MidRight 0x2AE -#define METATILE_SecretBase_CampDesk_BottomLeft 0x2B4 -#define METATILE_SecretBase_CampDesk_BottomMid 0x2B5 -#define METATILE_SecretBase_CampDesk_BottomRight 0x2B6 -#define METATILE_SecretBase_HardDesk_TopLeft 0x2A7 -#define METATILE_SecretBase_HardDesk_TopMid 0x2BB -#define METATILE_SecretBase_HardDesk_TopRight 0x2BC -#define METATILE_SecretBase_HardDesk_MidLeft 0x2AF -#define METATILE_SecretBase_HardDesk_Center 0x2C3 -#define METATILE_SecretBase_HardDesk_MidRight 0x2C4 -#define METATILE_SecretBase_HardDesk_BottomLeft 0x2B7 -#define METATILE_SecretBase_HardDesk_BottomMid 0x2CB -#define METATILE_SecretBase_HardDesk_BottomRight 0x2CC -#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD -#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE -#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF -#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5 -#define METATILE_SecretBase_PrettyDesk_Center 0x2C6 -#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7 -#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD -#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE -#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF -#define METATILE_SecretBase_SmallChair 0x2B8 -#define METATILE_SecretBase_PokemonChair 0x2B9 -#define METATILE_SecretBase_HeavyChair 0x2BA -#define METATILE_SecretBase_PrettyChair 0x2C0 -#define METATILE_SecretBase_ComfortChair 0x2C1 -#define METATILE_SecretBase_RaggedChair 0x2C2 -#define METATILE_SecretBase_BrickChair 0x2C8 -#define METATILE_SecretBase_CampChair 0x2C9 -#define METATILE_SecretBase_HardChair 0x2CA -#define METATILE_SecretBase_RedPlant_Top 0x2D0 -#define METATILE_SecretBase_RedPlant_Base1 0x2D8 -#define METATILE_SecretBase_RedPlant_TopWall 0x2D1 -#define METATILE_SecretBase_RedPlant_Base2 0x2D9 -#define METATILE_SecretBase_TropicalPlant_Top 0x2D2 -#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA -#define METATILE_SecretBase_TropicalPlant_TopWall 0x2D3 -#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB -#define METATILE_SecretBase_PrettyFlowers_Top 0x2D4 -#define METATILE_SecretBase_PrettyFlowers_Base1 0x2DC -#define METATILE_SecretBase_PrettyFlowers_TopWall 0x2D5 -#define METATILE_SecretBase_PrettyFlowers_Base2 0x2DD -#define METATILE_SecretBase_ColorfulPlant_TopLeft 0x2E0 -#define METATILE_SecretBase_ColorfulPlant_TopRight 0x2E2 -#define METATILE_SecretBase_ColorfulPlant_BaseLeft1 0x2E8 -#define METATILE_SecretBase_ColorfulPlant_BaseRight1 0x2E9 -#define METATILE_SecretBase_ColorfulPlant_TopLeftWall 0x2E1 -#define METATILE_SecretBase_ColorfulPlant_TopRightWall 0x2E3 -#define METATILE_SecretBase_ColorfulPlant_BaseLeft2 0x2EA -#define METATILE_SecretBase_ColorfulPlant_BaseRight2 0x2EB -#define METATILE_SecretBase_BigPlant_TopLeft 0x2E4 -#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 -#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC -#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED -#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE -#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF -#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 -#define METATILE_SecretBase_GorgeousPlant_TopRight 0x2F2 -#define METATILE_SecretBase_GorgeousPlant_BaseLeft1 0x2F8 -#define METATILE_SecretBase_GorgeousPlant_BaseRight1 0x2F9 -#define METATILE_SecretBase_GorgeousPlant_TopLeftWall 0x2F1 -#define METATILE_SecretBase_GorgeousPlant_TopRightWall 0x2F3 -#define METATILE_SecretBase_GorgeousPlant_BaseLeft2 0x2FA -#define METATILE_SecretBase_GorgeousPlant_BaseRight2 0x2FB -#define METATILE_SecretBase_TV 0x2F4 -#define METATILE_SecretBase_RoundTV 0x2F5 -#define METATILE_SecretBase_CuteTV 0x2F6 +#define METATILE_SecretBase_PC 0x220 +#define METATILE_SecretBase_PC_On 0x224 #define METATILE_SecretBase_PikaPoster_Left 0x31C #define METATILE_SecretBase_PikaPoster_Right 0x31D -#define METATILE_SecretBase_LongPoster_Left 0x31E -#define METATILE_SecretBase_LongPoster_Right 0x31F -#define METATILE_SecretBase_SeaPoster_Left 0x324 -#define METATILE_SecretBase_SeaPoster_Right 0x325 -#define METATILE_SecretBase_SkyPoster_Left 0x326 -#define METATILE_SecretBase_SkyPoster_Right 0x327 -#define METATILE_SecretBase_KissPoster_Left 0x32C -#define METATILE_SecretBase_KissPoster_Right 0x32D -#define METATILE_SecretBase_BallPoster 0x330 -#define METATILE_SecretBase_GreenPoster 0x331 -#define METATILE_SecretBase_RedPoster 0x332 -#define METATILE_SecretBase_BluePoster 0x333 -#define METATILE_SecretBase_CutePoster 0x334 -#define METATILE_SecretBase_SilverShield_Top 0x2D6 -#define METATILE_SecretBase_SilverShield_Base1 0x2DE -#define METATILE_SecretBase_SilverShield_TopWall 0x2D7 -#define METATILE_SecretBase_SilverShield_Base2 0x2DF -#define METATILE_SecretBase_GoldShield_Top 0x32E -#define METATILE_SecretBase_GoldShield_Base1 0x336 -#define METATILE_SecretBase_GoldShield_TopWall 0x32F -#define METATILE_SecretBase_GoldShield_Base2 0x337 -#define METATILE_SecretBase_RedBalloon 0x338 -#define METATILE_SecretBase_BlueBalloon 0x33C -#define METATILE_SecretBase_YellowBalloon 0x340 -#define METATILE_SecretBase_SurfMat_TopLeft 0x242 -#define METATILE_SecretBase_SurfMat_TopMid 0x243 -#define METATILE_SecretBase_SurfMat_TopRight 0x244 -#define METATILE_SecretBase_SurfMat_MidLeft 0x24A -#define METATILE_SecretBase_SurfMat_Center 0x24B -#define METATILE_SecretBase_SurfMat_MidRight 0x24C -#define METATILE_SecretBase_SurfMat_BottomLeft 0x252 -#define METATILE_SecretBase_SurfMat_BottomMid 0x253 -#define METATILE_SecretBase_SurfMat_BottomRight 0x254 -#define METATILE_SecretBase_ThunderMat_TopLeft 0x245 -#define METATILE_SecretBase_ThunderMat_TopMid 0x246 -#define METATILE_SecretBase_ThunderMat_TopRight 0x247 -#define METATILE_SecretBase_ThunderMat_MidLeft 0x24D -#define METATILE_SecretBase_ThunderMat_Center 0x24E -#define METATILE_SecretBase_ThunderMat_MidRight 0x24F -#define METATILE_SecretBase_ThunderMat_BottomLeft 0x255 -#define METATILE_SecretBase_ThunderMat_BottomMid 0x256 -#define METATILE_SecretBase_ThunderMat_BottomRight 0x257 -#define METATILE_SecretBase_FireBlastMat_TopLeft 0x25A -#define METATILE_SecretBase_FireBlastMat_TopMid 0x25B -#define METATILE_SecretBase_FireBlastMat_TopRight 0x25C -#define METATILE_SecretBase_FireBlastMat_MidLeft 0x25D -#define METATILE_SecretBase_FireBlastMat_Center 0x25E -#define METATILE_SecretBase_FireBlastMat_MidRight 0x25F -#define METATILE_SecretBase_FireBlastMat_BottomLeft 0x265 -#define METATILE_SecretBase_FireBlastMat_BottomMid 0x266 -#define METATILE_SecretBase_FireBlastMat_BottomRight 0x267 -#define METATILE_SecretBase_PowderSnowMat_TopLeft 0x300 -#define METATILE_SecretBase_PowderSnowMat_TopMid 0x301 -#define METATILE_SecretBase_PowderSnowMat_TopRight 0x302 -#define METATILE_SecretBase_PowderSnowMat_MidLeft 0x308 -#define METATILE_SecretBase_PowderSnowMat_Center 0x309 -#define METATILE_SecretBase_PowderSnowMat_MidRight 0x30A +#define METATILE_SecretBase_PokemonChair 0x2B9 +#define METATILE_SecretBase_PokemonDesk 0x28F #define METATILE_SecretBase_PowderSnowMat_BottomLeft 0x310 #define METATILE_SecretBase_PowderSnowMat_BottomMid 0x311 #define METATILE_SecretBase_PowderSnowMat_BottomRight 0x312 -#define METATILE_SecretBase_AttractMat_TopLeft 0x303 -#define METATILE_SecretBase_AttractMat_TopMid 0x304 -#define METATILE_SecretBase_AttractMat_TopRight 0x305 -#define METATILE_SecretBase_AttractMat_MidLeft 0x30B -#define METATILE_SecretBase_AttractMat_Center 0x30C -#define METATILE_SecretBase_AttractMat_MidRight 0x30D -#define METATILE_SecretBase_AttractMat_BottomLeft 0x313 -#define METATILE_SecretBase_AttractMat_BottomMid 0x314 -#define METATILE_SecretBase_AttractMat_BottomRight 0x315 -#define METATILE_SecretBase_FissureMat_TopLeft 0x306 -#define METATILE_SecretBase_FissureMat_TopMid 0x307 -#define METATILE_SecretBase_FissureMat_TopRight 0x318 -#define METATILE_SecretBase_FissureMat_MidLeft 0x30E -#define METATILE_SecretBase_FissureMat_Center 0x30F -#define METATILE_SecretBase_FissureMat_MidRight 0x320 -#define METATILE_SecretBase_FissureMat_BottomLeft 0x316 -#define METATILE_SecretBase_FissureMat_BottomMid 0x317 -#define METATILE_SecretBase_FissureMat_BottomRight 0x328 -#define METATILE_SecretBase_SpikesMat_TopLeft 0x319 -#define METATILE_SecretBase_SpikesMat_TopMid 0x31A -#define METATILE_SecretBase_SpikesMat_TopRight 0x31B -#define METATILE_SecretBase_SpikesMat_MidLeft 0x321 -#define METATILE_SecretBase_SpikesMat_Center 0x322 -#define METATILE_SecretBase_SpikesMat_MidRight 0x323 +#define METATILE_SecretBase_PowderSnowMat_Center 0x309 +#define METATILE_SecretBase_PowderSnowMat_MidLeft 0x308 +#define METATILE_SecretBase_PowderSnowMat_MidRight 0x30A +#define METATILE_SecretBase_PowderSnowMat_TopLeft 0x300 +#define METATILE_SecretBase_PowderSnowMat_TopMid 0x301 +#define METATILE_SecretBase_PowderSnowMat_TopRight 0x302 +#define METATILE_SecretBase_PrettyChair 0x2C0 +#define METATILE_SecretBase_PrettyDesk_BottomLeft 0x2CD +#define METATILE_SecretBase_PrettyDesk_BottomMid 0x2CE +#define METATILE_SecretBase_PrettyDesk_BottomRight 0x2CF +#define METATILE_SecretBase_PrettyDesk_Center 0x2C6 +#define METATILE_SecretBase_PrettyDesk_MidLeft 0x2C5 +#define METATILE_SecretBase_PrettyDesk_MidRight 0x2C7 +#define METATILE_SecretBase_PrettyDesk_TopLeft 0x2BD +#define METATILE_SecretBase_PrettyDesk_TopMid 0x2BE +#define METATILE_SecretBase_PrettyDesk_TopRight 0x2BF +#define METATILE_SecretBase_PrettyFlowers_Base1 0x2DC +#define METATILE_SecretBase_PrettyFlowers_Base2 0x2DD +#define METATILE_SecretBase_PrettyFlowers_Top 0x2D4 +#define METATILE_SecretBase_PrettyFlowers_TopWall 0x2D5 +#define METATILE_SecretBase_RaggedChair 0x2C2 +#define METATILE_SecretBase_RaggedDesk_BottomLeft 0x29B +#define METATILE_SecretBase_RaggedDesk_BottomMid 0x29C +#define METATILE_SecretBase_RaggedDesk_BottomRight 0x29D +#define METATILE_SecretBase_RaggedDesk_TopLeft 0x293 +#define METATILE_SecretBase_RaggedDesk_TopMid 0x294 +#define METATILE_SecretBase_RaggedDesk_TopRight 0x295 +#define METATILE_SecretBase_RedBalloon 0x338 +#define METATILE_SecretBase_RedBrick_Bottom 0x22D +#define METATILE_SecretBase_RedBrick_Top 0x225 +#define METATILE_SecretBase_RedPlant_Base1 0x2D8 +#define METATILE_SecretBase_RedPlant_Base2 0x2D9 +#define METATILE_SecretBase_RedPlant_Top 0x2D0 +#define METATILE_SecretBase_RedPlant_TopWall 0x2D1 +#define METATILE_SecretBase_RedPoster 0x332 +#define METATILE_SecretBase_RedTent_BottomLeft 0x240 +#define METATILE_SecretBase_RedTent_BottomRight 0x23B +#define METATILE_SecretBase_RedTent_Door 0x241 +#define METATILE_SecretBase_RedTent_DoorTop 0x239 +#define METATILE_SecretBase_RedTent_MidLeft 0x238 +#define METATILE_SecretBase_RedTent_MidRight 0x23A +#define METATILE_SecretBase_RedTent_TopLeft 0x230 +#define METATILE_SecretBase_RedTent_TopMid 0x231 +#define METATILE_SecretBase_RedTent_TopRight 0x232 +#define METATILE_SecretBase_RegisterPC 0x221 +#define METATILE_SecretBase_RoundTV 0x2F5 +#define METATILE_SecretBase_SandOrnament_Base1 0x28D +#define METATILE_SecretBase_SandOrnament_Base2 0x28E +#define METATILE_SecretBase_SandOrnament_BrokenBase 0x28C +#define METATILE_SecretBase_SandOrnament_BrokenTop 0x284 +#define METATILE_SecretBase_SandOrnament_Top 0x285 +#define METATILE_SecretBase_SandOrnament_TopWall 0x286 +#define METATILE_SecretBase_SeaPoster_Left 0x324 +#define METATILE_SecretBase_SeaPoster_Right 0x325 +#define METATILE_SecretBase_SilverShield_Base1 0x2DE +#define METATILE_SecretBase_SilverShield_Base2 0x2DF +#define METATILE_SecretBase_SilverShield_Top 0x2D6 +#define METATILE_SecretBase_SilverShield_TopWall 0x2D7 +#define METATILE_SecretBase_SkyPoster_Left 0x326 +#define METATILE_SecretBase_SkyPoster_Right 0x327 +#define METATILE_SecretBase_Slide_MatLeft 0x26F +#define METATILE_SecretBase_Slide_MatRight 0x277 +#define METATILE_SecretBase_Slide_SlideBottom 0x264 +#define METATILE_SecretBase_Slide_SlideTop 0x23E +#define METATILE_SecretBase_Slide_StairLanding 0x23D +#define METATILE_SecretBase_Slide_Stairs 0x263 +#define METATILE_SecretBase_Slide_TopLeft 0x235 +#define METATILE_SecretBase_Slide_TopRight 0x236 +#define METATILE_SecretBase_SmallChair 0x2B8 +#define METATILE_SecretBase_SmallDesk 0x287 +#define METATILE_SecretBase_SolidBoard_Bottom 0x23C +#define METATILE_SecretBase_SolidBoard_Top 0x234 #define METATILE_SecretBase_SpikesMat_BottomLeft 0x329 #define METATILE_SecretBase_SpikesMat_BottomMid 0x32A #define METATILE_SecretBase_SpikesMat_BottomRight 0x32B +#define METATILE_SecretBase_SpikesMat_Center 0x322 +#define METATILE_SecretBase_SpikesMat_MidLeft 0x321 +#define METATILE_SecretBase_SpikesMat_MidRight 0x323 +#define METATILE_SecretBase_SpikesMat_TopLeft 0x319 +#define METATILE_SecretBase_SpikesMat_TopMid 0x31A +#define METATILE_SecretBase_SpikesMat_TopRight 0x31B +#define METATILE_SecretBase_SpinMat 0x262 +#define METATILE_SecretBase_Stand_BaseLeft 0x273 +#define METATILE_SecretBase_Stand_BaseRight 0x274 +#define METATILE_SecretBase_Stand_CornerLeft 0x26A +#define METATILE_SecretBase_Stand_CornerRight 0x26D +#define METATILE_SecretBase_Stand_MidLeft 0x26B +#define METATILE_SecretBase_Stand_MidRight 0x26C +#define METATILE_SecretBase_Stand_StairsLeft 0x272 +#define METATILE_SecretBase_Stand_StairsRight 0x275 +#define METATILE_SecretBase_SurfMat_BottomLeft 0x252 +#define METATILE_SecretBase_SurfMat_BottomMid 0x253 +#define METATILE_SecretBase_SurfMat_BottomRight 0x254 +#define METATILE_SecretBase_SurfMat_Center 0x24B +#define METATILE_SecretBase_SurfMat_MidLeft 0x24A +#define METATILE_SecretBase_SurfMat_MidRight 0x24C +#define METATILE_SecretBase_SurfMat_TopLeft 0x242 +#define METATILE_SecretBase_SurfMat_TopMid 0x243 +#define METATILE_SecretBase_SurfMat_TopRight 0x244 +#define METATILE_SecretBase_TV 0x2F4 +#define METATILE_SecretBase_ThunderMat_BottomLeft 0x255 +#define METATILE_SecretBase_ThunderMat_BottomMid 0x256 +#define METATILE_SecretBase_ThunderMat_BottomRight 0x257 +#define METATILE_SecretBase_ThunderMat_Center 0x24E +#define METATILE_SecretBase_ThunderMat_MidLeft 0x24D +#define METATILE_SecretBase_ThunderMat_MidRight 0x24F +#define METATILE_SecretBase_ThunderMat_TopLeft 0x245 +#define METATILE_SecretBase_ThunderMat_TopMid 0x246 +#define METATILE_SecretBase_ThunderMat_TopRight 0x247 +#define METATILE_SecretBase_Tire_BottomLeft 0x288 +#define METATILE_SecretBase_Tire_BottomRight 0x289 +#define METATILE_SecretBase_Tire_TopLeft 0x280 +#define METATILE_SecretBase_Tire_TopRight 0x281 +#define METATILE_SecretBase_TropicalPlant_Base1 0x2DA +#define METATILE_SecretBase_TropicalPlant_Base2 0x2DB +#define METATILE_SecretBase_TropicalPlant_Top 0x2D2 +#define METATILE_SecretBase_TropicalPlant_TopWall 0x2D3 +#define METATILE_SecretBase_Wall_TopMid 0x202 +#define METATILE_SecretBase_YellowBalloon 0x340 +#define METATILE_SecretBase_YellowBrick_Bottom 0x22E +#define METATILE_SecretBase_YellowBrick_Top 0x226 -// gTileset_BattlePyramid -#define METATILE_BattlePyramid_Floor 0x28D -#define METATILE_BattlePyramid_Exit 0x28E +// gTileset_Shop +#define METATILE_Shop_Door_Elevator 0x285 +#define METATILE_Shop_Laptop1_Flash 0x258 +#define METATILE_Shop_Laptop1_Normal 0x29D +#define METATILE_Shop_Laptop2_Flash 0x260 +#define METATILE_Shop_Laptop2_Normal 0x2A5 + +// gTileset_Slateport +#define METATILE_Slateport_Door 0x2DC +#define METATILE_Slateport_Door_BattleTent 0x393 + +// gTileset_SootopolisGym +#define METATILE_SootopolisGym_Ice_Broken 0x206 +#define METATILE_SootopolisGym_Ice_Cracked 0x20E +#define METATILE_SootopolisGym_Stairs 0x207 + +// gTileset_Sootopolis +#define METATILE_Sootopolis_Door 0x21E +#define METATILE_Sootopolis_Door_Closed 0x248 +#define METATILE_Sootopolis_Door_PeakedRoof 0x21C +#define METATILE_Sootopolis_GymDoor_Closed 0x250 +#define METATILE_Sootopolis_RoughWater 0x290 + +// gTileset_TrainerHill +#define METATILE_TrainerHill_CounterDoor 0x334 +#define METATILE_TrainerHill_Door_Elevator_Lobby 0x32C +#define METATILE_TrainerHill_Door_Elevator_Roof 0x383 +#define METATILE_TrainerHill_GreenFloorTile 0x307 + +// gTileset_TrickHousePuzzle +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left 0x261 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right 0x260 +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C +#define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Up 0x262 +#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile0 0x23B +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile1 0x23C +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile2 0x243 +#define METATILE_TrickHousePuzzle_BlueDoorH_Closed_Tile3 0x244 +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile0 0x24B +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile1 0x24C +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile2 0x253 +#define METATILE_TrickHousePuzzle_BlueDoorH_Open_Tile3 0x254 +#define METATILE_TrickHousePuzzle_BlueDoorV_Open0 0x23D +#define METATILE_TrickHousePuzzle_BlueDoorV_Open1 0x245 +#define METATILE_TrickHousePuzzle_BlueDoorV_Retracted 0x24D +#define METATILE_TrickHousePuzzle_Button_Pressed 0x259 +#define METATILE_TrickHousePuzzle_Button_Up 0x258 +#define METATILE_TrickHousePuzzle_Door_Shuttered 0x26A +#define METATILE_TrickHousePuzzle_Floor_ShadowTop 0x255 +#define METATILE_TrickHousePuzzle_Floor_ShadowTop_Alt 0x252 +#define METATILE_TrickHousePuzzle_Lever_Off 0x23E +#define METATILE_TrickHousePuzzle_Lever_On 0x23F +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile0 0x238 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile1 0x239 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile2 0x240 +#define METATILE_TrickHousePuzzle_RedDoorH_Closed_Tile3 0x241 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile0 0x248 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile1 0x249 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile2 0x250 +#define METATILE_TrickHousePuzzle_RedDoorH_Open_Tile3 0x251 +#define METATILE_TrickHousePuzzle_RedDoorV_Open0 0x23A +#define METATILE_TrickHousePuzzle_RedDoorV_Open1 0x242 +#define METATILE_TrickHousePuzzle_RedDoorV_Retracted 0x24A +#define METATILE_TrickHousePuzzle_Stairs_Down 0x20B + +// gTileset_Underwater +#define METATILE_Underwater_FloorShadow 0x228 +#define METATILE_Underwater_RockWall 0x21E #endif // GUARD_METATILE_LABELS_H From 3f0f7c6b7f1c286bf997d62e055553c3a8e02b84 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 15 Feb 2023 15:30:29 +0100 Subject: [PATCH 070/290] Fix Battle Bond activating multiple times in battle --- include/battle.h | 1 + src/battle_script_commands.c | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/battle.h b/include/battle.h index 79413441c8..01dc8d7e07 100644 --- a/include/battle.h +++ b/include/battle.h @@ -653,6 +653,7 @@ struct BattleStruct u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. + u8 battleBondTransformed[2]; // Bitfield for each party. }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d1c0a7c773..905bf2b613 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9851,8 +9851,10 @@ static void Cmd_various(void) case VARIOUS_TRY_ACTIVATE_BATTLE_BOND: if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND && HasAttackerFaintedTarget() - && CalculateEnemyPartyCount() > 1) + && CalculateEnemyPartyCount() > 1 + && !(gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]])) { + gBattleStruct->battleBondTransformed[GET_BATTLER_SIDE2(gBattlerAttacker)] |= gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species); gBattleStruct->changedSpecies[gBattlerPartyIndexes[gBattlerAttacker]] = gBattleMons[gBattlerAttacker].species; gBattleMons[gBattlerAttacker].species = SPECIES_GRENINJA_ASH; @@ -14965,7 +14967,7 @@ static void Cmd_callnative(void) func(); } -// Callnative Funcs +// Callnative Funcs void BS_CalcMetalBurstDmg(void) { u8 sideAttacker = GetBattlerSide(gBattlerAttacker); From 9c1c59816085a8e773bc60a18382d673d698a8ff Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 15 Feb 2023 09:49:33 -0500 Subject: [PATCH 071/290] GROUPTYPE_NONE to unsigned --- src/wireless_communication_status_screen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index dc60f591d8..3ce8664795 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -32,7 +32,7 @@ enum { #define GROUPTYPE_BATTLE 1 #define GROUPTYPE_UNION 2 #define GROUPTYPE_TOTAL 3 -#define GROUPTYPE_NONE -1 +#define GROUPTYPE_NONE 0xFF #define NUM_GROUPTYPES 4 struct WirelessCommunicationStatusScreen @@ -382,7 +382,7 @@ static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * gr for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { #ifdef UBFIX - // GROUPTYPE_NONE is -1, and shouldn't be used as an index into groupCounts. + // GROUPTYPE_NONE is 0xFF, and shouldn't be used as an index into groupCounts. // In theory the only activity with this group type (ACTIVITY_SEARCH) wouldn't // satisfy the condition below, but not necessarily. if (group_type(i) == GROUPTYPE_NONE) From e4045a7a5f4b2d8b4e83195aeafc67397625325c Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 15 Feb 2023 16:19:09 +0100 Subject: [PATCH 072/290] z move pp color (#2690) --- src/battle_message.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/battle_message.c b/src/battle_message.c index 7ec079e721..e6344d733c 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3913,8 +3913,13 @@ void SetPpNumbersPaletteInMoveSelection(void) { struct ChooseMoveStruct *chooseMoveStruct = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[gActiveBattler][4]); const u16 *palPtr = gPPTextPalette; - u8 var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], + u8 var; + + if (!gBattleStruct->zmove.viewing) + var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], chooseMoveStruct->maxPp[gMoveSelectionCursor[gActiveBattler]]); + else + var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[gActiveBattler]], gBattleMoves[gMoveSelectionCursor[gActiveBattler]].pp); gPlttBufferUnfaded[92] = palPtr[(var * 2) + 0]; gPlttBufferUnfaded[91] = palPtr[(var * 2) + 1]; From bd549903336848ac3b914eb36aeee832d446ff96 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 15 Feb 2023 13:56:11 -0300 Subject: [PATCH 073/290] Review changes --- asm/macros/event.inc | 4 +- data/maps/BirthIsland_Exterior/scripts.inc | 2 +- data/maps/FarawayIsland_Interior/scripts.inc | 2 +- data/maps/NavelRock_Bottom/scripts.inc | 2 +- data/maps/NavelRock_Top/scripts.inc | 2 +- data/maps/SouthernIsland_Interior/scripts.inc | 4 +- data/script_cmd_table.inc | 454 +++++++++--------- data/specials.inc | 2 +- include/pokemon.h | 5 +- src/battle_util.c | 2 +- src/egg_hatch.c | 4 +- src/party_menu.c | 4 +- src/pokemon.c | 12 +- src/scrcmd.c | 4 +- src/trade.c | 4 +- 15 files changed, 253 insertions(+), 254 deletions(-) diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 26a7e81579..b91ac68210 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1933,9 +1933,9 @@ .endm @ Creates a Pokémon with the modernFatefulEncounter bit set for an encounter - .macro setmodernfatefulencountermon species:req, level:req, item=ITEM_NONE + .macro seteventmon species:req, level:req, item=ITEM_NONE setvar VAR_0x8004, \species setvar VAR_0x8005, \level setvar VAR_0x8006, \item - special CreateModernFatefulEncounterEnemyMon + special CreateEnemyEventMon .endm diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index 4e38d8855e..d2174eee99 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -85,7 +85,7 @@ BirthIsland_Exterior_EventScript_Deoxys:: delay 40 waitmoncry setvar VAR_LAST_TALKED, LOCALID_DEOXYS - setmodernfatefulencountermon SPECIES_DEOXYS, 30 + seteventmon SPECIES_DEOXYS, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc index 91536c13bf..d3d519ed15 100644 --- a/data/maps/FarawayIsland_Interior/scripts.inc +++ b/data/maps/FarawayIsland_Interior/scripts.inc @@ -129,7 +129,7 @@ FarawayIsland_Interior_EventScript_Mew:: special DestroyMewEmergingGrassSprite delay 40 waitmoncry - setmodernfatefulencountermon SPECIES_MEW, 30 + seteventmon SPECIES_MEW, 30 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Bottom/scripts.inc b/data/maps/NavelRock_Bottom/scripts.inc index 4230398d8b..90cc229895 100644 --- a/data/maps/NavelRock_Bottom/scripts.inc +++ b/data/maps/NavelRock_Bottom/scripts.inc @@ -53,7 +53,7 @@ NavelRock_Bottom_EventScript_Lugia:: playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER waitmoncry delay 20 - setmodernfatefulencountermon SPECIES_LUGIA, 70 + seteventmon SPECIES_LUGIA, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/NavelRock_Top/scripts.inc b/data/maps/NavelRock_Top/scripts.inc index 4388c1d5c5..10969367a1 100644 --- a/data/maps/NavelRock_Top/scripts.inc +++ b/data/maps/NavelRock_Top/scripts.inc @@ -57,7 +57,7 @@ NavelRock_Top_EventScript_HoOh:: applymovement LOCALID_HO_OH, NavelRock_Top_Movement_HoOhApproach waitmovement 0 special RemoveCameraObject - setmodernfatefulencountermon SPECIES_HO_OH, 70 + seteventmon SPECIES_HO_OH, 70 setflag FLAG_SYS_CTRL_OBJ_DELETE special BattleSetup_StartLegendaryBattle waitstate diff --git a/data/maps/SouthernIsland_Interior/scripts.inc b/data/maps/SouthernIsland_Interior/scripts.inc index 77350c0768..8486739d93 100644 --- a/data/maps/SouthernIsland_Interior/scripts.inc +++ b/data/maps/SouthernIsland_Interior/scripts.inc @@ -105,11 +105,11 @@ SouthernIsland_Interior_EventScript_Sign:: end SouthernIsland_Interior_EventScript_SetLatiosBattleVars:: - setmodernfatefulencountermon SPECIES_LATIOS, 50, ITEM_SOUL_DEW + seteventmon SPECIES_LATIOS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_EventScript_SetLatiasBattleVars:: - setmodernfatefulencountermon SPECIES_LATIAS, 50, ITEM_SOUL_DEW + seteventmon SPECIES_LATIAS, 50, ITEM_SOUL_DEW return SouthernIsland_Interior_Movement_CameraPanUp: diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index d16e25e187..f50ce5322b 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -1,232 +1,232 @@ .align 2 gScriptCmdTable:: - .4byte ScrCmd_nop @ 0x00 - .4byte ScrCmd_nop1 @ 0x01 - .4byte ScrCmd_end @ 0x02 - .4byte ScrCmd_return @ 0x03 - .4byte ScrCmd_call @ 0x04 - .4byte ScrCmd_goto @ 0x05 - .4byte ScrCmd_goto_if @ 0x06 - .4byte ScrCmd_call_if @ 0x07 - .4byte ScrCmd_gotostd @ 0x08 - .4byte ScrCmd_callstd @ 0x09 - .4byte ScrCmd_gotostd_if @ 0x0a - .4byte ScrCmd_callstd_if @ 0x0b - .4byte ScrCmd_returnram @ 0x0c - .4byte ScrCmd_endram @ 0x0d - .4byte ScrCmd_setmysteryeventstatus @ 0x0e - .4byte ScrCmd_loadword @ 0x0f - .4byte ScrCmd_loadbyte @ 0x10 - .4byte ScrCmd_setptr @ 0x11 - .4byte ScrCmd_loadbytefromptr @ 0x12 - .4byte ScrCmd_setptrbyte @ 0x13 - .4byte ScrCmd_copylocal @ 0x14 - .4byte ScrCmd_copybyte @ 0x15 - .4byte ScrCmd_setvar @ 0x16 - .4byte ScrCmd_addvar @ 0x17 - .4byte ScrCmd_subvar @ 0x18 - .4byte ScrCmd_copyvar @ 0x19 - .4byte ScrCmd_setorcopyvar @ 0x1a - .4byte ScrCmd_compare_local_to_local @ 0x1b - .4byte ScrCmd_compare_local_to_value @ 0x1c - .4byte ScrCmd_compare_local_to_ptr @ 0x1d - .4byte ScrCmd_compare_ptr_to_local @ 0x1e - .4byte ScrCmd_compare_ptr_to_value @ 0x1f - .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 - .4byte ScrCmd_compare_var_to_value @ 0x21 - .4byte ScrCmd_compare_var_to_var @ 0x22 - .4byte ScrCmd_callnative @ 0x23 - .4byte ScrCmd_gotonative @ 0x24 - .4byte ScrCmd_special @ 0x25 - .4byte ScrCmd_specialvar @ 0x26 - .4byte ScrCmd_waitstate @ 0x27 - .4byte ScrCmd_delay @ 0x28 - .4byte ScrCmd_setflag @ 0x29 - .4byte ScrCmd_clearflag @ 0x2a - .4byte ScrCmd_checkflag @ 0x2b - .4byte ScrCmd_initclock @ 0x2c - .4byte ScrCmd_dotimebasedevents @ 0x2d - .4byte ScrCmd_gettime @ 0x2e - .4byte ScrCmd_playse @ 0x2f - .4byte ScrCmd_waitse @ 0x30 - .4byte ScrCmd_playfanfare @ 0x31 - .4byte ScrCmd_waitfanfare @ 0x32 - .4byte ScrCmd_playbgm @ 0x33 - .4byte ScrCmd_savebgm @ 0x34 - .4byte ScrCmd_fadedefaultbgm @ 0x35 - .4byte ScrCmd_fadenewbgm @ 0x36 - .4byte ScrCmd_fadeoutbgm @ 0x37 - .4byte ScrCmd_fadeinbgm @ 0x38 - .4byte ScrCmd_warp @ 0x39 - .4byte ScrCmd_warpsilent @ 0x3a - .4byte ScrCmd_warpdoor @ 0x3b - .4byte ScrCmd_warphole @ 0x3c - .4byte ScrCmd_warpteleport @ 0x3d - .4byte ScrCmd_setwarp @ 0x3e - .4byte ScrCmd_setdynamicwarp @ 0x3f - .4byte ScrCmd_setdivewarp @ 0x40 - .4byte ScrCmd_setholewarp @ 0x41 - .4byte ScrCmd_getplayerxy @ 0x42 - .4byte ScrCmd_getpartysize @ 0x43 - .4byte ScrCmd_additem @ 0x44 - .4byte ScrCmd_removeitem @ 0x45 - .4byte ScrCmd_checkitemspace @ 0x46 - .4byte ScrCmd_checkitem @ 0x47 - .4byte ScrCmd_checkitemtype @ 0x48 - .4byte ScrCmd_addpcitem @ 0x49 - .4byte ScrCmd_checkpcitem @ 0x4a - .4byte ScrCmd_adddecoration @ 0x4b - .4byte ScrCmd_removedecoration @ 0x4c - .4byte ScrCmd_checkdecor @ 0x4d - .4byte ScrCmd_checkdecorspace @ 0x4e - .4byte ScrCmd_applymovement @ 0x4f - .4byte ScrCmd_applymovementat @ 0x50 - .4byte ScrCmd_waitmovement @ 0x51 - .4byte ScrCmd_waitmovementat @ 0x52 - .4byte ScrCmd_removeobject @ 0x53 - .4byte ScrCmd_removeobjectat @ 0x54 - .4byte ScrCmd_addobject @ 0x55 - .4byte ScrCmd_addobjectat @ 0x56 - .4byte ScrCmd_setobjectxy @ 0x57 - .4byte ScrCmd_showobjectat @ 0x58 - .4byte ScrCmd_hideobjectat @ 0x59 - .4byte ScrCmd_faceplayer @ 0x5a - .4byte ScrCmd_turnobject @ 0x5b - .4byte ScrCmd_trainerbattle @ 0x5c - .4byte ScrCmd_dotrainerbattle @ 0x5d - .4byte ScrCmd_gotopostbattlescript @ 0x5e - .4byte ScrCmd_gotobeatenscript @ 0x5f - .4byte ScrCmd_checktrainerflag @ 0x60 - .4byte ScrCmd_settrainerflag @ 0x61 - .4byte ScrCmd_cleartrainerflag @ 0x62 - .4byte ScrCmd_setobjectxyperm @ 0x63 - .4byte ScrCmd_copyobjectxytoperm @ 0x64 - .4byte ScrCmd_setobjectmovementtype @ 0x65 - .4byte ScrCmd_waitmessage @ 0x66 - .4byte ScrCmd_message @ 0x67 - .4byte ScrCmd_closemessage @ 0x68 - .4byte ScrCmd_lockall @ 0x69 - .4byte ScrCmd_lock @ 0x6a - .4byte ScrCmd_releaseall @ 0x6b - .4byte ScrCmd_release @ 0x6c - .4byte ScrCmd_waitbuttonpress @ 0x6d - .4byte ScrCmd_yesnobox @ 0x6e - .4byte ScrCmd_multichoice @ 0x6f - .4byte ScrCmd_multichoicedefault @ 0x70 - .4byte ScrCmd_multichoicegrid @ 0x71 - .4byte ScrCmd_drawbox @ 0x72 - .4byte ScrCmd_erasebox @ 0x73 - .4byte ScrCmd_drawboxtext @ 0x74 - .4byte ScrCmd_showmonpic @ 0x75 - .4byte ScrCmd_hidemonpic @ 0x76 - .4byte ScrCmd_showcontestpainting @ 0x77 - .4byte ScrCmd_braillemessage @ 0x78 - .4byte ScrCmd_givemon @ 0x79 - .4byte ScrCmd_giveegg @ 0x7a - .4byte ScrCmd_setmonmove @ 0x7b - .4byte ScrCmd_checkpartymove @ 0x7c - .4byte ScrCmd_bufferspeciesname @ 0x7d - .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e - .4byte ScrCmd_bufferpartymonnick @ 0x7f - .4byte ScrCmd_bufferitemname @ 0x80 - .4byte ScrCmd_bufferdecorationname @ 0x81 - .4byte ScrCmd_buffermovename @ 0x82 - .4byte ScrCmd_buffernumberstring @ 0x83 - .4byte ScrCmd_bufferstdstring @ 0x84 - .4byte ScrCmd_bufferstring @ 0x85 - .4byte ScrCmd_pokemart @ 0x86 - .4byte ScrCmd_pokemartdecoration @ 0x87 - .4byte ScrCmd_pokemartdecoration2 @ 0x88 - .4byte ScrCmd_playslotmachine @ 0x89 - .4byte ScrCmd_setberrytree @ 0x8a - .4byte ScrCmd_choosecontestmon @ 0x8b - .4byte ScrCmd_startcontest @ 0x8c - .4byte ScrCmd_showcontestresults @ 0x8d - .4byte ScrCmd_contestlinktransfer @ 0x8e - .4byte ScrCmd_random @ 0x8f - .4byte ScrCmd_addmoney @ 0x90 - .4byte ScrCmd_removemoney @ 0x91 - .4byte ScrCmd_checkmoney @ 0x92 - .4byte ScrCmd_showmoneybox @ 0x93 - .4byte ScrCmd_hidemoneybox @ 0x94 - .4byte ScrCmd_updatemoneybox @ 0x95 - .4byte ScrCmd_getpokenewsactive @ 0x96 - .4byte ScrCmd_fadescreen @ 0x97 - .4byte ScrCmd_fadescreenspeed @ 0x98 - .4byte ScrCmd_setflashlevel @ 0x99 - .4byte ScrCmd_animateflash @ 0x9a - .4byte ScrCmd_messageautoscroll @ 0x9b - .4byte ScrCmd_dofieldeffect @ 0x9c - .4byte ScrCmd_setfieldeffectargument @ 0x9d - .4byte ScrCmd_waitfieldeffect @ 0x9e - .4byte ScrCmd_setrespawn @ 0x9f - .4byte ScrCmd_checkplayergender @ 0xa0 - .4byte ScrCmd_playmoncry @ 0xa1 - .4byte ScrCmd_setmetatile @ 0xa2 - .4byte ScrCmd_resetweather @ 0xa3 - .4byte ScrCmd_setweather @ 0xa4 - .4byte ScrCmd_doweather @ 0xa5 - .4byte ScrCmd_setstepcallback @ 0xa6 - .4byte ScrCmd_setmaplayoutindex @ 0xa7 - .4byte ScrCmd_setobjectsubpriority @ 0xa8 - .4byte ScrCmd_resetobjectsubpriority @ 0xa9 - .4byte ScrCmd_createvobject @ 0xaa - .4byte ScrCmd_turnvobject @ 0xab - .4byte ScrCmd_opendoor @ 0xac - .4byte ScrCmd_closedoor @ 0xad - .4byte ScrCmd_waitdooranim @ 0xae - .4byte ScrCmd_setdooropen @ 0xaf - .4byte ScrCmd_setdoorclosed @ 0xb0 - .4byte ScrCmd_addelevmenuitem @ 0xb1 - .4byte ScrCmd_showelevmenu @ 0xb2 - .4byte ScrCmd_checkcoins @ 0xb3 - .4byte ScrCmd_addcoins @ 0xb4 - .4byte ScrCmd_removecoins @ 0xb5 - .4byte ScrCmd_setwildbattle @ 0xb6 - .4byte ScrCmd_dowildbattle @ 0xb7 - .4byte ScrCmd_setvaddress @ 0xb8 - .4byte ScrCmd_vgoto @ 0xb9 - .4byte ScrCmd_vcall @ 0xba - .4byte ScrCmd_vgoto_if @ 0xbb - .4byte ScrCmd_vcall_if @ 0xbc - .4byte ScrCmd_vmessage @ 0xbd - .4byte ScrCmd_vbuffermessage @ 0xbe - .4byte ScrCmd_vbufferstring @ 0xbf - .4byte ScrCmd_showcoinsbox @ 0xc0 - .4byte ScrCmd_hidecoinsbox @ 0xc1 - .4byte ScrCmd_updatecoinsbox @ 0xc2 - .4byte ScrCmd_incrementgamestat @ 0xc3 - .4byte ScrCmd_setescapewarp @ 0xc4 - .4byte ScrCmd_waitmoncry @ 0xc5 - .4byte ScrCmd_bufferboxname @ 0xc6 - .4byte ScrCmd_nop1 @ 0xc7 - .4byte ScrCmd_nop1 @ 0xc8 - .4byte ScrCmd_nop1 @ 0xc9 - .4byte ScrCmd_nop1 @ 0xca - .4byte ScrCmd_nop1 @ 0xcb - .4byte ScrCmd_nop1 @ 0xcc - .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd - .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce - .4byte ScrCmd_trywondercardscript @ 0xcf - .4byte ScrCmd_nop1 @ 0xd0 - .4byte ScrCmd_warpspinenter @ 0xd1 - .4byte ScrCmd_setmonmetlocation @ 0xd2 - .4byte ScrCmd_moverotatingtileobjects @ 0xd3 - .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 - .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 - .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 - .4byte ScrCmd_warpmossdeepgym @ 0xd7 - .4byte ScrCmd_selectapproachingtrainer @ 0xd8 - .4byte ScrCmd_lockfortrainer @ 0xd9 - .4byte ScrCmd_closebraillemessage @ 0xda - .4byte ScrCmd_messageinstant @ 0xdb - .4byte ScrCmd_fadescreenswapbuffers @ 0xdc - .4byte ScrCmd_buffertrainerclassname @ 0xdd - .4byte ScrCmd_buffertrainername @ 0xde - .4byte ScrCmd_pokenavcall @ 0xdf - .4byte ScrCmd_warpwhitefade @ 0xe0 - .4byte ScrCmd_buffercontestname @ 0xe1 - .4byte ScrCmd_bufferitemnameplural @ 0xe2 + .4byte ScrCmd_nop @ 0x00 + .4byte ScrCmd_nop1 @ 0x01 + .4byte ScrCmd_end @ 0x02 + .4byte ScrCmd_return @ 0x03 + .4byte ScrCmd_call @ 0x04 + .4byte ScrCmd_goto @ 0x05 + .4byte ScrCmd_goto_if @ 0x06 + .4byte ScrCmd_call_if @ 0x07 + .4byte ScrCmd_gotostd @ 0x08 + .4byte ScrCmd_callstd @ 0x09 + .4byte ScrCmd_gotostd_if @ 0x0a + .4byte ScrCmd_callstd_if @ 0x0b + .4byte ScrCmd_returnram @ 0x0c + .4byte ScrCmd_endram @ 0x0d + .4byte ScrCmd_setmysteryeventstatus @ 0x0e + .4byte ScrCmd_loadword @ 0x0f + .4byte ScrCmd_loadbyte @ 0x10 + .4byte ScrCmd_setptr @ 0x11 + .4byte ScrCmd_loadbytefromptr @ 0x12 + .4byte ScrCmd_setptrbyte @ 0x13 + .4byte ScrCmd_copylocal @ 0x14 + .4byte ScrCmd_copybyte @ 0x15 + .4byte ScrCmd_setvar @ 0x16 + .4byte ScrCmd_addvar @ 0x17 + .4byte ScrCmd_subvar @ 0x18 + .4byte ScrCmd_copyvar @ 0x19 + .4byte ScrCmd_setorcopyvar @ 0x1a + .4byte ScrCmd_compare_local_to_local @ 0x1b + .4byte ScrCmd_compare_local_to_value @ 0x1c + .4byte ScrCmd_compare_local_to_ptr @ 0x1d + .4byte ScrCmd_compare_ptr_to_local @ 0x1e + .4byte ScrCmd_compare_ptr_to_value @ 0x1f + .4byte ScrCmd_compare_ptr_to_ptr @ 0x20 + .4byte ScrCmd_compare_var_to_value @ 0x21 + .4byte ScrCmd_compare_var_to_var @ 0x22 + .4byte ScrCmd_callnative @ 0x23 + .4byte ScrCmd_gotonative @ 0x24 + .4byte ScrCmd_special @ 0x25 + .4byte ScrCmd_specialvar @ 0x26 + .4byte ScrCmd_waitstate @ 0x27 + .4byte ScrCmd_delay @ 0x28 + .4byte ScrCmd_setflag @ 0x29 + .4byte ScrCmd_clearflag @ 0x2a + .4byte ScrCmd_checkflag @ 0x2b + .4byte ScrCmd_initclock @ 0x2c + .4byte ScrCmd_dotimebasedevents @ 0x2d + .4byte ScrCmd_gettime @ 0x2e + .4byte ScrCmd_playse @ 0x2f + .4byte ScrCmd_waitse @ 0x30 + .4byte ScrCmd_playfanfare @ 0x31 + .4byte ScrCmd_waitfanfare @ 0x32 + .4byte ScrCmd_playbgm @ 0x33 + .4byte ScrCmd_savebgm @ 0x34 + .4byte ScrCmd_fadedefaultbgm @ 0x35 + .4byte ScrCmd_fadenewbgm @ 0x36 + .4byte ScrCmd_fadeoutbgm @ 0x37 + .4byte ScrCmd_fadeinbgm @ 0x38 + .4byte ScrCmd_warp @ 0x39 + .4byte ScrCmd_warpsilent @ 0x3a + .4byte ScrCmd_warpdoor @ 0x3b + .4byte ScrCmd_warphole @ 0x3c + .4byte ScrCmd_warpteleport @ 0x3d + .4byte ScrCmd_setwarp @ 0x3e + .4byte ScrCmd_setdynamicwarp @ 0x3f + .4byte ScrCmd_setdivewarp @ 0x40 + .4byte ScrCmd_setholewarp @ 0x41 + .4byte ScrCmd_getplayerxy @ 0x42 + .4byte ScrCmd_getpartysize @ 0x43 + .4byte ScrCmd_additem @ 0x44 + .4byte ScrCmd_removeitem @ 0x45 + .4byte ScrCmd_checkitemspace @ 0x46 + .4byte ScrCmd_checkitem @ 0x47 + .4byte ScrCmd_checkitemtype @ 0x48 + .4byte ScrCmd_addpcitem @ 0x49 + .4byte ScrCmd_checkpcitem @ 0x4a + .4byte ScrCmd_adddecoration @ 0x4b + .4byte ScrCmd_removedecoration @ 0x4c + .4byte ScrCmd_checkdecor @ 0x4d + .4byte ScrCmd_checkdecorspace @ 0x4e + .4byte ScrCmd_applymovement @ 0x4f + .4byte ScrCmd_applymovementat @ 0x50 + .4byte ScrCmd_waitmovement @ 0x51 + .4byte ScrCmd_waitmovementat @ 0x52 + .4byte ScrCmd_removeobject @ 0x53 + .4byte ScrCmd_removeobjectat @ 0x54 + .4byte ScrCmd_addobject @ 0x55 + .4byte ScrCmd_addobjectat @ 0x56 + .4byte ScrCmd_setobjectxy @ 0x57 + .4byte ScrCmd_showobjectat @ 0x58 + .4byte ScrCmd_hideobjectat @ 0x59 + .4byte ScrCmd_faceplayer @ 0x5a + .4byte ScrCmd_turnobject @ 0x5b + .4byte ScrCmd_trainerbattle @ 0x5c + .4byte ScrCmd_dotrainerbattle @ 0x5d + .4byte ScrCmd_gotopostbattlescript @ 0x5e + .4byte ScrCmd_gotobeatenscript @ 0x5f + .4byte ScrCmd_checktrainerflag @ 0x60 + .4byte ScrCmd_settrainerflag @ 0x61 + .4byte ScrCmd_cleartrainerflag @ 0x62 + .4byte ScrCmd_setobjectxyperm @ 0x63 + .4byte ScrCmd_copyobjectxytoperm @ 0x64 + .4byte ScrCmd_setobjectmovementtype @ 0x65 + .4byte ScrCmd_waitmessage @ 0x66 + .4byte ScrCmd_message @ 0x67 + .4byte ScrCmd_closemessage @ 0x68 + .4byte ScrCmd_lockall @ 0x69 + .4byte ScrCmd_lock @ 0x6a + .4byte ScrCmd_releaseall @ 0x6b + .4byte ScrCmd_release @ 0x6c + .4byte ScrCmd_waitbuttonpress @ 0x6d + .4byte ScrCmd_yesnobox @ 0x6e + .4byte ScrCmd_multichoice @ 0x6f + .4byte ScrCmd_multichoicedefault @ 0x70 + .4byte ScrCmd_multichoicegrid @ 0x71 + .4byte ScrCmd_drawbox @ 0x72 + .4byte ScrCmd_erasebox @ 0x73 + .4byte ScrCmd_drawboxtext @ 0x74 + .4byte ScrCmd_showmonpic @ 0x75 + .4byte ScrCmd_hidemonpic @ 0x76 + .4byte ScrCmd_showcontestpainting @ 0x77 + .4byte ScrCmd_braillemessage @ 0x78 + .4byte ScrCmd_givemon @ 0x79 + .4byte ScrCmd_giveegg @ 0x7a + .4byte ScrCmd_setmonmove @ 0x7b + .4byte ScrCmd_checkpartymove @ 0x7c + .4byte ScrCmd_bufferspeciesname @ 0x7d + .4byte ScrCmd_bufferleadmonspeciesname @ 0x7e + .4byte ScrCmd_bufferpartymonnick @ 0x7f + .4byte ScrCmd_bufferitemname @ 0x80 + .4byte ScrCmd_bufferdecorationname @ 0x81 + .4byte ScrCmd_buffermovename @ 0x82 + .4byte ScrCmd_buffernumberstring @ 0x83 + .4byte ScrCmd_bufferstdstring @ 0x84 + .4byte ScrCmd_bufferstring @ 0x85 + .4byte ScrCmd_pokemart @ 0x86 + .4byte ScrCmd_pokemartdecoration @ 0x87 + .4byte ScrCmd_pokemartdecoration2 @ 0x88 + .4byte ScrCmd_playslotmachine @ 0x89 + .4byte ScrCmd_setberrytree @ 0x8a + .4byte ScrCmd_choosecontestmon @ 0x8b + .4byte ScrCmd_startcontest @ 0x8c + .4byte ScrCmd_showcontestresults @ 0x8d + .4byte ScrCmd_contestlinktransfer @ 0x8e + .4byte ScrCmd_random @ 0x8f + .4byte ScrCmd_addmoney @ 0x90 + .4byte ScrCmd_removemoney @ 0x91 + .4byte ScrCmd_checkmoney @ 0x92 + .4byte ScrCmd_showmoneybox @ 0x93 + .4byte ScrCmd_hidemoneybox @ 0x94 + .4byte ScrCmd_updatemoneybox @ 0x95 + .4byte ScrCmd_getpokenewsactive @ 0x96 + .4byte ScrCmd_fadescreen @ 0x97 + .4byte ScrCmd_fadescreenspeed @ 0x98 + .4byte ScrCmd_setflashlevel @ 0x99 + .4byte ScrCmd_animateflash @ 0x9a + .4byte ScrCmd_messageautoscroll @ 0x9b + .4byte ScrCmd_dofieldeffect @ 0x9c + .4byte ScrCmd_setfieldeffectargument @ 0x9d + .4byte ScrCmd_waitfieldeffect @ 0x9e + .4byte ScrCmd_setrespawn @ 0x9f + .4byte ScrCmd_checkplayergender @ 0xa0 + .4byte ScrCmd_playmoncry @ 0xa1 + .4byte ScrCmd_setmetatile @ 0xa2 + .4byte ScrCmd_resetweather @ 0xa3 + .4byte ScrCmd_setweather @ 0xa4 + .4byte ScrCmd_doweather @ 0xa5 + .4byte ScrCmd_setstepcallback @ 0xa6 + .4byte ScrCmd_setmaplayoutindex @ 0xa7 + .4byte ScrCmd_setobjectsubpriority @ 0xa8 + .4byte ScrCmd_resetobjectsubpriority @ 0xa9 + .4byte ScrCmd_createvobject @ 0xaa + .4byte ScrCmd_turnvobject @ 0xab + .4byte ScrCmd_opendoor @ 0xac + .4byte ScrCmd_closedoor @ 0xad + .4byte ScrCmd_waitdooranim @ 0xae + .4byte ScrCmd_setdooropen @ 0xaf + .4byte ScrCmd_setdoorclosed @ 0xb0 + .4byte ScrCmd_addelevmenuitem @ 0xb1 + .4byte ScrCmd_showelevmenu @ 0xb2 + .4byte ScrCmd_checkcoins @ 0xb3 + .4byte ScrCmd_addcoins @ 0xb4 + .4byte ScrCmd_removecoins @ 0xb5 + .4byte ScrCmd_setwildbattle @ 0xb6 + .4byte ScrCmd_dowildbattle @ 0xb7 + .4byte ScrCmd_setvaddress @ 0xb8 + .4byte ScrCmd_vgoto @ 0xb9 + .4byte ScrCmd_vcall @ 0xba + .4byte ScrCmd_vgoto_if @ 0xbb + .4byte ScrCmd_vcall_if @ 0xbc + .4byte ScrCmd_vmessage @ 0xbd + .4byte ScrCmd_vbuffermessage @ 0xbe + .4byte ScrCmd_vbufferstring @ 0xbf + .4byte ScrCmd_showcoinsbox @ 0xc0 + .4byte ScrCmd_hidecoinsbox @ 0xc1 + .4byte ScrCmd_updatecoinsbox @ 0xc2 + .4byte ScrCmd_incrementgamestat @ 0xc3 + .4byte ScrCmd_setescapewarp @ 0xc4 + .4byte ScrCmd_waitmoncry @ 0xc5 + .4byte ScrCmd_bufferboxname @ 0xc6 + .4byte ScrCmd_nop1 @ 0xc7 + .4byte ScrCmd_nop1 @ 0xc8 + .4byte ScrCmd_nop1 @ 0xc9 + .4byte ScrCmd_nop1 @ 0xca + .4byte ScrCmd_nop1 @ 0xcb + .4byte ScrCmd_nop1 @ 0xcc + .4byte ScrCmd_setmonmodernfatefulencounter @ 0xcd + .4byte ScrCmd_checkmonmodernfatefulencounter @ 0xce + .4byte ScrCmd_trywondercardscript @ 0xcf + .4byte ScrCmd_nop1 @ 0xd0 + .4byte ScrCmd_warpspinenter @ 0xd1 + .4byte ScrCmd_setmonmetlocation @ 0xd2 + .4byte ScrCmd_moverotatingtileobjects @ 0xd3 + .4byte ScrCmd_turnrotatingtileobjects @ 0xd4 + .4byte ScrCmd_initrotatingtilepuzzle @ 0xd5 + .4byte ScrCmd_freerotatingtilepuzzle @ 0xd6 + .4byte ScrCmd_warpmossdeepgym @ 0xd7 + .4byte ScrCmd_selectapproachingtrainer @ 0xd8 + .4byte ScrCmd_lockfortrainer @ 0xd9 + .4byte ScrCmd_closebraillemessage @ 0xda + .4byte ScrCmd_messageinstant @ 0xdb + .4byte ScrCmd_fadescreenswapbuffers @ 0xdc + .4byte ScrCmd_buffertrainerclassname @ 0xdd + .4byte ScrCmd_buffertrainername @ 0xde + .4byte ScrCmd_pokenavcall @ 0xdf + .4byte ScrCmd_warpwhitefade @ 0xe0 + .4byte ScrCmd_buffercontestname @ 0xe1 + .4byte ScrCmd_bufferitemnameplural @ 0xe2 gScriptCmdTableEnd:: .4byte ScrCmd_nop diff --git a/data/specials.inc b/data/specials.inc index 6d53864676..a0dbde8683 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -490,7 +490,7 @@ gSpecials:: def_special ScrollableMultichoice_ClosePersistentMenu def_special DoDeoxysRockInteraction def_special SetDeoxysRockPalette - def_special CreateModernFatefulEncounterEnemyMon + def_special CreateEnemyEventMon def_special StartMirageTowerDisintegration def_special StartMirageTowerShake def_special StartMirageTowerFossilFallAndSink diff --git a/include/pokemon.h b/include/pokemon.h index 273cb9175f..0375b20dc0 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -85,7 +85,7 @@ enum { MON_DATA_EARTH_RIBBON, MON_DATA_WORLD_RIBBON, MON_DATA_UNUSED_RIBBONS, - MON_DATA_FATEFUL_ENCOUNTER, + MON_DATA_MODERN_FATEFUL_ENCOUNTER, MON_DATA_KNOWN_MOVES, MON_DATA_RIBBON_COUNT, MON_DATA_RIBBONS, @@ -408,12 +408,11 @@ void CreateBattleTowerMon_HandleLevel(struct Pokemon *mon, struct BattleTowerPok void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId); void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId); void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest); -void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId); void SetDeoxysStats(void); u16 GetUnionRoomTrainerPic(void); u16 GetUnionRoomTrainerClass(void); -void CreateModernFatefulEncounterEnemyMon(void); +void CreateEnemyEventMon(void); void CalculateMonStats(struct Pokemon *mon); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); diff --git a/src/battle_util.c b/src/battle_util.c index 007bf68831..9f06bf36bf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3892,7 +3892,7 @@ static bool32 IsBattlerModernFatefulEncounter(u8 battlerId) if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS && GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES, NULL) != SPECIES_MEW) return TRUE; - return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_FATEFUL_ENCOUNTER, NULL); + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); } u8 IsMonDisobedient(void) diff --git a/src/egg_hatch.c b/src/egg_hatch.c index bf615be061..96d431a226 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -332,7 +332,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) gameMet = GetMonData(egg, MON_DATA_MET_GAME); markings = GetMonData(egg, MON_DATA_MARKINGS); pokerus = GetMonData(egg, MON_DATA_POKERUS); - isModernFatefulEncounter = GetMonData(egg, MON_DATA_FATEFUL_ENCOUNTER); + isModernFatefulEncounter = GetMonData(egg, MON_DATA_MODERN_FATEFUL_ENCOUNTER); CreateMon(temp, species, EGG_HATCH_LEVEL, USE_RANDOM_IVS, TRUE, personality, OT_ID_PLAYER_ID, 0); @@ -350,7 +350,7 @@ static void CreateHatchedMon(struct Pokemon *egg, struct Pokemon *temp) friendship = 120; SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship); SetMonData(temp, MON_DATA_POKERUS, &pokerus); - SetMonData(temp, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(temp, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); *egg = *temp; } diff --git a/src/party_menu.c b/src/party_menu.c index 8c84c5c030..dcc3974c16 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3591,7 +3591,7 @@ static void CursorCb_Register(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MODERN_FATEFUL_ENCOUNTER); switch (CanRegisterMonForTradingBoard(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), species2, species, isModernFatefulEncounter)) { @@ -3618,7 +3618,7 @@ static void CursorCb_Trade1(u8 taskId) { u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); - u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_FATEFUL_ENCOUNTER); + u8 isModernFatefulEncounter = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MODERN_FATEFUL_ENCOUNTER); u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isModernFatefulEncounter); if (stringId != UR_TRADE_MSG_NONE) diff --git a/src/pokemon.c b/src/pokemon.c index 9b6ee977d6..1c55091e0d 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2623,12 +2623,12 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } -void CreateModernFatefulEncounterMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) +static void CreateEventMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId) { bool32 isModernFatefulEncounter = TRUE; CreateMon(mon, species, level, fixedIV, hasFixedPersonality, fixedPersonality, otIdType, fixedOtId); - SetMonData(mon, MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(mon, MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); } // If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form @@ -2763,14 +2763,14 @@ u16 GetUnionRoomTrainerClass(void) return gFacilityClassToTrainerClass[gUnionRoomFacilityClasses[arrId]]; } -void CreateModernFatefulEncounterEnemyMon(void) +void CreateEnemyEventMon(void) { s32 species = gSpecialVar_0x8004; s32 level = gSpecialVar_0x8005; s32 itemId = gSpecialVar_0x8006; ZeroEnemyPartyMons(); - CreateModernFatefulEncounterMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateEventMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); if (itemId) { u8 heldItem[2]; @@ -3957,7 +3957,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_UNUSED_RIBBONS: retVal = substruct3->unusedRibbons; break; - case MON_DATA_FATEFUL_ENCOUNTER: + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: retVal = substruct3->modernFatefulEncounter; break; case MON_DATA_SPECIES2: @@ -4341,7 +4341,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_UNUSED_RIBBONS: SET8(substruct3->unusedRibbons); break; - case MON_DATA_FATEFUL_ENCOUNTER: + case MON_DATA_MODERN_FATEFUL_ENCOUNTER: SET8(substruct3->modernFatefulEncounter); break; case MON_DATA_IVS: diff --git a/src/scrcmd.c b/src/scrcmd.c index d055ff3a07..18a56631d3 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2212,7 +2212,7 @@ bool8 ScrCmd_setmonmodernfatefulencounter(struct ScriptContext *ctx) bool8 isModernFatefulEncounter = TRUE; u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - SetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); + SetMonData(&gPlayerParty[partyIndex], MON_DATA_MODERN_FATEFUL_ENCOUNTER, &isModernFatefulEncounter); return FALSE; } @@ -2220,7 +2220,7 @@ bool8 ScrCmd_checkmonmodernfatefulencounter(struct ScriptContext *ctx) { u16 partyIndex = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_FATEFUL_ENCOUNTER, NULL); + gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MODERN_FATEFUL_ENCOUNTER, NULL); return FALSE; } diff --git a/src/trade.c b/src/trade.c index 9e811888fd..04f9efce9f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1577,7 +1577,7 @@ static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 player // Partner cant trade illegitimate Deoxys or Mew if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) { - if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_FATEFUL_ENCOUNTER)) + if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) return PARTNER_MON_INVALID; } @@ -2426,7 +2426,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&playerParty[monIdx], MON_DATA_FATEFUL_ENCOUNTER)) + if (!GetMonData(&playerParty[monIdx], MON_DATA_MODERN_FATEFUL_ENCOUNTER)) return CANT_TRADE_INVALID_MON; } From dbd02d3a56f83f2f85d3b8c0b0c5c97f6579bc39 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 15 Feb 2023 14:06:42 -0300 Subject: [PATCH 074/290] Clarified Champion Ribbon's description to avoid being interpreted as needing to beat the champion in both RSE and FRLG. --- include/pokemon.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/pokemon.h b/include/pokemon.h index 0375b20dc0..897f54762c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -152,7 +152,7 @@ struct PokemonSubstruct3 /* 0x08 */ u32 cuteRibbon:3; // Stores the highest contest rank achieved in the Cute category. /* 0x09 */ u32 smartRibbon:3; // Stores the highest contest rank achieved in the Smart category. /* 0x09 */ u32 toughRibbon:3; // Stores the highest contest rank achieved in the Tough category. - /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion in both RSE and FRLG. + /* 0x09 */ u32 championRibbon:1; // Given when defeating the Champion. Because both RSE and FRLG use it, later generations don't specify from which region it comes from. /* 0x0A */ u32 winningRibbon:1; // Given at the Battle Tower's Level 50 challenge by winning a set of seven battles that extends the current streak to 56 or more. /* 0x0A */ u32 victoryRibbon:1; // Given at the Battle Tower's Level 100 challenge by winning a set of seven battles that extends the current streak to 56 or more. /* 0x0A */ u32 artistRibbon:1; // Given at the Contest Hall by winning a Master Rank contest with at least 800 points, and agreeing to have the Pokémon's portrait placed in the museum after being offered. From 94651e77a5719c96cd1e68271cb0426c13c7b049 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 15 Feb 2023 22:18:18 +0100 Subject: [PATCH 075/290] Fix Clang Scales target and effect --- data/battle_scripts_1.s | 5 +++++ src/data/battle_moves.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c404dc37d7..0deb126584 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1283,8 +1283,13 @@ BattleScript_JungleHealingTryRestoreAlly: goto BattleScript_MoveEnd BattleScript_EffectAttackerDefenseDownHit: + @ Lower the Torchic's stat only once + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_NoMoveEffect setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit +BattleScript_NoMoveEffect: + setmoveeffect 0 + goto BattleScript_EffectHit BattleScript_EffectRelicSong: setmoveeffect MOVE_EFFECT_RELIC_SONG | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 2673815633..eed91d524c 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11554,7 +11554,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 5, .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, + .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, From f6a0c882d161d6668aa7e0c951affd95ccf530ae Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 15 Feb 2023 23:44:00 +0100 Subject: [PATCH 076/290] Fix Shield Down Ability pop-up --- data/battle_scripts_1.s | 52 ++++++++++++++++++------------------ src/battle_script_commands.c | 8 +++++- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c404dc37d7..617059d46e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3174,12 +3174,12 @@ BattleScript_EffectSleep:: jumpifuproarwakes BattleScript_CantMakeAsleep jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_InsomniaProtects jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_InsomniaProtects - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects - jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects jumpifability BS_TARGET_SIDE, ABILITY_SWEET_VEIL, BattleScript_SweetVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed jumpifterrainaffected BS_TARGET, STATUS_FIELD_ELECTRIC_TERRAIN, BattleScript_ElectricTerrainPrevents jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents @@ -3259,15 +3259,15 @@ BattleScript_PastelVeilProtects: orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd -BattleScript_LeafGuardProtectsRet:: +BattleScript_AbilityProtectsDoesntAffectRet:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp printstring STRINGID_ITDOESNTAFFECT waitmessage B_WAIT_TIME_LONG return -BattleScript_LeafGuardProtects: - call BattleScript_LeafGuardProtectsRet +BattleScript_AbilityProtectsDoesntAffect: + call BattleScript_AbilityProtectsDoesntAffectRet orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd @@ -3777,12 +3777,12 @@ BattleScript_EffectToxic:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects - jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_POISON | STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed @@ -4118,12 +4118,12 @@ BattleScript_EffectPoison:: attackstring ppreduce jumpifability BS_TARGET, ABILITY_IMMUNITY, BattleScript_ImmunityProtected - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects - jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifability BS_TARGET_SIDE, ABILITY_PASTEL_VEIL, BattleScript_PastelVeilProtects jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed jumpifstatus BS_TARGET, STATUS1_POISON, BattleScript_AlreadyPoisoned jumpifstatus BS_TARGET, STATUS1_TOXIC_POISON, BattleScript_AlreadyPoisoned @@ -4145,11 +4145,11 @@ BattleScript_EffectParalyze: attackstring ppreduce jumpifability BS_TARGET, ABILITY_LIMBER, BattleScript_LimberProtected - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects - jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed typecalc BattleScript_BattleScript_EffectParalyzeNoTypeCalc: @@ -5581,11 +5581,11 @@ BattleScript_EffectWillOWisp:: jumpiftype BS_TARGET, TYPE_FIRE, BattleScript_NotAffected jumpifability BS_TARGET, ABILITY_WATER_VEIL, BattleScript_WaterVeilPrevents jumpifability BS_TARGET, ABILITY_WATER_BUBBLE, BattleScript_WaterVeilPrevents - jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_LeafGuardProtects - jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_AbilityProtectsDoesntAffect + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifstatus BS_TARGET, STATUS1_ANY, BattleScript_ButItFailed jumpifterrainaffected BS_TARGET, STATUS_FIELD_MISTY_TERRAIN, BattleScript_MistyTerrainPrevents accuracycheck BattleScript_ButItFailed, ACC_CURR_MOVE @@ -5875,10 +5875,10 @@ BattleScript_EffectYawn:: jumpifability BS_TARGET, ABILITY_VITAL_SPIRIT, BattleScript_PrintBattlerAbilityMadeIneffective jumpifability BS_TARGET, ABILITY_INSOMNIA, BattleScript_PrintBattlerAbilityMadeIneffective jumpifability BS_TARGET, ABILITY_COMATOSE, BattleScript_PrintBattlerAbilityMadeIneffective - jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_LeafGuardProtects + jumpifability BS_TARGET, ABILITY_PURIFYING_SALT, BattleScript_AbilityProtectsDoesntAffect jumpifflowerveil BattleScript_FlowerVeilProtects - jumpifleafguardprotected BS_TARGET, BattleScript_LeafGuardProtects - jumpifshieldsdown BS_TARGET, BattleScript_LeafGuardProtects + jumpifleafguardprotected BS_TARGET, BattleScript_AbilityProtectsDoesntAffect + jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect jumpifsubstituteblocks BattleScript_ButItFailed jumpifsafeguard BattleScript_SafeguardProtected accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d1c0a7c773..04092d3b68 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3908,6 +3908,7 @@ static void Cmd_jumpifability(void) gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4); RecordAbilityBattle(battlerId, gLastUsedAbility); gBattlerAbility = battlerId; + while (1); } else { @@ -8352,9 +8353,14 @@ static void Cmd_various(void) return; case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED: if (IsShieldsDownProtected(gActiveBattler)) + { + gBattlerAbility = gActiveBattler; gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } else + { gBattlescriptCurrInstr += 7; + } return; case VARIOUS_JUMP_IF_NO_HOLD_EFFECT: if (GetBattlerHoldEffect(gActiveBattler, TRUE) != gBattlescriptCurrInstr[3]) @@ -14965,7 +14971,7 @@ static void Cmd_callnative(void) func(); } -// Callnative Funcs +// Callnative Funcs void BS_CalcMetalBurstDmg(void) { u8 sideAttacker = GetBattlerSide(gBattlerAttacker); From 97f9c0a4d9a274000e17b6ae1b0350e4e3efb3db Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 15 Feb 2023 23:45:53 +0100 Subject: [PATCH 077/290] oof --- src/battle_script_commands.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 04092d3b68..15183c0b59 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3908,7 +3908,6 @@ static void Cmd_jumpifability(void) gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4); RecordAbilityBattle(battlerId, gLastUsedAbility); gBattlerAbility = battlerId; - while (1); } else { From fea54c9277808c8de4c4a21078598dc9926d5d31 Mon Sep 17 00:00:00 2001 From: sbird Date: Wed, 15 Feb 2023 01:06:24 +0100 Subject: [PATCH 078/290] [intro] add fading, refactor abort, align intro gfx --- graphics/expansion_intro/rhh_credits.bin | Bin 2048 -> 2048 bytes graphics/expansion_intro/rhh_credits.png | Bin 1703 -> 1708 bytes src/expansion_intro.c | 31 ++++++++++++++++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/graphics/expansion_intro/rhh_credits.bin b/graphics/expansion_intro/rhh_credits.bin index 629a2e9544af1ebc9589eb6c6fbe444fb87cad6e..44ec5e7e42e213a791b665e36f5402f490cf21cf 100644 GIT binary patch literal 2048 zcmeH@S5pE(5QIN;%>ff86fj`M958?ZOsAX?6v3SJ|Gzu8cvQ(B;KALg?WyhQuAOQy z=RYUl!9xX=D5|KYhFa>Vr-4S{3)Mt3URr3CcN^`39r*Oj$<5Jp(nU8t^x~(FegXtF zA7ViFL53J6%m|~5363+NdDkCQlS~m|ni*!9WB%8_z@pYIvCIllR#{_RaHGT@Bd&Fu zY_To1Lrl5b7kYvuyQ0}+U+{oKt#|*ousD)yag3!>*x2esD;)PJXPnE-=7LMoWVqt` vk3Y)|Ir37s+;PtXk31Fq&%E$TR@gV*`QVc;zKecm2XjmUCIOQ`ITH8*HG>;N literal 2048 zcmeIuS5I6)3_#&;Vd=g177{}5z1Jj!un;;V^xpsf8&@kpyT5=3t}RQ}%p6;D2;(yw zh)9ttDowf!nX+Wdkt_0^dGZw~RHRsm(%`%-L0Ck&3YDr~qNUgUZ-4mV zr(c%+w&G84x0=Mq#HYr{r#GhxD(Z98`D*>_+qy6;~S|KFh_$3dPrb>`fK e%LM+)wHvqY+oZ*&9^= diff --git a/graphics/expansion_intro/rhh_credits.png b/graphics/expansion_intro/rhh_credits.png index 177022a9d607fee02efd627816b253b4fa37481a..02e1dd3b6e871eec5fa91898acff1c787af20a39 100644 GIT binary patch delta 890 zcmV-=1BLvj4Xh2YKm&hQNkliTgDL+>V$C07|Te6N_8$5sNcT_t5VYa5}d z2S0MDlc962s>tpt_4T8;1t~#2*(p)oHFJ6wkP&|@)?|}4f?0uzX1A1W zC!FJ!?saCabc>zT>|-|nE_v4D|N(r<*A z;F=AL@2hcNo&cVc|IS@4G*j?kYMnp>Sl~Ojtuco>MFtsa%!8?P0tH~HP3BC~y$hfd zWX?35Doua31rQdG^3)8#rEcm>)2Z^vgRlufm=+JH69QoM3i836X*xyLK1xlQx59@tSvf8f>{8B zzA^xtjBDbT{ult3I@nH=i34C?5un@R#050XWM2jF&8&Z@$;A2Ii9LGGiqENERzl=~DnTruUddzES#~1Neo-;J(mkHe+>PXEHo( zH2)D`%ykCG;CF@Kq`tNUuzCP(m110q8F1{lQ;q|OTd$;)57PoBhB^~0E`X*KR17HeZLgI9gVF5FvH^szXYxc+u?q+ z_O_^dAK-)YPLp4N(*f}Gh0KR*1xg!FWgArR@ic(wFkbP+z$&JIx6=TwSO0c%HxT>V z)d@6jsKS4*2op{Nz{f%GL?~SG<@;^ypr$!*3!>c=gndpG`}P0Jf`1i&?wv7LGXoTJu0Zf)C zF{fg~;zM6bZye6^-6Xv)0t8Qp!5=Tv)8=TO+J>l55#iqf_+t45`0)UL0GaWSgubl8 QhX4Qo07*qoM6N<$f?7ME7XSbN delta 885 zcmV-*1B(2t4W|vTKm&hLNklYCJ4K)C1sxQ&ED!VnP;{YWSb|50W{+`mq;oe z0e0CG0bHyK&?SGD0NP?IpT+=;Y)b$>Rs)#QChTkz#)}866EQ$CHgWjFGQc_{GM%CR zO}z_Xj7PQAjCH)$DS+(9GV5mNA$TKkz+x;1>XY%-QdtLv(AbHT7(h9e0U*ip002(L z^kgxi0F_t@&~G78p8>$bWH}{8YB3zc-+{)*$})Qk;1++7Xd&qW0PrrvZoF%YvCR5J z%-o)vP&rD3{XmfRBe|OLM63>A!i}%(^H%dQW=SQJs}TSyu>*j8mTeDQ_djPkjN>OD zQ^Oaj#f|_L(U^?E9G4ahG`dXr&DzbibcP|zl>svVxV75>zUPgY z^W_1$*$;nGyw|ZFv9}&Ek@*qP_DhPKFApF?yabS_1Qbd}e+obx&Oo|OEav<+T%#`o z1Z(IGr+5hxgO2TA1Ypy?1h8_QJPFWl4qz&&AhD5(>L~yc#W_9LKv+X5KFHanVm?*} zz&X{Y0dSq^wwD3m_CuZrfUhFX@d^N()7cJu0$_iEpDu6;%pu*9!WY{?@fh*t06t}Z z06z|38%x2hV1If$fGb2_-NV@10WKGOx|$8e{&X=0hgWdD9l-ra1ius6SNBjq15g6N z_y3;?ejk89O$aMca9US*Ymc3jf=78h2_94;gbo47%AiOUCBmT8O~w^8#RcgrQGD_V z@ThIs#pwP~m`=E$T=!63$0|q|4;4KpoZ!cG=`=#34a&sn!yQVm8y9f$Q9)TYM+J?A zlazaB(}?(almdi$tgdtWADvkdwyF?92j(dQsiM)(tKbjd(*XYfni7_^82nq%00000 LNkvXXu0mjfJt3GW diff --git a/src/expansion_intro.c b/src/expansion_intro.c index fa4d44601a..8fdb7c1cb8 100644 --- a/src/expansion_intro.c +++ b/src/expansion_intro.c @@ -1,6 +1,5 @@ #include "global.h" #include "bg.h" -#include "clear_save_data_menu.h" #include "decompress.h" #include "palette.h" #include "sound.h" @@ -10,6 +9,7 @@ #include "trig.h" #include "main.h" #include "intro.h" +#include "m4a.h" #include "expansion_intro.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -253,17 +253,34 @@ void Task_HandleExpansionIntro(u8 taskId) tState++; break; case 2: - if (tFrameCounter == 208 || gMain.newKeys != 0) + if (tFrameCounter == 208) + { tState++; + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + } + else if (gMain.newKeys != 0) + { + CpuFill16(0, gPlttBufferFaded, sizeof(gPlttBufferFaded)); + if (IsCryPlaying()) + StopCry(); + m4aSongNumStop(SE_BIKE_HOP); + m4aSongNumStop(SE_M_DOUBLE_SLAP); + tState++; + } else + { tFrameCounter++; + } break; case 3: - ResetSpriteData(); - FreeAllSpritePalettes(); - DestroyTask(taskId); - CreateTask(Task_Scene1_Load, 0); - SetMainCallback2(MainCB2_Intro); + if (!gPaletteFade.active) + { + ResetSpriteData(); + FreeAllSpritePalettes(); + DestroyTask(taskId); + CreateTask(Task_Scene1_Load, 0); + SetMainCallback2(MainCB2_Intro); + } break; } } From 1c970afd6a651f4e8e1c3929fa9c36ac14e3272b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 10:53:29 +0100 Subject: [PATCH 079/290] fix follow me working in singles (#2644) * fix follow me working in singles --- data/battle_scripts_1.s | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index c404dc37d7..bfcc3dc72b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5677,6 +5677,9 @@ BattleScript_EffectFollowMe:: attackcanceler attackstring ppreduce + .if B_UPDATED_MOVE_DATA >= GEN_6 + jumpifnotbattletype BATTLE_TYPE_DOUBLE, BattleScript_ButItFailed + .endif setforcedtarget attackanimation waitanimation From 4c18ed2bd40fb5a4672b27fb88a36cb78617a245 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 15:11:48 +0100 Subject: [PATCH 080/290] remove comment --- data/battle_scripts_1.s | 1 - 1 file changed, 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0deb126584..053ef2fc1a 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1283,7 +1283,6 @@ BattleScript_JungleHealingTryRestoreAlly: goto BattleScript_MoveEnd BattleScript_EffectAttackerDefenseDownHit: - @ Lower the Torchic's stat only once jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_NoMoveEffect setmoveeffect MOVE_EFFECT_DEF_MINUS_1 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN goto BattleScript_EffectHit From 978d34295356e255eea3bcdfca18122ce97c42dd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 15:26:26 +0100 Subject: [PATCH 081/290] use NUM_BATTLE_SIDES --- include/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/battle.h b/include/battle.h index 01dc8d7e07..764c292bf7 100644 --- a/include/battle.h +++ b/include/battle.h @@ -653,7 +653,7 @@ struct BattleStruct u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. - u8 battleBondTransformed[2]; // Bitfield for each party. + u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. }; #define F_DYNAMIC_TYPE_1 (1 << 6) From 0d78b29902c8595219cd211482ddf7f75692165f Mon Sep 17 00:00:00 2001 From: sbird Date: Wed, 8 Feb 2023 17:06:44 +0100 Subject: [PATCH 082/290] [test, output] display KNOWN_FAILING in yellow --- test/test_runner.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/test_runner.c b/test/test_runner.c index a10a3a89d5..3cb1f7c213 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -187,7 +187,17 @@ void CB2_TestRunner(void) switch (gTestRunnerState.result) { - case TEST_RESULT_FAIL: result = "FAIL"; break; + case TEST_RESULT_FAIL: + if (gTestRunnerState.expectedResult == TEST_RESULT_FAIL) + { + result = "KNOWN_FAILING"; + color = "\e[33m"; + } + else + { + result = "FAIL"; + } + break; case TEST_RESULT_PASS: result = "PASS"; break; case TEST_RESULT_SKIP: result = "SKIP"; break; case TEST_RESULT_INVALID: result = "INVALID"; break; From d7f68a3893045acff68bf37a892af0e7225ab7b4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 15:57:15 +0100 Subject: [PATCH 083/290] IsAceMon - not isAceMon --- src/battle_ai_switch_items.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index f976b47e3e..a8c09c40bc 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -27,7 +27,7 @@ static bool32 AiExpectsToFaintPlayer(void); static bool32 AI_ShouldHeal(u32 healAmount); static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); -static bool32 isAceMon(u32 battlerId, u32 monPartyId) +static bool32 IsAceMon(u32 battlerId, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON && !(gBattleStruct->forcedSwitch) @@ -118,7 +118,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; if (i == gBattlerPartyIndexes[gActiveBattler]) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) @@ -210,7 +210,7 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; @@ -290,7 +290,7 @@ static bool8 ShouldSwitchIfGameStatePrompt(void) for (i = firstId; i < lastId; i++) { - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; //Look for mon in party that is able to be switched into and has ability that sets terrain @@ -582,7 +582,7 @@ static bool8 FindMonWithFlagsAndSuperEffective(u16 flags, u8 moduloPercent) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) continue; @@ -674,7 +674,7 @@ bool32 ShouldSwitch(void) continue; if (i == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, i)) + if (IsAceMon(gActiveBattler, i)) { hasAceMon = TRUE; continue; @@ -771,7 +771,7 @@ void AI_TrySwitchOrUseItem(void) continue; if (monToSwitchId == *(gBattleStruct->monToSwitchIntoId + battlerIn2)) continue; - if (isAceMon(gActiveBattler, monToSwitchId)) + if (IsAceMon(gActiveBattler, monToSwitchId)) continue; break; @@ -974,7 +974,7 @@ u8 GetMostSuitableMonToSwitchInto(void) { invalidMons |= gBitTable[i]; } - else if (isAceMon(gActiveBattler, i))// Save Ace Pokemon for last. + else if (IsAceMon(gActiveBattler, i))// Save Ace Pokemon for last. { aceMonId = i; invalidMons |= gBitTable[i]; From 6cdca24c31c0a8f216c176b01b86aeeb5038b535 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 21:58:00 +0100 Subject: [PATCH 084/290] use forced switch battler bit --- src/battle_ai_switch_items.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index a8c09c40bc..b439278190 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -30,7 +30,7 @@ static bool32 AI_OpponentCanFaintAiWithMod(u32 healAmount); static bool32 IsAceMon(u32 battlerId, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_ACE_POKEMON - && !(gBattleStruct->forcedSwitch) + && !(gBattleStruct->forcedSwitch & gBitTable[battlerId]) && monPartyId == CalculateEnemyPartyCount()-1) return TRUE; return FALSE; From d637ee3b133220876be0c49aa8d55a86bd2c1773 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Feb 2023 21:59:36 +0100 Subject: [PATCH 085/290] Fix After You for gen8 (#2646) Fix After You --- include/battle.h | 1 + src/battle_script_commands.c | 3 ++- src/battle_util.c | 50 +++++++++++++++++++----------------- test/move_effect_after_you.c | 1 - 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/include/battle.h b/include/battle.h index 764c292bf7..8be922384f 100644 --- a/include/battle.h +++ b/include/battle.h @@ -191,6 +191,7 @@ struct SpecialStatus u8 weatherAbilityDone:1; u8 terrainAbilityDone:1; u8 emergencyExited:1; + u8 afterYou:1; }; struct SideTimer diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b7adc22ae6..57311e6712 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9394,7 +9394,7 @@ static void Cmd_various(void) break; case VARIOUS_AFTER_YOU: if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - || GetBattlerTurnOrderNum(gBattlerAttacker) == GetBattlerTurnOrderNum(gBattlerTarget) + 1) + || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) { gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); } @@ -9419,6 +9419,7 @@ static void Cmd_various(void) gBattlerByTurnOrder[2] = gBattlerTarget; gBattlerByTurnOrder[3] = data[2]; } + gSpecialStatuses[gBattlerTarget].afterYou = 1; gBattlescriptCurrInstr += 7; } return; diff --git a/src/battle_util.c b/src/battle_util.c index 4503c92086..8d350553de 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -323,7 +323,7 @@ void HandleAction_UseMove(void) { gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker]; } - + moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); if (gBattleMons[gBattlerAttacker].hp != 0) @@ -909,9 +909,8 @@ void HandleAction_NothingIsFainted(void) void HandleAction_ActionFinished(void) { #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 - u8 i, j; - u8 battler1 = 0; - u8 battler2 = 0; + u32 i, j; + bool32 afterYouActive = gSpecialStatuses[gBattlerByTurnOrder[gCurrentTurnActionNumber + 1]].afterYou; #endif *(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = PARTY_SIZE; gCurrentTurnActionNumber++; @@ -938,29 +937,32 @@ void HandleAction_ActionFinished(void) gBattleResources->battleScriptsStack->size = 0; #if B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 - // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already - // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action - for (i = gCurrentTurnActionNumber; i < gBattlersCount - 1; i++) + if (!afterYouActive) { - for (j = i + 1; j < gBattlersCount; j++) + // i starts at `gCurrentTurnActionNumber` because we don't want to recalculate turn order for mon that have already + // taken action. It's been previously increased, which we want in order to not recalculate the turn of the mon that just finished its action + for (i = gCurrentTurnActionNumber; i < gBattlersCount - 1; i++) { - u8 battler1 = gBattlerByTurnOrder[i]; - u8 battler2 = gBattlerByTurnOrder[j]; - - if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) - continue; - - // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should - // have been executed before. The only recalculation needed is for moves/switch. Mega evolution is handled in src/battle_main.c/TryChangeOrder - if((gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)) + for (j = i + 1; j < gBattlersCount; j++) { - if (GetWhoStrikesFirst(battler1, battler2, FALSE)) - SwapTurnOrder(i, j); - } - else if ((gActionsByTurnOrder[i] == B_ACTION_SWITCH && gActionsByTurnOrder[j] == B_ACTION_SWITCH)) - { - if (GetWhoStrikesFirst(battler1, battler2, TRUE)) // If the actions chosen are switching, we recalc order but ignoring the moves - SwapTurnOrder(i, j); + u8 battler1 = gBattlerByTurnOrder[i]; + u8 battler2 = gBattlerByTurnOrder[j]; + + if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) + continue; + + // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should + // have been executed before. The only recalculation needed is for moves/switch. Mega evolution is handled in src/battle_main.c/TryChangeOrder + if((gActionsByTurnOrder[i] == B_ACTION_USE_MOVE && gActionsByTurnOrder[j] == B_ACTION_USE_MOVE)) + { + if (GetWhoStrikesFirst(battler1, battler2, FALSE)) + SwapTurnOrder(i, j); + } + else if ((gActionsByTurnOrder[i] == B_ACTION_SWITCH && gActionsByTurnOrder[j] == B_ACTION_SWITCH)) + { + if (GetWhoStrikesFirst(battler1, battler2, TRUE)) // If the actions chosen are switching, we recalc order but ignoring the moves + SwapTurnOrder(i, j); + } } } } diff --git a/test/move_effect_after_you.c b/test/move_effect_after_you.c index 400fc053f7..a488d7a8c5 100644 --- a/test/move_effect_after_you.c +++ b/test/move_effect_after_you.c @@ -8,7 +8,6 @@ ASSUMPTIONS DOUBLE_BATTLE_TEST("After You makes the target move after user") { - if (B_RECALC_TURN_AFTER_ACTIONS >= GEN_8) KNOWN_FAILING; // #2615. GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(4); } PLAYER(SPECIES_WYNAUT) { Speed(1); } From a60b179bcb656fea173f3cd6ecab311551ab6a90 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 16 Feb 2023 18:20:54 -0300 Subject: [PATCH 086/290] Incorporated fixes from upstream --- src/frontier_pass.c | 2 +- src/wireless_communication_status_screen.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 5c90d258a2..07e06ad3b9 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -35,7 +35,7 @@ // after gFrontierPassBg_Pal (by default, gFrontierPassBg_Gfx) as a palette. // Nothing uses these colors (except the Trainer Card, which correctly writes them) // so in practice this bug has no effect on the game. -#ifdef BUGFIX_ +#ifdef BUGFIX #define NUM_BG_PAL_SLOTS 8 #else #define NUM_BG_PAL_SLOTS 13 diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index d1fd202027..f80e2356ee 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -392,7 +392,7 @@ static u32 CountPlayersInGroupAndGetActivity(struct RfuPlayer * player, u32 * gr for (i = 0; i < ARRAY_COUNT(sActivityGroupInfo); i++) { -#ifdef UBFIX_ +#ifdef UBFIX // GROUPTYPE_NONE is 0xFF, and shouldn't be used as an index into groupCounts. // In theory the only activity with this group type (ACTIVITY_SEARCH) wouldn't // satisfy the condition below, but not necessarily. From 0573aa455a140c07e5d66c2ba0750aa3fc69a08e Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 17 Feb 2023 09:47:13 +0000 Subject: [PATCH 087/290] Introduce macros to parse battle script arguments CMD_ARGS for regular commands, VARIOUS_ARGS for various commands, and NATIVE_ARGS for callnative commands. --- asm/macros/battle_script.inc | 894 +++++------ src/battle_script_commands.c | 2800 +++++++++++++++++++++++----------- 2 files changed, 2357 insertions(+), 1337 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 2d7bd436f3..4f11fc78b8 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -3,9 +3,9 @@ .byte 0x0 .endm - .macro accuracycheck failPtr:req, move:req + .macro accuracycheck failInstr:req, move:req .byte 0x1 - .4byte \failPtr + .4byte \failInstr .2byte \move .endm @@ -116,11 +116,11 @@ .4byte NULL .endm - .macro tryfaintmon_spikes battler:req, ptr:req + .macro tryfaintmon_spikes battler:req, instr:req .byte 0x19 .byte \battler .byte TRUE - .4byte \ptr + .4byte \instr .endm .macro dofaintanimation battler:req @@ -133,65 +133,65 @@ .byte \battler .endm - .macro jumpifstatus battler:req, status1:req, ptr:req + .macro jumpifstatus battler:req, flags:req, jumpInstr:req .byte 0x1c .byte \battler - .4byte \status1 - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifstatus2 battler:req, status2:req, ptr:req + .macro jumpifstatus2 battler:req, flags:req, jumpInstr:req .byte 0x1d .byte \battler - .4byte \status2 - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifability battler:req, ability:req, ptr:req + .macro jumpifability battler:req, ability:req, jumpInstr:req .byte 0x1e .byte \battler .2byte \ability - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifsideaffecting battler:req, sidestatus:req, ptr:req + .macro jumpifsideaffecting battler:req, flags:req, jumpInstr:req .byte 0x1f .byte \battler - .4byte \sidestatus - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifstat battler:req, ifflag:req, stat:req, value:req, ptr + .macro jumpifstat battler:req, comparison:req, stat:req, value:req, jumpInstr:req .byte 0x20 .byte \battler - .byte \ifflag + .byte \comparison .byte \stat .byte \value - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifstatus3condition battler:req, status3:req, condition:req, ptr:req + .macro jumpifstatus3condition battler:req, flags:req, jumpIfTrue:req, jumpInstr:req .byte 0x21 .byte \battler - .4byte \status3 - .byte \condition - .4byte \ptr + .4byte \flags + .byte \jumpIfTrue + .4byte \jumpInstr .endm - .macro jumpbasedontype battler:req, type:req, case:req, ptr:req + .macro jumpbasedontype battler:req, type:req, jumpIfType:req, jumpInstr:req .byte 0x22 .byte \battler .byte \type - .byte \case - .4byte \ptr + .byte \jumpIfType + .4byte \jumpInstr .endm - .macro jumpiftype battler:req, type:req, ptr:req - jumpbasedontype \battler, \type, 1, \ptr + .macro jumpiftype battler:req, type:req, jumpInstr:req + jumpbasedontype \battler, \type, TRUE, \jumpInstr .endm - .macro jumpifnottype battler:req, type:req, ptr:req - jumpbasedontype \battler, \type, 0, \ptr + .macro jumpifnottype battler:req, type:req, jumpInstr:req + jumpbasedontype \battler, \type, FALSE, \jumpInstr .endm .macro getexp battler:req @@ -199,9 +199,9 @@ .byte \battler .endm - .macro checkteamslost ptr:req + .macro checkteamslost jumpInstr:req .byte 0x24 - .4byte \ptr + .4byte \jumpInstr .endm .macro movevaluescleanup @@ -213,72 +213,72 @@ .byte \value .endm - .macro decrementmultihit value:req + .macro decrementmultihit loopInstr:req .byte 0x27 - .4byte \value + .4byte \loopInstr .endm - .macro goto ptr:req + .macro goto instr:req .byte 0x28 - .4byte \ptr + .4byte \instr .endm - .macro jumpifbyte ifflag:req, val:req, byte:req, ptr:req + .macro jumpifbyte comparison:req, bytePtr:req, value:req, jumpInstr:req .byte 0x29 - .byte \ifflag - .4byte \val - .byte \byte - .4byte \ptr + .byte \comparison + .4byte \bytePtr + .byte \value + .4byte \jumpInstr .endm - .macro jumpifhalfword ifflag:req, val:req, hword:req, ptr:req + .macro jumpifhalfword comparison:req, halfwordPtr:req, value:req, jumpInstr:req .byte 0x2a - .byte \ifflag - .4byte \val - .2byte \hword - .4byte \ptr + .byte \comparison + .4byte \halfwordPtr + .2byte \value + .4byte \jumpInstr .endm - .macro jumpifword ifflag:req, val:req, word:req, ptr:req + .macro jumpifword comparison:req, wordPtr:req, value:req, jumpInstr:req .byte 0x2b - .byte \ifflag - .4byte \val - .4byte \word - .4byte \ptr + .byte \comparison + .4byte \wordPtr + .4byte \value + .4byte \jumpInstr .endm - .macro jumpifarrayequal val1:req, val2:req, size:req, ptr:req + .macro jumpifarrayequal array1:req, array2:req, size:req, jumpInstr:req .byte 0x2c - .4byte \val1 - .4byte \val2 + .4byte \array1 + .4byte \array2 .byte \size - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifarraynotequal val1:req, val2:req, size:req, ptr:req + .macro jumpifarraynotequal array1:req, array2:req, size:req, jumpInstr:req .byte 0x2d - .4byte \val1 - .4byte \val2 + .4byte \array1 + .4byte \array2 .byte \size - .4byte \ptr + .4byte \jumpInstr .endm - .macro setbyte ptr:req, byte:req + .macro setbyte bytePtr:req, value:req .byte 0x2e - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro addbyte ptr:req, byte:req + .macro addbyte bytePtr:req, value:req .byte 0x2f - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro subbyte ptr:req, byte:req + .macro subbyte bytePtr:req, value:req .byte 0x30 - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm .macro copyarray dest:req, src:req, size:req @@ -288,53 +288,53 @@ .byte \size .endm - .macro copyarraywithindex dest:req, src:req, index:req, size:req + .macro copyarraywithindex dest:req, src:req, indexPtr:req, size:req .byte 0x32 .4byte \dest .4byte \src - .4byte \index + .4byte \indexPtr .byte \size .endm - .macro orbyte ptr:req, byte:req + .macro orbyte bytePtr:req, value:req .byte 0x33 - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro orhalfword ptr:req, hword:req + .macro orhalfword halfwordPtr:req, value:req .byte 0x34 - .4byte \ptr - .2byte \hword + .4byte \halfwordPtr + .2byte \value .endm - .macro orword ptr:req, word:req + .macro orword wordPtr:req, value:req .byte 0x35 - .4byte \ptr - .4byte \word + .4byte \wordPtr + .4byte \value .endm - .macro bicbyte ptr:req, byte:req + .macro bicbyte bytePtr:req, value:req .byte 0x36 - .4byte \ptr - .byte \byte + .4byte \bytePtr + .byte \value .endm - .macro bichalfword ptr:req, hword:req + .macro bichalfword halfwordPtr:req, value:req .byte 0x37 - .4byte \ptr - .2byte \hword + .4byte \halfwordPtr + .2byte \value .endm - .macro bicword ptr:req, word:req + .macro bicword wordPtr:req, value:req .byte 0x38 - .4byte \ptr - .4byte \word + .4byte \wordPtr + .4byte \value .endm - .macro pause time:req + .macro pause frames:req .byte 0x39 - .2byte \time + .2byte \frames .endm .macro waitstate @@ -362,53 +362,53 @@ .byte 0x3f .endm - .macro jumpifaffectedbyprotect ptr:req + .macro jumpifaffectedbyprotect failInstr:req .byte 0x40 - .4byte \ptr + .4byte \failInstr .endm - .macro call ptr:req + .macro call instr:req .byte 0x41 - .4byte \ptr + .4byte \instr .endm .macro setroost .byte 0x42 .endm - .macro jumpifabilitypresent ability:req, ptr:req + .macro jumpifabilitypresent ability:req, jumpInstr:req .byte 0x43 .2byte \ability - .4byte \ptr + .4byte \jumpInstr .endm .macro endselectionscript .byte 0x44 .endm - .macro playanimation battler:req, animType:req, arg=NULL + .macro playanimation battler:req, animId:req, argPtr=NULL .byte 0x45 .byte \battler - .byte \animType - .4byte \arg + .byte \animId + .4byte \argPtr .endm - .macro playanimation_var battler:req, animType:req, arg=NULL + .macro playanimation_var battler:req, animIdPtr:req, argPtr=NULL .byte 0x46 .byte \battler - .4byte \animType - .4byte \arg + .4byte \animIdPtr + .4byte \argPtr .endm .macro setgraphicalstatchangevalues .byte 0x47 .endm - .macro playstatchangeanimation battler:req, stats:req, statchange:req + .macro playstatchangeanimation battler:req, stats:req, flags:req .byte 0x48 .byte \battler .byte \stats - .byte \statchange + .byte \flags .endm .macro moveend endMode:req, endState:req @@ -449,9 +449,9 @@ moveend 2, \to .endm - .macro sethealblock ptr:req + .macro sethealblock failInstr:req .byte 0x4a - .4byte \ptr + .4byte \failInstr .endm .macro returnatktoball @@ -468,22 +468,22 @@ .byte \battler .endm - .macro switchinanim battler:req, dontclearsubstitutebit:req + .macro switchinanim battler:req, dontClearSubstitute:req .byte 0x4e .byte \battler - .byte \dontclearsubstitutebit + .byte \dontClearSubstitute .endm - .macro jumpifcantswitch battler:req, ptr:req + .macro jumpifcantswitch battler:req, jumpInstr:req .byte 0x4f .byte \battler - .4byte \ptr + .4byte \jumpInstr .endm - .macro openpartyscreen battler:req, ptr:req + .macro openpartyscreen battler:req, failInstr:req .byte 0x50 .byte \battler - .4byte \ptr + .4byte \failInstr .endm .macro switchhandleorder battler:req, state:req @@ -526,21 +526,21 @@ .byte \battler .endm - .macro handlelearnnewmove learnedMovePtr:req, nothingToLearnPtr:req, isFirstMove:req + .macro handlelearnnewmove learnedMoveInstr:req, nothingToLearnInstr:req, isFirstMove:req .byte 0x59 - .4byte \learnedMovePtr - .4byte \nothingToLearnPtr + .4byte \learnedMoveInstr + .4byte \nothingToLearnInstr .byte \isFirstMove .endm - .macro yesnoboxlearnmove forgotMovePtr:req + .macro yesnoboxlearnmove forgotMoveInstr:req .byte 0x5a - .4byte \forgotMovePtr + .4byte \forgotMoveInstr .endm - .macro yesnoboxstoplearningmove noPtr:req + .macro yesnoboxstoplearningmove noInstr:req .byte 0x5b - .4byte \noPtr + .4byte \noInstr .endm .macro hitanimation battler:req @@ -607,9 +607,9 @@ .byte 0x68 .endm - .macro setgravity ptr:req + .macro setgravity failInstr:req .byte 0x69 - .4byte \ptr + .4byte \failInstr .endm .macro removeitem battler:req @@ -647,9 +647,9 @@ .byte 0x71 .endm - .macro jumpifplayerran ptr:req + .macro jumpifplayerran jumpInstr:req .byte 0x72 - .4byte \ptr + .4byte \jumpInstr .endm .macro hpthresholds battler:req @@ -684,14 +684,14 @@ .byte 0x79 .endm - .macro jumpifnexttargetvalid ptr:req + .macro jumpifnexttargetvalid jumpInstr:req .byte 0x7a - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryhealhalfhealth ptr:req, battler:req + .macro tryhealhalfhealth failInstr:req, battler:req .byte 0x7b - .4byte \ptr + .4byte \failInstr .byte \battler .endm @@ -716,24 +716,24 @@ .byte \mode .endm - .macro trysetrest ptr:req + .macro trysetrest failInstr:req .byte 0x81 - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnotfirstturn ptr:req + .macro jumpifnotfirstturn jumpInstr:req .byte 0x82 - .4byte \ptr + .4byte \jumpInstr .endm - .macro setmiracleeye ptr:req + .macro setmiracleeye failInstr:req .byte 0x83 - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifuproarwakes ptr:req + .macro jumpifuproarwakes jumpInstr:req .byte 0x84 - .4byte \ptr + .4byte \jumpInstr .endm .macro stockpile id:req @@ -741,24 +741,24 @@ .byte \id .endm - .macro stockpiletobasedamage ptr:req + .macro stockpiletobasedamage failInstr:req .byte 0x86 - .4byte \ptr + .4byte \failInstr .endm - .macro stockpiletohpheal ptr:req + .macro stockpiletohpheal failInstr:req .byte 0x87 - .4byte \ptr + .4byte \failInstr .endm .macro setdrainedhp .byte 0x88 .endm - .macro statbuffchange flags:req, jumpptr:req + .macro statbuffchange flags:req, failInstr:req .byte 0x89 .2byte \flags - .4byte \jumpptr + .4byte \failInstr .endm .macro normalisebuffs @@ -773,23 +773,23 @@ .byte 0x8c .endm - .macro setmultihitcounter val:req + .macro setmultihitcounter value:req .byte 0x8d - .byte \val + .byte \value .endm .macro initmultihitstring .byte 0x8e .endm - .macro forcerandomswitch ptr:req + .macro forcerandomswitch failInstr:req .byte 0x8f - .4byte \ptr + .4byte \failInstr .endm - .macro tryconversiontypechange ptr:req + .macro tryconversiontypechange failInstr:req .byte 0x90 - .4byte \ptr + .4byte \failInstr .endm .macro givepaydaymoney @@ -800,9 +800,9 @@ .byte 0x92 .endm - .macro tryKO ptr:req + .macro tryKO failInstr:req .byte 0x93 - .4byte \ptr + .4byte \failInstr .endm .macro damagetohalftargethp @@ -817,9 +817,9 @@ .byte 0x96 .endm - .macro tryinfatuating ptr:req + .macro tryinfatuating failInstr:req .byte 0x97 - .4byte \ptr + .4byte \failInstr .endm .macro updatestatusicon battler:req @@ -843,9 +843,9 @@ .byte 0x9c .endm - .macro mimicattackcopy ptr:req + .macro mimicattackcopy failInstr:req .byte 0x9d - .4byte \ptr + .4byte \failInstr .endm .macro metronome @@ -860,48 +860,48 @@ .byte 0xa0 .endm - .macro counterdamagecalculator ptr:req + .macro counterdamagecalculator failInstr:req .byte 0xa1 - .4byte \ptr + .4byte \failInstr .endm - .macro mirrorcoatdamagecalculator ptr:req + .macro mirrorcoatdamagecalculator failInstr:req .byte 0xa2 - .4byte \ptr + .4byte \failInstr .endm - .macro disablelastusedattack ptr:req + .macro disablelastusedattack failInstr:req .byte 0xa3 - .4byte \ptr + .4byte \failInstr .endm - .macro trysetencore ptr:req + .macro trysetencore failInstr:req .byte 0xa4 - .4byte \ptr + .4byte \failInstr .endm - .macro painsplitdmgcalc ptr:req + .macro painsplitdmgcalc failInstr:req .byte 0xa5 - .4byte \ptr + .4byte \failInstr .endm - .macro settypetorandomresistance ptr:req + .macro settypetorandomresistance failInstr:req .byte 0xa6 - .4byte \ptr + .4byte \failInstr .endm .macro setalwayshitflag .byte 0xa7 .endm - .macro copymovepermanently ptr:req + .macro copymovepermanently failInstr:req .byte 0xa8 - .4byte \ptr + .4byte \failInstr .endm - .macro trychoosesleeptalkmove ptr:req + .macro trychoosesleeptalkmove failInstr:req .byte 0xa9 - .4byte \ptr + .4byte \failInstr .endm .macro setdestinybond @@ -912,56 +912,56 @@ .byte 0xab .endm - .macro settailwind ptr:req + .macro settailwind failInstr:req .byte 0xac - .4byte \ptr + .4byte \failInstr .endm - .macro tryspiteppreduce ptr:req + .macro tryspiteppreduce failInstr:req .byte 0xad - .4byte \ptr + .4byte \failInstr .endm .macro healpartystatus .byte 0xae .endm - .macro cursetarget ptr:req + .macro cursetarget failInstr:req .byte 0xaf - .4byte \ptr + .4byte \failInstr .endm - .macro trysetspikes ptr:req + .macro trysetspikes failInstr:req .byte 0xb0 - .4byte \ptr + .4byte \failInstr .endm .macro setforesight .byte 0xb1 .endm - .macro trysetperishsong ptr:req + .macro trysetperishsong failInstr:req .byte 0xb2 - .4byte \ptr + .4byte \failInstr .endm .macro handlerollout .byte 0xb3 .endm - .macro jumpifconfusedandstatmaxed stat:req, ptr:req + .macro jumpifconfusedandstatmaxed stat:req, jumpInstr:req .byte 0xb4 .byte \stat - .4byte \ptr + .4byte \jumpInstr .endm .macro handlefurycutter .byte 0xb5 .endm - .macro setembargo ptr:req + .macro setembargo failInstr:req .byte 0xb6 - .4byte \ptr + .4byte \failInstr .endm .macro presentdamagecalculation @@ -976,23 +976,23 @@ .byte 0xb9 .endm - .macro jumpifnopursuitswitchdmg ptr:req + .macro jumpifnopursuitswitchdmg jumpInstr:req .byte 0xba - .4byte \ptr + .4byte \jumpInstr .endm .macro setsunny .byte 0xbb .endm - .macro maxattackhalvehp ptr:req + .macro maxattackhalvehp failInstr:req .byte 0xbc - .4byte \ptr + .4byte \failInstr .endm - .macro copyfoestats ptr:req + .macro copyfoestats unused:req .byte 0xbd - .4byte \ptr + .4byte \unused .endm .macro rapidspinfree @@ -1003,29 +1003,29 @@ .byte 0xbf .endm - .macro recoverbasedonsunlight ptr:req + .macro recoverbasedonsunlight failInstr:req .byte 0xc0 - .4byte \ptr + .4byte \failInstr .endm - .macro setstickyweb ptr:req + .macro setstickyweb failInstr:req .byte 0xc1 - .4byte \ptr + .4byte \failInstr .endm .macro selectfirstvalidtarget .byte 0xc2 .endm - .macro trysetfutureattack ptr:req + .macro trysetfutureattack failInstr:req .byte 0xc3 - .4byte \ptr + .4byte \failInstr .endm - .macro trydobeatup endPtr=NULL, failPtr=NULL + .macro trydobeatup endInstr, failInstr .byte 0xc4 - .4byte \endPtr - .4byte \failPtr + .4byte \endInstr + .4byte \failInstr .endm .macro setsemiinvulnerablebit @@ -1044,9 +1044,9 @@ .byte 0xc8 .endm - .macro trymemento ptr:req + .macro trymemento failInstr:req .byte 0xc9 - .4byte \ptr + .4byte \failInstr .endm .macro setforcedtarget @@ -1061,105 +1061,105 @@ .byte 0xcc .endm - .macro cureifburnedparalysedorpoisoned ptr:req + .macro cureifburnedparalysedorpoisoned failInstr:req .byte 0xcd - .4byte \ptr + .4byte \failInstr .endm - .macro settorment ptr:req + .macro settorment failInstr:req .byte 0xce - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnodamage ptr:req + .macro jumpifnodamage jumpInstr:req .byte 0xcf - .4byte \ptr + .4byte \jumpInstr .endm - .macro settaunt ptr:req + .macro settaunt failInstr:req .byte 0xd0 - .4byte \ptr + .4byte \failInstr .endm - .macro trysethelpinghand ptr:req + .macro trysethelpinghand failInstr:req .byte 0xd1 - .4byte \ptr + .4byte \failInstr .endm - .macro tryswapitems ptr:req + .macro tryswapitems failInstr:req .byte 0xd2 - .4byte \ptr + .4byte \failInstr .endm - .macro trycopyability ptr:req + .macro trycopyability failInstr:req .byte 0xd3 - .4byte \ptr + .4byte \failInstr .endm - .macro trywish turnNumber:req, ptr:req + .macro trywish turnNumber:req, failInstr:req .byte 0xd4 .byte \turnNumber - .4byte \ptr + .4byte \failInstr .endm - .macro settoxicspikes ptr:req + .macro settoxicspikes failInstr:req .byte 0xd5 - .4byte \ptr + .4byte \failInstr .endm - .macro setgastroacid ptr:req + .macro setgastroacid failInstr:req .byte 0xd6 - .4byte \ptr + .4byte \failInstr .endm - .macro setyawn ptr:req + .macro setyawn failInstr:req .byte 0xd7 - .4byte \ptr + .4byte \failInstr .endm - .macro setdamagetohealthdifference ptr:req + .macro setdamagetohealthdifference failInstr:req .byte 0xd8 - .4byte \ptr + .4byte \failInstr .endm .macro setroom .byte 0xd9 .endm - .macro tryswapabilities ptr:req + .macro tryswapabilities failInstr:req .byte 0xda - .4byte \ptr + .4byte \failInstr .endm - .macro tryimprison ptr:req + .macro tryimprison failInstr:req .byte 0xdb - .4byte \ptr + .4byte \failInstr .endm - .macro setstealthrock ptr:req + .macro setstealthrock failInstr:req .byte 0xdc - .4byte \ptr + .4byte \failInstr .endm - .macro setuserstatus3 flags:req, ptr:req + .macro setuserstatus3 flags:req, failInstr:req .byte 0xdd .4byte \flags - .4byte \ptr + .4byte \failInstr .endm - .macro assistattackselect ptr:req + .macro assistattackselect failInstr:req .byte 0xde - .4byte \ptr + .4byte \failInstr .endm - .macro trysetmagiccoat ptr:req + .macro trysetmagiccoat failInstr:req .byte 0xdf - .4byte \ptr + .4byte \failInstr .endm - .macro trysetsnatch ptr:req + .macro trysetsnatch failInstr:req .byte 0xe0 - .4byte \ptr + .4byte \failInstr .endm .macro unused2 ptr:req @@ -1172,10 +1172,10 @@ .byte \battler .endm - .macro jumpifhasnohp battler:req, ptr:req + .macro jumpifhasnohp battler:req, jumpInstr:req .byte 0xe3 .byte \battler - .4byte \ptr + .4byte \jumpInstr .endm .macro getsecretpowereffect @@ -1194,29 +1194,29 @@ .byte 0xe7 .endm - .macro settypebasedhalvers ptr:req + .macro settypebasedhalvers failInstr:req .byte 0xe8 - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifsubstituteblocks ptr:req + .macro jumpifsubstituteblocks jumpInstr:req .byte 0xe9 - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryrecycleitem ptr:req + .macro tryrecycleitem failInstr:req .byte 0xea - .4byte \ptr + .4byte \failInstr .endm - .macro settypetoterrain ptr:req + .macro settypetoterrain failInstr:req .byte 0xeb - .4byte \ptr + .4byte \failInstr .endm - .macro pursuitdoubles ptr:req + .macro pursuitdoubles failInstr:req .byte 0xec - .4byte \ptr + .4byte \failInstr .endm .macro snatchsetbattlers @@ -1235,18 +1235,18 @@ .byte 0xf0 .endm - .macro trysetcaughtmondexflags ptr:req + .macro trysetcaughtmondexflags failInstr:req .byte 0xf1 - .4byte \ptr + .4byte \failInstr .endm .macro displaydexinfo .byte 0xf2 .endm - .macro trygivecaughtmonnick ptr:req + .macro trygivecaughtmonnick successInstr:req .byte 0xf3 - .4byte \ptr + .4byte \successInstr .endm .macro subattackerhpbydmg @@ -1270,9 +1270,9 @@ .byte \position .endm - .macro settelekinesis ptr:req + .macro settelekinesis failInstr:req .byte 0xf9 - .4byte \ptr + .4byte \failInstr .endm .macro swapstatstages stat:req @@ -1285,9 +1285,9 @@ .byte \stat .endm - .macro jumpifoppositegenders ptr:req + .macro jumpifoppositegenders jumpInstr:req .byte 0xfc - .4byte \ptr + .4byte \jumpInstr .endm .macro unused ptr:req @@ -1295,9 +1295,9 @@ .4byte \ptr .endm - .macro tryworryseed ptr:req + .macro tryworryseed failInstr:req .byte 0xfe - .4byte \ptr + .4byte \failInstr .endm .macro callnative func:req @@ -1306,16 +1306,16 @@ .endm @ callnative macros - .macro metalburstdamagecalculator ptr:req + .macro metalburstdamagecalculator failInstr:req callnative BS_CalcMetalBurstDmg - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifholdeffect battler:req, holdEffect:req, ptr:req + .macro jumpifholdeffect battler:req, holdEffect:req, jumpInstr:req callnative BS_JumpIfHoldEffect .byte \battler .2byte \holdEffect - .4byte \ptr + .4byte \jumpInstr .endm @ various command changed to more readable macros @@ -1480,82 +1480,82 @@ .2byte \move .endm - .macro setluckychant battler:req, ptr:req + .macro setluckychant battler:req, failInstr:req various \battler VARIOUS_SET_LUCKY_CHANT - .4byte \ptr + .4byte \failInstr .endm - .macro suckerpunchcheck ptr:req + .macro suckerpunchcheck failInstr:req various BS_ATTACKER, VARIOUS_SUCKER_PUNCH_CHECK - .4byte \ptr + .4byte \failInstr .endm - .macro setabilitysimple battler:req, ptr:req + .macro setabilitysimple battler:req, failInstr:req various \battler VARIOUS_SET_SIMPLE_BEAM - .4byte \ptr + .4byte \failInstr .endm - .macro tryentrainment ptr:req + .macro tryentrainment failInstr:req various BS_ATTACKER, VARIOUS_TRY_ENTRAINMENT - .4byte \ptr + .4byte \failInstr .endm .macro setlastusedability battler:req various \battler, VARIOUS_SET_LAST_USED_ABILITY .endm - .macro tryhealpulse battler:req, ptr:req + .macro tryhealpulse battler:req, failInstr:req various \battler, VARIOUS_TRY_HEAL_PULSE - .4byte \ptr + .4byte \failInstr .endm - .macro tryquash ptr:req + .macro tryquash failInstr:req various BS_ATTACKER, VARIOUS_TRY_QUASH - .4byte \ptr + .4byte \failInstr .endm - .macro tryafteryou ptr:req + .macro tryafteryou failInstr:req various BS_ATTACKER, VARIOUS_AFTER_YOU - .4byte \ptr + .4byte \failInstr .endm - .macro trybestow ptr:req + .macro trybestow failInstr:req various BS_ATTACKER, VARIOUS_BESTOW - .4byte \ptr + .4byte \failInstr .endm .macro invertstatstages battler:req various \battler, VARIOUS_INVERT_STAT_STAGES .endm - .macro setterrain ptr:req + .macro setterrain failInstr:req various BS_ATTACKER, VARIOUS_SET_TERRAIN - .4byte \ptr + .4byte \failInstr .endm - .macro trymefirst ptr:req + .macro trymefirst failInstr:req various BS_ATTACKER, VARIOUS_TRY_ME_FIRST - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifbattleend ptr:req + .macro jumpifbattleend jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_BATTLE_END - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryelectrify ptr:req + .macro tryelectrify failInstr:req various BS_ATTACKER, VARIOUS_TRY_ELECTRIFY - .4byte \ptr + .4byte \failInstr .endm - .macro tryreflecttype ptr:req + .macro tryreflecttype failInstr:req various BS_ATTACKER, VARIOUS_TRY_REFLECT_TYPE - .4byte \ptr + .4byte \failInstr .endm - .macro trysoak ptr:req + .macro trysoak failInstr:req various BS_ATTACKER, VARIOUS_TRY_SOAK - .4byte \ptr + .4byte \failInstr .endm .macro handlemegaevo battler:req, case:req @@ -1573,33 +1573,33 @@ .byte \case .endm - .macro jumpifcantuselastresort battler:req, ptr:req + .macro jumpifcantuselastresort battler:req, jumpInstr:req various \battler, VARIOUS_TRY_LAST_RESORT - .4byte \ptr + .4byte \jumpInstr .endm .macro argumentstatuseffect various BS_ATTACKER, VARIOUS_ARGUMENT_STATUS_EFFECT .endm - .macro tryhitswitchtarget ptr:req + .macro tryhitswitchtarget failInstr:req various BS_ATTACKER, VARIOUS_TRY_HIT_SWITCH_TARGET - .4byte \ptr + .4byte \failInstr .endm - .macro tryautotomize battler:req, ptr:req + .macro tryautotomize battler:req, failInstr:req various \battler, VARIOUS_TRY_AUTOTOMIZE - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifcantusesynchronoise ptr:req + .macro jumpifcantusesynchronoise jumpInstr:req various BS_ATTACKER, VARIOUS_TRY_SYNCHRONOISE - .4byte \ptr + .4byte \jumpInstr .endm - .macro trycopycat ptr:req + .macro trycopycat failInstr:req various BS_ATTACKER, VARIOUS_TRY_COPYCAT - .4byte \ptr + .4byte \failInstr .endm .macro showabilitypopup battler:req @@ -1610,20 +1610,20 @@ various \battler, VARIOUS_UPDATE_ABILITY_POPUP .endm - .macro defogclear battler:req, clear:req, ptr:req + .macro defogclear battler:req, clear:req, failInstr:req various \battler, VARIOUS_DEFOG .byte \clear - .4byte \ptr + .4byte \failInstr .endm - .macro jumpiftargetally ptr:req + .macro jumpiftargetally jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_TARGET_ALLY - .4byte \ptr + .4byte \jumpInstr .endm - .macro trypsychoshift ptr:req + .macro trypsychoshift failInstr:req various BS_ATTACKER, VARIOUS_PSYCHO_SHIFT - .4byte \ptr + .4byte \failInstr .endm .macro curestatus battler:req @@ -1638,14 +1638,14 @@ various BS_ATTACKER, VARIOUS_ARGUMENT_TO_MOVE_EFFECT .endm - .macro jumpifnotgrounded battler:req, ptr:req + .macro jumpifnotgrounded battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NOT_GROUNDED - .4byte \ptr + .4byte \jumpInstr .endm - .macro handletrainerslidemsg battler:req, field:req + .macro handletrainerslidemsg battler:req, case:req various \battler, VARIOUS_HANDLE_TRAINER_SLIDE_MSG - .byte \field + .byte \case .endm .macro trytrainerslidefirstdownmsg battler:req @@ -1660,14 +1660,14 @@ various \battler, VARIOUS_SET_AURORA_VEIL .endm - .macro trysetthirdtype battler:req, ptr:req + .macro trysetthirdtype battler:req, failInstr:req various \battler, VARIOUS_TRY_THIRD_TYPE - .4byte \ptr + .4byte \failInstr .endm - .macro tryaccupressure battler:req, ptr:req + .macro tryaccupressure battler:req, failInstr:req various \battler, VARIOUS_ACUPRESSURE - .4byte \ptr + .4byte \failInstr .endm .macro setpowder battler:req @@ -1682,24 +1682,24 @@ various \battler, VARIOUS_GRAVITY_ON_AIRBORNE_MONS .endm - .macro checkgrassyterrainheal battler:req, ptr:req + .macro checkgrassyterrainheal battler:req, failInstr:req various \battler, VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnotberry battler:req, ptr:req + .macro jumpifnotberry battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NOT_BERRY - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifroarfails ptr:req + .macro jumpifroarfails jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_ROAR_FAILS - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryinstruct ptr:req + .macro tryinstruct failInstr:req various BS_ATTACKER, VARIOUS_TRY_INSTRUCT - .4byte \ptr + .4byte \failInstr .endm .macro settracedability battler:req @@ -1714,19 +1714,19 @@ various \battler, VARIOUS_TRY_ILLUSION_OFF .endm - .macro spriteignore0hp val:req + .macro spriteignore0hp value:req various BS_ATTACKER, VARIOUS_SET_SPRITEIGNORE0HP - .byte \val + .byte \value .endm - .macro getstatvalue battler:req, statId:req + .macro getstatvalue battler:req, stat:req various \battler, VARIOUS_GET_STAT_VALUE - .byte \statId + .byte \stat .endm - .macro jumpiffullhp battler:req, ptr:req + .macro jumpiffullhp battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_FULL_HP - .4byte \ptr + .4byte \jumpInstr .endm .macro losetype battler:req, type:req @@ -1738,60 +1738,60 @@ various \battler, VARIOUS_TRY_FRISK .endm - .macro jumpifshieldsdown battler:req, ptr:req + .macro jumpifshieldsdown battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED - .4byte \ptr + .4byte \jumpInstr .endm - .macro trypoisontype attacker:req, target:req, ptr:req + .macro trypoisontype attacker:req, target:req, failInstr:req various \attacker, VARIOUS_POISON_TYPE_IMMUNITY .byte \target - .4byte \ptr + .4byte \failInstr .endm - .macro tryparalyzetype attacker:req, target:req, ptr:req + .macro tryparalyzetype attacker:req, target:req, failInstr:req various \attacker, VARIOUS_PARALYZE_TYPE_IMMUNITY .byte \target - .4byte \ptr + .4byte \failInstr .endm - .macro trysetfairylock ptr:req + .macro trysetfairylock failInstr:req various BS_ATTACKER, VARIOUS_TRY_FAIRY_LOCK - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnoally battler:req, ptr:req + .macro jumpifnoally battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NO_ALLY - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifnoholdeffect battler:req, holdEffet:req, ptr:req + .macro jumpifnoholdeffect battler:req, holdEffect:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NO_HOLD_EFFECT - .byte \holdEffet - .4byte \ptr + .byte \holdEffect + .4byte \jumpInstr .endm - .macro infatuatewithbattler battler1:req, battler2:req - various \battler1, VARIOUS_INFATUATE_WITH_BATTLER - .byte \battler2 + .macro infatuatewithbattler battler:req, infatuateWith:req + various \battler, VARIOUS_INFATUATE_WITH_BATTLER + .byte \infatuateWith .endm .macro setlastuseditem battler:req various \battler, VARIOUS_SET_LAST_USED_ITEM .endm - .macro jumpifabsent battler:req, ptr:req + .macro jumpifabsent battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_ABSENT - .4byte \ptr + .4byte \jumpInstr .endm .macro destroyabilitypopup various BS_ABILITY_BATTLER, VARIOUS_DESTROY_ABILITY_POPUP .endm - .macro gettotemboost ptr:req + .macro gettotemboost jumpInstr:req various BS_ATTACKER, VARIOUS_TOTEM_BOOST - .4byte \ptr + .4byte \jumpInstr .endm .macro tryactivategrimneigh, battler:req @@ -1802,9 +1802,9 @@ various BS_ATTACKER, VARIOUS_SET_Z_EFFECT .endm - .macro consumeberry battler:req, frombattler:req + .macro consumeberry battler:req, fromBattler:req various \battler, VARIOUS_CONSUME_BERRY - .byte \frombattler + .byte \fromBattler .endm .macro activateitemeffects battler:req @@ -1815,44 +1815,44 @@ various 0, VARIOUS_PICKPOCKET .endm - .macro doterrainseed battler:req, ptr:req + .macro doterrainseed battler:req, failInstr:req various \battler, VARIOUS_TERRAIN_SEED - .4byte \ptr + .4byte \failInstr .endm .macro makeinvisible battler:req various \battler, VARIOUS_MAKE_INVISIBLE .endm - .macro tryroomservice battler:req, ptr:req + .macro tryroomservice battler:req, failInstr:req various \battler, VARIOUS_ROOM_SERVICE - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifterrainaffected battler:req, terrainFlags:req, ptr:req + .macro jumpifterrainaffected battler:req, terrainFlags:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_TERRAIN_AFFECTED .4byte \terrainFlags - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifpranksterblocked battler:req, ptr:req + .macro jumpifpranksterblocked battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_PRANKSTER_BLOCKED - .4byte \ptr + .4byte \jumpInstr .endm - .macro eeriespellppreduce ptr:req + .macro eeriespellppreduce failInstr:req various BS_TARGET, VARIOUS_EERIE_SPELL_PP_REDUCE - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifteamhealthy battler:req, ptr:req + .macro jumpifteamhealthy battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_TEAM_HEALTHY - .4byte \ptr + .4byte \jumpInstr .endm - .macro tryhealquarterhealth battler:req, ptr:req + .macro tryhealquarterhealth battler:req, failInstr:req various \battler, VARIOUS_TRY_HEAL_QUARTER_HP - .4byte \ptr + .4byte \failInstr .endm .macro removeterrain @@ -1867,73 +1867,73 @@ various BS_TARGET, VARIOUS_SET_ATTACKER_STICKY_WEB_USER .endm - .macro getrototillertargets ptr:req + .macro getrototillertargets failInstr:req various BS_ATTACKER, VARIOUS_GET_ROTOTILLER_TARGETS - .4byte \ptr + .4byte \failInstr .endm - .macro jumpifnotrototilleraffected battler:req, ptr:req + .macro jumpifnotrototilleraffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED - .4byte \ptr + .4byte \jumpInstr .endm .macro tryactivatebattlebond battler:req various \battler, VARIOUS_TRY_ACTIVATE_BATTLE_BOND .endm - .macro jumpifcantreverttoprimal ptr:req + .macro jumpifcantreverttoprimal jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL - .4byte \ptr + .4byte \jumpInstr .endm .macro applyplasmafists various BS_ATTACKER, VARIOUS_APPLY_PLASMA_FISTS .endm - .macro jumpifweatheraffected battler:req, weather:req, ptr:req + .macro jumpifweatheraffected battler:req, flags:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_WEATHER_AFFECTED - .4byte \weather - .4byte \ptr + .4byte \flags + .4byte \jumpInstr .endm - .macro jumpifspecies battler:req, species:req, ptr:req + .macro jumpifspecies battler:req, species:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_SPECIES .2byte \species - .4byte \ptr + .4byte \jumpInstr .endm .macro tryendneutralizinggas battler:req various \battler, VARIOUS_TRY_END_NEUTRALIZING_GAS .endm - .macro trynoretreat battler:req, ptr:req + .macro trynoretreat battler:req, failInstr:req various \battler, VARIOUS_TRY_NO_RETREAT - .4byte \ptr + .4byte \failInstr .endm - .macro trytarshot battler:req, ptr:req + .macro trytarshot battler:req, failInstr:req various \battler, VARIOUS_TRY_TAR_SHOT - .4byte \ptr + .4byte \failInstr .endm - .macro cantarshotwork battler:req, ptr:req + .macro cantarshotwork battler:req, failInstr:req various \battler, VARIOUS_CAN_TAR_SHOT_WORK - .4byte \ptr + .4byte \failInstr .endm - .macro checkpoltergeist battler:req, ptr:req + .macro checkpoltergeist battler:req, failInstr:req various \battler, VARIOUS_CHECK_POLTERGEIST - .4byte \ptr + .4byte \failInstr .endm - .macro setoctolock battler:req, ptr:req + .macro setoctolock battler:req, failInstr:req various \battler, VARIOUS_SET_OCTOLOCK - .4byte \ptr + .4byte \failInstr .endm - .macro cutonethirdhpraisestats ptr:req + .macro cutonethirdhpraisestats failInstr:req various BS_ATTACKER, VARIOUS_CUT_1_3_HP_RAISE_STATS - .4byte \ptr + .4byte \failInstr .endm .macro photongeysercheck battler:req @@ -1944,34 +1944,34 @@ various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK .endm - .macro jumpifrodaffected battler:req, ptr:req + .macro jumpifrodaffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_ROD - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifabsorbaffected battler:req, ptr:req + .macro jumpifabsorbaffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_ABSORB - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifmotoraffected battler:req, ptr:req + .macro jumpifmotoraffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_MOTOR - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifteanoberry ptr:req + .macro jumpifteanoberry jumpInstr:req various BS_ATTACKER, VARIOUS_TEATIME_TARGETS - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifteainvulnerable battler:req, ptr:req + .macro jumpifteainvulnerable battler:req, jumpInstr:req various \battler, VARIOUS_TEATIME_INVUL - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpifcantfling battler:req, ptr:req + .macro jumpifcantfling battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_CANT_FLING - .4byte \ptr + .4byte \jumpInstr .endm .macro curecertainstatuses battler:req @@ -1982,15 +1982,15 @@ various \battler, VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES .endm - .macro jumpiflastuseditemberry ptr:req + .macro jumpiflastuseditemberry jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY - .4byte \ptr + .4byte \jumpInstr .endm - .macro jumpiflastuseditemholdeffect battler:req, holdEffect:req, ptr:req + .macro jumpiflastuseditemholdeffect battler:req, holdEffect:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT .byte \holdEffect - .4byte \ptr + .4byte \jumpInstr .endm .macro savebattleritem battler:req @@ -2021,19 +2021,19 @@ various \battler, VARIOUS_GET_BATTLER_SIDE .endm - .macro checkparentalbondcounter counter:req, ptr:req + .macro checkparentalbondcounter counter:req, jumpInstr:req various BS_ATTACKER, VARIOUS_CHECK_PARENTAL_BOND_COUNTER .byte \counter - .4byte \ptr + .4byte \jumpInstr .endm .macro swapstats stat:req various BS_ATTACKER, VARIOUS_SWAP_STATS .byte \stat .endm - .macro trywindriderpower battler:req, ptr:req + .macro trywindriderpower battler:req, failInstr:req various \battler, VARIOUS_TRY_WIND_RIDER_POWER - .4byte \ptr + .4byte \failInstr .endm .macro activateweatherchangeabilities battler:req @@ -2044,9 +2044,9 @@ various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES .endm - .macro jumpifnovalidtargets ptr:req + .macro jumpifnovalidtargets jumpInstr:req various BS_ATTACKER, VARIOUS_JUMP_IF_NO_VALID_TARGETS - .4byte \ptr + .4byte \jumpInstr .endm @ helpful macros @@ -2091,44 +2091,44 @@ copyarray \dst, \src, 0x4 .endm - .macro jumpifbytenotequal byte1:req, byte2:req, jumpptr:req - jumpifarraynotequal \byte1, \byte2, 0x1, \jumpptr + .macro jumpifbytenotequal byte1:req, byte2:req, jumpInstr:req + jumpifarraynotequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro jumpifbyteequal byte1:req, byte2:req, jumpptr:req - jumpifarrayequal \byte1, \byte2, 0x1, \jumpptr + .macro jumpifbyteequal byte1:req, byte2:req, jumpInstr:req + jumpifarrayequal \byte1, \byte2, 0x1, \jumpInstr .endm - .macro jumpifmove move:req, jumpptr:req - jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpptr + .macro jumpifmove move:req, jumpInstr:req + jumpifhalfword CMP_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro jumpifnotmove move:req, jumpptr:req - jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpptr + .macro jumpifnotmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gCurrentMove, \move, \jumpInstr .endm - .macro jumpifnotchosenmove move:req, jumpptr:req - jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpptr + .macro jumpifnotchosenmove move:req, jumpInstr:req + jumpifhalfword CMP_NOT_EQUAL, gChosenMove, \move, \jumpInstr .endm - .macro jumpifstatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, FALSE, \jumpptr + .macro jumpifstatus3 battler:req, flags:req, jumpInstr:req + jumpifstatus3condition \battler, \flags, FALSE, \jumpInstr .endm - .macro jumpifnostatus3 battler:req, status:req, jumpptr:req - jumpifstatus3condition \battler, \status, TRUE, \jumpptr + .macro jumpifnostatus3 battler:req, flags:req, jumpInstr:req + jumpifstatus3condition \battler, \flags, TRUE, \jumpInstr .endm - .macro jumpifmovehadnoeffect jumpptr:req - jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpptr + .macro jumpifmovehadnoeffect jumpInstr:req + jumpifbyte CMP_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_NO_EFFECT, \jumpInstr .endm - .macro jumpifbattletype flags:req, jumpptr:req - jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr + .macro jumpifbattletype flags:req, jumpInstr:req + jumpifword CMP_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm - .macro jumpifnotbattletype flags:req, jumpptr:req - jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpptr + .macro jumpifnotbattletype flags:req, jumpInstr:req + jumpifword CMP_NO_COMMON_BITS, gBattleTypeFlags, \flags, \jumpInstr .endm .macro dmg_1_8_targethp @@ -2147,42 +2147,42 @@ manipulatedamage DMG_1_2_ATTACKER_HP .endm - .macro jumpifflowerveil jumpptr:req + .macro jumpifflowerveil jumpInstr:req jumpifnottype BS_TARGET, TYPE_GRASS, 1f - jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpptr + jumpifability BS_TARGET_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr 1: .endm - .macro jumpifflowerveilattacker jumpptr:req + .macro jumpifflowerveilattacker jumpInstr:req jumpifnottype BS_ATTACKER, TYPE_GRASS, 1f - jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpptr + jumpifability BS_ATTACKER_SIDE, ABILITY_FLOWER_VEIL, \jumpInstr 1: .endm - .macro setallytonexttarget jumpptr:req + .macro setallytonexttarget jumpInstr:req jumpifbyte CMP_GREATER_THAN, gBattlerTarget, 0x1, 1f addbyte gBattlerTarget, 0x2 - goto \jumpptr + goto \jumpInstr 1: subbyte gBattlerTarget, 0x2 - goto \jumpptr + goto \jumpInstr .endm - .macro jumpifleafguardprotected battler:req, jumpptr:req + .macro jumpifleafguardprotected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED - .4byte \jumpptr + .4byte \jumpInstr .endm - .macro jumpifsafeguard jumpptr:req + .macro jumpifsafeguard jumpInstr:req jumpifability BS_ATTACKER, ABILITY_INFILTRATOR, 1f - jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpptr + jumpifsideaffecting BS_TARGET, SIDE_STATUS_SAFEGUARD, \jumpInstr 1: .endm @ Will jump to script pointer if the target weighs less than 200 kg, or 441 lbs. - .macro jumpifunder200 battler:req, ptr:req + .macro jumpifunder200 battler:req, failInstr:req various \battler, VARIOUS_JUMP_IF_UNDER_200 - .4byte \ptr + .4byte \failInstr .endm @ Sets the sky drop status and does all other necessary operations @@ -2192,9 +2192,9 @@ @ Clears the sky drop status and does all other necessary operations. @ If the target fainted in before this script is called, it goes to the given script. - .macro clearskydrop ptr:req + .macro clearskydrop failInstr:req various 0, VARIOUS_CLEAR_SKY_DROP - .4byte \ptr + .4byte \failInstr .endm @ Accounts for if the target of Sky Drop was in confuse_lock when the attacker falls asleep due to Yawn. @@ -2238,7 +2238,7 @@ waitmessage B_WAIT_TIME_LONG .endm - .macro jumpifemergencyexited battler:req, ptr:req + .macro jumpifemergencyexited battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_EMERGENCY_EXITED - .4byte \ptr + .4byte \jumpInstr .endm diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 57311e6712..985146faba 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -60,6 +60,37 @@ #include "battle_util.h" #include "constants/pokemon.h" +// Helper for accessing command arguments and advancing gBattlescriptCurrInstr. +// +// For example accuracycheck is defined as: +// +// .macro accuracycheck failInstr:req, move:req +// .byte 0x1 +// .4byte \failInstr +// .2byte \move +// .endm +// +// Which corresponds to: +// +// CMD_ARGS(const u8 *failInstr, u16 move); +// +// The arguments can be accessed as cmd->failInstr and cmd->move. +// gBattlescriptCurrInstr = cmd->nextInstr; advances to the next instruction. +#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd = (const void *)gBattlescriptCurrInstr +#define VARIOUS_ARGS(...) CMD_ARGS(u8 battler, u8 id, ##__VA_ARGS__) +#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__) + +#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__) +#define MEMBERS_0() +#define MEMBERS_1(a) a; +#define MEMBERS_2(a, b) a; b; +#define MEMBERS_3(a, b, c) a; b; c; +#define MEMBERS_4(a, b, c, d) a; b; c; d; +#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e; +#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f; +#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g; +#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h; + extern struct Evolution gEvolutionTable[][EVOS_PER_MON]; extern const u8 *const gBattleScriptsForMoveEffects[]; @@ -1413,6 +1444,8 @@ static bool32 TryAegiFormChange(void) static void Cmd_attackcanceler(void) { + CMD_ARGS(); + s32 i, moveType; u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); @@ -1603,16 +1636,16 @@ static void Cmd_attackcanceler(void) gMultiHitCounter = 0; } gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gProtectStructs[gBattlerTarget].beakBlastCharge && IsMoveMakingContact(gCurrentMove, gBattlerAttacker)) { gProtectStructs[gBattlerAttacker].touchedProtectLike = TRUE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -1637,15 +1670,17 @@ static bool32 JumpIfMoveFailed(u8 adder, u16 move) static void Cmd_jumpifaffectedbyprotect(void) { + CMD_ARGS(const u8 *failInstr); + if (IsBattlerProtected(gBattlerTarget, gCurrentMove)) { gMoveResultFlags |= MOVE_RESULT_MISSED; - JumpIfMoveFailed(5, 0); + JumpIfMoveFailed(sizeof(*cmd), MOVE_NONE); gBattleCommunication[MISS_TYPE] = B_MSG_PROTECTED; } else { - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -1836,7 +1871,9 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u static void Cmd_accuracycheck(void) { - u16 type, move = T2_READ_16(gBattlescriptCurrInstr + 5); + CMD_ARGS(const u8 *failInstr, u16 move); + + u16 type, move = cmd->move; u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); if (move == ACC_CURR_MOVE) @@ -1845,18 +1882,18 @@ static void Cmd_accuracycheck(void) if (move == NO_ACC_CALC_CHECK_LOCK_ON) { if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; else if (!JumpIfMoveAffectedByProtect(0)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT || (gSpecialStatuses[gBattlerAttacker].multiHitOn && (gBattleMoves[move].effect != EFFECT_TRIPLE_KICK || GetBattlerAbility(gBattlerAttacker) == ABILITY_SKILL_LINK))) { // No acc checks for second hit of Parental Bond or multi hit moves, except Triple Kick/Triple Axel - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -1889,6 +1926,8 @@ static void Cmd_accuracycheck(void) static void Cmd_attackstring(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -1897,12 +1936,14 @@ static void Cmd_attackstring(void) PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 0; } static void Cmd_ppreduce(void) { + CMD_ARGS(); + s32 i, ppToDeduct = 1; if (gBattleControllerExecFlags) @@ -1962,7 +2003,7 @@ static void Cmd_ppreduce(void) } gHitMarker &= ~HITMARKER_NO_PPDEDUCT; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // The chance is 1/N for each stage. @@ -2031,6 +2072,8 @@ s8 GetInverseCritChance(u8 battlerAtk, u8 battlerDef, u32 move) static void Cmd_critcalc(void) { + CMD_ARGS(); + u16 partySlot; s32 critChance = CalcCritChanceStage(gBattlerAttacker, gBattlerTarget, gCurrentMove, TRUE); gPotentialItemEffectBattler = gBattlerAttacker; @@ -2052,30 +2095,36 @@ static void Cmd_critcalc(void) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_LEFT)) gPartyCriticalHits[partySlot]++; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_damagecalc(void) { + CMD_ARGS(); + u8 moveType; GET_MOVE_TYPE(gCurrentMove, moveType); gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_typecalc(void) { + CMD_ARGS(); + u8 moveType; GET_MOVE_TYPE(gCurrentMove, moveType); CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, TRUE); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_adjustdamage(void) { + CMD_ARGS(); + u8 holdEffect, param; u32 moveType; u32 friendshipScore = GetBattlerFriendshipScore(gBattlerTarget); @@ -2158,7 +2207,7 @@ static void Cmd_adjustdamage(void) #endif END: - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMoveDamage >= 1) gSpecialStatuses[gBattlerAttacker].damagedMons |= gBitTable[gBattlerTarget]; @@ -2201,6 +2250,8 @@ END: static void Cmd_multihitresultmessage(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -2226,7 +2277,7 @@ static void Cmd_multihitresultmessage(void) return; } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; // Print berry reducing message after result message. if (gSpecialStatuses[gBattlerTarget].berryReduced @@ -2240,6 +2291,8 @@ static void Cmd_multihitresultmessage(void) static void Cmd_attackanimation(void) { + CMD_ARGS(); + u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); if (gBattleControllerExecFlags) @@ -2251,7 +2304,7 @@ static void Cmd_attackanimation(void) // 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)))) { - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; gBattleScripting.animTurn++; gBattleScripting.animTargetsHit++; @@ -2260,7 +2313,7 @@ static void Cmd_attackanimation(void) { if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT) // No animation on second hit { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; return; } @@ -2269,7 +2322,7 @@ static void Cmd_attackanimation(void) || moveTarget & MOVE_TARGET_DEPENDS) && gBattleScripting.animTargetsHit) { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; return; } if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) @@ -2294,11 +2347,11 @@ static void Cmd_attackanimation(void) gBattleScripting.animTurn++; gBattleScripting.animTargetsHit++; MarkBattlerForControllerExec(gBattlerAttacker); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; } } @@ -2306,18 +2359,22 @@ static void Cmd_attackanimation(void) static void Cmd_waitanimation(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags == 0) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_healthbarupdate(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { @@ -2335,11 +2392,13 @@ static void Cmd_healthbarupdate(void) } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_datahpupdate(void) { + CMD_ARGS(u8 battler); + u32 moveType; if (gBattleControllerExecFlags) @@ -2354,7 +2413,7 @@ static void Cmd_datahpupdate(void) if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) || (gHitMarker & HITMARKER_PASSIVE_DAMAGE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove) && gDisableStructs[gActiveBattler].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { if (gDisableStructs[gActiveBattler].substituteHP >= gBattleMoveDamage) @@ -2374,7 +2433,7 @@ static void Cmd_datahpupdate(void) // check substitute fading if (gDisableStructs[gActiveBattler].substituteHP == 0) { - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SubstituteFade; return; @@ -2383,7 +2442,7 @@ static void Cmd_datahpupdate(void) else if (DoesDisguiseBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) { gBattleMons[gActiveBattler].species = SPECIES_MIMIKYU_BUSTED; - BattleScriptPush(gBattlescriptCurrInstr + 2); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TargetFormChange; } else @@ -2405,7 +2464,7 @@ static void Cmd_datahpupdate(void) else { gTakenDmg[gActiveBattler] += gBattleMoveDamage; - if (gBattlescriptCurrInstr[1] == BS_TARGET) + if (cmd->battler == BS_TARGET) gTakenDmgByBattler[gActiveBattler] = gBattlerAttacker; else gTakenDmgByBattler[gActiveBattler] = gBattlerTarget; @@ -2429,7 +2488,7 @@ static void Cmd_datahpupdate(void) { gProtectStructs[gActiveBattler].physicalDmg = gHpDealt; gSpecialStatuses[gActiveBattler].physicalDmg = gHpDealt; - if (gBattlescriptCurrInstr[1] == BS_TARGET) + if (cmd->battler == BS_TARGET) { gProtectStructs[gActiveBattler].physicalBattlerId = gBattlerAttacker; gSpecialStatuses[gActiveBattler].physicalBattlerId = gBattlerAttacker; @@ -2444,7 +2503,7 @@ static void Cmd_datahpupdate(void) { gProtectStructs[gActiveBattler].specialDmg = gHpDealt; gSpecialStatuses[gActiveBattler].specialDmg = gHpDealt; - if (gBattlescriptCurrInstr[1] == BS_TARGET) + if (cmd->battler == BS_TARGET) { gProtectStructs[gActiveBattler].specialBattlerId = gBattlerAttacker; gSpecialStatuses[gActiveBattler].specialBattlerId = gBattlerAttacker; @@ -2463,15 +2522,17 @@ static void Cmd_datahpupdate(void) } else { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gSpecialStatuses[gActiveBattler].dmg == 0) gSpecialStatuses[gActiveBattler].dmg = 0xFFFF; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_critmessage(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags == 0) { if (gIsCriticalHit == TRUE && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) @@ -2479,12 +2540,14 @@ static void Cmd_critmessage(void) PrepareStringBattle(STRINGID_CRITICALHIT, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_effectivenesssound(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -2528,11 +2591,13 @@ static void Cmd_effectivenesssound(void) break; } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_resultmessage(void) { + CMD_ARGS(); + u32 stringId = 0; if (gBattleControllerExecFlags) @@ -2639,7 +2704,7 @@ static void Cmd_resultmessage(void) if (stringId) PrepareStringBattle(stringId, gBattlerAttacker); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; // Print berry reducing message after result message. if (gSpecialStatuses[gBattlerTarget].berryReduced @@ -2653,42 +2718,48 @@ static void Cmd_resultmessage(void) static void Cmd_printstring(void) { + CMD_ARGS(u16 id); + if (gBattleControllerExecFlags == 0) { - u16 var = T2_READ_16(gBattlescriptCurrInstr + 1); + u16 id = cmd->id; - gBattlescriptCurrInstr += 3; - PrepareStringBattle(var, gBattlerAttacker); + gBattlescriptCurrInstr = cmd->nextInstr; + PrepareStringBattle(id, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } } static void Cmd_printselectionstring(void) { + CMD_ARGS(u16 id); + gActiveBattler = gBattlerAttacker; - BtlController_EmitPrintSelectionString(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPrintSelectionString(BUFFER_A, cmd->id); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 1; } static void Cmd_waitmessage(void) { + CMD_ARGS(u16 time); + if (gBattleControllerExecFlags == 0) { if (!gBattleCommunication[MSG_DISPLAY]) { - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1); + u16 toWait = cmd->time; if (++gPauseCounterBattle >= toWait) { gPauseCounterBattle = 0; - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 0; } } @@ -2697,12 +2768,14 @@ static void Cmd_waitmessage(void) static void Cmd_printfromtable(void) { + CMD_ARGS(const u16 *ptr); + if (gBattleControllerExecFlags == 0) { - const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u16 *ptr = cmd->ptr; ptr += gBattleCommunication[MULTISTRING_CHOOSER]; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; PrepareStringBattle(*ptr, gBattlerAttacker); gBattleCommunication[MSG_DISPLAY] = 1; } @@ -2710,16 +2783,18 @@ static void Cmd_printfromtable(void) static void Cmd_printselectionstringfromtable(void) { + CMD_ARGS(const u16 *ptr); + if (gBattleControllerExecFlags == 0) { - const u16 *ptr = (const u16 *) T1_READ_PTR(gBattlescriptCurrInstr + 1); + const u16 *ptr = cmd->ptr; ptr += gBattleCommunication[MULTISTRING_CHOOSER]; gActiveBattler = gBattlerAttacker; BtlController_EmitPrintSelectionString(BUFFER_A, *ptr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleCommunication[MSG_DISPLAY] = 1; } } @@ -3674,6 +3749,8 @@ void SetMoveEffect(bool32 primary, u32 certain) static void Cmd_seteffectwithchance(void) { + CMD_ARGS(); + u32 percentChance; if (GetBattlerAbility(gBattlerAttacker) == ABILITY_SERENE_GRACE) @@ -3698,7 +3775,7 @@ static void Cmd_seteffectwithchance(void) } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } gBattleScripting.moveEffect = 0; @@ -3707,17 +3784,23 @@ static void Cmd_seteffectwithchance(void) static void Cmd_seteffectprimary(void) { + CMD_ARGS(); + SetMoveEffect(TRUE, 0); } static void Cmd_seteffectsecondary(void) { + CMD_ARGS(); + SetMoveEffect(FALSE, 0); } static void Cmd_clearstatusfromeffect(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gBattleScripting.moveEffect <= PRIMARY_STATUS_MOVE_EFFECT) gBattleMons[gActiveBattler].status1 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); @@ -3725,52 +3808,53 @@ static void Cmd_clearstatusfromeffect(void) gBattleMons[gActiveBattler].status2 &= (~sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]); gBattleScripting.moveEffect = 0; - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.multihitMoveEffect = 0; } static void Cmd_tryfaintmon(void) { - const u8 *BS_ptr; + CMD_ARGS(u8 battler, bool8 isSpikes, const u8 *instr); + const u8 *instr; - if (gBattlescriptCurrInstr[2] != 0) + if (cmd->isSpikes != 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) { - BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + instr = cmd->instr; BattleScriptPop(); - gBattlescriptCurrInstr = BS_ptr; + gBattlescriptCurrInstr = instr; gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED); } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { u8 battlerId; - if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + if (cmd->battler == BS_ATTACKER) { gActiveBattler = gBattlerAttacker; battlerId = gBattlerTarget; - BS_ptr = BattleScript_FaintAttacker; + instr = BattleScript_FaintAttacker; } else { gActiveBattler = gBattlerTarget; battlerId = gBattlerAttacker; - BS_ptr = BattleScript_FaintTarget; + instr = BattleScript_FaintTarget; } if (!(gAbsentBattlerFlags & gBitTable[gActiveBattler]) && gBattleMons[gActiveBattler].hp == 0) { gHitMarker |= HITMARKER_FAINTED(gActiveBattler); - BattleScriptPush(gBattlescriptCurrInstr + 7); - gBattlescriptCurrInstr = BS_ptr; + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = instr; if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { gHitMarker |= HITMARKER_PLAYER_FAINTED; @@ -3813,27 +3897,31 @@ static void Cmd_tryfaintmon(void) } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_dofaintanimation(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitFaintAnimation(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_cleareffectsonfaint(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || gBattleMons[gActiveBattler].hp == 0) { @@ -3843,44 +3931,50 @@ static void Cmd_cleareffectsonfaint(void) } FaintClearSetData(); // Effects like attractions, trapping, etc. - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifstatus(void) { - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u32 flags = cmd->flags; + const u8 *jumpInstr = cmd->jumpInstr; if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp != 0) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifstatus2(void) { - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2); - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u32 flags = cmd->flags; + const u8 *jumpInstr = cmd->jumpInstr; if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp != 0) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifability(void) { + CMD_ARGS(u8 battler, u16 ability, const u8 *jumpInstr); + u32 battlerId; bool32 hasAbility = FALSE; - u32 ability = T2_READ_16(gBattlescriptCurrInstr + 2); + u32 ability = cmd->ability; - switch (gBattlescriptCurrInstr[1]) + switch (cmd->battler) { default: - battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + battlerId = GetBattlerForBattleScript(cmd->battler); if (GetBattlerAbility(battlerId) == ability) hasAbility = TRUE; break; @@ -3905,103 +3999,113 @@ static void Cmd_jumpifability(void) if (hasAbility) { gLastUsedAbility = ability; - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->jumpInstr; RecordAbilityBattle(battlerId, gLastUsedAbility); gBattlerAbility = battlerId; } else { - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifsideaffecting(void) { + CMD_ARGS(u8 battler, u32 flags, const u8 *jumpInstr); + u8 side; u32 flags; - const u8 *jumpPtr; + const u8 *jumpInstr; - if (gBattlescriptCurrInstr[1] == BS_ATTACKER) + if (cmd->battler == BS_ATTACKER) side = GET_BATTLER_SIDE(gBattlerAttacker); else side = GET_BATTLER_SIDE(gBattlerTarget); - flags = T2_READ_32(gBattlescriptCurrInstr + 2); - jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + flags = cmd->flags; + jumpInstr = cmd->jumpInstr; if (gSideStatuses[side] & flags) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifstat(void) { - bool32 ret = 0; - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u8 statId = gBattlescriptCurrInstr[3]; - u8 cmpTo = gBattlescriptCurrInstr[4]; - u8 cmpKind = gBattlescriptCurrInstr[2]; + CMD_ARGS(u8 battler, u8 comparison, u8 stat, u8 value, const u8 *jumpInstr); - ret = CompareStat(battlerId, statId, cmpTo, cmpKind); + bool32 ret = 0; + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u8 stat = cmd->stat; + u8 value = cmd->value; + u8 comparison = cmd->comparison; + + ret = CompareStat(battlerId, stat, value, comparison); if (ret) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifstatus3condition(void) { - u32 status; - const u8 *jumpPtr; + CMD_ARGS(u8 battler, u32 flags, bool8 jumpIfTrue, const u8 *jumpInstr); - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - status = T2_READ_32(gBattlescriptCurrInstr + 2); - jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); + u32 flags; + const u8 *jumpInstr; - if (gBattlescriptCurrInstr[6]) + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + flags = cmd->flags; + jumpInstr = cmd->jumpInstr; + + if (cmd->jumpIfTrue) { - if ((gStatuses3[gActiveBattler] & status) != 0) - gBattlescriptCurrInstr += 11; + if ((gStatuses3[gActiveBattler] & flags) != 0) + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; } else { - if ((gStatuses3[gActiveBattler] & status) != 0) - gBattlescriptCurrInstr = jumpPtr; + if ((gStatuses3[gActiveBattler] & flags) != 0) + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpbasedontype(void) { - u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - u8 type = gBattlescriptCurrInstr[2]; - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4); + CMD_ARGS(u8 battler, u8 type, u8 jumpIfType, const u8 *jumpInstr); + + u8 battlerId = GetBattlerForBattleScript(cmd->battler); + u8 type = cmd->type; + const u8 *jumpInstr = cmd->jumpInstr; // jumpiftype - if (gBattlescriptCurrInstr[3]) + if (cmd->jumpIfType) { if (IS_BATTLER_OF_TYPE(battlerId, type)) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } // jumpifnottype else { if (!IS_BATTLER_OF_TYPE(battlerId, type)) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_getexp(void) { + CMD_ARGS(u8 battler); + u16 item; s32 i; // also used as stringId u8 holdEffect; @@ -4009,7 +4113,7 @@ static void Cmd_getexp(void) s32 viaExpShare = 0; u32 *exp = &gBattleStruct->expValue; - gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gBattlerFainted = GetBattlerForBattleScript(cmd->battler); sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1]; switch (gBattleScripting.getexpState) @@ -4307,7 +4411,7 @@ static void Cmd_getexp(void) // not sure why gf clears the item and ability here gBattleMons[gBattlerFainted].item = ITEM_NONE; gBattleMons[gBattlerFainted].ability = ABILITY_NONE; - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -4393,6 +4497,8 @@ bool32 NoAliveMonsForEitherParty(void) // sets gBattleOutcome accordingly, if necessary. static void Cmd_checkteamslost(void) { + CMD_ARGS(const u8 *jumpInstr); + if (gBattleControllerExecFlags) return; @@ -4437,21 +4543,21 @@ static void Cmd_checkteamslost(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (emptyOpponentSpots + emptyPlayerSpots > 1) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { if (emptyOpponentSpots != 0 && emptyPlayerSpots != 0) - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -4467,315 +4573,361 @@ static void MoveValuesCleanUp(void) static void Cmd_movevaluescleanup(void) { + CMD_ARGS(); + MoveValuesCleanUp(); - gBattlescriptCurrInstr += 1; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setmultihit(void) { - gMultiHitCounter = gBattlescriptCurrInstr[1]; - gBattlescriptCurrInstr += 2; + CMD_ARGS(u8 value); + + gMultiHitCounter = cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_decrementmultihit(void) { + CMD_ARGS(const u8 *loopInstr); + if (--gMultiHitCounter == 0) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->loopInstr; } static void Cmd_goto(void) { - gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *instr); + + gBattlescriptCurrInstr = cmd->instr; } static void Cmd_jumpifbyte(void) { - u8 caseID = gBattlescriptCurrInstr[1]; - const u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2); - u8 value = gBattlescriptCurrInstr[6]; - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7); + CMD_ARGS(u8 comparison, const u8 *bytePtr, u8 value, const u8 *jumpInstr); - gBattlescriptCurrInstr += 11; + u8 comparison = cmd->comparison; + const u8 *bytePtr = cmd->bytePtr; + u8 value = cmd->value; + const u8 *jumpInstr = cmd->jumpInstr; - switch (caseID) + gBattlescriptCurrInstr = cmd->nextInstr; + + switch (comparison) { case CMP_EQUAL: - if (*memByte == value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr == value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NOT_EQUAL: - if (*memByte != value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr != value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_GREATER_THAN: - if (*memByte > value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr > value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_LESS_THAN: - if (*memByte < value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr < value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_COMMON_BITS: - if (*memByte & value) - gBattlescriptCurrInstr = jumpPtr; + if (*bytePtr & value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NO_COMMON_BITS: - if (!(*memByte & value)) - gBattlescriptCurrInstr = jumpPtr; + if (!(*bytePtr & value)) + gBattlescriptCurrInstr = jumpInstr; break; } } static void Cmd_jumpifhalfword(void) { - u8 caseID = gBattlescriptCurrInstr[1]; - const u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2); - u16 value = T2_READ_16(gBattlescriptCurrInstr + 6); - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8); + CMD_ARGS(u8 comparison, const u16 *halfwordPtr, u16 value, const u8 *jumpInstr); - gBattlescriptCurrInstr += 12; + u8 comparison = cmd->comparison; + const u16 *halfwordPtr = cmd->halfwordPtr; + u16 value = cmd->value; + const u8 *jumpInstr = cmd->jumpInstr; - switch (caseID) + gBattlescriptCurrInstr = cmd->nextInstr; + + switch (comparison) { case CMP_EQUAL: - if (*memHword == value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr == value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NOT_EQUAL: - if (*memHword != value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr != value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_GREATER_THAN: - if (*memHword > value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr > value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_LESS_THAN: - if (*memHword < value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr < value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_COMMON_BITS: - if (*memHword & value) - gBattlescriptCurrInstr = jumpPtr; + if (*halfwordPtr & value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NO_COMMON_BITS: - if (!(*memHword & value)) - gBattlescriptCurrInstr = jumpPtr; + if (!(*halfwordPtr & value)) + gBattlescriptCurrInstr = jumpInstr; break; } } static void Cmd_jumpifword(void) { - u8 caseID = gBattlescriptCurrInstr[1]; - const u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2); - u32 value = T1_READ_32(gBattlescriptCurrInstr + 6); - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + CMD_ARGS(u8 comparison, const u32 *wordPtr, u32 value, const u8 *jumpInstr); - gBattlescriptCurrInstr += 14; + u8 comparison = cmd->comparison; + const u32 *wordPtr = cmd->wordPtr; + u32 value = cmd->value; + const u8 *jumpInstr = cmd->jumpInstr; - switch (caseID) + gBattlescriptCurrInstr = cmd->nextInstr; + + switch (comparison) { case CMP_EQUAL: - if (*memWord == value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr == value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NOT_EQUAL: - if (*memWord != value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr != value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_GREATER_THAN: - if (*memWord > value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr > value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_LESS_THAN: - if (*memWord < value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr < value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_COMMON_BITS: - if (*memWord & value) - gBattlescriptCurrInstr = jumpPtr; + if (*wordPtr & value) + gBattlescriptCurrInstr = jumpInstr; break; case CMP_NO_COMMON_BITS: - if (!(*memWord & value)) - gBattlescriptCurrInstr = jumpPtr; + if (!(*wordPtr & value)) + gBattlescriptCurrInstr = jumpInstr; break; } } static void Cmd_jumpifarrayequal(void) { - const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); - u32 size = gBattlescriptCurrInstr[9]; - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + CMD_ARGS(const u8 *array1, const u8 *array2, u8 size, const u8 *jumpInstr); + + const u8 *array1 = cmd->array1; + const u8 *array2 = cmd->array2; + u32 size = cmd->size; + const u8 *jumpInstr = cmd->jumpInstr; u8 i; for (i = 0; i < size; i++) { - if (*mem1 != *mem2) + if (*array1 != *array2) { - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; break; } - mem1++, mem2++; + array1++, array2++; } if (i == size) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; } static void Cmd_jumpifarraynotequal(void) { + CMD_ARGS(const u8 *array1, const u8 *array2, u8 size, const u8 *jumpInstr); + u8 equalBytes = 0; - const u8 *mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5); - u32 size = gBattlescriptCurrInstr[9]; - const u8 *jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10); + const u8 *array1 = cmd->array1; + const u8 *array2 = cmd->array2; + u32 size = cmd->size; + const u8 *jumpInstr = cmd->jumpInstr; u8 i; for (i = 0; i < size; i++) { - if (*mem1 == *mem2) + if (*array1 == *array2) equalBytes++; - mem1++, mem2++; + array1++, array2++; } if (equalBytes != size) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte = gBattlescriptCurrInstr[5]; + CMD_ARGS(u8 *bytePtr, u8 value); - gBattlescriptCurrInstr += 6; + u8 *bytePtr = cmd->bytePtr; + *bytePtr = cmd->value; + + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_addbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte += gBattlescriptCurrInstr[5]; - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr += cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_subbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte -= gBattlescriptCurrInstr[5]; - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr -= cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_copyarray(void) { - u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); - s32 size = gBattlescriptCurrInstr[9]; + CMD_ARGS(u8 *dest, const u8 *src, u8 size); + + u8 *dest = cmd->dest; + const u8 *src = cmd->src; + s32 size = cmd->size; s32 i; for (i = 0; i < size; i++) dest[i] = src[i]; - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_copyarraywithindex(void) { - u8 *dest = T2_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *src = T2_READ_PTR(gBattlescriptCurrInstr + 5); - const u8 *index = T2_READ_PTR(gBattlescriptCurrInstr + 9); - s32 size = gBattlescriptCurrInstr[13]; + CMD_ARGS(u8 *dest, const u8 *src, const u8 *indexPtr, u8 size); + + u8 *dest = cmd->dest; + const u8 *src = cmd->src; + const u8 *indexPtr = cmd->indexPtr; + s32 size = cmd->size; s32 i; for (i = 0; i < size; i++) - dest[i] = src[i + *index]; + dest[i] = src[i + *indexPtr]; - gBattlescriptCurrInstr += 14; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_orbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte |= gBattlescriptCurrInstr[5]; - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr |= cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_orhalfword(void) { - u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); + CMD_ARGS(u16 *halfwordPtr, u16 value); - *memHword |= val; - gBattlescriptCurrInstr += 7; + u16 *halfwordPtr = cmd->halfwordPtr; + u16 value = cmd->value; + + *halfwordPtr |= value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_orword(void) { - u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); + CMD_ARGS(u32 *wordPtr, u32 value); - *memWord |= val; - gBattlescriptCurrInstr += 9; + u32 *wordPtr = cmd->wordPtr; + u32 value = cmd->value; + + *wordPtr |= value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_bicbyte(void) { - u8 *memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1); - *memByte &= ~(gBattlescriptCurrInstr[5]); - gBattlescriptCurrInstr += 6; + CMD_ARGS(u8 *bytePtr, u8 value); + + u8 *bytePtr = cmd->bytePtr; + *bytePtr &= ~cmd->value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_bichalfword(void) { - u16 *memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u16 val = T2_READ_16(gBattlescriptCurrInstr + 5); + CMD_ARGS(u16 *halfwordPtr, u16 value); - *memHword &= ~val; - gBattlescriptCurrInstr += 7; + u16 *halfwordPtr = cmd->halfwordPtr; + u16 value = cmd->value; + + *halfwordPtr &= ~value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_bicword(void) { - u32 *memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1); - u32 val = T2_READ_32(gBattlescriptCurrInstr + 5); + CMD_ARGS(u32 *wordPtr, u32 value); - *memWord &= ~val; - gBattlescriptCurrInstr += 9; + u32 *wordPtr = cmd->wordPtr; + u32 value = cmd->value; + + *wordPtr &= ~value; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_pause(void) { + CMD_ARGS(u16 frames); + if (gBattleControllerExecFlags == 0) { - u16 value = T2_READ_16(gBattlescriptCurrInstr + 1); + u16 value = cmd->frames; if (++gPauseCounterBattle >= value) { gPauseCounterBattle = 0; - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_waitstate(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags == 0) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_healthbar_update(void) { - if (gBattlescriptCurrInstr[1] == BS_TARGET) + CMD_ARGS(u8 battler); + + if (cmd->battler == BS_TARGET) gActiveBattler = gBattlerTarget; else gActiveBattler = gBattlerAttacker; BtlController_EmitHealthBarUpdate(BUFFER_A, gBattleMoveDamage); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_return(void) @@ -4785,6 +4937,8 @@ static void Cmd_return(void) static void Cmd_end(void) { + CMD_ARGS(); + if (gBattleTypeFlags & BATTLE_TYPE_ARENA) BattleArena_AddSkillPoints(gBattlerAttacker); @@ -4795,6 +4949,8 @@ static void Cmd_end(void) static void Cmd_end2(void) { + CMD_ARGS(); + gActiveBattler = 0; gCurrentActionFuncId = B_ACTION_TRY_FINISH; } @@ -4802,6 +4958,8 @@ static void Cmd_end2(void) // Pops the main function stack static void Cmd_end3(void) { + CMD_ARGS(); + BattleScriptPop(); if (gBattleResources->battleCallbackStack->size != 0) gBattleResources->battleCallbackStack->size--; @@ -4810,12 +4968,16 @@ static void Cmd_end3(void) static void Cmd_call(void) { - BattleScriptPush(gBattlescriptCurrInstr + 5); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *instr); + + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = cmd->instr; } static void Cmd_setroost(void) { + CMD_ARGS(); + gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST; // Pure flying type. @@ -4846,35 +5008,41 @@ static void Cmd_setroost(void) gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifabilitypresent(void) { - if (IsAbilityOnField(T1_READ_16(gBattlescriptCurrInstr + 1))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + CMD_ARGS(u16 ability, const u8 *jumpInstr); + + if (IsAbilityOnField(cmd->ability)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_endselectionscript(void) { + CMD_ARGS(); + *(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE; } static void Cmd_playanimation(void) { - const u16 *argumentPtr; - u8 animId = gBattlescriptCurrInstr[2]; + CMD_ARGS(u8 battler, u8 animId, const u16 *argPtr); - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3); + const u16 *argPtr; + u8 animId = cmd->animId; + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + argPtr = cmd->argPtr; #if B_TERRAIN_BG_CHANGE == FALSE if (animId == B_ANIM_RESTORE_BG) { // workaround for .if not working - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; } #endif @@ -4887,13 +5055,13 @@ static void Cmd_playanimation(void) || animId == B_ANIM_SUBSTITUTE_FADE || animId == B_ANIM_PRIMAL_REVERSION) { - BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gHitMarker & HITMARKER_NO_ANIMATIONS && animId != B_ANIM_RESTORE_BG) { - BattleScriptPush(gBattlescriptCurrInstr + 7); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; } else if (animId == B_ANIM_RAIN_CONTINUES @@ -4901,71 +5069,75 @@ static void Cmd_playanimation(void) || animId == B_ANIM_SANDSTORM_CONTINUES || animId == B_ANIM_HAIL_CONTINUES) { - BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - BtlController_EmitBattleAnimation(BUFFER_A, animId, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, animId, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } // Same as playanimation, except it takes a pointer to some animation id, instead of taking the value directly static void Cmd_playanimation_var(void) { - const u16 *argumentPtr; - const u8 *animationIdPtr; + CMD_ARGS(u8 battler, const u8 *animIdPtr, const u16 *argPtr); - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2); - argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6); + const u16 *argPtr; + const u8 *animIdPtr; - if (*animationIdPtr == B_ANIM_STATS_CHANGE - || *animationIdPtr == B_ANIM_SNATCH_MOVE - || *animationIdPtr == B_ANIM_MEGA_EVOLUTION - || *animationIdPtr == B_ANIM_ILLUSION_OFF - || *animationIdPtr == B_ANIM_FORM_CHANGE - || *animationIdPtr == B_ANIM_SUBSTITUTE_FADE - || *animationIdPtr == B_ANIM_PRIMAL_REVERSION) + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + animIdPtr = cmd->animIdPtr; + argPtr = cmd->argPtr; + + if (*animIdPtr == B_ANIM_STATS_CHANGE + || *animIdPtr == B_ANIM_SNATCH_MOVE + || *animIdPtr == B_ANIM_MEGA_EVOLUTION + || *animIdPtr == B_ANIM_ILLUSION_OFF + || *animIdPtr == B_ANIM_FORM_CHANGE + || *animIdPtr == B_ANIM_SUBSTITUTE_FADE + || *animIdPtr == B_ANIM_PRIMAL_REVERSION) { - BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } - else if (*animationIdPtr == B_ANIM_RAIN_CONTINUES - || *animationIdPtr == B_ANIM_SUN_CONTINUES - || *animationIdPtr == B_ANIM_SANDSTORM_CONTINUES - || *animationIdPtr == B_ANIM_HAIL_CONTINUES) + else if (*animIdPtr == B_ANIM_RAIN_CONTINUES + || *animIdPtr == B_ANIM_SUN_CONTINUES + || *animIdPtr == B_ANIM_SANDSTORM_CONTINUES + || *animIdPtr == B_ANIM_HAIL_CONTINUES) { - BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) { - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - BtlController_EmitBattleAnimation(BUFFER_A, *animationIdPtr, *argumentPtr); + BtlController_EmitBattleAnimation(BUFFER_A, *animIdPtr, *argPtr); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setgraphicalstatchangevalues(void) { + CMD_ARGS(); + u8 value = GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger); switch (value) @@ -4997,22 +5169,24 @@ static void Cmd_setgraphicalstatchangevalues(void) } gBattleScripting.animArg1 = GET_STAT_BUFF_ID(gBattleScripting.statChanger) + value - 1; gBattleScripting.animArg2 = 0; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_playstatchangeanimation(void) { + CMD_ARGS(u8 battler, u8 stats, u8 flags); + u32 ability; u32 currStat = 0; u32 statAnimId = 0; u32 changeableStatsCount = 0; - u32 statsToCheck = 0; + u32 stats = 0; u32 startingStatAnimId = 0; - u32 flags = gBattlescriptCurrInstr[3]; + u32 flags = cmd->flags; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); ability = GetBattlerAbility(gActiveBattler); - statsToCheck = gBattlescriptCurrInstr[2]; + stats = cmd->stats; // Handle Contrary and Simple if (ability == ABILITY_CONTRARY) @@ -5027,9 +5201,9 @@ static void Cmd_playstatchangeanimation(void) else startingStatAnimId = STAT_ANIM_MINUS1 - 1; - while (statsToCheck != 0) + while (stats != 0) { - if (statsToCheck & 1) + if (stats & 1) { if (flags & STAT_CHANGE_CANT_PREVENT) { @@ -5055,7 +5229,7 @@ static void Cmd_playstatchangeanimation(void) } } } - statsToCheck >>= 1, currStat++; + stats >>= 1, currStat++; } if (changeableStatsCount > 1) // more than one stat, so the color is gray @@ -5073,14 +5247,14 @@ static void Cmd_playstatchangeanimation(void) else startingStatAnimId = STAT_ANIM_PLUS1 - 1; - while (statsToCheck != 0) + while (stats != 0) { - if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE) + if (stats & 1 && gBattleMons[gActiveBattler].statStages[currStat] < MAX_STAT_STAGE) { statAnimId = startingStatAnimId + currStat; changeableStatsCount++; } - statsToCheck >>= 1, currStat++; + stats >>= 1, currStat++; } if (changeableStatsCount > 1) // more than one stat, so the color is gray @@ -5094,7 +5268,7 @@ static void Cmd_playstatchangeanimation(void) if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2) { - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (changeableStatsCount != 0 && !gBattleScripting.statAnimPlayed) { @@ -5102,11 +5276,11 @@ static void Cmd_playstatchangeanimation(void) MarkBattlerForControllerExec(gActiveBattler); if (flags & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1) gBattleScripting.statAnimPlayed = TRUE; - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -5165,6 +5339,8 @@ static u32 GetNextTarget(u32 moveTarget) static void Cmd_moveend(void) { + CMD_ARGS(u8 endMode, u8 endState); + s32 i; bool32 effect = FALSE; u32 moveType = 0; @@ -5178,8 +5354,8 @@ static void Cmd_moveend(void) else originallyUsedMove = gChosenMove; - endMode = gBattlescriptCurrInstr[1]; - endState = gBattlescriptCurrInstr[2]; + endMode = cmd->endMode; + endState = cmd->endState; holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); choicedMoveAtk = &gBattleStruct->choicedMove[gBattlerAttacker]; @@ -6035,51 +6211,59 @@ static void Cmd_moveend(void) } while (gBattleScripting.moveendState != MOVEEND_COUNT && effect == FALSE); if (gBattleScripting.moveendState == MOVEEND_COUNT && effect == FALSE) - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_sethealblock(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & STATUS3_HEAL_BLOCK) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses3[gBattlerTarget] |= STATUS3_HEAL_BLOCK; gDisableStructs[gBattlerTarget].healBlockTimer = 5; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_returnatktoball(void) { + CMD_ARGS(); + gActiveBattler = gBattlerAttacker; if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler))) { BtlController_EmitReturnMonToBall(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_getswitchedmondata(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); gBattlerPartyIndexes[gActiveBattler] = *(gBattleStruct->monToSwitchIntoId + gActiveBattler); BtlController_EmitGetMonData(BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]]); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_switchindataupdate(void) { + CMD_ARGS(u8 battler); + struct BattlePokemon oldData; s32 i; u8 *monData; @@ -6087,7 +6271,7 @@ static void Cmd_switchindataupdate(void) if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); oldData = gBattleMons[gActiveBattler]; monData = (u8 *)(&gBattleMons[gActiveBattler]); @@ -6129,15 +6313,17 @@ static void Cmd_switchindataupdate(void) PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_switchinanim(void) { + CMD_ARGS(u8 battler, bool8 dontClearSubstitute); + if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && !(gBattleTypeFlags & (BATTLE_TYPE_LINK @@ -6149,10 +6335,10 @@ static void Cmd_switchinanim(void) gAbsentBattlerFlags &= ~(gBitTable[gActiveBattler]); - BtlController_EmitSwitchInAnim(BUFFER_A, gBattlerPartyIndexes[gActiveBattler], gBattlescriptCurrInstr[2]); + BtlController_EmitSwitchInAnim(BUFFER_A, gBattlerPartyIndexes[gActiveBattler], cmd->dontClearSubstitute); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; if (gBattleTypeFlags & BATTLE_TYPE_ARENA) BattleArena_InitPoints(); @@ -6309,19 +6495,20 @@ bool32 CanBattlerSwitch(u32 battlerId) static void Cmd_jumpifcantswitch(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~SWITCH_IGNORE_ESCAPE_PREVENTION); + CMD_ARGS(u8 battler:7, u8 ignoreEscapePrevention:1, const u8 *jumpInstr); - if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION) - && !CanBattlerEscape(gActiveBattler)) + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + + if (!cmd->ignoreEscapePrevention && !CanBattlerEscape(gActiveBattler)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { if (CanBattlerSwitch(gActiveBattler)) - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->jumpInstr; } } @@ -6340,16 +6527,18 @@ static void ChooseMonToSendOut(u8 slotId) static void Cmd_openpartyscreen(void) { + CMD_ARGS(u8 battler:7, u8 partyScreenOptional:1, const u8 *failInstr); + u32 flags; u8 hitmarkerFaintBits; u8 battlerId; - const u8 *jumpPtr; + const u8 *failInstr; battlerId = 0; flags = 0; - jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + failInstr = cmd->failInstr; - if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1) + if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_1) { if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { @@ -6502,9 +6691,9 @@ static void Cmd_openpartyscreen(void) } } } - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } - else if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_2) + else if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_2) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { @@ -6543,18 +6732,18 @@ static void Cmd_openpartyscreen(void) gSpecialStatuses[gActiveBattler].faintedHasReplacement = TRUE; } } - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } else { // Not multi or double battle - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { // Multi battle - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } hitmarkerFaintBits = gHitMarker >> 28; @@ -6565,26 +6754,26 @@ static void Cmd_openpartyscreen(void) gBattlerFainted++; if (gBattlerFainted == gBattlersCount) - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } else { - if (gBattlescriptCurrInstr[1] & PARTY_SCREEN_OPTIONAL) + if (cmd->partyScreenOptional) hitmarkerFaintBits = PARTY_ACTION_CHOOSE_MON; // Used here as the caseId for the EmitChoose function. else hitmarkerFaintBits = PARTY_ACTION_SEND_OUT; - battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~PARTY_SCREEN_OPTIONAL); + battlerId = GetBattlerForBattleScript(cmd->battler); if (gSpecialStatuses[battlerId].faintedHasReplacement) { - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (HasNoMonsToSwitch(battlerId, PARTY_SIZE, PARTY_SIZE)) { gActiveBattler = battlerId; gAbsentBattlerFlags |= gBitTable[gActiveBattler]; gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } else { @@ -6596,7 +6785,7 @@ static void Cmd_openpartyscreen(void) BtlController_EmitChoosePokemon(BUFFER_A, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(gActiveBattler)), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 255) gBattleResults.playerSwitchesCounter++; @@ -6627,13 +6816,15 @@ static void Cmd_openpartyscreen(void) static void Cmd_switchhandleorder(void) { + CMD_ARGS(u8 battler, u8 state); + s32 i; if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); - switch (gBattlescriptCurrInstr[2]) + switch (cmd->state) { case 0: for (i = 0; i < gBattlersCount; i++) @@ -6688,7 +6879,7 @@ static void Cmd_switchhandleorder(void) break; } - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) @@ -6709,9 +6900,11 @@ static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) static void Cmd_switchineffects(void) { + CMD_ARGS(u8 battler); + s32 i; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); UpdateSentPokesToOpponentValue(gActiveBattler); gHitMarker &= ~HITMARKER_FAINTED(gActiveBattler); @@ -6838,7 +7031,7 @@ static void Cmd_switchineffects(void) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } - if (gBattlescriptCurrInstr[1] == BS_FAINTED_LINK_MULTIPLE_1) + if (cmd->battler == BS_FAINTED_LINK_MULTIPLE_1) { u32 hitmarkerFaintBits = gHitMarker >> 28; @@ -6852,70 +7045,84 @@ static void Cmd_switchineffects(void) gBattlerFainted++; } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trainerslidein(void) { - gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerAtPosition(cmd->battler); BtlController_EmitTrainerSlide(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_playse(void) { + CMD_ARGS(u16 song); + gActiveBattler = gBattlerAttacker; - BtlController_EmitPlaySE(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1)); + BtlController_EmitPlaySE(BUFFER_A, cmd->song); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_fanfare(void) { + CMD_ARGS(u16 song); + gActiveBattler = gBattlerAttacker; - BtlController_EmitPlayFanfareOrBGM(BUFFER_A, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE); + BtlController_EmitPlayFanfareOrBGM(BUFFER_A, cmd->song, FALSE); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_playfaintcry(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitFaintingCry(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_endlinkbattle(void) { + CMD_ARGS(); + gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); BtlController_EmitEndLinkBattle(BUFFER_A, gBattleOutcome); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 1; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_returntoball(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitReturnMonToBall(BUFFER_A, TRUE); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_handlelearnnewmove(void) { - const u8 *learnedMovePtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); - const u8 *nothingToLearnPtr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + CMD_ARGS(const u8 *learnedMovePtr, const u8 *nothingToLearnPtr, bool8 isFirstMove); - u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); + const u8 *learnedMovePtr = cmd->learnedMovePtr; + const u8 *nothingToLearnPtr = cmd->nothingToLearnPtr; + + u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], cmd->isFirstMove); while (learnMove == MON_ALREADY_KNOWS_MOVE) learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], FALSE); @@ -6925,7 +7132,7 @@ static void Cmd_handlelearnnewmove(void) } else if (learnMove == MON_HAS_MAX_MOVES) { - gBattlescriptCurrInstr += 10; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -6952,6 +7159,8 @@ static void Cmd_handlelearnnewmove(void) static void Cmd_yesnoboxlearnmove(void) { + CMD_ARGS(const u8 *forgotMovePtr); + gActiveBattler = 0; switch (gBattleScripting.learnMoveState) @@ -7030,7 +7239,7 @@ static void Cmd_yesnoboxlearnmove(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->forgotMovePtr; PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId) @@ -7055,7 +7264,7 @@ static void Cmd_yesnoboxlearnmove(void) break; case 5: HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; break; case 6: if (gBattleControllerExecFlags == 0) @@ -7068,6 +7277,8 @@ static void Cmd_yesnoboxlearnmove(void) static void Cmd_yesnoboxstoplearningmove(void) { + CMD_ARGS(const u8 *noInstr); + switch (gBattleScripting.learnMoveState) { case 0: @@ -7097,16 +7308,16 @@ static void Cmd_yesnoboxstoplearningmove(void) PlaySE(SE_SELECT); if (gBattleCommunication[1] != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->noInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->noInstr; HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); } break; @@ -7115,21 +7326,23 @@ static void Cmd_yesnoboxstoplearningmove(void) static void Cmd_hitanimation(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (!(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE) || !(DoesSubstituteBlockMove(gBattlerAttacker, gActiveBattler, gCurrentMove)) || gDisableStructs[gActiveBattler].substituteHP == 0) { BtlController_EmitHitAnimation(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -7192,6 +7405,8 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) static void Cmd_getmoneyreward(void) { + CMD_ARGS(); + u32 money; u8 sPartyLevel = 1; @@ -7224,13 +7439,15 @@ static void Cmd_getmoneyreward(void) } PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, money); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Command is never used static void Cmd_updatebattlermoves(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); switch (gBattleCommunication[0]) { @@ -7249,7 +7466,7 @@ static void Cmd_updatebattlermoves(void) gBattleMons[gActiveBattler].moves[i] = bufferPoke->moves[i]; gBattleMons[gActiveBattler].pp[i] = bufferPoke->pp[i]; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -7257,6 +7474,8 @@ static void Cmd_updatebattlermoves(void) static void Cmd_swapattackerwithtarget(void) { + CMD_ARGS(); + gActiveBattler = gBattlerAttacker; gBattlerAttacker = gBattlerTarget; gBattlerTarget = gActiveBattler; @@ -7266,19 +7485,23 @@ static void Cmd_swapattackerwithtarget(void) else gHitMarker |= HITMARKER_SWAP_ATTACKER_TARGET; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_incrementgamestat(void) { - if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) - IncrementGameStat(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 stat); - gBattlescriptCurrInstr += 2; + if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) + IncrementGameStat(cmd->stat); + + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_drawpartystatussummary(void) { + CMD_ARGS(u8 battler); + s32 i; struct Pokemon *party; struct HpAndStatus hpStatuses[PARTY_SIZE]; @@ -7286,7 +7509,7 @@ static void Cmd_drawpartystatussummary(void) if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = gPlayerParty; @@ -7311,21 +7534,25 @@ static void Cmd_drawpartystatussummary(void) BtlController_EmitDrawPartyStatusSummary(BUFFER_A, hpStatuses, 1); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_hidepartystatussummary(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitHidePartyStatusSummary(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumptocalledmove(void) { - if (gBattlescriptCurrInstr[1]) + CMD_ARGS(bool8 notChosenMove); + + if (cmd->notChosenMove) gCurrentMove = gCalledMove; else gChosenMove = gCurrentMove = gCalledMove; @@ -7335,9 +7562,11 @@ static void Cmd_jumptocalledmove(void) static void Cmd_statusanimation(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) @@ -7345,18 +7574,20 @@ static void Cmd_statusanimation(void) BtlController_EmitStatusAnimation(BUFFER_A, FALSE, gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_status2animation(void) { + CMD_ARGS(u8 battler, u32 status2); + u32 wantedToAnimate; if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + wantedToAnimate = cmd->status2; if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) @@ -7364,31 +7595,35 @@ static void Cmd_status2animation(void) BtlController_EmitStatusAnimation(BUFFER_A, TRUE, gBattleMons[gActiveBattler].status2 & wantedToAnimate); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_chosenstatusanimation(void) { + CMD_ARGS(u8 battler, bool8 isStatus2, u32 status); + u32 wantedStatus; if (gBattleControllerExecFlags == 0) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); + wantedStatus = cmd->status; if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE) && gDisableStructs[gActiveBattler].substituteHP == 0 && !(gHitMarker & HITMARKER_NO_ANIMATIONS)) { - BtlController_EmitStatusAnimation(BUFFER_A, gBattlescriptCurrInstr[2], wantedStatus); + BtlController_EmitStatusAnimation(BUFFER_A, cmd->isStatus2, wantedStatus); MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_yesnobox(void) { + CMD_ARGS(); + switch (gBattleCommunication[0]) { case 0: @@ -7418,13 +7653,13 @@ static void Cmd_yesnobox(void) gBattleCommunication[CURSOR_POSITION] = 1; PlaySE(SE_SELECT); HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); HandleBattleWindow(YESNOBOX_X_Y, WINDOW_CLEAR); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -7432,25 +7667,29 @@ static void Cmd_yesnobox(void) static void Cmd_cancelallactions(void) { + CMD_ARGS(); + s32 i; for (i = 0; i < gBattlersCount; i++) gActionsByTurnOrder[i] = B_ACTION_CANCEL_PARTNER; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setgravity(void) { + CMD_ARGS(const u8 *failInstr); + if (gFieldStatuses & STATUS_FIELD_GRAVITY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gFieldStatuses |= STATUS_FIELD_GRAVITY; gFieldTimers.gravityTimer = 5; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -7519,16 +7758,18 @@ static bool32 TrySymbiosis(u32 battler, u32 itemId) static void Cmd_removeitem(void) { + CMD_ARGS(u8 battler); + u16 itemId = 0; if (gBattleScripting.overrideBerryRequirements) { // bug bite / pluck - don't remove current item - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); itemId = gBattleMons[gActiveBattler].item; // Popped Air Balloon cannot be restored by any means. @@ -7543,18 +7784,22 @@ static void Cmd_removeitem(void) ClearBattlerItemEffectHistory(gActiveBattler); if (!TryCheekPouch(gActiveBattler, itemId) && !TrySymbiosis(gActiveBattler, itemId)) - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_atknameinbuff1(void) { + CMD_ARGS(); + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker]); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_drawlvlupbox(void) { + CMD_ARGS(); + if (gBattleScripting.drawlvlupboxState == 0) { // If the Pokémon getting exp is not in-battle then @@ -7648,7 +7893,7 @@ static void Cmd_drawlvlupbox(void) SetBgAttribute(1, BG_ATTR_PRIORITY, 1); ShowBg(0); ShowBg(1); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } break; } @@ -7836,33 +8081,41 @@ static bool32 IsMonGettingExpSentOut(void) static void Cmd_resetsentmonsvalue(void) { + CMD_ARGS(); + ResetSentPokesToOpponentValue(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setatktoplayer0(void) { + CMD_ARGS(); + gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_makevisible(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitSpriteInvisibility(BUFFER_A, FALSE); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_recordability(void) { - u8 battler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + u8 battler = GetBattlerForBattleScript(cmd->battler); RecordAbilityBattle(battler, gBattleMons[battler].ability); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } void BufferMoveToLearnIntoBattleTextBuff2(void) @@ -7872,26 +8125,32 @@ void BufferMoveToLearnIntoBattleTextBuff2(void) static void Cmd_buffermovetolearn(void) { + CMD_ARGS(); + BufferMoveToLearnIntoBattleTextBuff2(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifplayerran(void) { + CMD_ARGS(const u8 *jumpInstr); + if (TryRunFromBattle(gBattlerFainted)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_hpthresholds(void) { + CMD_ARGS(u8 battler); + u8 opposingBattler; s32 result; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); opposingBattler = BATTLE_OPPOSITE(gActiveBattler); result = gBattleMons[opposingBattler].hp * 100 / gBattleMons[opposingBattler].maxHP; @@ -7908,18 +8167,20 @@ static void Cmd_hpthresholds(void) gBattleStruct->hpScale = 3; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_hpthresholds2(void) { + CMD_ARGS(u8 battler); + u8 opposingBattler; s32 result; u8 hpSwitchout; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); opposingBattler = BATTLE_OPPOSITE(gActiveBattler); hpSwitchout = *(gBattleStruct->hpOnSwitchout + GetBattlerSide(opposingBattler)); result = (hpSwitchout - gBattleMons[opposingBattler].hp) * 100 / hpSwitchout; @@ -7934,14 +8195,16 @@ static void Cmd_hpthresholds2(void) gBattleStruct->hpScale = 3; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_useitemonopponent(void) { + CMD_ARGS(); + gBattlerInMenuId = gBattlerAttacker; PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, TRUE); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static bool32 HasAttackerFaintedTarget(void) @@ -8320,6 +8583,8 @@ static bool32 CanTeleport(u8 battlerId) static void Cmd_various(void) { + CMD_ARGS(u8 battler, u8 id); + struct Pokemon *mon; s32 i, j; u8 data[10]; @@ -8328,93 +8593,125 @@ static void Cmd_various(void) if (gBattleControllerExecFlags) return; - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); - switch (gBattlescriptCurrInstr[2]) + switch (cmd->id) { // 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. case VARIOUS_JUMP_IF_ROAR_FAILS: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT && IS_WHOLE_SIDE_ALIVE(gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else if (WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_ABSENT: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerAlive(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsShieldsDownProtected(gActiveBattler)) { gBattlerAbility = gActiveBattler; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_JUMP_IF_NO_HOLD_EFFECT: - if (GetBattlerHoldEffect(gActiveBattler, TRUE) != gBattlescriptCurrInstr[3]) + { + VARIOUS_ARGS(u8 holdEffect, const u8 *jumpInstr); + if (GetBattlerHoldEffect(gActiveBattler, TRUE) != cmd->holdEffect) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { gLastUsedItem = gBattleMons[gActiveBattler].item; // For B_LAST_USED_ITEM - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_JUMP_IF_NO_ALLY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_INFATUATE_WITH_BATTLER: + { + VARIOUS_ARGS(u8 infatuateWith); gBattleScripting.battler = gActiveBattler; - gBattleMons[gActiveBattler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(gBattlescriptCurrInstr[3])); - gBattlescriptCurrInstr += 4; + gBattleMons[gActiveBattler].status2 |= STATUS2_INFATUATED_WITH(GetBattlerForBattleScript(cmd->infatuateWith)); + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_LAST_USED_ITEM: + { + VARIOUS_ARGS(); gLastUsedItem = gBattleMons[gActiveBattler].item; break; + } case VARIOUS_TRY_FAIRY_LOCK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gFieldStatuses & STATUS_FIELD_FAIRY_LOCK) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gFieldStatuses |= STATUS_FIELD_FAIRY_LOCK; gFieldTimers.fairyLockTimer = 2; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_GET_STAT_VALUE: - i = gBattlescriptCurrInstr[3]; + { + VARIOUS_ARGS(u8 stat); + i = cmd->stat; gBattleMoveDamage = *(u16 *)(&gBattleMons[gActiveBattler].attack) + (i - 1); gBattleMoveDamage *= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][0]; gBattleMoveDamage /= gStatStageRatios[gBattleMons[gActiveBattler].statStages[i]][1]; - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_FULL_HP: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (BATTLER_MAX_HP(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_FRISK: + { + VARIOUS_ARGS(); while (gBattleStruct->friskedBattler < gBattlersCount) { gBattlerTarget = gBattleStruct->friskedBattler++; @@ -8441,54 +8738,78 @@ static void Cmd_various(void) gBattleStruct->friskedBattler = 0; gBattleStruct->friskedAbility = FALSE; break; + } case VARIOUS_POISON_TYPE_IMMUNITY: - if (!CanPoisonType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3]))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + { + VARIOUS_ARGS(u8 target, const u8 *failInstr); + if (!CanPoisonType(gActiveBattler, GetBattlerForBattleScript(cmd->target))) + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_PARALYZE_TYPE_IMMUNITY: - if (!CanParalyzeType(gActiveBattler, GetBattlerForBattleScript(gBattlescriptCurrInstr[3]))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + { + VARIOUS_ARGS(u8 target, const u8 *failInstr); + if (!CanParalyzeType(gActiveBattler, GetBattlerForBattleScript(cmd->target))) + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRACE_ABILITY: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].ability = gBattleStruct->overwrittenAbilities[gActiveBattler] = gBattleStruct->tracedAbility[gActiveBattler]; break; + } case VARIOUS_TRY_ILLUSION_OFF: + { + VARIOUS_ARGS(); if (GetIllusionMonPtr(gActiveBattler) != NULL) { - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_IllusionOff; return; } break; + } case VARIOUS_SET_SPRITEIGNORE0HP: - gBattleStruct->spriteIgnore0Hp = gBattlescriptCurrInstr[3]; - gBattlescriptCurrInstr += 4; + { + VARIOUS_ARGS(bool8 ignore0HP); + gBattleStruct->spriteIgnore0Hp = cmd->ignore0HP; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_UPDATE_NICK: + { + VARIOUS_ARGS(); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_NICK); break; + } case VARIOUS_JUMP_IF_NOT_BERRY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (ItemId_GetPocket(gBattleMons[gActiveBattler].item) == POCKET_BERRIES) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; return; + } case VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS: + { + VARIOUS_ARGS(const u8 *failInstr); if ((gStatuses3[gActiveBattler] & (STATUS3_SEMI_INVULNERABLE | STATUS3_HEAL_BLOCK)) || BATTLER_MAX_HP(gActiveBattler) || !gBattleMons[gActiveBattler].hp || !(IsBattlerGrounded(gActiveBattler))) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -8497,17 +8818,23 @@ static void Cmd_various(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_GRAVITY_ON_AIRBORNE_MONS: + { + VARIOUS_ARGS(); // Cancel all multiturn moves of IN_AIR Pokemon except those being targeted by Sky Drop. if (gStatuses3[gActiveBattler] & STATUS3_ON_AIR && !(gStatuses3[gActiveBattler] & STATUS3_SKY_DROPPED)) CancelMultiTurnMoves(gActiveBattler); gStatuses3[gActiveBattler] &= ~(STATUS3_MAGNET_RISE | STATUS3_TELEKINESIS | STATUS3_ON_AIR | STATUS3_SKY_DROPPED); break; + } case VARIOUS_SPECTRAL_THIEF: + { + VARIOUS_ARGS(); // Raise stats for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { @@ -8524,10 +8851,16 @@ static void Cmd_various(void) } } break; + } case VARIOUS_SET_POWDER: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].status2 |= STATUS2_POWDER; break; + } case VARIOUS_ACUPRESSURE: + { + VARIOUS_ARGS(const u8 *failInstr); bits = 0; for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { @@ -8543,17 +8876,23 @@ static void Cmd_various(void) } while (!(bits & gBitTable[statId])); SET_STATCHANGER(statId, 2, FALSE); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_CANCEL_MULTI_TURN_MOVES: + { + VARIOUS_ARGS(); CancelMultiTurnMoves(gActiveBattler); break; + } case VARIOUS_SET_MAGIC_COAT_TARGET: + { + VARIOUS_ARGS(); gBattleStruct->attackerBeforeBounce = gActiveBattler; gBattlerAttacker = gBattlerTarget; side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); @@ -8562,23 +8901,38 @@ static void Cmd_various(void) else gBattlerTarget = gActiveBattler; break; + } case VARIOUS_IS_RUNNING_IMPOSSIBLE: + { + VARIOUS_ARGS(); gBattleCommunication[0] = IsRunningFromBattleImpossible(); break; + } case VARIOUS_GET_MOVE_TARGET: + { + VARIOUS_ARGS(); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); break; + } case VARIOUS_GET_BATTLER_FAINTED: + { + VARIOUS_ARGS(); if (gHitMarker & HITMARKER_FAINTED(gActiveBattler)) gBattleCommunication[0] = TRUE; else gBattleCommunication[0] = FALSE; break; + } case VARIOUS_RESET_SWITCH_IN_ABILITY_BITS: + { + VARIOUS_ARGS(); gSpecialStatuses[gActiveBattler].traced = FALSE; gSpecialStatuses[gActiveBattler].switchInAbilityDone = FALSE; break; + } case VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP: + { + VARIOUS_ARGS(); if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId || gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) { if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) @@ -8595,7 +8949,10 @@ static void Cmd_various(void) gBattleStruct->choicedMove[gActiveBattler] = MOVE_NONE; } break; + } case VARIOUS_RESET_PLAYER_FAINTED: + { + VARIOUS_ARGS(); if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)) && gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattleMons[0].hp != 0 @@ -8604,7 +8961,10 @@ static void Cmd_various(void) gHitMarker &= ~HITMARKER_PLAYER_FAINTED; } break; + } case VARIOUS_PALACE_FLAVOR_TEXT: + { + VARIOUS_ARGS(); // 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 = gActiveBattler = gBattleCommunication[1]; @@ -8618,7 +8978,11 @@ static void Cmd_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = sBattlePalaceNatureToFlavorTextId[GetNatureFromPersonality(gBattleMons[gActiveBattler].personality)]; } break; + } case VARIOUS_ARENA_JUDGMENT_WINDOW: + { + VARIOUS_ARGS(); + i = BattleArena_ShowJudgmentWindow(&gBattleCommunication[0]); // BattleArena_ShowJudgmentWindow's last state was an intermediate step. @@ -8628,20 +8992,29 @@ static void Cmd_various(void) gBattleCommunication[1] = i; break; + } case VARIOUS_ARENA_OPPONENT_MON_LOST: + { + VARIOUS_ARGS(); gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(1); gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; gDisableStructs[1].truantSwitchInHack = 1; break; + } case VARIOUS_ARENA_PLAYER_MON_LOST: + { + VARIOUS_ARGS(); gBattleMons[0].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_PLAYER_FAINTED; gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; gDisableStructs[0].truantSwitchInHack = 1; break; + } case VARIOUS_ARENA_BOTH_MONS_LOST: + { + VARIOUS_ARGS(); gBattleMons[0].hp = 0; gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); @@ -8652,29 +9025,50 @@ static void Cmd_various(void) gDisableStructs[0].truantSwitchInHack = 1; gDisableStructs[1].truantSwitchInHack = 1; break; + } case VARIOUS_EMIT_YESNOBOX: + { + VARIOUS_ARGS(); BtlController_EmitYesNoBox(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_DRAW_ARENA_REF_TEXT_BOX: + { + VARIOUS_ARGS(); DrawArenaRefereeTextBox(); break; + } case VARIOUS_ERASE_ARENA_REF_TEXT_BOX: + { + VARIOUS_ARGS(); EraseArenaRefereeTextBox(); break; + } case VARIOUS_ARENA_JUDGMENT_STRING: - BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[gBattlescriptCurrInstr[1]]); + { + CMD_ARGS(u8 id, u8 _); + BattleStringExpandPlaceholdersToDisplayedString(gRefereeStringsTable[cmd->id]); BattlePutTextOnWindow(gDisplayedStringBattle, ARENA_WIN_JUDGMENT_TEXT); break; + } case VARIOUS_ARENA_WAIT_STRING: + { + VARIOUS_ARGS(); if (IsTextPrinterActive(ARENA_WIN_JUDGMENT_TEXT)) return; break; + } case VARIOUS_WAIT_CRY: + { + VARIOUS_ARGS(); if (!IsCryFinished()) return; break; + } case VARIOUS_RETURN_OPPONENT_MON1: + { + VARIOUS_ARGS(); gActiveBattler = 1; if (gBattleMons[gActiveBattler].hp != 0) { @@ -8682,7 +9076,10 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } break; + } case VARIOUS_RETURN_OPPONENT_MON2: + { + VARIOUS_ARGS(); if (gBattlersCount > 3) { gActiveBattler = 3; @@ -8693,20 +9090,35 @@ static void Cmd_various(void) } } break; + } case VARIOUS_VOLUME_DOWN: + { + VARIOUS_ARGS(); m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x55); break; + } case VARIOUS_VOLUME_UP: + { + VARIOUS_ARGS(); m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); break; + } case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: + { + VARIOUS_ARGS(); gBattleStruct->alreadyStatusedMoveAttempt |= gBitTable[gActiveBattler]; break; + } case VARIOUS_PALACE_TRY_ESCAPE_STATUS: + { + VARIOUS_ARGS(); if (BattlePalace_TryEscapeStatus(gActiveBattler)) return; break; + } case VARIOUS_SET_TELEPORT_OUTCOME: + { + VARIOUS_ARGS(); // Don't end the battle if one of the wild mons teleported from the wild double battle // and its partner is still alive. if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) @@ -8727,35 +9139,59 @@ static void Cmd_various(void) gBattleOutcome = B_OUTCOME_MON_TELEPORTED; } break; + } case VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC: + { + VARIOUS_ARGS(); BtlController_EmitPlayFanfareOrBGM(BUFFER_A, MUS_VICTORY_TRAINER, TRUE); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_STAT_TEXT_BUFFER: + { + VARIOUS_ARGS(); PREPARE_STAT_BUFFER(gBattleTextBuff1, gBattleCommunication[0]); break; + } case VARIOUS_SWITCHIN_ABILITIES: - gBattlescriptCurrInstr += 3; + { + VARIOUS_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, gActiveBattler, 0, 0, 0); AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0); AbilityBattleEffects(ABILITYEFFECT_TRACE2, gActiveBattler, 0, 0, 0); return; + } case VARIOUS_SAVE_TARGET: + { + VARIOUS_ARGS(); gBattleStruct->savedBattlerTarget = gBattlerTarget; break; + } case VARIOUS_RESTORE_TARGET: + { + VARIOUS_ARGS(); gBattlerTarget = gBattleStruct->savedBattlerTarget; break; + } case VARIOUS_INSTANT_HP_DROP: + { + VARIOUS_ARGS(); BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_CLEAR_STATUS: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].status1 = 0; BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_RESTORE_PP: + { + VARIOUS_ARGS(); for (i = 0; i < 4; i++) { gBattleMons[gActiveBattler].pp[i] = CalculatePPWithBonus(gBattleMons[gActiveBattler].moves[i], gBattleMons[gActiveBattler].ppBonuses, i); @@ -8765,8 +9201,11 @@ static void Cmd_various(void) BtlController_EmitSetMonData(BUFFER_A, REQUEST_PP_DATA_BATTLE, 0, 5, data); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_TRY_ACTIVATE_MOXIE: // and chilling neigh + as one ice rider { + VARIOUS_ARGS(); + u16 battlerAbility = GetBattlerAbility(gActiveBattler); if ((battlerAbility == ABILITY_MOXIE @@ -8779,17 +9218,19 @@ static void Cmd_various(void) gBattleMons[gBattlerAttacker].statStages[STAT_ATK]++; SET_STATCHANGER(STAT_ATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gLastUsedAbility = battlerAbility; if (battlerAbility == ABILITY_AS_ONE_ICE_RIDER) gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_CHILLING_NEIGH; gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget; return; } - } break; + } case VARIOUS_TRY_ACTIVATE_GRIM_NEIGH: // and as one shadow rider { + VARIOUS_ARGS(); + u16 battlerAbility = GetBattlerAbility(gActiveBattler); if ((battlerAbility == ABILITY_GRIM_NEIGH @@ -8801,16 +9242,18 @@ static void Cmd_various(void) gBattleMons[gBattlerAttacker].statStages[STAT_SPATK]++; SET_STATCHANGER(STAT_SPATK, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_SPATK); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gLastUsedAbility = battlerAbility; if (battlerAbility == ABILITY_AS_ONE_SHADOW_RIDER) gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_GRIM_NEIGH; gBattlescriptCurrInstr = BattleScript_RaiseStatOnFaintingTarget; return; } - } break; + } case VARIOUS_TRY_ACTIVATE_RECEIVER: // Partner gets fainted's ally ability + { + VARIOUS_ARGS(); gBattlerAbility = BATTLE_PARTNER(gActiveBattler); i = GetBattlerAbility(gBattlerAbility); if (IsBattlerAlive(gBattlerAbility) @@ -8832,13 +9275,16 @@ static void Cmd_various(void) default: gBattleStruct->tracedAbility[gBattlerAbility] = gBattleMons[gActiveBattler].ability; // re-using the variable for trace gBattleScripting.battler = gActiveBattler; - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_ReceiverActivates; return; } } break; + } case VARIOUS_TRY_ACTIVATE_BEAST_BOOST: + { + VARIOUS_ARGS(); i = GetHighestStatId(gActiveBattler); if (GetBattlerAbility(gActiveBattler) == ABILITY_BEAST_BOOST && HasAttackerFaintedTarget() @@ -8848,12 +9294,15 @@ static void Cmd_various(void) gBattleMons[gBattlerAttacker].statStages[i]++; SET_STATCHANGER(i, 1, FALSE); PREPARE_STAT_BUFFER(gBattleTextBuff1, i); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_AttackerAbilityStatRaise; return; } break; + } case VARIOUS_TRY_ACTIVATE_SOULHEART: + { + VARIOUS_ARGS(); while (gBattleStruct->soulheartBattlerId < gBattlersCount) { gBattleScripting.battler = gBattleStruct->soulheartBattlerId++; @@ -8872,7 +9321,10 @@ static void Cmd_various(void) } gBattleStruct->soulheartBattlerId = 0; break; + } case VARIOUS_TRY_ACTIVATE_FELL_STINGER: + { + VARIOUS_ARGS(); if (gBattleMoves[gCurrentMove].effect == EFFECT_FELL_STINGER && HasAttackerFaintedTarget() && !NoAliveMonsForEitherParty() @@ -8884,50 +9336,62 @@ static void Cmd_various(void) SET_STATCHANGER(STAT_ATK, 2, FALSE); #endif PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK); - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_FellStingerRaisesStat; return; } break; + } case VARIOUS_PLAY_MOVE_ANIMATION: - BtlController_EmitMoveAnimation(BUFFER_A, T1_READ_16(gBattlescriptCurrInstr + 3), gBattleScripting.animTurn, 0, 0, gBattleMons[gActiveBattler].friendship, &gDisableStructs[gActiveBattler], gMultiHitCounter); + { + VARIOUS_ARGS(u16 move); + BtlController_EmitMoveAnimation(BUFFER_A, cmd->move, gBattleScripting.animTurn, 0, 0, gBattleMons[gActiveBattler].friendship, &gDisableStructs[gActiveBattler], gMultiHitCounter); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_LUCKY_CHANT: + { + VARIOUS_ARGS(const u8 *failInstr); if (!(gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_LUCKY_CHANT)) { gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] |= SIDE_STATUS_LUCKY_CHANT; gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].luckyChantBattlerId = gActiveBattler; gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].luckyChantTimer = 5; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_SUCKER_PUNCH_CHECK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gProtectStructs[gBattlerTarget].obstructed) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else if (IS_MOVE_STATUS(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_SIMPLE_BEAM: + { + VARIOUS_ARGS(const u8 *failInstr); if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability) || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) { RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -8935,41 +9399,50 @@ static void Cmd_various(void) gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_SIMPLE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_ENTRAINMENT: + { + VARIOUS_ARGS(const u8 *failInstr); if (IsEntrainmentBannedAbilityAttacker(gBattleMons[gBattlerAttacker].ability) || IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability)) { RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = gBattleMons[gBattlerAttacker].ability; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } return; + } case VARIOUS_SET_LAST_USED_ABILITY: + { + VARIOUS_ARGS(); gLastUsedAbility = gBattleMons[gActiveBattler].ability; break; + } case VARIOUS_TRY_HEAL_PULSE: + { + VARIOUS_ARGS(const u8 *failInstr); if (BATTLER_MAX_HP(gActiveBattler)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -8980,21 +9453,27 @@ static void Cmd_various(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_QUASH: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) // It's true if foe is faster, has a bigger priority, or switches { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // This replaces the current battlescript with the "fail" script. + gBattlescriptCurrInstr = cmd->failInstr; // This replaces the current battlescript with the "fail" script. } else // If the condition is not true, it means we are faster than the foe, so we can set the quash bit { gProtectStructs[gBattlerTarget].quash = TRUE; - gBattlescriptCurrInstr += 7; // and then we proceed with the rest of our battlescript + gBattlescriptCurrInstr = cmd->nextInstr; // and then we proceed with the rest of our battlescript } return; + } case VARIOUS_INVERT_STAT_STAGES: + { + VARIOUS_ARGS(); for (i = 0; i < NUM_BATTLE_STATS; i++) { if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE) // Negative becomes positive. @@ -9003,14 +9482,20 @@ static void Cmd_various(void) gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE - (gBattleMons[gActiveBattler].statStages[i] - DEFAULT_STAT_STAGE); } break; + } case VARIOUS_SET_TERRAIN: + { + VARIOUS_ARGS(const u8 *failInstr); HandleTerrainMove(gCurrentMove); return; + } case VARIOUS_TRY_ME_FIRST: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else if (IS_MOVE_STATUS(gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]])) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else { u16 move = gBattleMons[gBattlerTarget].moves[gBattleStruct->chosenMovePositions[gBattlerTarget]]; @@ -9026,84 +9511,100 @@ static void Cmd_various(void) case MOVE_METAL_BURST: case MOVE_ME_FIRST: case MOVE_BEAK_BLAST: - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; break; default: gCalledMove = move; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gStatuses3[gBattlerAttacker] |= STATUS3_ME_FIRST; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } return; + } case VARIOUS_JUMP_IF_BATTLE_END: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (NoAliveMonsForEitherParty()) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_ELECTRIFY: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses4[gBattlerTarget] |= STATUS4_ELECTRIFIED; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_REFLECT_TYPE: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gBattlerTarget].species == SPECIES_ARCEUS || gBattleMons[gBattlerTarget].species == SPECIES_SILVALLY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 != TYPE_MYSTERY) { gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type2; gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gBattleMons[gBattlerTarget].type1 != TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) { gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gBattleMons[gBattlerTarget].type1 == TYPE_MYSTERY && gBattleMons[gBattlerTarget].type2 == TYPE_MYSTERY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerAttacker].type1 = gBattleMons[gBattlerTarget].type1; gBattleMons[gBattlerAttacker].type2 = gBattleMons[gBattlerTarget].type2; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_SOAK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gBattlerTarget].type1 == gBattleMoves[gCurrentMove].type && gBattleMons[gBattlerTarget].type2 == gBattleMoves[gCurrentMove].type) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { SET_BATTLER_TYPE(gBattlerTarget, gBattleMoves[gCurrentMove].type); PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].type); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_HANDLE_MEGA_EVO: + { + VARIOUS_ARGS(u8 case_); + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; // Change species. - if (gBattlescriptCurrInstr[3] == 0) + if (cmd->case_ == 0) { u16 megaSpecies; gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; @@ -9127,7 +9628,7 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } // Change stats. - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { RecalcBattlerStats(gActiveBattler, mon); gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE; @@ -9141,16 +9642,19 @@ static void Cmd_various(void) if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_HANDLE_PRIMAL_REVERSION: + { + VARIOUS_ARGS(u8 case_); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; // Change species. - if (gBattlescriptCurrInstr[3] == 0) + if (cmd->case_ == 0) { u16 primalSpecies; gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; @@ -9169,7 +9673,7 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } // Change stats. - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { RecalcBattlerStats(gActiveBattler, mon); gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; @@ -9182,16 +9686,19 @@ static void Cmd_various(void) if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_HANDLE_FORM_CHANGE: + { + VARIOUS_ARGS(u8 case_); if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; else mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; // Change species. - if (gBattlescriptCurrInstr[3] == 0) + if (cmd->case_ == 0) { if (!gBattleTextBuff1) PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); @@ -9199,7 +9706,7 @@ static void Cmd_various(void) MarkBattlerForControllerExec(gActiveBattler); } // Change stats. - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { RecalcBattlerStats(gActiveBattler, mon); } @@ -9208,15 +9715,21 @@ static void Cmd_various(void) { UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_LAST_RESORT: + { + VARIOUS_ARGS(const u8 *failInstr); if (CanUseLastResort(gActiveBattler)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; return; + } case VARIOUS_ARGUMENT_STATUS_EFFECT: + { + VARIOUS_ARGS(); switch (gBattleMoves[gCurrentMove].argument) { case STATUS1_SLEEP: @@ -9243,12 +9756,15 @@ static void Cmd_various(void) } if (gBattleScripting.moveEffect != 0) { - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_EffectWithChance; return; } break; + } case VARIOUS_TRY_HIT_SWITCH_TARGET: + { + VARIOUS_ARGS(const u8 *failInstr); if (IsBattlerAlive(gBattlerAttacker) && IsBattlerAlive(gBattlerTarget) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) @@ -9260,38 +9776,47 @@ static void Cmd_various(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_TRY_AUTOTOMIZE: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerWeight(gActiveBattler) > 1) { gDisableStructs[gActiveBattler].autotomizeCount++; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_TRY_COPYCAT: + { + VARIOUS_ARGS(const u8 *failInstr); if (gLastUsedMove == 0xFFFF || (sForbiddenMoves[gLastUsedMove] & FORBIDDEN_COPYCAT)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gCalledMove = gLastUsedMove; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_INSTRUCT: + { + VARIOUS_ARGS(const u8 *failInstr); if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_INSTRUCT) || gLastMoves[gBattlerTarget] == 0xFFFF) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -9308,59 +9833,80 @@ static void Cmd_various(void) } } if (i != 4 || gBattleMons[gBattlerAttacker].pp[gCurrMovePos] == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else { gBattlerTarget = gBattleStruct->lastMoveTarget[gBattlerAttacker]; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBattler, gBattlerPartyIndexes[gActiveBattler]); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } } return; + } case VARIOUS_ABILITY_POPUP: + { + VARIOUS_ARGS(); CreateAbilityPopUp(gActiveBattler, gBattleMons[gActiveBattler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); break; + } case VARIOUS_UPDATE_ABILITY_POPUP: + { + VARIOUS_ARGS(); UpdateAbilityPopup(gActiveBattler); break; + } case VARIOUS_DEFOG: - if (T1_READ_8(gBattlescriptCurrInstr + 3)) // Clear + { + VARIOUS_ARGS(bool8 clear, const u8 *failInstr); + if (cmd->clear) // Clear { if (ClearDefogHazards(gEffectBattler, TRUE)) return; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; } else { if (ClearDefogHazards(gActiveBattler, FALSE)) - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_JUMP_IF_TARGET_ALLY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; return; + } case VARIOUS_TRY_SYNCHRONOISE: + { + VARIOUS_ARGS(const u8 *failInstr); if (!DoBattlersShareType(gBattlerAttacker, gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_LOSE_TYPE: + { + VARIOUS_ARGS(u8 type); for (i = 0; i < 3; i++) { - if (*(u8 *)(&gBattleMons[gActiveBattler].type1 + i) == gBattlescriptCurrInstr[3]) + if (*(u8 *)(&gBattleMons[gActiveBattler].type1 + i) == cmd->type) *(u8 *)(&gBattleMons[gActiveBattler].type1 + i) = TYPE_MYSTERY; } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_PSYCHO_SHIFT: + { + VARIOUS_ARGS(const u8 *failInstr); // Psycho shift works if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_POISON) && CanBePoisoned(gBattlerAttacker, gBattlerTarget)) gBattleCommunication[MULTISTRING_CHOOSER] = 0; @@ -9374,29 +9920,38 @@ static void Cmd_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = 4; else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; return; } gBattleMons[gBattlerTarget].status1 = gBattleMons[gBattlerAttacker].status1 & STATUS1_ANY; gActiveBattler = gBattlerTarget; BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 7; - return; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } case VARIOUS_CURE_STATUS: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].status1 = 0; BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_POWER_TRICK: + { + VARIOUS_ARGS(); gStatuses3[gActiveBattler] ^= STATUS3_POWER_TRICK; SWAP(gBattleMons[gActiveBattler].attack, gBattleMons[gActiveBattler].defense, i); break; + } case VARIOUS_AFTER_YOU: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -9420,39 +9975,51 @@ static void Cmd_various(void) gBattlerByTurnOrder[3] = data[2]; } gSpecialStatuses[gBattlerTarget].afterYou = 1; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_BESTOW: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gBattlerAttacker].item == ITEM_NONE || gBattleMons[gBattlerTarget].item != ITEM_NONE || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { BestowItem(gBattlerAttacker, gBattlerTarget); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_ARGUMENT_TO_MOVE_EFFECT: + { + VARIOUS_ARGS(); gBattleScripting.moveEffect = gBattleMoves[gCurrentMove].argument; break; + } case VARIOUS_JUMP_IF_NOT_GROUNDED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!IsBattlerGrounded(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_HANDLE_TRAINER_SLIDE_MSG: - if (gBattlescriptCurrInstr[3] == 0) + { + VARIOUS_ARGS(u8 case_); + if (cmd->case_ == 0) { gBattleScripting.savedDmg = gBattlerSpriteIds[gActiveBattler]; HideBattlerShadowSprite(gActiveBattler); } - else if (gBattlescriptCurrInstr[3] == 1) + else if (cmd->case_ == 1) { BtlController_EmitPrintString(BUFFER_A, STRINGID_TRAINERSLIDE); MarkBattlerForControllerExec(gActiveBattler); @@ -9466,27 +10033,36 @@ static void Cmd_various(void) BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); } } - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF: + { + VARIOUS_ARGS(); if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_DOWN)) { gBattleScripting.battler = gActiveBattler; - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; return; } break; + } case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON: + { + VARIOUS_ARGS(); if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_SWITCHIN)) { gBattleScripting.battler = gActiveBattler; - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; return; } break; + } case VARIOUS_SET_AURORA_VEIL: + { + VARIOUS_ARGS(); if (gSideStatuses[GET_BATTLER_SIDE(gActiveBattler)] & SIDE_STATUS_AURORA_VEIL || !(WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_HAIL)) { @@ -9508,26 +10084,35 @@ static void Cmd_various(void) gBattleCommunication[MULTISTRING_CHOOSER] = 5; } break; + } case VARIOUS_TRY_THIRD_TYPE: + { + VARIOUS_ARGS(const u8 *failInstr); if (IS_BATTLER_OF_TYPE(gActiveBattler, gBattleMoves[gCurrentMove].argument)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gActiveBattler].type3 = gBattleMoves[gCurrentMove].argument; PREPARE_TYPE_BUFFER(gBattleTextBuff1, gBattleMoves[gCurrentMove].argument); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_DESTROY_ABILITY_POPUP: + { + VARIOUS_ARGS(); DestroyAbilityPopUp(gActiveBattler); break; + } case VARIOUS_TOTEM_BOOST: + { + VARIOUS_ARGS(const u8 *jumpInstr); gActiveBattler = gBattlerAttacker; if (gTotemBoosts[gActiveBattler].stats == 0) { - gBattlescriptCurrInstr += 7; // stats done, exit + gBattlescriptCurrInstr = cmd->nextInstr; // stats done, exit } else { @@ -9550,22 +10135,31 @@ static void Cmd_various(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // do boost + gBattlescriptCurrInstr = cmd->jumpInstr; // do boost } return; } } - gBattlescriptCurrInstr += 7; // exit if loop failed (failsafe) + gBattlescriptCurrInstr = cmd->nextInstr; // exit if loop failed (failsafe) } return; + } case VARIOUS_SET_Z_EFFECT: + { + VARIOUS_ARGS(); SetZEffect(); //handles battle script jumping internally return; + } case VARIOUS_MOVEEND_ITEM_EFFECTS: + { + VARIOUS_ARGS(); if (ItemBattleEffects(ITEMEFFECT_NORMAL, gActiveBattler, FALSE)) return; break; + } case VARIOUS_ROOM_SERVICE: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_ROOM_SERVICE && TryRoomService(gActiveBattler)) { BattleScriptPushCursor(); @@ -9573,10 +10167,13 @@ static void Cmd_various(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } return; + } case VARIOUS_TERRAIN_SEED: + { + VARIOUS_ARGS(const u8 *failInstr); if (GetBattlerHoldEffect(gActiveBattler, TRUE) == HOLD_EFFECT_SEEDS) { u8 effect = 0; @@ -9600,25 +10197,32 @@ static void Cmd_various(void) if (effect) return; } - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; return; + } case VARIOUS_MAKE_INVISIBLE: + { + VARIOUS_ARGS(); if (gBattleControllerExecFlags) break; BtlController_EmitSpriteInvisibility(BUFFER_A, TRUE); MarkBattlerForControllerExec(gActiveBattler); break; + } case VARIOUS_JUMP_IF_TERRAIN_AFFECTED: { - u32 flags = T1_READ_32(gBattlescriptCurrInstr + 3); + VARIOUS_ARGS(u32 flags, const u8 *jumpInstr); + u32 flags = cmd->flags; if (IsBattlerTerrainAffected(gActiveBattler, flags)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - return; case VARIOUS_EERIE_SPELL_PP_REDUCE: + { + VARIOUS_ARGS(const u8 *failInstr); if (gLastMoves[gActiveBattler] != 0 && gLastMoves[gActiveBattler] != 0xFFFF) { s32 i; @@ -9650,48 +10254,57 @@ static void Cmd_various(void) if (gBattleMons[gActiveBattler].pp[i] == 0 && gBattleStruct->skyDropTargets[gActiveBattler] == 0xFF) CancelMultiTurnMoves(gActiveBattler); - gBattlescriptCurrInstr += 7; // continue + gBattlescriptCurrInstr = cmd->nextInstr; // continue } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp + gBattlescriptCurrInstr = cmd->failInstr; // cant reduce pp } } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // cant reduce pp + gBattlescriptCurrInstr = cmd->failInstr; // cant reduce pp } return; + } case VARIOUS_JUMP_IF_TEAM_HEALTHY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerAlive(BATTLE_PARTNER(gActiveBattler))) { u8 partner = BATTLE_PARTNER(gActiveBattler); if ((gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)) && (gBattleMons[partner].hp == gBattleMons[partner].maxHP && !(gBattleMons[partner].status1 & STATUS1_ANY))) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else // single battle { if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP && !(gBattleMons[gActiveBattler].status1 & STATUS1_ANY)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_HEAL_QUARTER_HP: + { + VARIOUS_ARGS(const u8 *failInstr); gBattleMoveDamage = gBattleMons[gActiveBattler].maxHP / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; if (gBattleMons[gActiveBattler].hp == gBattleMons[gActiveBattler].maxHP) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // fail + gBattlescriptCurrInstr = cmd->failInstr; // fail else - gBattlescriptCurrInstr += 7; // can heal + gBattlescriptCurrInstr = cmd->nextInstr; // can heal return; + } case VARIOUS_REMOVE_TERRAIN: + { + VARIOUS_ARGS(); gFieldTimers.terrainTimer = 0; switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { @@ -9713,14 +10326,20 @@ static void Cmd_various(void) } gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain break; + } case VARIOUS_JUMP_IF_UNDER_200: + { + VARIOUS_ARGS(const u8 *jumpInstr); // If the Pokemon is less than 200 kg, or weighing less than 441 lbs, then Sky Drop will work. Otherwise, it will fail. if (GetBattlerWeight(gBattlerTarget) < 2000) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SET_SKY_DROP: + { + VARIOUS_ARGS(); gStatuses3[gBattlerTarget] |= (STATUS3_SKY_DROPPED | STATUS3_ON_AIR); /* skyDropTargets holds the information of who is in a particular instance of Sky Drop. This is needed in the case that multiple Pokemon use Sky Drop in the same turn or if @@ -9740,24 +10359,30 @@ static void Cmd_various(void) gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 0; break; + } case VARIOUS_CLEAR_SKY_DROP: + { + VARIOUS_ARGS(const u8 *failInstr); // Check to see if the initial target of this Sky Drop fainted before the 2nd turn of Sky Drop. // If so, make the move fail. If not, clear all of the statuses and continue the move. if (gBattleStruct->skyDropTargets[gBattlerAttacker] == 0xFF) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; else { gBattleStruct->skyDropTargets[gBattlerAttacker] = 0xFF; gBattleStruct->skyDropTargets[gBattlerTarget] = 0xFF; gStatuses3[gBattlerTarget] &= ~(STATUS3_SKY_DROPPED | STATUS3_ON_AIR); - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } // Confuse target if they were in the middle of Petal Dance/Outrage/Thrash when targeted. if (gBattleMons[gBattlerTarget].status2 & STATUS2_LOCK_CONFUSE) gBattleScripting.moveEffect = (MOVE_EFFECT_CONFUSION | MOVE_EFFECT_CERTAIN); return; + } case VARIOUS_SKY_DROP_YAWN: // If the mon that's sleeping due to Yawn was holding a Pokemon in Sky Drop, release the target and clear Sky Drop data. + { + VARIOUS_ARGS(); if (gBattleStruct->skyDropTargets[gEffectBattler] != 0xFF && !(gStatuses3[gEffectBattler] & STATUS3_SKY_DROPPED)) { // Set the target of Sky Drop as gEffectBattler @@ -9778,12 +10403,16 @@ static void Cmd_various(void) } } break; + } case VARIOUS_JUMP_IF_PRANKSTER_BLOCKED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (BlocksPrankster(gCurrentMove, gBattlerAttacker, gActiveBattler, TRUE)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER: { bool8 shouldNotClear = FALSE; @@ -9818,15 +10447,20 @@ static void Cmd_various(void) break; } case VARIOUS_TRY_END_NEUTRALIZING_GAS: + { + VARIOUS_ARGS(); if (gSpecialStatuses[gActiveBattler].neutralizingGasRemoved) { gSpecialStatuses[gActiveBattler].neutralizingGasRemoved = FALSE; - BattleScriptPush(gBattlescriptCurrInstr + 3); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_NeutralizingGasExits; return; } break; + } case VARIOUS_GET_ROTOTILLER_TARGETS: + { + VARIOUS_ARGS(const u8 *failInstr); // Gets the battlers to be affected by rototiller. If there are none, print 'But it failed!' { u32 count = 0; @@ -9841,23 +10475,29 @@ static void Cmd_various(void) } if (count == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Rototiller fails + gBattlescriptCurrInstr = cmd->failInstr; // Rototiller fails else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (gSpecialStatuses[gActiveBattler].rototillerAffected) { gSpecialStatuses[gActiveBattler].rototillerAffected = FALSE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET + gBattlescriptCurrInstr = cmd->jumpInstr; // Unaffected by rototiller - print STRINGID_NOEFFECTONTARGET } return; + } case VARIOUS_TRY_ACTIVATE_BATTLE_BOND: + { + VARIOUS_ARGS(); if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND && HasAttackerFaintedTarget() && CalculateEnemyPartyCount() > 1 @@ -9872,23 +10512,28 @@ static void Cmd_various(void) return; } break; + } case VARIOUS_CONSUME_BERRY: + { + VARIOUS_ARGS(bool8 fromBattler); if (gBattleScripting.overrideBerryRequirements == 2) { - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - if (gBattlescriptCurrInstr[3]) + if (cmd->fromBattler) gLastUsedItem = gBattleMons[gActiveBattler].item; gBattleScripting.battler = gEffectBattler = gBattlerTarget = gActiveBattler; // Cover all berry effect battlerId cases. e.g. ChangeStatBuffs uses target ID if (ItemBattleEffects(ITEMEFFECT_USE_LAST_ITEM, gActiveBattler, FALSE)) return; - gBattlescriptCurrInstr += 4; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL: { + VARIOUS_ARGS(const u8 *jumpInstr); bool8 canDoPrimalReversion = FALSE; for (i = 0; i < EVOS_PER_MON; i++) @@ -9898,35 +10543,47 @@ static void Cmd_various(void) canDoPrimalReversion = TRUE; } if (!canDoPrimalReversion) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; } case VARIOUS_JUMP_IF_WEATHER_AFFECTED: { - u32 weatherFlags = T1_READ_32(gBattlescriptCurrInstr + 3); - if (IsBattlerWeatherAffected(gActiveBattler, weatherFlags)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 7); + VARIOUS_ARGS(u32 flags, const u8 *jumpInstr); + u32 flags = cmd->flags; + if (IsBattlerWeatherAffected(gActiveBattler, flags)) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 11; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - return; case VARIOUS_APPLY_PLASMA_FISTS: + { + VARIOUS_ARGS(); for (i = 0; i < gBattlersCount; i++) gStatuses4[i] |= STATUS4_PLASMA_FISTS; break; + } case VARIOUS_JUMP_IF_SPECIES: - if (gBattleMons[gActiveBattler].species == T1_READ_16(gBattlescriptCurrInstr + 3)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + { + VARIOUS_ARGS(u16 species, const u8 *jumpInstr); + if (gBattleMons[gActiveBattler].species == cmd->species) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_PHOTON_GEYSER_CHECK: + { + VARIOUS_ARGS(); gBattleStruct->swapDamageCategory = (GetSplitBasedOnStats(gActiveBattler) == SPLIT_SPECIAL); break; + } case VARIOUS_SHELL_SIDE_ARM_CHECK: // 0% chance GameFreak actually checks this way according to DaWobblefet, but this is the only functional explanation at the moment { + VARIOUS_ARGS(); + u32 attackerAtkStat = gBattleMons[gBattlerAttacker].attack; u32 targetDefStat = gBattleMons[gBattlerTarget].defense; u32 attackerSpAtkStat = gBattleMons[gBattlerAttacker].spAttack; @@ -9962,17 +10619,22 @@ static void Cmd_various(void) break; } case VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsLeafGuardProtected(gActiveBattler)) { gBattlerAbility = gActiveBattler; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; } else { - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_SET_ATTACKER_STICKY_WEB_USER: + { + VARIOUS_ARGS(); // For Mirror Armor: "If the Pokémon with this Ability is affected by Sticky Web, the effect is reflected back to the Pokémon which set it up. // If Pokémon which set up Sticky Web is not on the field, no Pokémon have their Speed lowered." gBattlerAttacker = gBattlerTarget; // Initialize 'fail' condition @@ -9980,8 +10642,11 @@ static void Cmd_various(void) if (gBattleStruct->stickyWebUser != 0xFF) gBattlerAttacker = gBattleStruct->stickyWebUser; break; + } case VARIOUS_CUT_1_3_HP_RAISE_STATS: { + VARIOUS_ARGS(const u8 *failInstr); + bool8 atLeastOneStatBoosted = FALSE; u16 hpFraction = max(1, gBattleMons[gBattlerAttacker].maxHP / 3); @@ -9996,79 +10661,99 @@ static void Cmd_various(void) if (atLeastOneStatBoosted && gBattleMons[gBattlerAttacker].hp > hpFraction) { gBattleMoveDamage = hpFraction; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } + return; } - return; case VARIOUS_SET_OCTOLOCK: + { + VARIOUS_ARGS(const u8 *failInstr); if (gDisableStructs[gActiveBattler].octolock) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gDisableStructs[gActiveBattler].octolock = TRUE; gBattleMons[gActiveBattler].status2 |= STATUS2_ESCAPE_PREVENTION; gDisableStructs[gActiveBattler].battlerPreventingEscape = gBattlerAttacker; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_CHECK_POLTERGEIST: + { + VARIOUS_ARGS(const u8 *failInstr); if (gBattleMons[gActiveBattler].item == ITEM_NONE || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || GetBattlerAbility(gActiveBattler) == ABILITY_KLUTZ) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { PREPARE_ITEM_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].item); gLastUsedItem = gBattleMons[gActiveBattler].item; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_NO_RETREAT: + { + VARIOUS_ARGS(const u8 *failInstr); if (gDisableStructs[gActiveBattler].noRetreat) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { if (!(gBattleMons[gActiveBattler].status2 & STATUS2_ESCAPE_PREVENTION)) gDisableStructs[gActiveBattler].noRetreat = TRUE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_TRY_TAR_SHOT: + { + VARIOUS_ARGS(const u8 *failInstr); if (gDisableStructs[gActiveBattler].tarShot) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } else { gDisableStructs[gActiveBattler].tarShot = TRUE; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } return; + } case VARIOUS_CAN_TAR_SHOT_WORK: + { + VARIOUS_ARGS(const u8 *failInstr); // Tar Shot will fail if it's already been used on the target and its speed can't be lowered further if (!gDisableStructs[gActiveBattler].tarShot && CompareStat(gActiveBattler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN)) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; return; + } case VARIOUS_JUMP_IF_CANT_FLING: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (!CanFling(gActiveBattler)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_CURE_CERTAIN_STATUSES: + { + VARIOUS_ARGS(); // Check infatuation if (gBattleMons[gActiveBattler].status2 & STATUS2_INFATUATION) { @@ -10109,43 +10794,70 @@ static void Cmd_various(void) gDisableStructs[gActiveBattler].disabledMove = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_MENTALHERBCURE_DISABLE; } - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES: + { + VARIOUS_ARGS(); gActiveBattler = gBattlerTarget; for (i = 0; i < NUM_BATTLE_STATS; i++) if (gBattleMons[gActiveBattler].statStages[i] < DEFAULT_STAT_STAGE) gBattleMons[gActiveBattler].statStages[i] = DEFAULT_STAT_STAGE; - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (ItemId_GetPocket(gLastUsedItem) == POCKET_BERRIES) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT: - if (ItemId_GetHoldEffect(gLastUsedItem) == gBattlescriptCurrInstr[3]) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + { + VARIOUS_ARGS(u8 holdEffect, const u8 *jumpInstr); + if (ItemId_GetHoldEffect(gLastUsedItem) == cmd->holdEffect) + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_SAVE_BATTLER_ITEM: + { + VARIOUS_ARGS(); gBattleResources->battleHistory->heldItems[gActiveBattler] = gBattleMons[gActiveBattler].item; break; + } case VARIOUS_RESTORE_BATTLER_ITEM: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].item = gBattleResources->battleHistory->heldItems[gActiveBattler]; break; + } case VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM: + { + VARIOUS_ARGS(); gBattleMons[gActiveBattler].item = gLastUsedItem; break; + } case VARIOUS_SET_BEAK_BLAST: + { + VARIOUS_ARGS(); gProtectStructs[gActiveBattler].beakBlastCharge = TRUE; break; + } case VARIOUS_SWAP_SIDE_STATUSES: + { + VARIOUS_ARGS(); CourtChangeSwapSideStatuses(); break; + } case VARIOUS_TRY_SYMBIOSIS: //called by Bestow, Fling, and Bug Bite, which don't work with Cmd_removeitem. + { + VARIOUS_ARGS(); if (SYMBIOSIS_CHECK(gActiveBattler, BATTLE_PARTNER(gActiveBattler))) { BestowItem(BATTLE_PARTNER(gActiveBattler), gActiveBattler); @@ -10157,33 +10869,42 @@ static void Cmd_various(void) return; } break; + } case VARIOUS_CAN_TELEPORT: + { + VARIOUS_ARGS(); gBattleCommunication[0] = CanTeleport(gActiveBattler); break; + } case VARIOUS_GET_BATTLER_SIDE: + { + VARIOUS_ARGS(); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) gBattleCommunication[0] = B_SIDE_PLAYER; else gBattleCommunication[0] = B_SIDE_OPPONENT; break; + } case VARIOUS_CHECK_PARENTAL_BOND_COUNTER: { + VARIOUS_ARGS(u8 counter, const u8 *jumpInstr); // Some effects should only happen on the first or second strike of Parental Bond, // so a way to check this in battle scripts is useful - u8 counter = T1_READ_8(gBattlescriptCurrInstr + 3); + u8 counter = cmd->counter; if (gSpecialStatuses[gBattlerAttacker].parentalBondState == counter && gBattleMons[gBattlerTarget].hp != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 4); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 8; + gBattlescriptCurrInstr = cmd->nextInstr; return; } - break; case VARIOUS_SWAP_STATS: { - u8 statId = T1_READ_8(gBattlescriptCurrInstr + 3); + VARIOUS_ARGS(u8 stat); + + u8 stat = cmd->stat; u16 temp; - switch (statId) + switch (stat) { case STAT_HP: SWAP(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerTarget].hp, temp); @@ -10204,13 +10925,13 @@ static void Cmd_various(void) SWAP(gBattleMons[gBattlerAttacker].spDefense, gBattleMons[gBattlerTarget].spDefense, temp); break; } - PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); - gBattlescriptCurrInstr += 4; + PREPARE_STAT_BUFFER(gBattleTextBuff1, stat); + gBattlescriptCurrInstr = cmd->nextInstr; return; } - break; case VARIOUS_TEATIME_TARGETS: { + VARIOUS_ARGS(const u8 *jumpInstr); u32 count = 0; for (i = 0; i < gBattlersCount; i++) @@ -10219,37 +10940,50 @@ static void Cmd_various(void) count++; } if (count == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); // Teatime fails + gBattlescriptCurrInstr = cmd->jumpInstr; // Teatime fails else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - return; - case VARIOUS_TEATIME_INVUL: + case VARIOUS_TEATIME_INVUL: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (ItemId_GetPocket(gBattleMons[gActiveBattler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; return; - case VARIOUS_JUMP_IF_ROD: + } + case VARIOUS_JUMP_IF_ROD: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsAbilityRodAffected()) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; - case VARIOUS_JUMP_IF_MOTOR: + } + case VARIOUS_JUMP_IF_MOTOR: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsAbilityMotorAffected()) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; - case VARIOUS_JUMP_IF_ABSORB: + } + case VARIOUS_JUMP_IF_ABSORB: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (IsAbilityAbsorbAffected()) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; + } case VARIOUS_TRY_WIND_RIDER_POWER: { + VARIOUS_ARGS(const u8 *failInstr); u16 ability = GetBattlerAbility(gActiveBattler); if (GetBattlerSide(gActiveBattler) == GetBattlerSide(gBattlerAttacker) && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) @@ -10257,24 +10991,31 @@ static void Cmd_various(void) gLastUsedAbility = ability; RecordAbilityBattle(gActiveBattler, gLastUsedAbility); gBattlerAbility = gBattleScripting.battler = gActiveBattler; - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->failInstr; } + return; } - return; case VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES: - gBattlescriptCurrInstr += 3; + { + VARIOUS_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0); return; + } case VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES: - gBattlescriptCurrInstr += 3; + { + VARIOUS_ARGS(); + gBattlescriptCurrInstr = cmd->nextInstr; AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0); return; + } case VARIOUS_JUMP_IF_NO_VALID_TARGETS: { + VARIOUS_ARGS(const u8 *jumpInstr); u32 count = 0; for (i = 0; i < gBattlersCount; i++) @@ -10283,24 +11024,29 @@ static void Cmd_various(void) count++; } if (count == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; + return; } - return; case VARIOUS_JUMP_IF_EMERGENCY_EXITED: + { + VARIOUS_ARGS(const u8 *jumpInstr); if (gSpecialStatuses[gActiveBattler].emergencyExited) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 7; + gBattlescriptCurrInstr = cmd->nextInstr; return; - } // End of switch (gBattlescriptCurrInstr[2]) + } + } // End of switch (cmd->id) - gBattlescriptCurrInstr += 3; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setprotectlike(void) { + CMD_ARGS(); + bool32 fail = TRUE; bool32 notLastTurn = TRUE; @@ -10393,11 +11139,13 @@ static void Cmd_setprotectlike(void) gMoveResultFlags |= MOVE_RESULT_MISSED; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryexplosion(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -10414,7 +11162,7 @@ static void Cmd_tryexplosion(void) gBattleMoveDamage = gBattleMons[gActiveBattler].hp; BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -10427,6 +11175,8 @@ static void Cmd_tryexplosion(void) static void Cmd_setatkhptozero(void) { + CMD_ARGS(); + if (gBattleControllerExecFlags) return; @@ -10435,12 +11185,14 @@ static void Cmd_setatkhptozero(void) BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].hp), &gBattleMons[gActiveBattler].hp); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifnexttargetvalid(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; for (gBattlerTarget++; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -10451,16 +11203,18 @@ static void Cmd_jumpifnexttargetvalid(void) } if (gBattlerTarget >= gBattlersCount) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = jumpInstr; } static void Cmd_tryhealhalfhealth(void) { - const u8 *failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr, u8 battler); - if (gBattlescriptCurrInstr[5] == BS_ATTACKER) + const u8 *failInstr = cmd->failInstr; + + if (cmd->battler == BS_ATTACKER) gBattlerTarget = gBattlerAttacker; gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2; @@ -10469,13 +11223,15 @@ static void Cmd_tryhealhalfhealth(void) gBattleMoveDamage *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = failPtr; + gBattlescriptCurrInstr = failInstr; else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trymirrormove(void) { + CMD_ARGS(); + s32 validMovesCount; s32 i; u16 move; @@ -10515,12 +11271,14 @@ static void Cmd_trymirrormove(void) else // no valid moves found { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setrain(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_RAIN, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -10530,11 +11288,13 @@ static void Cmd_setrain(void) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setreflect(void) { + CMD_ARGS(); + if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_REFLECT) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -10554,11 +11314,13 @@ static void Cmd_setreflect(void) else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setseeded(void) { + CMD_ARGS(); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -10576,12 +11338,14 @@ static void Cmd_setseeded(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_LEECH_SEED_SET; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_manipulatedamage(void) { - switch (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 mode); + + switch (cmd->mode) { case DMG_CHANGE_SIGN: gBattleMoveDamage *= -1; @@ -10623,18 +11387,20 @@ static void Cmd_manipulatedamage(void) break; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetrest(void) { - const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; gActiveBattler = gBattlerTarget = gBattlerAttacker; gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP * (-1); if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) { - gBattlescriptCurrInstr = failJump; + gBattlescriptCurrInstr = failInstr; } else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) { @@ -10654,30 +11420,34 @@ static void Cmd_trysetrest(void) gBattleMons[gBattlerTarget].status1 = STATUS1_SLEEP_TURN(3); BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifnotfirstturn(void) { - const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; if (gDisableStructs[gBattlerAttacker].isFirstTurn) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = failJump; + gBattlescriptCurrInstr = jumpInstr; } static void Cmd_setmiracleeye(void) { + CMD_ARGS(const u8 *failInstr); + if (!(gStatuses3[gBattlerTarget] & STATUS3_MIRACLE_EYED)) { gStatuses3[gBattlerTarget] |= STATUS3_MIRACLE_EYED; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } @@ -10710,15 +11480,22 @@ bool8 UproarWakeUpCheck(u8 battlerId) static void Cmd_jumpifuproarwakes(void) { + CMD_ARGS(const u8 *jumpInstr); + + const u8 *jumpInstr = cmd->jumpInstr; + u32 ability = GetBattlerAbility(gBattlerTarget); + if (UproarWakeUpCheck(gBattlerTarget)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_stockpile(void) { - switch (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 id); + + switch (cmd->id) { case 0: if (gDisableStructs[gBattlerAttacker].stockpileCounter >= 3) @@ -10744,15 +11521,17 @@ static void Cmd_stockpile(void) break; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_stockpiletobasedamage(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } else { @@ -10766,17 +11545,19 @@ static void Cmd_stockpiletobasedamage(void) gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_stockpiletohpheal(void) { - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(const u8 *failInstr); + + const u8 *failInstr = cmd->failInstr; if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0) { - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FAILED; } else @@ -10784,7 +11565,7 @@ static void Cmd_stockpiletohpheal(void) if (gBattleMons[gBattlerAttacker].maxHP == gBattleMons[gBattlerAttacker].hp) { gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; gBattlerTarget = gBattlerAttacker; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SWALLOW_FULL_HP; } @@ -10798,7 +11579,7 @@ static void Cmd_stockpiletohpheal(void) gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } @@ -10811,6 +11592,8 @@ static void Cmd_stockpiletohpheal(void) // Sign change for drained HP handled in GetDrainedBigRootHp static void Cmd_setdrainedhp(void) { + CMD_ARGS(); + if (gBattleMoves[gCurrentMove].argument != 0) gBattleMoveDamage = (gHpDealt * gBattleMoves[gCurrentMove].argument / 100); else @@ -10819,7 +11602,7 @@ static void Cmd_setdrainedhp(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static u16 ReverseStatChangeMoveEffect(u16 moveEffect) @@ -11145,14 +11928,16 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr static void Cmd_statbuffchange(void) { - u16 flags = T1_READ_16(gBattlescriptCurrInstr + 1); - const u8 *ptrBefore = gBattlescriptCurrInstr; - const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + CMD_ARGS(u16 flags, const u8 *failInstr); - if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), GET_STAT_BUFF_ID(gBattleScripting.statChanger), flags, jumpPtr) == STAT_CHANGE_WORKED) - gBattlescriptCurrInstr += 7; + u16 flags = cmd->flags; + 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) + gBattlescriptCurrInstr = cmd->nextInstr; else if (gBattlescriptCurrInstr == ptrBefore) // Prevent infinite looping. - gBattlescriptCurrInstr = jumpPtr; + gBattlescriptCurrInstr = failInstr; } bool32 TryResetBattlerStatChanges(u8 battler) @@ -11176,37 +11961,45 @@ bool32 TryResetBattlerStatChanges(u8 battler) // Haze static void Cmd_normalisebuffs(void) { + CMD_ARGS(); + s32 i, j; for (i = 0; i < gBattlersCount; i++) TryResetBattlerStatChanges(i); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setbide(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gBattlerAttacker] = gCurrentMove; gTakenDmg[gBattlerAttacker] = 0; gBattleMons[gBattlerAttacker].status2 |= STATUS2_BIDE_TURN(2); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_confuseifrepeatingattackends(void) { + CMD_ARGS(); + if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) && !gSpecialStatuses[gBattlerAttacker].dancerUsedMove) gBattleScripting.moveEffect = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setmultihitcounter(void) { - if (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 value); + + if (cmd->value) { - gMultiHitCounter = gBattlescriptCurrInstr[1]; + gMultiHitCounter = cmd->value; } else { @@ -11243,18 +12036,22 @@ static void Cmd_setmultihitcounter(void) } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_initmultihitstring(void) { + CMD_ARGS(); + PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_forcerandomswitch(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; s32 battler1PartyId = 0; s32 battler2PartyId = 0; @@ -11420,7 +12217,7 @@ static void Cmd_forcerandomswitch(void) if (!redCardForcedSwitch && validMons <= minNeeded) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11462,12 +12259,14 @@ static void Cmd_forcerandomswitch(void) if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) gBattlescriptCurrInstr = BattleScript_RoarSuccessEndBattle; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_tryconversiontypechange(void) { + CMD_ARGS(const u8 *failInstr); + u8 validMoves = 0; u8 moveChecked; u8 moveType; @@ -11484,13 +12283,13 @@ static void Cmd_tryconversiontypechange(void) } if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } #else // Randomly changes user's type to one of its moves' type @@ -11523,7 +12322,7 @@ static void Cmd_tryconversiontypechange(void) if (moveChecked == validMoves) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11546,13 +12345,15 @@ static void Cmd_tryconversiontypechange(void) SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } #endif } static void Cmd_givepaydaymoney(void) { + CMD_ARGS(); + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) && gPaydayMoney != 0) { u32 bonusMoney = gPaydayMoney * gBattleStruct->moneyMultiplier; @@ -11560,17 +12361,19 @@ static void Cmd_givepaydaymoney(void) PREPARE_HWORD_NUMBER_BUFFER(gBattleTextBuff1, 5, bonusMoney) - BattleScriptPush(gBattlescriptCurrInstr + 1); + BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString; } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setlightscreen(void) { + CMD_ARGS(); + if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_LIGHTSCREEN) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -11591,11 +12394,13 @@ static void Cmd_setlightscreen(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryKO(void) { + CMD_ARGS(const u8 *failInstr); + bool32 lands = FALSE; u32 holdEffect = GetBattlerHoldEffect(gBattlerTarget, TRUE); u16 targetAbility = GetBattlerAbility(gBattlerTarget); @@ -11666,7 +12471,7 @@ static void Cmd_tryKO(void) gBattleMoveDamage = gBattleMons[gBattlerTarget].hp; gMoveResultFlags |= MOVE_RESULT_ONE_HIT_KO; } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -11675,7 +12480,7 @@ static void Cmd_tryKO(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_MISS; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } } @@ -11683,15 +12488,19 @@ static void Cmd_tryKO(void) // Super Fang static void Cmd_damagetohalftargethp(void) { + CMD_ARGS(); + gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setsandstorm(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SANDSTORM, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -11701,11 +12510,13 @@ static void Cmd_setsandstorm(void) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_weatherdamage(void) { + CMD_ARGS(); + u32 ability = GetBattlerAbility(gBattlerAttacker); gBattleMoveDamage = 0; @@ -11755,11 +12566,13 @@ static void Cmd_weatherdamage(void) } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryinfatuating(void) { + CMD_ARGS(const u8 *failInstr); + struct Pokemon *monAttacker, *monTarget; u16 speciesAttacker, speciesTarget; u32 personalityAttacker, personalityTarget; @@ -11793,27 +12606,29 @@ static void Cmd_tryinfatuating(void) || GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS || GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].status2 |= STATUS2_INFATUATED_WITH(gBattlerAttacker); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_updatestatusicon(void) { + CMD_ARGS(u8 battler); + if (gBattleControllerExecFlags) return; - if (gBattlescriptCurrInstr[1] != BS_ATTACKER_WITH_PARTNER) + if (cmd->battler != BS_ATTACKER_WITH_PARTNER) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + gActiveBattler = GetBattlerForBattleScript(cmd->battler); BtlController_EmitStatusIconUpdate(BUFFER_A, gBattleMons[gActiveBattler].status1, gBattleMons[gActiveBattler].status2); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } else { @@ -11832,12 +12647,14 @@ static void Cmd_updatestatusicon(void) MarkBattlerForControllerExec(gActiveBattler); } } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setmist(void) { + CMD_ARGS(); + if (gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -11850,11 +12667,13 @@ static void Cmd_setmist(void) gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] |= SIDE_STATUS_MIST; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_MIST; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setfocusenergy(void) { + CMD_ARGS(); + if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY) { gMoveResultFlags |= MOVE_RESULT_FAILED; @@ -11865,13 +12684,15 @@ static void Cmd_setfocusenergy(void) gBattleMons[gBattlerAttacker].status2 |= STATUS2_FOCUS_ENERGY; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_GETTING_PUMPED; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_transformdataexecution(void) { + CMD_ARGS(); + gChosenMove = MOVE_UNAVAILABLE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; if (gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED || gBattleStruct->illusion[gBattlerTarget].on || gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE) @@ -11917,6 +12738,8 @@ static void Cmd_transformdataexecution(void) static void Cmd_setsubstitute(void) { + CMD_ARGS(); + u32 hp = gBattleMons[gBattlerAttacker].maxHP / 4; if (gBattleMons[gBattlerAttacker].maxHP / 4 == 0) hp = 1; @@ -11939,16 +12762,18 @@ static void Cmd_setsubstitute(void) gHitMarker |= HITMARKER_IGNORE_SUBSTITUTE; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_mimicattackcopy(void) { + CMD_ARGS(const u8 *failInstr); + if ((sForbiddenMoves[gLastMoves[gBattlerTarget]] & FORBIDDEN_MIMIC) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) || gLastMoves[gBattlerTarget] == MOVE_UNAVAILABLE) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -11972,17 +12797,19 @@ static void Cmd_mimicattackcopy(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos]; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } } static void Cmd_metronome(void) { + CMD_ARGS(); + #if B_METRONOME_MOVES >= GEN_9 u16 moveCount = MOVES_COUNT_GEN9; #elif B_METRONOME_MOVES >= GEN_8 @@ -12017,12 +12844,16 @@ static void Cmd_metronome(void) static void Cmd_dmgtolevel(void) { + CMD_ARGS(); + gBattleMoveDamage = gBattleMons[gBattlerAttacker].level; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_psywavedamageeffect(void) { + CMD_ARGS(); + s32 randDamage; #if B_PSYWAVE_DMG >= GEN_6 randDamage = (Random() % 101); @@ -12030,11 +12861,13 @@ static void Cmd_psywavedamageeffect(void) randDamage = (Random() % 11) * 10; #endif gBattleMoveDamage = gBattleMons[gBattlerAttacker].level * (randDamage + 50) / 100; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_counterdamagecalculator(void) { + CMD_ARGS(const u8 *failInstr); + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId); @@ -12049,18 +12882,20 @@ static void Cmd_counterdamagecalculator(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // A copy of Cmd with the physical -> special field changes static void Cmd_mirrorcoatdamagecalculator(void) { + CMD_ARGS(const u8 *failInstr); + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId); @@ -12075,17 +12910,19 @@ static void Cmd_mirrorcoatdamagecalculator(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_disablelastusedattack(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; for (i = 0; i < MAX_MON_MOVES; i++) @@ -12106,16 +12943,18 @@ static void Cmd_disablelastusedattack(void) #else gDisableStructs[gBattlerTarget].disableTimer = 4; #endif - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_trysetencore(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; for (i = 0; i < MAX_MON_MOVES; i++) @@ -12141,16 +12980,18 @@ static void Cmd_trysetencore(void) gDisableStructs[gBattlerTarget].encoredMovePos = i; gDisableStructs[gBattlerTarget].encoreTimer = 3; gDisableStructs[gBattlerTarget].encoreTimer; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_painsplitdmgcalc(void) { + CMD_ARGS(const u8 *failInstr); + if (!(DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))) { s32 hpDiff = (gBattleMons[gBattlerAttacker].hp + gBattleMons[gBattlerTarget].hp) / 2; @@ -12165,26 +13006,28 @@ static void Cmd_painsplitdmgcalc(void) gBattleMoveDamage = gBattleMons[gBattlerAttacker].hp - hpDiff; gSpecialStatuses[gBattlerTarget].dmg = 0xFFFF; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Conversion 2 static void Cmd_settypetorandomresistance(void) { + CMD_ARGS(const u8 *failInstr); + if (gLastLandedMoves[gBattlerAttacker] == MOVE_NONE || gLastLandedMoves[gBattlerAttacker] == MOVE_UNAVAILABLE) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker]) && gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -12215,27 +13058,31 @@ static void Cmd_settypetorandomresistance(void) { SET_BATTLER_TYPE(gBattlerAttacker, i); PREPARE_TYPE_BUFFER(gBattleTextBuff1, i); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; return; } } } - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setalwayshitflag(void) { + CMD_ARGS(); + gStatuses3[gBattlerTarget] &= ~STATUS3_ALWAYS_HITS; gStatuses3[gBattlerTarget] |= STATUS3_ALWAYS_HITS_TURN(2); gDisableStructs[gBattlerTarget].battlerWithSureHit = gBattlerAttacker; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Sketch static void Cmd_copymovepermanently(void) { + CMD_ARGS(const u8 *failInstr); + gChosenMove = MOVE_UNAVAILABLE; if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_TRANSFORMED) @@ -12256,7 +13103,7 @@ static void Cmd_copymovepermanently(void) if (i != MAX_MON_MOVES) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else // sketch worked { @@ -12278,12 +13125,12 @@ static void Cmd_copymovepermanently(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastPrintedMoves[gBattlerTarget]) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } @@ -12322,6 +13169,8 @@ static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a c static void Cmd_trychoosesleeptalkmove(void) { + CMD_ARGS(const u8 *failInstr); + u32 i, unusableMovesBits = 0, movePosition; for (i = 0; i < MAX_MON_MOVES; i++) @@ -12336,7 +13185,7 @@ static void Cmd_trychoosesleeptalkmove(void) unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP); if (unusableMovesBits == (1 << MAX_MON_MOVES) - 1) // all 4 moves cannot be chosen { - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else // at least one move can be chosen { @@ -12349,14 +13198,16 @@ static void Cmd_trychoosesleeptalkmove(void) gCurrMovePos = movePosition; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setdestinybond(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status2 |= STATUS2_DESTINY_BOND; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void TrySetDestinyBondToHappen(void) @@ -12373,12 +13224,16 @@ static void TrySetDestinyBondToHappen(void) static void Cmd_trysetdestinybondtohappen(void) { + CMD_ARGS(); + TrySetDestinyBondToHappen(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_settailwind(void) { + CMD_ARGS(const u8 *failInstr); + u8 side = GetBattlerSide(gBattlerAttacker); if (!(gSideStatuses[side] & SIDE_STATUS_TAILWIND)) @@ -12390,16 +13245,18 @@ static void Cmd_settailwind(void) #else gSideTimers[side].tailwindTimer = 3; #endif - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_tryspiteppreduce(void) { + CMD_ARGS(const u8 *failInstr); + if (gLastMoves[gBattlerTarget] != MOVE_NONE && gLastMoves[gBattlerTarget] != MOVE_UNAVAILABLE) { @@ -12443,7 +13300,7 @@ static void Cmd_tryspiteppreduce(void) MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; // Don't cut off Sky Drop if pp is brought to zero. if (gBattleMons[gBattlerTarget].pp[i] == 0 && gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF) @@ -12451,17 +13308,19 @@ static void Cmd_tryspiteppreduce(void) } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_healpartystatus(void) { + CMD_ARGS(); + u32 zero = 0; u8 toHeal = 0; @@ -12555,14 +13414,16 @@ static void Cmd_healpartystatus(void) MarkBattlerForControllerExec(gActiveBattler); } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_cursetarget(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -12571,35 +13432,41 @@ static void Cmd_cursetarget(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trysetspikes(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (gSideTimers[targetSide].spikesAmount == 3) { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gSideStatuses[targetSide] |= SIDE_STATUS_SPIKES; gSideTimers[targetSide].spikesAmount++; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setforesight(void) { + CMD_ARGS(); + gBattleMons[gBattlerTarget].status2 |= STATUS2_FORESIGHT; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetperishsong(void) { + CMD_ARGS(const u8 *failInstr); + s32 i; s32 notAffectedCount = 0; @@ -12621,13 +13488,15 @@ static void Cmd_trysetperishsong(void) PressurePPLoseOnUsingPerishSong(gBattlerAttacker); if (notAffectedCount == gBattlersCount) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_handlerollout(void) { + CMD_ARGS(); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { CancelMultiTurnMoves(gBattlerAttacker); @@ -12647,21 +13516,25 @@ static void Cmd_handlerollout(void) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_MULTIPLETURNS; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifconfusedandstatmaxed(void) { + CMD_ARGS(u8 stat, const u8 *jumpInstr); + if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION - && !CompareStat(gBattlerTarget, gBattlescriptCurrInstr[1], MAX_STAT_STAGE, CMP_LESS_THAN)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); // Fails if we're confused AND stat cannot be raised + && !CompareStat(gBattlerTarget, cmd->stat, MAX_STAT_STAGE, CMP_LESS_THAN)) + gBattlescriptCurrInstr = cmd->jumpInstr; // Fails if we're confused AND stat cannot be raised else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_handlefurycutter(void) { + CMD_ARGS(); + if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { gDisableStructs[gBattlerAttacker].furyCutterCounter = 0; @@ -12673,26 +13546,30 @@ static void Cmd_handlefurycutter(void) && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) // Don't increment counter on first hit gDisableStructs[gBattlerAttacker].furyCutterCounter++; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setembargo(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & STATUS3_EMBARGO) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses3[gBattlerTarget] |= STATUS3_EMBARGO; gDisableStructs[gBattlerTarget].embargoTimer = 5; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_presentdamagecalculation(void) { + CMD_ARGS(); + u32 rand = Random() & 0xFF; /* Don't reroll present effect/power for the second hit of Parental Bond. @@ -12742,6 +13619,8 @@ static void Cmd_presentdamagecalculation(void) static void Cmd_setsafeguard(void) { + CMD_ARGS(); + if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -12755,11 +13634,13 @@ static void Cmd_setsafeguard(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_SAFEGUARD; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_magnitudedamagecalculation(void) { + CMD_ARGS(); + u32 magnitude = Random() % 100; if (magnitude < 5) @@ -12808,11 +13689,13 @@ static void Cmd_magnitudedamagecalculation(void) break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifnopursuitswitchdmg(void) { + CMD_ARGS(const u8 *jumpInstr); + if (gMultiHitCounter == 1) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) @@ -12845,18 +13728,20 @@ static void Cmd_jumpifnopursuitswitchdmg(void) gCurrentMove = MOVE_PURSUIT; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerTarget); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; } } static void Cmd_setsunny(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SUN, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -12867,12 +13752,14 @@ static void Cmd_setsunny(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Belly Drum static void Cmd_maxattackhalvehp(void) { + CMD_ARGS(const u8 *failInstr); + u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2; if (!(gBattleMons[gBattlerAttacker].maxHP / 2)) @@ -12887,17 +13774,19 @@ static void Cmd_maxattackhalvehp(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Psych Up static void Cmd_copyfoestats(void) { + CMD_ARGS(const u8 *unused); + s32 i; for (i = 0; i < NUM_BATTLE_STATS; i++) @@ -12905,11 +13794,13 @@ static void Cmd_copyfoestats(void) gBattleMons[gBattlerAttacker].statStages[i] = gBattleMons[gBattlerTarget].statStages[i]; } - gBattlescriptCurrInstr += 5; // Has an unused jump ptr(possibly for a failed attempt) parameter. + gBattlescriptCurrInstr = cmd->nextInstr; // Has an unused jump ptr(possibly for a failed attempt) parameter. } static void Cmd_rapidspinfree(void) { + CMD_ARGS(); + u8 atkSide = GetBattlerSide(gBattlerAttacker); if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED) @@ -12958,18 +13849,22 @@ static void Cmd_rapidspinfree(void) } else { - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setdefensecurlbit(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status2 |= STATUS2_DEFENSE_CURL; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_recoverbasedonsunlight(void) { + CMD_ARGS(const u8 *failInstr); + gBattlerTarget = gBattlerAttacker; if (gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP) { @@ -12994,21 +13889,23 @@ static void Cmd_recoverbasedonsunlight(void) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setstickyweb(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); if (gSideStatuses[targetSide] & SIDE_STATUS_STICKY_WEB) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13016,12 +13913,14 @@ static void Cmd_setstickyweb(void) gSideTimers[targetSide].stickyWebBattlerSide = GetBattlerSide(gBattlerAttacker); // For Court Change/Defiant - set this to the user's side gSideTimers[targetSide].stickyWebAmount = 1; gBattleStruct->stickyWebUser = gBattlerAttacker; // For Mirror Armor - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_selectfirstvalidtarget(void) { + CMD_ARGS(); + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { if (gBattlerTarget == gBattlerAttacker && !(GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove) & MOVE_TARGET_USER)) @@ -13029,14 +13928,16 @@ static void Cmd_selectfirstvalidtarget(void) if (IsBattlerAlive(gBattlerTarget)) break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetfutureattack(void) { + CMD_ARGS(const u8 *failInstr); + if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13050,15 +13951,17 @@ static void Cmd_trysetfutureattack(void) else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FUTURE_SIGHT; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trydobeatup(void) { + CMD_ARGS(const u8 *endInstr, const u8 *failInstr); + #if B_BEAT_UP >= GEN_5 gBattleStruct->beatUpSlot++; - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; #else struct Pokemon *party; @@ -13069,7 +13972,7 @@ static void Cmd_trydobeatup(void) if (gBattleMons[gBattlerTarget].hp == 0) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->endInstr; } else { @@ -13086,7 +13989,7 @@ static void Cmd_trydobeatup(void) { PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattleCommunication[0]) - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleMoveDamage = gSpeciesInfo[GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES)].baseAttack; gBattleMoveDamage *= gBattleMoves[gCurrentMove].power; @@ -13099,15 +14002,17 @@ static void Cmd_trydobeatup(void) gBattleCommunication[0]++; } else if (beforeLoop != 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->endInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->failInstr; } #endif } static void Cmd_setsemiinvulnerablebit(void) { + CMD_ARGS(); + switch (gCurrentMove) { case MOVE_FLY: @@ -13127,25 +14032,31 @@ static void Cmd_setsemiinvulnerablebit(void) break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_clearsemiinvulnerablebit(void) { + CMD_ARGS(); + gStatuses3[gBattlerAttacker] &= ~STATUS3_SEMI_INVULNERABLE; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setminimize(void) { + CMD_ARGS(); + if (gHitMarker & HITMARKER_OBEYS) gStatuses3[gBattlerAttacker] |= STATUS3_MINIMIZED; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_sethail(void) { + CMD_ARGS(); + if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_HAIL, FALSE)) { gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -13156,11 +14067,13 @@ static void Cmd_sethail(void) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trymemento(void) { + CMD_ARGS(const u8 *failInstr); + #if B_MEMENTO_FAIL == GEN_3 if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == MIN_STAT_STAGE && gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == MIN_STAT_STAGE @@ -13173,7 +14086,7 @@ static void Cmd_trymemento(void) #endif { // Failed, unprotected target already has minimum Attack and Special Attack. - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13182,34 +14095,41 @@ static void Cmd_trymemento(void) gBattleMoveDamage = gBattleMons[gActiveBattler].hp; BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } // Follow Me static void Cmd_setforcedtarget(void) { + CMD_ARGS(); + gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTimer = 1; gSideTimers[GetBattlerSide(gBattlerTarget)].followmeTarget = gBattlerTarget; gSideTimers[GetBattlerSide(gBattlerTarget)].followmePowder = TestMoveFlags(gCurrentMove, FLAG_POWDER); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_setcharge(void) { + CMD_ARGS(); + gStatuses3[gBattlerAttacker] |= STATUS3_CHARGED_UP; gDisableStructs[gBattlerAttacker].chargeTimer = 2; gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Nature Power static void Cmd_callterrainattack(void) { + CMD_ARGS(); + gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gCurrentMove = GetNaturePowerMove(); gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE); BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } u16 GetNaturePowerMove(void) @@ -13230,43 +14150,51 @@ u16 GetNaturePowerMove(void) // Refresh static void Cmd_cureifburnedparalysedorpoisoned(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)) { gBattleMons[gBattlerAttacker].status1 = 0; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gActiveBattler = gBattlerAttacker; BtlController_EmitSetMonData(BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].status1), &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_settorment(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].status2 |= STATUS2_TORMENT; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifnodamage(void) { + CMD_ARGS(const u8 *jumpInstr); + if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; } static void Cmd_settaunt(void) { + CMD_ARGS(const u8 *failInstr); + #if B_OBLIVIOUS_TAUNT >= GEN_6 if (GetBattlerAbility(gBattlerTarget) == ABILITY_OBLIVIOUS) { @@ -13289,16 +14217,18 @@ static void Cmd_settaunt(void) #endif gDisableStructs[gBattlerTarget].tauntTimer = turns; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_trysethelpinghand(void) { + CMD_ARGS(const u8 *failInstr); + gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE @@ -13307,17 +14237,19 @@ static void Cmd_trysethelpinghand(void) && !gProtectStructs[gBattlerTarget].helpingHand) { gProtectStructs[gBattlerTarget].helpingHand = TRUE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Trick static void Cmd_tryswapitems(void) { + CMD_ARGS(const u8 *failInstr); + // opponent can't swap items with player in regular battles if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL || (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT @@ -13331,7 +14263,7 @@ static void Cmd_tryswapitems(void) #endif )))) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13347,7 +14279,7 @@ static void Cmd_tryswapitems(void) && (gWishFutureKnock.knockedOffMons[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]] || gWishFutureKnock.knockedOffMons[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]])) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } // can't swap if two pokemon don't have an item // or if either of them is an enigma berry or a mail @@ -13357,7 +14289,7 @@ static void Cmd_tryswapitems(void) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerTarget].item) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } // check if ability prevents swapping else if (GetBattlerAbility(gBattlerTarget) == ABILITY_STICKY_HOLD) @@ -13392,7 +14324,7 @@ static void Cmd_tryswapitems(void) gBattleStruct->choicedMove[gBattlerTarget] = MOVE_NONE; gBattleStruct->choicedMove[gBattlerAttacker] = MOVE_NONE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; PREPARE_ITEM_BUFFER(gBattleTextBuff1, *newItemAtk) PREPARE_ITEM_BUFFER(gBattleTextBuff2, oldItemAtk) @@ -13429,6 +14361,8 @@ static void Cmd_tryswapitems(void) // Role Play static void Cmd_trycopyability(void) { + CMD_ARGS(const u8 *failInstr); + u16 defAbility = gBattleMons[gBattlerTarget].ability; if (gBattleMons[gBattlerAttacker].ability == defAbility @@ -13436,31 +14370,33 @@ static void Cmd_trycopyability(void) || IsRolePlayBannedAbilityAtk(gBattleMons[gBattlerAttacker].ability) || IsRolePlayBannedAbility(defAbility)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleScripting.abilityPopupOverwrite = gBattleMons[gBattlerAttacker].ability; gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = defAbility; gLastUsedAbility = defAbility; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_trywish(void) { - switch (gBattlescriptCurrInstr[1]) + CMD_ARGS(u8 turnNumber, const u8 *failInstr); + + switch (cmd->turnNumber) { case 0: // use wish if (gWishFutureKnock.wishCounter[gBattlerAttacker] == 0) { gWishFutureKnock.wishCounter[gBattlerAttacker] = 2; gWishFutureKnock.wishPartyId[gBattlerAttacker] = gBattlerPartyIndexes[gBattlerAttacker]; - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->failInstr; } break; case 1: // heal effect @@ -13476,9 +14412,9 @@ static void Cmd_trywish(void) gBattleMoveDamage *= -1; if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->failInstr; else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; break; } @@ -13486,24 +14422,28 @@ static void Cmd_trywish(void) static void Cmd_settoxicspikes(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); if (gSideTimers[targetSide].toxicSpikesAmount >= 2) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gSideTimers[targetSide].toxicSpikesAmount++; gSideStatuses[targetSide] |= SIDE_STATUS_TOXIC_SPIKES; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setgastroacid(void) { + CMD_ARGS(const u8 *failInstr); + if (IsGastroAcidBannedAbility(gBattleMons[gBattlerTarget].ability)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13511,16 +14451,18 @@ static void Cmd_setgastroacid(void) gSpecialStatuses[gBattlerTarget].neutralizingGasRemoved = TRUE; gStatuses3[gBattlerTarget] |= STATUS3_GASTRO_ACID; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setyawn(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & STATUS3_YAWN || gBattleMons[gBattlerTarget].status1 & STATUS1_ANY) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) { @@ -13537,20 +14479,22 @@ static void Cmd_setyawn(void) else { gStatuses3[gBattlerTarget] |= STATUS3_YAWN_TURN(2); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setdamagetohealthdifference(void) { + CMD_ARGS(const u8 *failInstr); + if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - gBattleMons[gBattlerAttacker].hp; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13572,6 +14516,8 @@ static void HandleRoomMove(u32 statusFlag, u8 *timer, u8 stringId) static void Cmd_setroom(void) { + CMD_ARGS(); + switch (gBattleMoves[gCurrentMove].effect) { case EFFECT_TRICK_ROOM: @@ -13587,28 +14533,30 @@ static void Cmd_setroom(void) gBattleCommunication[MULTISTRING_CHOOSER] = 6; break; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Skill Swap static void Cmd_tryswapabilities(void) { + CMD_ARGS(const u8 *failInstr); + if (IsSkillSwapBannedAbility(gBattleMons[gBattlerAttacker].ability) || IsSkillSwapBannedAbility(gBattleMons[gBattlerTarget].ability)) { RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13616,16 +14564,18 @@ static void Cmd_tryswapabilities(void) gBattleMons[gBattlerAttacker].ability = gBattleStruct->overwrittenAbilities[gBattlerAttacker] = gBattleMons[gBattlerTarget].ability; gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = abilityAtk; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } } static void Cmd_tryimprison(void) { + CMD_ARGS(const u8 *failInstr); + if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13653,38 +14603,42 @@ static void Cmd_tryimprison(void) if (attackerMoveId != MAX_MON_MOVES) { gStatuses3[gBattlerAttacker] |= STATUS3_IMPRISONED_OTHERS; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } } if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes. - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_setstealthrock(void) { + CMD_ARGS(const u8 *failInstr); + u8 targetSide = GetBattlerSide(gBattlerTarget); if (gSideStatuses[targetSide] & SIDE_STATUS_STEALTH_ROCK) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gSideStatuses[targetSide] |= SIDE_STATUS_STEALTH_ROCK; gSideTimers[targetSide].stealthRockAmount = 1; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_setuserstatus3(void) { - u32 flags = T1_READ_32(gBattlescriptCurrInstr + 1); + CMD_ARGS(u32 flags, const u8 *failInstr); + + u32 flags = cmd->flags; if (gStatuses3[gBattlerAttacker] & flags) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->failInstr; } else { @@ -13693,12 +14647,14 @@ static void Cmd_setuserstatus3(void) gDisableStructs[gBattlerAttacker].magnetRiseTimer = 5; if (flags & STATUS3_LASER_FOCUS) gDisableStructs[gBattlerAttacker].laserFocusTimer = 2; - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_assistattackselect(void) { + CMD_ARGS(const u8 *failInstr); + s32 chooseableMovesNo = 0; struct Pokemon *party; s32 monId, moveId; @@ -13735,41 +14691,45 @@ static void Cmd_assistattackselect(void) gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; gCalledMove = validMoves[((Random() & 0xFF) * chooseableMovesNo) >> 8]; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_trysetmagiccoat(void) { + CMD_ARGS(const u8 *failInstr); + gBattlerTarget = gBattlerAttacker; gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gProtectStructs[gBattlerAttacker].bounceMove = TRUE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } // Snatch static void Cmd_trysetsnatch(void) { + CMD_ARGS(const u8 *failInstr); + gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gProtectStructs[gBattlerAttacker].stealMove = TRUE; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -13779,7 +14739,9 @@ static void Cmd_unused2(void) static void Cmd_switchoutabilities(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gBattleMons[gActiveBattler].ability == ABILITY_NEUTRALIZING_GAS) { gBattleMons[gActiveBattler].ability = ABILITY_NONE; @@ -13811,24 +14773,28 @@ static void Cmd_switchoutabilities(void) break; } - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_jumpifhasnohp(void) { - gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 battler, const u8 *jumpInstr); + + gActiveBattler = GetBattlerForBattleScript(cmd->battler); if (gBattleMons[gActiveBattler].hp == 0) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 6; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_getsecretpowereffect(void) { + CMD_ARGS(); + gBattleScripting.moveEffect = GetSecretPowerMoveEffect(); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } u16 GetSecretPowerMoveEffect(void) @@ -13925,6 +14891,8 @@ u16 GetSecretPowerMoveEffect(void) static void Cmd_pickup(void) { + CMD_ARGS(); + s32 i; u16 species, heldItem; u16 ability; @@ -14018,11 +14986,13 @@ static void Cmd_pickup(void) } } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_doweatherformchangeanimation(void) { + CMD_ARGS(); + gActiveBattler = gBattleScripting.battler; if (gBattleMons[gActiveBattler].status2 & STATUS2_SUBSTITUTE) @@ -14031,14 +15001,16 @@ static void Cmd_doweatherformchangeanimation(void) BtlController_EmitBattleAnimation(BUFFER_A, B_ANIM_CASTFORM_CHANGE, gBattleStruct->formToChangeInto); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryweatherformdatachange(void) { + CMD_ARGS(); + u8 form; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; form = TryWeatherFormChange(gBattleScripting.battler); if (form) { @@ -14050,6 +15022,8 @@ static void Cmd_tryweatherformdatachange(void) // Water and Mud Sport static void Cmd_settypebasedhalvers(void) { + CMD_ARGS(const u8 *failInstr); + bool8 worked = FALSE; if (gBattleMoves[gCurrentMove].effect == EFFECT_MUD_SPORT) @@ -14092,9 +15066,9 @@ static void Cmd_settypebasedhalvers(void) } if (worked) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } bool32 DoesSubstituteBlockMove(u8 battlerAtk, u8 battlerDef, u32 move) @@ -14127,14 +15101,18 @@ bool32 DoesDisguiseBlockMove(u8 battlerAtk, u8 battlerDef, u32 move) static void Cmd_jumpifsubstituteblocks(void) { + CMD_ARGS(const u8 *jumpInstr); + if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_tryrecycleitem(void) { + CMD_ARGS(const u8 *failInstr); + u16 *usedHeldItem; gActiveBattler = gBattlerAttacker; @@ -14148,11 +15126,11 @@ static void Cmd_tryrecycleitem(void) BtlController_EmitSetMonData(BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[gActiveBattler].item), &gBattleMons[gActiveBattler].item); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } @@ -14165,6 +15143,8 @@ bool32 CanCamouflage(u8 battlerId) static void Cmd_settypetoterrain(void) { + CMD_ARGS(const u8 *failInstr); + u8 terrainType; switch(gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) { @@ -14190,17 +15170,19 @@ static void Cmd_settypetoterrain(void) SET_BATTLER_TYPE(gBattlerAttacker, terrainType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } // Unused static void Cmd_pursuitdoubles(void) { + CMD_ARGS(const u8 *failInstr); + gActiveBattler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE @@ -14210,19 +15192,21 @@ static void Cmd_pursuitdoubles(void) { gActionsByTurnOrder[gActiveBattler] = B_ACTION_TRY_FINISH; gCurrentMove = MOVE_PURSUIT; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; gBattleScripting.animTurn = 1; gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = gActiveBattler; } else { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } } static void Cmd_snatchsetbattlers(void) { + CMD_ARGS(); + gEffectBattler = gBattlerAttacker; if (gBattlerAttacker == gBattlerTarget) @@ -14231,12 +15215,14 @@ static void Cmd_snatchsetbattlers(void) gBattlerTarget = gBattleScripting.battler; gBattleScripting.battler = gEffectBattler; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } // Brick Break static void Cmd_removelightscreenreflect(void) { + CMD_ARGS(); + u8 side; bool32 failed; @@ -14273,7 +15259,7 @@ static void Cmd_removelightscreenreflect(void) gBattleScripting.animTargetsHit = 0; } - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } u8 GetCatchingBattler(void) @@ -14286,6 +15272,8 @@ u8 GetCatchingBattler(void) static void Cmd_handleballthrow(void) { + CMD_ARGS(); + u16 ballMultiplier = 100; s8 ballAddition = 0; @@ -14604,6 +15592,8 @@ static void Cmd_handleballthrow(void) static void Cmd_givecaughtmon(void) { + CMD_ARGS(); + if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]]) != MON_GIVEN_TO_PARTY) { if (!ShouldShowBoxWasFullMessage()) @@ -14629,27 +15619,31 @@ static void Cmd_givecaughtmon(void) GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_NICKNAME, gBattleResults.caughtMonNick); gBattleResults.caughtMonBall = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_POKEBALL, NULL); - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_trysetcaughtmondexflags(void) { + CMD_ARGS(const u8 *failInstr); + u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL); u32 personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_PERSONALITY, NULL); if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { HandleSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_SET_CAUGHT, personality); - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_displaydexinfo(void) { + CMD_ARGS(); + u16 species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[GetCatchingBattler()]], MON_DATA_SPECIES, NULL); switch (gBattleCommunication[0]) @@ -14694,7 +15688,7 @@ static void Cmd_displaydexinfo(void) break; case 5: if (!gPaletteFade.active) - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; break; } } @@ -14767,6 +15761,8 @@ void BattleDestroyYesNoCursorAt(u8 cursorPosition) static void Cmd_trygivecaughtmonnick(void) { + CMD_ARGS(const u8 *successInstr); + switch (gBattleCommunication[MULTIUSE_STATE]) { case 0: @@ -14829,48 +15825,58 @@ static void Cmd_trygivecaughtmonnick(void) if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->successInstr; } break; case 4: if (CalculatePlayerPartyCount() == PARTY_SIZE) - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; else - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->successInstr; break; } } static void Cmd_subattackerhpbydmg(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].hp -= gBattleMoveDamage; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_removeattackerstatus1(void) { + CMD_ARGS(); + gBattleMons[gBattlerAttacker].status1 = 0; - gBattlescriptCurrInstr++; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_finishaction(void) { + CMD_ARGS(); + gCurrentActionFuncId = B_ACTION_FINISHED; } static void Cmd_finishturn(void) { + CMD_ARGS(); + gCurrentActionFuncId = B_ACTION_FINISHED; gCurrentTurnActionNumber = gBattlersCount; } static void Cmd_trainerslideout(void) { - gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]); + CMD_ARGS(u8 position); + + gActiveBattler = GetBattlerAtPosition(cmd->position); BtlController_EmitTrainerSlideBack(BUFFER_A); MarkBattlerForControllerExec(gActiveBattler); - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static const u16 sTelekinesisBanList[] = @@ -14898,54 +15904,62 @@ bool32 IsTelekinesisBannedSpecies(u16 species) static void Cmd_settelekinesis(void) { + CMD_ARGS(const u8 *failInstr); + if (gStatuses3[gBattlerTarget] & (STATUS3_TELEKINESIS | STATUS3_ROOTED | STATUS3_SMACKED_DOWN) || gFieldStatuses & STATUS_FIELD_GRAVITY || IsTelekinesisBannedSpecies(gBattleMons[gBattlerTarget].species)) { - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gStatuses3[gBattlerTarget] |= STATUS3_TELEKINESIS; gDisableStructs[gBattlerTarget].telekinesisTimer = 3; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_swapstatstages(void) { - u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1); - s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[statId]; - s8 defStatStage = gBattleMons[gBattlerTarget].statStages[statId]; + CMD_ARGS(u8 stat); - gBattleMons[gBattlerAttacker].statStages[statId] = defStatStage; - gBattleMons[gBattlerTarget].statStages[statId] = atkStatStage; + u8 stat = cmd->stat; + s8 atkStatStage = gBattleMons[gBattlerAttacker].statStages[stat]; + s8 defStatStage = gBattleMons[gBattlerTarget].statStages[stat]; - gBattlescriptCurrInstr += 2; + gBattleMons[gBattlerAttacker].statStages[stat] = defStatStage; + gBattleMons[gBattlerTarget].statStages[stat] = atkStatStage; + + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_averagestats(void) { - u8 statId = T1_READ_8(gBattlescriptCurrInstr + 1); - u16 atkStat = *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1)); - u16 defStat = *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1)); + CMD_ARGS(u8 stat); + + u8 stat = cmd->stat; + u16 atkStat = *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (stat - 1)); + u16 defStat = *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (stat - 1)); u16 average = (atkStat + defStat) / 2; - *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (statId - 1)) = average; - *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (statId - 1)) = average; + *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (stat - 1)) = average; + *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (stat - 1)) = average; - gBattlescriptCurrInstr += 2; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_jumpifoppositegenders(void) { + CMD_ARGS(const u8 *jumpInstr); + u32 atkGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerAttacker].species, gBattleMons[gBattlerAttacker].personality); u32 defGender = GetGenderFromSpeciesAndPersonality(gBattleMons[gBattlerTarget].species, gBattleMons[gBattlerTarget].personality); if ((atkGender == MON_MALE && defGender == MON_FEMALE) || (atkGender == MON_FEMALE && defGender == MON_MALE)) - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->jumpInstr; else - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } static void Cmd_unused(void) @@ -14954,32 +15968,38 @@ static void Cmd_unused(void) static void Cmd_tryworryseed(void) { + CMD_ARGS(const u8 *failInstr); + if (IsWorrySeedBannedAbility(gBattleMons[gBattlerTarget].ability)) { RecordAbilityBattle(gBattlerTarget, gBattleMons[gBattlerTarget].ability); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_ABILITY_SHIELD) { RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_ABILITY_SHIELD); - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gBattlescriptCurrInstr = cmd->failInstr; } else { gBattleMons[gBattlerTarget].ability = gBattleStruct->overwrittenAbilities[gBattlerTarget] = ABILITY_INSOMNIA; - gBattlescriptCurrInstr += 5; + gBattlescriptCurrInstr = cmd->nextInstr; } } static void Cmd_callnative(void) { - void (*func)() = (void *)T1_READ_PTR(gBattlescriptCurrInstr + 1); + CMD_ARGS(void (*func)(void)); + void (*func)(void) = cmd->func; func(); } // Callnative Funcs void BS_CalcMetalBurstDmg(void) { + NATIVE_ARGS(const u8 *failInstr); + u8 sideAttacker = GetBattlerSide(gBattlerAttacker); u8 sideTarget = 0; @@ -14994,7 +16014,7 @@ void BS_CalcMetalBurstDmg(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].physicalBattlerId; - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; } else if (gProtectStructs[gBattlerAttacker].specialDmg && sideAttacker != (sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId)) @@ -15007,12 +16027,12 @@ void BS_CalcMetalBurstDmg(void) else gBattlerTarget = gProtectStructs[gBattlerAttacker].specialBattlerId; - gBattlescriptCurrInstr += 9; + gBattlescriptCurrInstr = cmd->nextInstr; } else { gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = TRUE; - gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5); + gBattlescriptCurrInstr = cmd->failInstr; } } From 56c9564e7aadf45a41e9fcf3ef3a68024a26f7c8 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 17 Feb 2023 11:28:46 +0100 Subject: [PATCH 088/290] 8th gen Howl's effect (#2700) * Howl gen8 effect --- data/battle_scripts_1.s | 38 +++++++++++++ include/constants/battle_move_effects.h | 3 +- include/constants/battle_script_commands.h | 1 + src/battle_util.c | 3 + src/data/battle_moves.h | 3 +- test/move_effect_attack_up_user_ally.c | 65 ++++++++++++++++++++++ test/test_battle.h | 14 ++--- 7 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 test/move_effect_attack_up_user_ally.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 33af9f16e7..12b32c3f14 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -416,6 +416,44 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectSpecialAttackUpHit @ EFFECT_SPECIAL_ATTACK_UP_HIT .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME + .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY + +BattleScript_EffectAttackUpUserAlly: + jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp + attackcanceler + attackstring + ppreduce + jumpifstat BS_ATTACKER, CMP_NOT_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_EffectAttackUpUserAlly_Works + jumpifstat BS_ATTACKER_PARTNER, CMP_EQUAL, STAT_ATK, MAX_STAT_STAGE, BattleScript_ButItFailed +BattleScript_EffectAttackUpUserAlly_Works: + attackanimation + waitanimation + setstatchanger STAT_ATK, 1, FALSE + statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_TryAlly + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAllyUser_PrintString + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 +BattleScript_EffectAttackUpUserAllyUser_PrintString: + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_EffectAttackUpUserAlly_TryAlly: + setallytonexttarget BattleScript_EffectAttackUpUserAlly_TryAlly_ +BattleScript_EffectAttackUpUserAlly_End: + goto BattleScript_MoveEnd +BattleScript_EffectAttackUpUserAlly_TryAlly_: + setstatchanger STAT_ATK, 1, FALSE + statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_End + jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAlly_AllyAnim + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_TARGETSTATWONTGOHIGHER + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAttackUpUserAlly_End +BattleScript_EffectAttackUpUserAlly_AllyAnim: + setgraphicalstatchangevalues + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_EffectAttackUpUserAlly_End BattleScript_EffectTeatime:: attackcanceler diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 2cf8d2f9c3..beab881512 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -397,7 +397,8 @@ #define EFFECT_SPECIAL_ATTACK_UP_HIT 391 #define EFFECT_VICTORY_DANCE 392 #define EFFECT_TEATIME 393 +#define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen -#define NUM_BATTLE_MOVE_EFFECTS 394 +#define NUM_BATTLE_MOVE_EFFECTS 395 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 9351213946..68e927d75f 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -74,6 +74,7 @@ #define BS_PLAYER2 13 // for Cmd_updatestatusicon #define BS_OPPONENT2 14 #define BS_ABILITY_BATTLER 15 +#define BS_ATTACKER_PARTNER 16 // Cmd_accuracycheck #define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF diff --git a/src/battle_util.c b/src/battle_util.c index 8d350553de..4bded150b0 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1287,6 +1287,9 @@ u8 GetBattlerForBattleScript(u8 caseId) case BS_ATTACKER: ret = gBattlerAttacker; break; + case BS_ATTACKER_PARTNER: + ret = BATTLE_PARTNER(gBattlerAttacker); + break; case BS_EFFECT_BATTLER: ret = gEffectBattler; break; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index eed91d524c..997e7f4b34 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -6073,10 +6073,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_8 .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, + .effect = EFFECT_ATTACK_UP_USER_ALLY, #else .flags = FLAG_SNATCH_AFFECTED, + .effect = EFFECT_ATTACK_UP, #endif - .effect = EFFECT_ATTACK_UP, .power = 0, .type = TYPE_NORMAL, .accuracy = 0, diff --git a/test/move_effect_attack_up_user_ally.c b/test/move_effect_attack_up_user_ally.c new file mode 100644 index 0000000000..e98df30d8e --- /dev/null +++ b/test/move_effect_attack_up_user_ally.c @@ -0,0 +1,65 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HOWL].effect == EFFECT_ATTACK_UP_USER_ALLY); +} + +SINGLE_BATTLE_TEST("Howl raises user's Attack", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(player, MOVE_HOWL); } + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's attack rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +DOUBLE_BATTLE_TEST("Howl raises user's and partner's Attack", s16 damageLeft, s16 damageRight) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET) { Speed(15); }; + PLAYER(SPECIES_WYNAUT) { Speed(10); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(13); }; + OPPONENT(SPECIES_WYNAUT) { Speed(12); }; + } WHEN { + if (raiseAttack) TURN { MOVE(playerLeft, MOVE_HOWL); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentRight); } + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's attack rose!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Wynaut's attack rose!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &results[i].damageLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + HP_BAR(opponentRight, captureDamage: &results[i].damageRight); + } FINALLY { + EXPECT_MUL_EQ(results[0].damageLeft, Q_4_12(1.5), results[1].damageLeft); + EXPECT_MUL_EQ(results[0].damageRight, Q_4_12(1.5), results[1].damageRight); + } +} diff --git a/test/test_battle.h b/test/test_battle.h index 8fb1ce6d3e..806e7947e1 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -112,17 +112,17 @@ * NOT STATUS_ICON(opponent, paralysis: TRUE); to say that Oddish was * not paralyzed without specifying the exact outputs which led to that. * - * As a final example, to test that Howl works you might: - * 1. Put a Wobbuffet that knows Howl and Tackle in your party. + * As a final example, to test that Meditate works you might: + * 1. Put a Wobbuffet that knows Meditate and Tackle in your party. * 2. Battle a wild Wobbuffet. * 3. Use Tackle and note the amount the HP bar reduced. * 4. Battle a wild Wobbuffet. - * 5. Use Howl and that that the stat change animation and message play. + * 5. Use Meditate and that the stat change animation and message play. * 6. Use Tackle and check that the HP bar reduced by more than in 3. * * This can be translated to an automated test as follows: * - * SINGLE_BATTLE_TEST("Howl raises Attack", s16 damage) + * SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) * { * bool32 raiseAttack; * PARAMETRIZE { raiseAttack = FALSE; } @@ -132,11 +132,11 @@ * PLAYER(SPECIES_WOBBUFFET); * OPPONENT(SPECIES_WOBBUFFET); * } WHEN { - * if (raiseAttack) TURN { MOVE(player, MOVE_HOWL); } // 5. + * if (raiseAttack) TURN { MOVE(player, MOVE_MEDITATE); } // 5. * TURN { MOVE(player, MOVE_TACKLE); } // 3 & 6. * } SCENE { * if (raiseAttack) { - * ANIMATION(ANIM_TYPE_MOVE, MOVE_HOWL, player); + * ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); * ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 5. * MESSAGE("Wobbuffet's attack rose!"); // 5. * } @@ -159,7 +159,7 @@ * of the first battle (with a small tolerance to account for rounding). * * You might notice that all the tests check the outputs the player - * could see rather than the internal battle state. e.g. the Howl test + * could see rather than the internal battle state. e.g. the Meditate test * could have used gBattleMons[B_POSITION_OPPONENT_LEFT].hp instead of * using HP_BAR to capture the damage. This is a deliberate choice, by * checking what the player can observe the tests are more robust to From 0c523f951886b7e1b85ee576fa2ece7e7543da15 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 17 Feb 2023 14:55:51 +0100 Subject: [PATCH 089/290] Fix Magic bounce powder moves against grass types (#2633) * Fix Magic bounce powder moves against grass types --- data/battle_scripts_1.s | 5 ++- include/battle_util.h | 29 +++++++++++++ src/battle_script_commands.c | 4 +- src/battle_util.c | 34 ++------------- test/ability_magic_bounce.c | 84 ++++++++++++++++++++++++++++++++++++ test/powder_moves.c | 47 ++++++++++++++++++++ 6 files changed, 171 insertions(+), 32 deletions(-) create mode 100644 test/ability_magic_bounce.c create mode 100644 test/powder_moves.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 12b32c3f14..ae92aba7cf 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7683,11 +7683,14 @@ BattleScript_GrudgeTakesPp:: printstring STRINGID_PKMNLOSTPPGRUDGE waitmessage B_WAIT_TIME_LONG return - + BattleScript_MagicCoatBounce:: attackstring ppreduce pause B_WAIT_TIME_SHORT + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0, BattleScript_MagicCoatBounce_Print + call BattleScript_AbilityPopUp +BattleScript_MagicCoatBounce_Print: printfromtable gMagicCoatBounceStringIds waitmessage B_WAIT_TIME_LONG orword gHitMarker, HITMARKER_ATTACKSTRING_PRINTED | HITMARKER_NO_PPDEDUCT | HITMARKER_ALLOW_NO_PP diff --git a/include/battle_util.h b/include/battle_util.h index 1c3f486cda..bf3943a9d8 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -64,6 +64,35 @@ struct TypePower u16 effect; }; +enum +{ + CANCELLER_FLAGS, + CANCELLER_SKY_DROP, + CANCELLER_ASLEEP, + CANCELLER_FROZEN, + CANCELLER_TRUANT, + CANCELLER_RECHARGE, + CANCELLER_FLINCH, + CANCELLER_DISABLED, + CANCELLER_GRAVITY, + CANCELLER_HEAL_BLOCKED, + CANCELLER_TAUNTED, + CANCELLER_IMPRISONED, + CANCELLER_CONFUSED, + CANCELLER_PARALYSED, + CANCELLER_IN_LOVE, + CANCELLER_BIDE, + CANCELLER_THAW, + CANCELLER_POWDER_MOVE, + CANCELLER_POWDER_STATUS, + CANCELLER_THROAT_CHOP, + CANCELLER_MULTIHIT_MOVES, + CANCELLER_Z_MOVES, + CANCELLER_END, + CANCELLER_PSYCHIC_TERRAIN, + CANCELLER_END2, +}; + extern const struct TypePower gNaturalGiftTable[]; void HandleAction_ThrowBall(void); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 57311e6712..b5629c2cc1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1530,6 +1530,7 @@ static void Cmd_attackcanceler(void) PressurePPLose(gBattlerAttacker, gBattlerTarget, MOVE_MAGIC_COAT); gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleStruct->atkCancellerTracker = CANCELLER_POWDER_MOVE; // Edge case for bouncing a powder move against a grass type pokemon. if (BlocksPrankster(gCurrentMove, gBattlerTarget, gBattlerAttacker, TRUE)) { // Opponent used a prankster'd magic coat -> reflected status move should fail against a dark-type attacker @@ -1547,11 +1548,12 @@ static void Cmd_attackcanceler(void) && gBattleMoves[gCurrentMove].flags & FLAG_MAGIC_COAT_AFFECTED && !gProtectStructs[gBattlerAttacker].usesBouncedMove) { - RecordAbilityBattle(gBattlerTarget, ABILITY_MAGIC_BOUNCE); gProtectStructs[gBattlerTarget].usesBouncedMove = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleStruct->atkCancellerTracker = CANCELLER_POWDER_MOVE; // Edge case for bouncing a powder move against a grass type pokemon. BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; + gBattlerAbility = gBattlerTarget; return; } diff --git a/src/battle_util.c b/src/battle_util.c index 4bded150b0..46f8d3a3d3 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3410,35 +3410,6 @@ void TryClearRageAndFuryCutter(void) } } -enum -{ - CANCELLER_FLAGS, - CANCELLER_SKY_DROP, - CANCELLER_ASLEEP, - CANCELLER_FROZEN, - CANCELLER_TRUANT, - CANCELLER_RECHARGE, - CANCELLER_FLINCH, - CANCELLER_DISABLED, - CANCELLER_GRAVITY, - CANCELLER_HEAL_BLOCKED, - CANCELLER_TAUNTED, - CANCELLER_IMPRISONED, - CANCELLER_CONFUSED, - CANCELLER_PARALYSED, - CANCELLER_IN_LOVE, - CANCELLER_BIDE, - CANCELLER_THAW, - CANCELLER_POWDER_MOVE, - CANCELLER_POWDER_STATUS, - CANCELLER_THROAT_CHOP, - CANCELLER_MULTIHIT_MOVES, - CANCELLER_Z_MOVES, - CANCELLER_END, - CANCELLER_PSYCHIC_TERRAIN, - CANCELLER_END2, -}; - u8 AtkCanceller_UnableToUseMove(void) { u8 effect = 0; @@ -3753,7 +3724,10 @@ u8 AtkCanceller_UnableToUseMove(void) if (effect != 0) gBattlescriptCurrInstr = BattleScript_PowderMoveNoEffect; } - gBattleStruct->atkCancellerTracker++; + if (gProtectStructs[gBattlerAttacker].usesBouncedMove) // Edge case for bouncing a powder move against a grass type pokemon. + gBattleStruct->atkCancellerTracker = CANCELLER_END; + else + gBattleStruct->atkCancellerTracker++; break; case CANCELLER_POWDER_STATUS: if (gBattleMons[gBattlerAttacker].status2 & STATUS2_POWDER) diff --git a/test/ability_magic_bounce.c b/test/ability_magic_bounce.c new file mode 100644 index 0000000000..d52b93c4a5 --- /dev/null +++ b/test/ability_magic_bounce.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "test_battle.h" + + +SINGLE_BATTLE_TEST("Magic Bounce bounces back status moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + } WHEN { + TURN { MOVE(player, MOVE_TOXIC); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + MESSAGE("Wynaut's Toxic was bounced back by Foe Espeon's Magic Bounce!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, opponent); + STATUS_ICON(player, badPoison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Magic Bounce bounces back powder moves") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gBattleMoves[MOVE_STUN_SPORE].effect == EFFECT_PARALYZE); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, player); + MESSAGE("Wynaut's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); + STATUS_ICON(player, paralysis: TRUE); + } +} + +SINGLE_BATTLE_TEST("Magic Bounce cannot bounce back powder moves against Grass Types") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_ODDISH); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Oddish's Stun Spore was bounced back by Foe Espeon's Magic Bounce!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); + MESSAGE("It doesn't affect Oddish…"); + NOT STATUS_ICON(player, paralysis: TRUE); + } +} + + +DOUBLE_BATTLE_TEST("Magic Bounce bounces back moves hitting both foes at two foes") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN); + ASSUME(gBattleMoves[MOVE_LEER].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_ABRA); + PLAYER(SPECIES_KADABRA); + OPPONENT(SPECIES_ESPEON) { Ability(ABILITY_MAGIC_BOUNCE);}; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_LEER); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_MAGIC_BOUNCE); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, playerLeft); + MESSAGE("Abra's Leer was bounced back by Foe Espeon's Magic Bounce!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEER, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Abra's defense fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Kadabra's defense fell!"); + // Also check if second original target gets hit by Leer as this was once bugged + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Wynaut's defense fell!"); + } +} diff --git a/test/powder_moves.c b/test/powder_moves.c new file mode 100644 index 0000000000..cb0aee5282 --- /dev/null +++ b/test/powder_moves.c @@ -0,0 +1,47 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Powder Moves are blocked by Grass Types") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ODDISH); + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("It doesn't affect Foe Oddish…"); + } +} + +SINGLE_BATTLE_TEST("Powder Moves are blocked by Ability Overcoat") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_OVERCOAT); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("It doesn't affect Foe Pineco…"); + } +} + +SINGLE_BATTLE_TEST("Powder Moves are blocked by Item Safety Goggles") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STUN_SPORE].flags & FLAG_POWDER); + ASSUME(gItems[ITEM_SAFETY_GOGGLES].holdEffect == HOLD_EFFECT_SAFETY_GOGGLES); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_ABRA) { Item(ITEM_SAFETY_GOGGLES);}; + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Foe Abra is not affected thanks to its SafetyGoggles!"); + } +} From bc3805f9d32d532088214fe38492d8d92c6c6666 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 17 Feb 2023 13:27:39 -0500 Subject: [PATCH 090/290] Fix two binary palettes --- graphics/battle_anims/sprites/black_ball.bin | Bin 36 -> 0 bytes graphics/battle_anims/sprites/black_ball.pal | 19 ++++++++++++++++++ .../battle_anims/unused/line_sketch_2.pal | 19 ++++++++++++++++++ .../battle_anims/unused/line_sketch_2_pal.bin | Bin 32 -> 0 bytes src/graphics.c | 4 ++-- 5 files changed, 40 insertions(+), 2 deletions(-) delete mode 100644 graphics/battle_anims/sprites/black_ball.bin create mode 100644 graphics/battle_anims/sprites/black_ball.pal create mode 100644 graphics/battle_anims/unused/line_sketch_2.pal delete mode 100644 graphics/battle_anims/unused/line_sketch_2_pal.bin diff --git a/graphics/battle_anims/sprites/black_ball.bin b/graphics/battle_anims/sprites/black_ball.bin deleted file mode 100644 index 4a6592a8edc36cade78caec09192fd5174eb5e6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36 pcmWeoU|>)%HWpwsa5iRUW;Zc5aByZ|V_;`s=5Tg4HU=^o7yw7&1D^l@ diff --git a/graphics/battle_anims/sprites/black_ball.pal b/graphics/battle_anims/sprites/black_ball.pal new file mode 100644 index 0000000000..57e320140e --- /dev/null +++ b/graphics/battle_anims/sprites/black_ball.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 205 98 +156 205 98 +156 205 98 +131 205 131 +156 205 0 +24 0 106 +156 8 98 +0 213 131 +24 197 0 +164 8 106 +156 8 98 +164 8 106 +156 205 131 +24 213 98 +156 8 106 +164 205 98 diff --git a/graphics/battle_anims/unused/line_sketch_2.pal b/graphics/battle_anims/unused/line_sketch_2.pal new file mode 100644 index 0000000000..17cce5c65e --- /dev/null +++ b/graphics/battle_anims/unused/line_sketch_2.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 255 +0 255 255 +148 255 255 +148 205 255 +148 156 255 +0 0 0 +0 0 0 +0 0 0 +255 0 8 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +255 255 255 diff --git a/graphics/battle_anims/unused/line_sketch_2_pal.bin b/graphics/battle_anims/unused/line_sketch_2_pal.bin deleted file mode 100644 index 15379a9ceae794c6755d5198ba223866efd6138a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 kcmWeoU;u-f2lb!od5r3d>KM2g80A?G7_bX4{;y{M0C$E5-v9sr diff --git a/src/graphics.c b/src/graphics.c index f6b3ce0af2..40ed78ae69 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -69,7 +69,7 @@ const u32 gBattleAnimSpriteGfx_BlackSmoke[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimSpritePal_BlackSmoke[] = INCBIN_U32("graphics/battle_anims/sprites/black_smoke.gbapal.lz"); const u32 gBattleAnimSpriteGfx_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.4bpp.lz"); -const u32 gBattleAnimSpritePal_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.bin"); +const u32 gBattleAnimSpritePal_BlackBall[] = INCBIN_U32("graphics/battle_anims/sprites/black_ball.gbapal.lz"); const u32 gBattleAnimSpritePal_Glass[] = INCBIN_U32("graphics/battle_anims/sprites/glass.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Glass[] = INCBIN_U32("graphics/battle_anims/sprites/glass.4bpp.lz"); @@ -257,7 +257,7 @@ const u16 gBattleAnimUnused_Unknown2[] = INCBIN_U16("graphics/battle_anims/unuse const u16 gBattleAnimUnused_Unknown3[] = INCBIN_U16("graphics/battle_anims/unused/unknown_3.bin"); const u32 gBattleAnimUnusedGfx_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.8bpp.lz"); -const u16 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U16("graphics/battle_anims/unused/line_sketch_2_pal.bin"); +const u16 gBattleAnimUnusedPal_LineSketch2[] = INCBIN_U16("graphics/battle_anims/unused/line_sketch_2.gbapal.lz"); const u32 gBattleAnimUnusedTilemap_LineSketch2[] = INCBIN_U32("graphics/battle_anims/unused/line_sketch_2.bin.lz"); const u32 gBattleAnimSpriteGfx_BlueLines[] = INCBIN_U32("graphics/battle_anims/sprites/blue_lines.4bpp.lz"); From 4be4ec30815e21c342c7f769b94e10491f17cdf5 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 17 Feb 2023 16:43:22 -0300 Subject: [PATCH 091/290] metatitleBehavior -> metatileBehavior --- src/bike.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bike.c b/src/bike.c index ae30ce288b..ae9dfd3e91 100644 --- a/src/bike.c +++ b/src/bike.c @@ -863,23 +863,23 @@ static u8 Bike_DPadToDirection(u16 heldKeys) static u8 GetBikeCollision(u8 direction) { - u8 metatitleBehavior; + u8 metatileBehavior; struct ObjectEvent *playerObjEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; s16 x = playerObjEvent->currentCoords.x; s16 y = playerObjEvent->currentCoords.y; MoveCoords(direction, &x, &y); - metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); - return GetBikeCollisionAt(playerObjEvent, x, y, direction, metatitleBehavior); + metatileBehavior = MapGridGetMetatileBehaviorAt(x, y); + return GetBikeCollisionAt(playerObjEvent, x, y, direction, metatileBehavior); } -static u8 GetBikeCollisionAt(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +static u8 GetBikeCollisionAt(struct ObjectEvent *objectEvent, s16 x, s16 y, u8 direction, u8 metatileBehavior) { - u8 collision = CheckForObjectEventCollision(objectEvent, x, y, direction, metatitleBehavior); + u8 collision = CheckForObjectEventCollision(objectEvent, x, y, direction, metatileBehavior); if (collision > COLLISION_OBJECT_EVENT) return collision; - if (collision == COLLISION_NONE && IsRunningDisallowedByMetatile(metatitleBehavior)) + if (collision == COLLISION_NONE && IsRunningDisallowedByMetatile(metatileBehavior)) collision = COLLISION_IMPASSABLE; if (collision) From 79ea2e80743f84a0ab09ffc294b623ed605fe45d Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sat, 18 Feb 2023 05:37:29 -0500 Subject: [PATCH 092/290] add howl AI check for new effect (#2703) Co-authored-by: ghoulslash --- src/battle_ai_main.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 1765af94b2..a626ef49a1 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -982,6 +982,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) // stat raising effects case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_UP_USER_ALLY: if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) score -= 10; break; @@ -3191,6 +3192,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) // stat raising effects case EFFECT_ATTACK_UP: case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_UP_USER_ALLY: if (MovesWithSplitUnusable(battlerAtk, battlerDef, SPLIT_PHYSICAL)) { score -= 8; @@ -4824,6 +4826,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) switch (gBattleMoves[move].effect) { case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_USER_ALLY: case EFFECT_DEFENSE_UP: case EFFECT_SPEED_UP: case EFFECT_SPECIAL_ATTACK_UP: @@ -5154,6 +5157,7 @@ static s16 AI_HPAware(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) switch (effect) { case EFFECT_ATTACK_UP: + case EFFECT_ATTACK_UP_USER_ALLY: case EFFECT_DEFENSE_UP: case EFFECT_SPEED_UP: case EFFECT_SPECIAL_ATTACK_UP: From fcf13aab2b462ecafdd670e833a7bc02cc597e43 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Sun, 19 Feb 2023 06:40:55 -0300 Subject: [PATCH 093/290] Fixed evolutions that use held items to evolve not working when using Rare Candies. (#2565) --- src/party_menu.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/party_menu.c b/src/party_menu.c index 4cecc82577..8debf9f3c7 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5165,7 +5165,6 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) u16 *itemPtr = &gSpecialVar_ItemId; bool8 cannotUseEffect; u8 holdEffectParam = ItemId_GetHoldEffectParam(*itemPtr); - u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL); sInitialLevel = GetMonData(mon, MON_DATA_LEVEL); if (sInitialLevel != MAX_LEVEL) @@ -5181,10 +5180,22 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) PlaySE(SE_SELECT); if (cannotUseEffect) { - if (targetSpecies != SPECIES_NONE && holdEffectParam == 0) + u16 targetSpecies = SPECIES_NONE; + + // Resets values to 0 so other means of teaching moves doesn't overwrite levels + sInitialLevel = 0; + sFinalLevel = 0; + + if (holdEffectParam == 0) + targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL); + + if (targetSpecies != SPECIES_NONE) { - PartyMenuTryEvolution(taskId); RemoveBagItem(gSpecialVar_ItemId, 1); + FreePartyPointers(); + gCB2_AfterEvolution = gPartyMenu.exitCallback; + BeginEvolutionScene(mon, targetSpecies, TRUE, gPartyMenu.slotId); + DestroyTask(taskId); } else { From ec343cef02438173223b3f5d3e71d89443649015 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Sun, 19 Feb 2023 06:45:59 -0300 Subject: [PATCH 094/290] Config to have Shuckle make Berry Juice from Oran Berries (#2331) * Removed unused ifdefs and made actually check for Z Power Ring * Config to have Shuckle make Berry Juice from Oran Berries * Ordered species-specific configs --- include/config/pokemon.h | 7 +++++-- src/battle_script_commands.c | 24 ++++++++++++++++++------ src/battle_z_move.c | 4 ---- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 4cb2271d5a..ce5faf2a6e 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -13,11 +13,14 @@ #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 Gen7 onwards, the father can pass it down as well, as long as it's of the same species as the mother. -// Other settings +// 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. -#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. #define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone. #define P_HIPPO_GENDER_DIFF_ICONS TRUE // If TRUE, will give Hippopotas and Hippowdon custom icons for their female forms. +#define P_SHUCKLE_BERRY_JUICE TRUE // In Gen 2, Shuckle had a 1/16 chance of converting Berry that it's holding into Berry Juice. Setting this to TRUE will allow to do this with an Oran Berry, which is the spiritual succesor of the Berry item. + +// Other settings +#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs. // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 87feb56271..8b8d4f1e94 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14922,7 +14922,6 @@ static void Cmd_pickup(void) heldItem = GetBattlePyramidPickupItemId(); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } - #if (defined ITEM_HONEY) else if (ability == ABILITY_HONEY_GATHER && species != 0 && species != SPECIES_EGG @@ -14934,7 +14933,15 @@ static void Cmd_pickup(void) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } - #endif + #if P_SHUCKLE_BERRY_JUICE == TRUE + else if (species == SPECIES_SHUCKLE + && heldItem == ITEM_ORAN_BERRY + && (Random() % 16) == 0) + { + heldItem = ITEM_BERRY_JUICE; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + #endif } } else @@ -14972,7 +14979,6 @@ static void Cmd_pickup(void) } } } - #if (defined ITEM_HONEY) else if (ability == ABILITY_HONEY_GATHER && species != 0 && species != SPECIES_EGG @@ -14984,7 +14990,15 @@ static void Cmd_pickup(void) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } - #endif + #if P_SHUCKLE_BERRY_JUICE == TRUE + else if (species == SPECIES_SHUCKLE + && heldItem == ITEM_ORAN_BERRY + && (Random() % 16) == 0) + { + heldItem = ITEM_BERRY_JUICE; + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + #endif } } @@ -16073,10 +16087,8 @@ static bool32 CriticalCapture(u32 odds) else odds = (odds * 250) / 100; - #ifdef ITEM_CATCHING_CHARM if (CheckBagHasItem(ITEM_CATCHING_CHARM, 1)) odds = (odds * (100 + B_CATCHING_CHARM_BOOST)) / 100; - #endif odds /= 6; if ((Random() % 255) < odds) diff --git a/src/battle_z_move.c b/src/battle_z_move.c index bdbf5674c8..536080aa96 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -204,11 +204,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) else holdEffect = ItemId_GetHoldEffect(item); - #ifdef ITEM_ULTRANECROZIUM_Z - if (holdEffect == HOLD_EFFECT_Z_CRYSTAL || item == ITEM_ULTRANECROZIUM_Z) - #else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL) - #endif { u16 zMove = GetSignatureZMove(move, gBattleMons[battlerId].species, item); if (zMove != MOVE_NONE) From 4b64433816d0a2c6c29aa12dfcaabe1b03a18299 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Sun, 19 Feb 2023 05:48:12 -0500 Subject: [PATCH 095/290] Add Battle Anim cmds for dynamic Task, Sprite creation + Misc. Anim Fixes (#2649) * add createvisualtaskontargets, createspriteontargets to fix electroweb, fiery wrath anims * add missing semicolon * add Cmd_createspriteontargets_onpos for heal block, fix heal block targeting * remove duplicate func * improve origin pulse anim * fix IsDoubleBattle call * venom drench acid uses average battler positions * add GetSubpriorityForMoveAnim * add GetBattleAnimMoveTargets for CreateSpriteOnTargets and Cmd_createvisualtaskontargets --------- Co-authored-by: ghoulslash --- asm/macros/battle_anim_script.inc | 44 +++++++ data/battle_anim_scripts.s | 90 +++++++------ src/battle_anim.c | 212 +++++++++++++++++++++++++++--- src/battle_anim_effects_1.c | 26 +++- src/data/battle_moves.h | 2 +- 5 files changed, 310 insertions(+), 64 deletions(-) diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index a98a344fa1..6ff3876906 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -270,6 +270,50 @@ .macro stopsound .byte 0x2f .endm + + @ same as createvisualtask except takes in battlerargindex, which is the battle anim arg index of the battler to loop through + .macro createvisualtaskontargets addr:req, priority:req, battlerargindex:req, argv:vararg + .byte 0x30 + .4byte \addr + .byte \priority + .byte \battlerargindex + .byte (.Lcreatetask_\@_2 - .Lcreatetask_\@_1) / 2 @ num_args +.Lcreatetask_\@_1: + .2byte \argv +.Lcreatetask_\@_2: + .endm + + @ same as createsprite except takes in battlerargindex, which is the battle anim arg index of the battler to loop through + .macro createspriteontargets template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg + .byte 0x31 + .4byte \template + .if \anim_battler == ANIM_TARGET + .byte 0x80 | (\subpriority_offset & 0x7F) + .else + .byte (\subpriority_offset & 0x7F) + .endif + .byte \battlerargindex + .byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2 +.Lsprite_\@_1: + .2byte \argv +.Lsprite_\@_2: + .endm + + @ does not overwrite gBattleAnimArgs[battlerargindex], some sprite templates are too dependent on the value (e.g. heal block) + .macro createspriteontargets_onpos template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg + .byte 0x32 + .4byte \template + .if \anim_battler == ANIM_TARGET + .byte 0x80 | (\subpriority_offset & 0x7F) + .else + .byte (\subpriority_offset & 0x7F) + .endif + .byte \battlerargindex + .byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2 +.Lsprite_\@_1: + .2byte \argv +.Lsprite_\@_2: + .endm @ useful macros .macro jumpreteq value:req, ptr:req diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 0ad58c49e1..71bd93d70a 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1492,22 +1492,22 @@ Move_HEAL_BLOCK: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_TARGET createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, 0, -5, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, -15, 10, ANIM_TARGET, 0 delay 7 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 12, 0, RGB_BLACK - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 0, -5, 1, 0 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 4, 2, 12, 0, RGB_BLACK + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, 0, -5, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, 10, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, -15, 10, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, -15, -15, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, -15, -15, ANIM_TARGET, 0 delay 7 - createsprite gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 10, -5, 1, 0 + createspriteontargets_onpos gHealingBlueStarSpriteTemplate, ANIM_TARGET, 2, 2, 10, -5, ANIM_TARGET, 0 delay 7 waitforvisualfinish delay 11 - createvisualtask AnimTask_BlendBattleAnimPal, 10, 1 | 4, 4, 2, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_SIDE, 4, 2, 0, 12, RGB_BLACK waitforvisualfinish clearmonbg ANIM_TARGET end @@ -6405,11 +6405,7 @@ Move_ELECTROWEB: clearmonbg ANIM_DEF_PARTNER delay 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK - - @ ElectricityEffect looks ugly against both opponents, to do later - jumpifdoublebattle Move_ELECTROWEB_Wait - - call ElectricityEffect + call ElectricityEffect_OnTargets Move_ELECTROWEB_Wait: waitforvisualfinish end @@ -9278,16 +9274,16 @@ Move_EERIE_IMPULSE:: Move_VENOM_DRENCH:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfffb 0x1 0xfffb 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x5 0x0 0x6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x13 0x1 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe9 0x2 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 call AcidDrench @@ -9296,28 +9292,28 @@ Move_VENOM_DRENCH:: clearmonbg ANIM_DEF_PARTNER end AcidDrench: - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1c 0x1 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xfff6 0x1 0xfffb 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xa 0x0 0x6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x18 0x1 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffe0 0x2 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0xffec 0x0 0xfff6 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 - launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 0x0 + launchtemplate gVenomDrenchAcidTemplate 0x82, 0x4, 0x1e 0x2 0xa 1 playsewithpan SE_M_BUBBLE3, SOUND_PAN_TARGET delay 0x2 return @@ -10175,6 +10171,7 @@ Move_ORIGIN_PULSE:: launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFF2A 0xFFAA 0x10 @between left and upper left launchtemplate gOriginPulseOrbInwardTemplate 0x82 0x5 0x1 0x0 0xFFDA 0xFF94 0x10 @between up and upper left waitforvisualfinish + createvisualtaskontargets AnimTask_ShakeMon2, 5, 0, ANIM_TARGET, 2, 0, 18, 1 monbg ANIM_DEF_PARTNER launchtemplate gOriginPulseBasicSplatTemplate 0x83 0x4 0xffb0 0xfff0 0x1 0x1 stopsound @@ -23375,15 +23372,15 @@ Move_OVERHEAT: waitforvisualfinish createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, 3, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET - createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 10, 0, 25, 1 + createvisualtaskontargets AnimTask_ShakeMon, 2, 0, ANIM_TARGET, 10, 0, 25, 1 delay 6 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -5, ANIM_TARGET, 0 + createspriteontargets gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 2, 8, -5, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 10, ANIM_TARGET, 0 + createspriteontargets gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 2, 10, 10, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET delay 8 - createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, ANIM_TARGET, 0 + createspriteontargets gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 2, 0, 0, ANIM_TARGET, 0 playsewithpan SE_M_FLAMETHROWER, SOUND_PAN_TARGET createvisualtask AnimTask_CopyPalFadedToUnfaded, 5, 1 delay 1 @@ -24209,21 +24206,40 @@ WaterBubblesEffectLong: ElectricityEffect: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET ElectricityEffectNoSound: - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET delay 2 - createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + return + +ElectricityEffect_OnTargets: + playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 5, 0, 5, 0, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -5, 10, 5, 1, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 15, 20, 5, 2, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -15, -10, 5, 0, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 25, 0, 5, 1, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -8, 8, 5, 2, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, 2, -8, 5, 0, ANIM_TARGET + delay 2 + createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 4, -20, 15, 5, 1, ANIM_TARGET return ConfusionEffect: diff --git a/src/battle_anim.c b/src/battle_anim.c index 610c243216..a7faec1fda 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "battle_util.h" #include "bg.h" #include "contest.h" #include "decompress.h" @@ -81,7 +82,9 @@ static void Cmd_visible(void); static void Cmd_teamattack_moveback(void); static void Cmd_teamattack_movefwd(void); static void Cmd_stopsound(void); - +static void Cmd_createvisualtaskontargets(void); +static void Cmd_createspriteontargets(void); +static void Cmd_createspriteontargets_onpos(void); static void RunAnimScriptCommand(void); static void Task_UpdateMonBg(u8 taskId); static void FlipBattlerBgTiles(void); @@ -169,6 +172,9 @@ static void (* const sScriptCmdTable[])(void) = Cmd_teamattack_moveback, // 0x2D Cmd_teamattack_movefwd, // 0x2E Cmd_stopsound, // 0x2F + Cmd_createvisualtaskontargets, // 0x30 + Cmd_createspriteontargets, // 0x31 + Cmd_createspriteontargets_onpos, // 0x32 }; void ClearBattleAnimationVars(void) @@ -425,29 +431,46 @@ static void Cmd_unloadspritegfx(void) ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); } -static void Cmd_createsprite(void) +static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) { - s32 i; - const struct SpriteTemplate *template; - u8 argVar; - u8 argsCount; - s16 subpriority; - - sBattleAnimScriptPtr++; - template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); - sBattleAnimScriptPtr += 4; - - argVar = sBattleAnimScriptPtr[0]; - sBattleAnimScriptPtr++; - - argsCount = sBattleAnimScriptPtr[0]; - sBattleAnimScriptPtr++; - for (i = 0; i < argsCount; i++) + u8 numTargets = 1; + switch (GetBattlerMoveTargetType(gBattleAnimAttacker, gAnimMoveIndex)) { - gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); - sBattleAnimScriptPtr += 2; + case MOVE_TARGET_BOTH: + targets[0] = gBattleAnimArgs[battlerArgIndex]; + numTargets = 1; + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { + targets[1] = targets[0] ^ BIT_FLANK; + numTargets++; + } + break; + case MOVE_TARGET_FOES_AND_ALLY: + targets[0] = gBattleAnimArgs[battlerArgIndex]; + numTargets = 1; + + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { + targets[1] = targets[0] ^ BIT_FLANK; + numTargets++; + } + + if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { + targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + numTargets++; + } + break; + default: + targets[0] = gBattleAnimArgs[battlerArgIndex]; // original + numTargets = 1; + break; } + + return numTargets; +} +static s16 GetSubpriorityForMoveAnim(u8 argVar) +{ + s16 subpriority; + if (argVar & ANIMSPRITE_IS_TARGET) { argVar ^= ANIMSPRITE_IS_TARGET; @@ -470,6 +493,34 @@ static void Cmd_createsprite(void) if (subpriority < 3) subpriority = 3; + + return subpriority; +} + +static void Cmd_createsprite(void) +{ + s32 i; + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + s16 subpriority; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + for (i = 0; i < argsCount; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + subpriority = GetSubpriorityForMoveAnim(argVar); CreateSpriteAndAnimate( template, @@ -479,6 +530,85 @@ static void Cmd_createsprite(void) gAnimVisualTaskCount++; } +static void CreateSpriteOnTargets(const struct SpriteTemplate *template, u8 argVar, u8 battlerArgIndex, u8 argsCount, bool32 overwriteAnimTgt) +{ + u32 i; + u8 targets[MAX_BATTLERS_COUNT]; + int ntargets; + s16 subpriority; + + for (i = 0; i < argsCount; i++) + { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + subpriority = GetSubpriorityForMoveAnim(argVar); + + ntargets = GetBattleAnimMoveTargets(battlerArgIndex, targets); + + for (i = 0; i < ntargets; i++) { + + if (overwriteAnimTgt) + gBattleAnimArgs[battlerArgIndex] = targets[i]; + + CreateSpriteAndAnimate( + template, + GetBattlerSpriteCoord(targets[i], BATTLER_COORD_X_2), + GetBattlerSpriteCoord(targets[i], BATTLER_COORD_Y_PIC_OFFSET), + subpriority); + gAnimVisualTaskCount++; + } +} + +// will NOT overwrite gBattleAnimArgs +static void Cmd_createspriteontargets_onpos(void) +{ + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + u8 battlerArgIndex; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + battlerArgIndex = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, FALSE); +} + +// DOES overwrite gBattleAnimArgs +static void Cmd_createspriteontargets(void) +{ + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + u8 battlerArgIndex; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + battlerArgIndex = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + argsCount = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, TRUE); +} + static void Cmd_createvisualtask(void) { TaskFunc taskFunc; @@ -509,6 +639,48 @@ static void Cmd_createvisualtask(void) gAnimVisualTaskCount++; } +static void Cmd_createvisualtaskontargets(void) +{ + TaskFunc taskFunc; + u8 taskPriority; + u8 taskId; + u8 numArgs; + u8 battlerArgIndex; // index in gBattleAnimArgs that has the battlerId + s32 i; + u8 targets[MAX_BATTLERS_COUNT] = {0}; + + sBattleAnimScriptPtr++; + + taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 4; + + taskPriority = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + battlerArgIndex = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + numArgs = sBattleAnimScriptPtr[0]; + sBattleAnimScriptPtr++; + + // copy task arguments + for (i = 0; i < numArgs; i++) { + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; + } + + numArgs = GetBattleAnimMoveTargets(battlerArgIndex, targets); + + for (i = 0; i < numArgs; i++) + { + gBattleAnimArgs[battlerArgIndex] = targets[i]; + taskId = CreateTask(taskFunc, taskPriority); + taskFunc(taskId); + gAnimVisualTaskCount++; + } +} + + static void Cmd_delay(void) { sBattleAnimScriptPtr++; diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 761a1886c4..8dae620293 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -4806,8 +4806,8 @@ void AnimTask_CycleMagicalLeafPal(u8 taskId) void AnimNeedleArmSpike(struct Sprite *sprite) { - u8 a; - u8 b; + s16 a; + s16 b; u16 c; u16 x; u16 y; @@ -4820,13 +4820,27 @@ void AnimNeedleArmSpike(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) { - a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (IsDoubleBattle()) + { + SetAverageBattlerPositions(gBattleAnimAttacker, TRUE, &a, &b); + } + else + { + a = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } } else { - a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + if (IsDoubleBattle()) + { + SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &a, &b); + } + else + { + a = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + b = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } } sprite->data[0] = gBattleAnimArgs[4]; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 997e7f4b34..415ef234ce 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -6833,7 +6833,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 100, .pp = 15, .secondaryEffectChance = 0, - .target = MOVE_TARGET_SELECTED, + .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_STATUS, .zMovePower = 0, From c82f35d6bf649bb7930835c5be48ad4268005152 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Feb 2023 12:01:13 +0100 Subject: [PATCH 096/290] correct Cmd_pickup --- src/battle_script_commands.c | 89 +++++++++++------------------------- test/ability_guts.c | 20 ++++++++ 2 files changed, 46 insertions(+), 63 deletions(-) create mode 100644 test/ability_guts.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b8d4f1e94..8e13ebf6db 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -14895,62 +14895,18 @@ static void Cmd_pickup(void) { CMD_ARGS(); - s32 i; - u16 species, heldItem; - u16 ability; + u32 i, j; + u16 species, heldItem, ability; u8 lvlDivBy10; - if (InBattlePike()) - { - - } - else if (InBattlePyramid()) + if (!InBattlePike()) // No items in Battle Pike. { + bool32 isInPyramid = InBattlePyramid_(); for (i = 0; i < PARTY_SIZE; i++) { species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - - ability = gSpeciesInfo[species].abilities[GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)]; - - if (ability == ABILITY_PICKUP - && species != SPECIES_NONE - && species != SPECIES_EGG - && heldItem == ITEM_NONE - && (Random() % 10) == 0) - { - heldItem = GetBattlePyramidPickupItemId(); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - else if (ability == ABILITY_HONEY_GATHER - && species != 0 - && species != SPECIES_EGG - && heldItem == ITEM_NONE) - { - if ((lvlDivBy10 + 1 ) * 5 > Random() % 100) - { - heldItem = ITEM_HONEY; - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - } - #if P_SHUCKLE_BERRY_JUICE == TRUE - else if (species == SPECIES_SHUCKLE - && heldItem == ITEM_ORAN_BERRY - && (Random() % 16) == 0) - { - heldItem = ITEM_BERRY_JUICE; - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); - } - #endif - } - } - else - { - for (i = 0; i < PARTY_SIZE; i++) - { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather + lvlDivBy10 = (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL)-1) / 10; //Moving this here makes it easier to add in abilities like Honey Gather. if (lvlDivBy10 > 9) lvlDivBy10 = 9; @@ -14962,20 +14918,27 @@ static void Cmd_pickup(void) && heldItem == ITEM_NONE && (Random() % 10) == 0) { - s32 j; - s32 rand = Random() % 100; - - for (j = 0; j < (int)ARRAY_COUNT(sPickupProbabilities); j++) + if (isInPyramid) { - if (sPickupProbabilities[j] > rand) + heldItem = GetBattlePyramidPickupItemId(); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + else + { + u32 rand = Random() % 100; + + for (j = 0; j < ARRAY_COUNT(sPickupProbabilities); j++) { - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupItems[lvlDivBy10 + j]); - break; - } - else if (rand == 99 || rand == 98) - { - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sRarePickupItems[lvlDivBy10 + (99 - rand)]); - break; + if (sPickupProbabilities[j] > rand) + { + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sPickupItems[lvlDivBy10 + j]); + break; + } + else if (rand == 99 || rand == 98) + { + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &sRarePickupItems[lvlDivBy10 + (99 - rand)]); + break; + } } } } @@ -14990,7 +14953,7 @@ static void Cmd_pickup(void) SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } } - #if P_SHUCKLE_BERRY_JUICE == TRUE + #if P_SHUCKLE_BERRY_JUICE == TRUE else if (species == SPECIES_SHUCKLE && heldItem == ITEM_ORAN_BERRY && (Random() % 16) == 0) @@ -14998,7 +14961,7 @@ static void Cmd_pickup(void) heldItem = ITEM_BERRY_JUICE; SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); } - #endif + #endif } } diff --git a/test/ability_guts.c b/test/ability_guts.c new file mode 100644 index 0000000000..259b863ec3 --- /dev/null +++ b/test/ability_guts.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_GT(results[1].damage, results[0].damage); + } +} From dcb1117470bb809d1906f8b2b1f0f71da2cf6ff4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Feb 2023 12:01:47 +0100 Subject: [PATCH 097/290] a --- test/ability_guts.c | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 test/ability_guts.c diff --git a/test/ability_guts.c b/test/ability_guts.c deleted file mode 100644 index 259b863ec3..0000000000 --- a/test/ability_guts.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "global.h" -#include "test_battle.h" - -SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) -{ - u16 hp; - PARAMETRIZE { hp = 99; } - PARAMETRIZE { hp = 33; } - GIVEN { - ASSUME(gBattleMoves[MOVE_EMBER].type == TYPE_FIRE); - PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_EMBER); } - } SCENE { - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - EXPECT_GT(results[1].damage, results[0].damage); - } -} From 380af442c39bf2af87a0e31b23d12e12b251f6ec Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Feb 2023 12:05:56 +0100 Subject: [PATCH 098/290] Fix buggy pokemon anims with Illusion (#2639) * try illusion fix * fix --- include/battle_util.h | 1 + src/battle_controller_link_opponent.c | 4 +++- src/battle_controller_opponent.c | 4 +++- src/battle_util.c | 8 ++++++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/battle_util.h b/include/battle_util.h index bf3943a9d8..0661081e43 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -181,6 +181,7 @@ void UndoMegaEvolution(u32 monId); void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut); bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 CanBattlerGetOrLoseItem(u8 battlerId, u16 itemId); +u32 GetIllusionMonSpecies(u32 battlerId); struct Pokemon *GetIllusionMonPtr(u32 battlerId); void ClearIllusionMon(u32 battlerId); bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId); diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 97fc21df9e..908363907b 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1149,7 +1149,9 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + species = GetIllusionMonSpecies(battlerId); + if (species == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 0a9626a13c..79283b0674 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1177,7 +1177,9 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleResources->bufferA[battlerId][1]; - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + species = GetIllusionMonSpecies(battlerId); + if (species == SPECIES_NONE) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); diff --git a/src/battle_util.c b/src/battle_util.c index 46f8d3a3d3..25ba83093c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10266,6 +10266,14 @@ void ClearIllusionMon(u32 battlerId) memset(&gBattleStruct->illusion[battlerId], 0, sizeof(gBattleStruct->illusion[battlerId])); } +u32 GetIllusionMonSpecies(u32 battlerId) +{ + struct Pokemon *illusionMon = GetIllusionMonPtr(battlerId); + if (illusionMon != NULL) + return GetMonData(illusionMon, MON_DATA_SPECIES); + return SPECIES_NONE; +} + bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId) { struct Pokemon *party, *partnerMon; From c33cc834bcaedea3552197322c07b849143e093f Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Sun, 19 Feb 2023 19:04:36 -0300 Subject: [PATCH 099/290] Updated Psyshield Bash's accuracy --- src/data/battle_moves.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 415ef234ce..bf54142764 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13294,7 +13294,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .effect = EFFECT_DEFENSE_UP_HIT, .power = 70, .type = TYPE_PSYCHIC, - .accuracy = 100, + .accuracy = 90, .pp = 10, .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, From 53180ebf8791277339b829fc11eb26bb611180ad Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 12:25:43 +0100 Subject: [PATCH 100/290] Update Healing wish to gen5 / gen8 mechanics (#2708) * Updated Healing Wish and added config * Fixed Lunar Dance message Co-authored-by: AgustinGDLV Co-authored-by: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Co-authored-by: Martin Griffin --- asm/macros/battle_script.inc | 5 ++ data/battle_scripts_1.s | 19 +++-- include/battle.h | 2 + include/battle_scripts.h | 2 + include/config/battle.h | 2 + include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 27 ++++++++ test/move_effect_healing_wish.c | 80 ++++++++++++++++++++++ test/move_effect_recoil_if_miss.c | 2 +- 9 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 test/move_effect_healing_wish.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 4f11fc78b8..6c985e3cdd 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1322,6 +1322,11 @@ .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm + + @ Stores Healing Wish effect. + .macro storehealingwish battler:req + various \battler, VARIOUS_STORE_HEALING_WISH + .endm .macro setmagiccoattarget battler:req various \battler, VARIOUS_SET_MAGIC_COAT_TARGET diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index ae92aba7cf..6fa0cd7ad7 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2697,6 +2697,8 @@ BattleScript_EffectHealingWish: instanthpdrop BS_ATTACKER setatkhptozero tryfaintmon BS_ATTACKER + storehealingwish BS_ATTACKER +.if B_HEALING_WISH_SWITCH <= GEN_4 openpartyscreen BS_ATTACKER, BattleScript_EffectHealingWishEnd switchoutabilities BS_ATTACKER waitstate @@ -2711,11 +2713,19 @@ BattleScript_EffectHealingWish: printstring STRINGID_SWITCHINMON switchinanim BS_ATTACKER, TRUE waitstate + switchineffects BS_ATTACKER +.endif +BattleScript_EffectHealingWishEnd: + moveendall + end + +BattleScript_HealingWishActivates:: setbyte cMULTISTRING_CHOOSER, 0 - jumpifnotchosenmove MOVE_LUNAR_DANCE, BattleScript_EffectHealingWishNewMon + goto BattleScript_EffectHealingWishRestore +BattleScript_LunarDanceActivates:: setbyte cMULTISTRING_CHOOSER, 1 restorepp BS_ATTACKER -BattleScript_EffectHealingWishNewMon: +BattleScript_EffectHealingWishRestore: printfromtable gHealingWishStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_WISH_HEAL @@ -2730,10 +2740,7 @@ BattleScript_EffectHealingWishNewMon: waitstate printstring STRINGID_HEALINGWISHHEALED waitmessage B_WAIT_TIME_LONG - switchineffects BS_ATTACKER -BattleScript_EffectHealingWishEnd: - moveendall - end + return BattleScript_EffectWorrySeed: attackcanceler diff --git a/include/battle.h b/include/battle.h index 8be922384f..2c16887bf6 100644 --- a/include/battle.h +++ b/include/battle.h @@ -655,6 +655,8 @@ struct BattleStruct u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. + u8 storedHealingWish:4; // Each battler as a bit. + u8 storedLunarDance:4; // Each battler as a bit. }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 18c1911e52..70d398e2a5 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -452,6 +452,8 @@ extern const u8 BattleScript_MimicryActivates_End3[]; extern const u8 BattleScript_IceFaceNullsDamage[]; extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; extern const u8 BattleScript_DampPreventsAftermath[]; +extern const u8 BattleScript_HealingWishActivates[]; +extern const u8 BattleScript_LunarDanceActivates[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/config/battle.h b/include/config/battle.h index 6dea72b406..a8f4a3e8b4 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -95,6 +95,8 @@ #define B_BEAT_UP GEN_LATEST // In Gen5+, Beat Up uses a different formula to calculate its damage, and deals Dark-type damage. Prior to Gen 5, each hit also announces the party member's name. #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. #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. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 68e927d75f..9f18455a84 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -257,6 +257,7 @@ #define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 #define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 #define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 +#define VARIOUS_STORE_HEALING_WISH 168 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b8d4f1e94..48d23cf765 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6924,6 +6924,24 @@ static void Cmd_switchineffects(void) BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SwitchInAbilityMsgRet; } + // 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[gActiveBattler]) || (gBattleStruct->storedLunarDance & gBitTable[gActiveBattler])) + && (gBattleMons[gActiveBattler].hp != gBattleMons[gActiveBattler].maxHP || gBattleMons[gActiveBattler].status1 != 0 || B_HEALING_WISH_SWITCH < GEN_8)) + { + if (gBattleStruct->storedHealingWish & gBitTable[gActiveBattler]) + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_HealingWishActivates; + gBattleStruct->storedHealingWish &= ~(gBitTable[gActiveBattler]); + } + else // Lunar Dance + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_LunarDanceActivates; + gBattleStruct->storedLunarDance &= ~(gBitTable[gActiveBattler]); + } + } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES) && GetBattlerAbility(gActiveBattler) != ABILITY_MAGIC_GUARD @@ -11040,6 +11058,15 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } + case VARIOUS_STORE_HEALING_WISH: + { + VARIOUS_ARGS(); + if (gCurrentMove == MOVE_LUNAR_DANCE) + gBattleStruct->storedLunarDance |= gBitTable[gActiveBattler]; + else + gBattleStruct->storedHealingWish |= gBitTable[gActiveBattler]; + break; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/move_effect_healing_wish.c b/test/move_effect_healing_wish.c new file mode 100644 index 0000000000..98e8730b34 --- /dev/null +++ b/test/move_effect_healing_wish.c @@ -0,0 +1,80 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_HEALING_WISH].effect == EFFECT_HEALING_WISH); + ASSUME(gBattleMoves[MOVE_LUNAR_DANCE].effect == EFFECT_HEALING_WISH); +} + +#define TEST_MAX_HP (100) + +SINGLE_BATTLE_TEST("Healing Wish causes the user to faint and fully heals the replacement") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + PLAYER(SPECIES_GARDEVOIR); + PLAYER(SPECIES_WYNAUT) { HP(1); MaxHP(TEST_MAX_HP); Status1(STATUS1_POISON); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("The healing wish came true for Wynaut!"); + HP_BAR(player, hp: TEST_MAX_HP); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wynaut regained health!"); + } +} + +DOUBLE_BATTLE_TEST("Lunar Dance causes the user to faint and fully heals the replacement in a double battle") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } + PLAYER(SPECIES_WYNAUT) { HP(TEST_MAX_HP - 1); MaxHP(TEST_MAX_HP); Status1(STATUS1_BURN); Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_LUNAR_DANCE); SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LUNAR_DANCE, playerLeft); + HP_BAR(playerLeft, hp: 0); + MESSAGE("Gardevoir fainted!"); + MESSAGE("Wynaut became cloaked in mystical moonlight!"); + HP_BAR(playerLeft, hp: TEST_MAX_HP); + STATUS_ICON(playerLeft, none: TRUE); + MESSAGE("Wynaut regained health!"); + } +} + +SINGLE_BATTLE_TEST("Healing Wish effect activates only if the switched pokemon can be healed") +{ + GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_8); + PLAYER(SPECIES_GARDEVOIR) { Speed(300); } + PLAYER(SPECIES_NINJASK) { Speed(400); } + PLAYER(SPECIES_WYNAUT) { HP(TEST_MAX_HP / 2); MaxHP(TEST_MAX_HP); Status1(STATUS1_PARALYSIS); Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(50); } + } WHEN { + TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEALING_WISH, player); + HP_BAR(player, hp: 0); + MESSAGE("Gardevoir fainted!"); + NONE_OF { + MESSAGE("The healing wish came true for Wynaut!"); + MESSAGE("Wynaut regained health!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + MESSAGE("Do it! Wynaut!"); + MESSAGE("The healing wish came true for Wynaut!"); + HP_BAR(player, hp: TEST_MAX_HP); + STATUS_ICON(player, none: TRUE); + MESSAGE("Wynaut regained health!"); + } +} diff --git a/test/move_effect_recoil_if_miss.c b/test/move_effect_recoil_if_miss.c index 5c1f1a61af..8a80309d74 100644 --- a/test/move_effect_recoil_if_miss.c +++ b/test/move_effect_recoil_if_miss.c @@ -42,8 +42,8 @@ SINGLE_BATTLE_TEST("Jump Kick has 50% recoil on protect") SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") { - KNOWN_FAILING; // #2596. GIVEN { + ASSUME(B_HEALING_WISH_SWITCH >= GEN_5); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); From 03915524c5912c1c1d4e68406dcac01252ab5291 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 12:42:06 +0100 Subject: [PATCH 101/290] Fix switch-in abilities activating on empty field --- include/battle.h | 1 + include/battle_script_commands.h | 1 + src/battle_script_commands.c | 72 +++++++++++++++++++++++--------- src/battle_util.c | 17 +++++++- src/data/trainer_parties.h | 12 +++--- test/ability_intimidate.c | 50 ++++++++++++++++++++-- test/test_runner.c | 2 +- 7 files changed, 124 insertions(+), 31 deletions(-) diff --git a/include/battle.h b/include/battle.h index 8be922384f..46c9340823 100644 --- a/include/battle.h +++ b/include/battle.h @@ -644,6 +644,7 @@ struct BattleStruct struct StolenItem itemStolen[PARTY_SIZE]; // Player's team that had items stolen (two bytes per party member) u8 blunderPolicy:1; // should blunder policy activate u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky + u8 switchInAbilityPostponed:4; // To not activate against an empty field, each bit for battler u8 ballSpriteIds[2]; // item gfx, window gfx u8 stickyWebUser; u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index 60fd9b156b..c3d6831e95 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -44,6 +44,7 @@ u16 GetSecretPowerMoveEffect(void); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); +bool32 DoSwitchInAbilitiesItems(u32 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 8b8d4f1e94..9555111b4d 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6900,6 +6900,35 @@ static void SetDmgHazardsBattlescript(u8 battlerId, u8 multistringId) gBattlescriptCurrInstr = BattleScript_DmgHazardsOnFaintedBattler; } +bool32 DoSwitchInAbilitiesItems(u32 battlerId) +{ + return (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, battlerId, 0, 0, 0) + || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battlerId, 0, 0, 0)) + || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battlerId, 0, 0, 0)) + || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battlerId, FALSE) + || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0)); +} + +bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) +{ + bool32 aliveOpposing1 = IsBattlerAlive(BATTLE_OPPOSITE(battlerId)); + bool32 aliveOpposing2 = IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId))); + // No pokemon on opposing side - postopone. + if (!aliveOpposing1 && !aliveOpposing2) + return TRUE; + + // Checks for double battle, so abilities like Intimidate wait until all battlers are switched-in before activating. + if (IsDoubleBattle()) + { + if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) + return TRUE; + if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) + return TRUE; + } + + return FALSE; +} + static void Cmd_switchineffects(void) { CMD_ARGS(u8 battler); @@ -7016,12 +7045,17 @@ static void Cmd_switchineffects(void) gDisableStructs[gActiveBattler].truantSwitchInHack = 0; - if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) - || (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT && AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0)) - || (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY && AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0)) - || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE) - || AbilityBattleEffects(ABILITYEFFECT_TRACE2, 0, 0, 0, 0)) - return; + // Don't activate switch-in abilities if the opposing field is empty. + // This could happen when a mon uses explosion and causes everyone to faint. + if (ShouldPostponeSwitchInAbilities(gActiveBattler) || gBattleStruct->switchInAbilityPostponed) + { + gBattleStruct->switchInAbilityPostponed |= gBitTable[gActiveBattler]; + } + else + { + if (DoSwitchInAbilitiesItems(gActiveBattler)) + return; + } gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED); @@ -11016,21 +11050,21 @@ static void Cmd_various(void) return; } case VARIOUS_JUMP_IF_NO_VALID_TARGETS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - u32 count = 0; + { + VARIOUS_ARGS(const u8 *jumpInstr); + u32 count = 0; - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) - count++; - } - if (count == 0) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; + for (i = 0; i < gBattlersCount; i++) + { + if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) + count++; } + if (count == 0) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } case VARIOUS_JUMP_IF_EMERGENCY_EXITED: { VARIOUS_ARGS(const u8 *jumpInstr); diff --git a/src/battle_util.c b/src/battle_util.c index 25ba83093c..1855754110 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3301,7 +3301,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void) return FALSE; } -#define FAINTED_ACTIONS_MAX_CASE 7 +#define FAINTED_ACTIONS_MAX_CASE 8 bool8 HandleFaintedMonActions(void) { @@ -3386,7 +3386,19 @@ bool8 HandleFaintedMonActions(void) else gBattleStruct->faintedActionsState = 4; break; - case 6: + case 6: // All battlers switch-in abilities happen here to prevent them happening against an empty field. + for (i = 0; i < gBattlersCount; i++) + { + if (gBattleStruct->switchInAbilityPostponed & gBitTable[i]) + { + if (DoSwitchInAbilitiesItems(i)) + return TRUE; + gBattleStruct->switchInAbilityPostponed &= ~(gBitTable[i]); + } + } + gBattleStruct->faintedActionsState++; + break; + case 7: if (ItemBattleEffects(ITEMEFFECT_NORMAL, 0, TRUE)) return TRUE; gBattleStruct->faintedActionsState++; @@ -4749,6 +4761,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move case ABILITY_INTIMIDATE: if (!gSpecialStatuses[battler].switchInAbilityDone) { + gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, TRUE); BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivates); diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f..de2d1e8977 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -400,17 +400,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Rose1[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_ROSELIA, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_SHROOMISH, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_ROSELIA, + .species = SPECIES_PORYGON, } }; @@ -9631,17 +9631,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Deandre[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_ZIGZAGOON, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_ARON, + .species = SPECIES_PORYGON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_ELECTRIKE, + .species = SPECIES_PORYGON, } }; diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 450ca64029..a0f48776ca 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -30,13 +30,12 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 damage) { u32 ability; - KNOWN_FAILING; PARAMETRIZE { ability = ABILITY_INTIMIDATE; } PARAMETRIZE { ability = ABILITY_RECKLESS; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(2); Attack(120) ; }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; - OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); Speed(1); }; + OPPONENT(SPECIES_STARAPTOR) { Ability(ability); Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } @@ -48,3 +47,48 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } + +DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double battle") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_STARAVIA) { Ability(ABILITY_INTIMIDATE); }; + PLAYER(SPECIES_ABRA); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } + TURN { MOVE(playerLeft, MOVE_CELEBRATE);} + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + // Leaving these messages as they're not that important to the test, to not exceed MAX_QUEUED_EVENTS. + /* + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); + */ + + MESSAGE("Go! Staravia!"); + MESSAGE("2 sent out Staraptor!"); + MESSAGE("Go! Abra!"); + MESSAGE("2 sent out Wynaut!"); + + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Staravia's Intimidate cuts Foe Staraptor's ATTACK!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Staravia's Intimidate cuts Foe Wynaut's ATTACK!"); + + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Staraptor's Intimidate cuts Staravia's ATTACK!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Staraptor's Intimidate cuts Abra's ATTACK!"); + } +} diff --git a/test/test_runner.c b/test/test_runner.c index 3cb1f7c213..c4befb35f2 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -7,7 +7,7 @@ #include "test.h" #include "test_runner.h" -#define TIMEOUT_SECONDS 30 +#define TIMEOUT_SECONDS 49 void CB2_TestRunner(void); From a8c0e1ebeb13de3bb037942d21b8a8c151b90d6c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 13:15:08 +0100 Subject: [PATCH 102/290] fix intimidate --- src/data/trainer_parties.h | 12 ++++++------ test/ability_download.c | 29 +++++++++++++++++++++++++++++ test/ability_intimidate.c | 11 ++++++++++- 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 test/ability_download.c diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index de2d1e8977..1759120b7f 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -400,17 +400,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Rose1[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ROSELIA, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_SHROOMISH, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ROSELIA, } }; @@ -9631,17 +9631,17 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Deandre[] = { { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ZIGZAGOON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ARON, }, { .iv = 0, .lvl = 14, - .species = SPECIES_PORYGON, + .species = SPECIES_ELECTRIKE, } }; diff --git a/test/ability_download.c b/test/ability_download.c new file mode 100644 index 0000000000..8380487cee --- /dev/null +++ b/test/ability_download.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Download raises Attack if enemy has greater Atk than Sp.Atk", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PORYGON) { Ability(ability); }; + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + } + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index a0f48776ca..29acfe6f93 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -20,7 +20,11 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou TURN { MOVE(player, MOVE_TACKLE); } } SCENE { if (ability == ABILITY_INTIMIDATE) + { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); @@ -33,15 +37,20 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 PARAMETRIZE { ability = ABILITY_INTIMIDATE; } PARAMETRIZE { ability = ABILITY_RECKLESS; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(2); Attack(120) ; }; + PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; OPPONENT(SPECIES_STARAPTOR) { Ability(ability); Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } } SCENE { + HP_BAR(opponent); if (ability == ABILITY_INTIMIDATE) + { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); From a6f6c205c9fce128b76bcd56c03317c490ee8456 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 15:41:22 +0100 Subject: [PATCH 103/290] add tests for download --- test/ability_download.c | 72 +++++++++++++++++++++++++++++++++++++-- test/ability_intimidate.c | 8 +---- 2 files changed, 70 insertions(+), 10 deletions(-) diff --git a/test/ability_download.c b/test/ability_download.c index 8380487cee..77d090a306 100644 --- a/test/ability_download.c +++ b/test/ability_download.c @@ -4,16 +4,17 @@ ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_PHYSICAL); } -SINGLE_BATTLE_TEST("Download raises Attack if enemy has greater Atk than Sp.Atk", s16 damage) +SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", s16 damage) { u32 ability; PARAMETRIZE { ability = ABILITY_TRACE; } PARAMETRIZE { ability = ABILITY_DOWNLOAD; } GIVEN { - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_PORYGON) { Ability(ability); }; + PLAYER(SPECIES_WOBBUFFET) {Defense(100); SpDefense(200); }; + OPPONENT(SPECIES_PORYGON) { Ability(ability); Attack(100); }; } WHEN { TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { @@ -21,9 +22,74 @@ SINGLE_BATTLE_TEST("Download raises Attack if enemy has greater Atk than Sp.Atk" { ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Porygon's Download raised its attack!"); + } + HP_BAR(player, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Download raises Sp.Attack if enemy has lower Sp.Def than Def", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + PLAYER(SPECIES_PORYGON) { Ability(ability); SpAttack(100); }; + OPPONENT(SPECIES_WOBBUFFET) {Defense(200); SpDefense(100); }; + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + } SCENE { + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(player, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Porygon's Download raised its sp. attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } + +SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet", s16 damagePhysical, s16 damageSpecial) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_TRACE; } + PARAMETRIZE { ability = ABILITY_DOWNLOAD; } + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + PLAYER(SPECIES_WOBBUFFET) { Speed(100); }; + PLAYER(SPECIES_PORYGON) { Ability(ability); Defense(400); SpDefense(300); Speed(300); Attack(100); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }; + OPPONENT(SPECIES_PORYGON2) { Ability(ability); Defense(100); SpDefense(200); Speed(200); }; + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TRI_ATTACK);} + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + // Everyone faints. + + MESSAGE("Go! Porygon!"); + MESSAGE("2 sent out Porygon2!"); + + if (ability == ABILITY_DOWNLOAD) + { + ABILITY_POPUP(player, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Porygon's Download raised its attack!"); + ABILITY_POPUP(opponent, ABILITY_DOWNLOAD); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Porygon2's Download raised its sp. attack!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damagePhysical); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, opponent); + HP_BAR(player, captureDamage: &results[i].damageSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[0].damagePhysical, Q_4_12(1.5), results[1].damagePhysical); + EXPECT_MUL_EQ(results[0].damageSpecial, Q_4_12(1.5), results[1].damageSpecial); + } +} diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 29acfe6f93..f978b80ab0 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -75,13 +75,7 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba } SCENE { HP_BAR(playerLeft, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); - // Leaving these messages as they're not that important to the test, to not exceed MAX_QUEUED_EVENTS. - /* - MESSAGE("Foe Wobbuffet fainted!"); - MESSAGE("Wobbuffet fainted!"); - MESSAGE("Foe Wobbuffet fainted!"); - MESSAGE("Wobbuffet fainted!"); - */ + // Everyone faints. MESSAGE("Go! Staravia!"); MESSAGE("2 sent out Staraptor!"); From 7d23d5433b68e104621073021afae493f632511f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Feb 2023 16:38:37 +0100 Subject: [PATCH 104/290] try fix tests failing --- 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 c4befb35f2..f64dffacb2 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -7,7 +7,7 @@ #include "test.h" #include "test_runner.h" -#define TIMEOUT_SECONDS 49 +#define TIMEOUT_SECONDS 55 void CB2_TestRunner(void); From 8f74a6777afc43eb0093b326ae6c69b4ca6ac38d Mon Sep 17 00:00:00 2001 From: Zunawe Date: Mon, 20 Feb 2023 18:17:30 -0800 Subject: [PATCH 105/290] Fix spelling mistake for item flag --- data/maps/PetalburgWoods/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/PetalburgWoods/map.json b/data/maps/PetalburgWoods/map.json index 4179d81957..2979e7e469 100644 --- a/data/maps/PetalburgWoods/map.json +++ b/data/maps/PetalburgWoods/map.json @@ -168,7 +168,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "PetalburgWoods_EventScript_ItemParalyzeHeal", - "flag": "FLAG_ITEM_PETALBURD_WOODS_PARALYZE_HEAL" + "flag": "FLAG_ITEM_PETALBURG_WOODS_PARALYZE_HEAL" }, { "graphics_id": "OBJ_EVENT_GFX_GIRL_2", diff --git a/include/constants/flags.h b/include/constants/flags.h index 4e108e1fe9..f39a7219c0 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1162,7 +1162,7 @@ #define FLAG_ITEM_ROUTE_103_GUARD_SPEC 0x45A #define FLAG_ITEM_ROUTE_104_X_ACCURACY 0x45B #define FLAG_ITEM_MAUVILLE_CITY_X_SPEED 0x45C -#define FLAG_ITEM_PETALBURD_WOODS_PARALYZE_HEAL 0x45D +#define FLAG_ITEM_PETALBURG_WOODS_PARALYZE_HEAL 0x45D #define FLAG_ITEM_ROUTE_115_GREAT_BALL 0x45E #define FLAG_ITEM_SAFARI_ZONE_NORTH_CALCIUM 0x45F #define FLAG_ITEM_MT_PYRE_3F_SUPER_REPEL 0x460 From 2eb6401d52ab0853aa71e28f090ef8e1b1504f99 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 19 Feb 2023 14:48:51 +0000 Subject: [PATCH 106/290] Test Overgrow, Swarm and Torrent --- test/ability_blaze.c | 2 +- test/ability_overgrow.c | 20 ++++++++++++++++++++ test/ability_swarm.c | 20 ++++++++++++++++++++ test/ability_torrent.c | 20 ++++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 test/ability_overgrow.c create mode 100644 test/ability_swarm.c create mode 100644 test/ability_torrent.c diff --git a/test/ability_blaze.c b/test/ability_blaze.c index 259b863ec3..1e12c6b294 100644 --- a/test/ability_blaze.c +++ b/test/ability_blaze.c @@ -15,6 +15,6 @@ SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { - EXPECT_GT(results[1].damage, results[0].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); } } diff --git a/test/ability_overgrow.c b/test/ability_overgrow.c new file mode 100644 index 0000000000..82d8dd467e --- /dev/null +++ b/test/ability_overgrow.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Overgrow boosts Grass-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_VINE_WHIP].type == TYPE_GRASS); + PLAYER(SPECIES_BULBASAUR) { Ability(ABILITY_OVERGROW); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_VINE_WHIP); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_swarm.c b/test/ability_swarm.c new file mode 100644 index 0000000000..7709e976ea --- /dev/null +++ b/test/ability_swarm.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Swarm boosts Bug-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUG_BITE].type == TYPE_BUG); + PLAYER(SPECIES_LEDYBA) { Ability(ABILITY_SWARM); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BUG_BITE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} diff --git a/test/ability_torrent.c b/test/ability_torrent.c new file mode 100644 index 0000000000..e5c701775d --- /dev/null +++ b/test/ability_torrent.c @@ -0,0 +1,20 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Torrent boosts Water-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gBattleMoves[MOVE_BUBBLE].type == TYPE_WATER); + PLAYER(SPECIES_SQUIRTLE) { Ability(ABILITY_TORRENT); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BUBBLE); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); + } +} From 666e59b37f2a3a79554589c8b7667928219a75e1 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 19 Feb 2023 15:36:16 +0000 Subject: [PATCH 107/290] Test Roar The original implementation of forcerandomswitch was biased towards certain party members. --- src/battle_script_commands.c | 33 +++++------------ test/move_effect_roar.c | 70 ++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 test/move_effect_roar.c diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 21dbf59e48..b4bafd215c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12089,8 +12089,8 @@ static void Cmd_forcerandomswitch(void) s32 lastMonId = 0; // + 1 s32 monsCount; struct Pokemon *party = NULL; - s32 validMons = 0; - s32 minNeeded; + u8 validMons[PARTY_SIZE]; + s32 validMonsCount = 0; bool32 redCardForcedSwitch = FALSE; @@ -12147,7 +12147,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = 6; monsCount = 6; - minNeeded = 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12166,7 +12165,6 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE / 2; } monsCount = PARTY_SIZE / 2; - minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12184,7 +12182,6 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE / 2; } monsCount = PARTY_SIZE / 2; - minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12195,7 +12192,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; - minNeeded = 2; // since there are two opponents, it has to be a double battle } else { @@ -12210,7 +12206,6 @@ static void Cmd_forcerandomswitch(void) lastMonId = PARTY_SIZE / 2; } monsCount = PARTY_SIZE / 2; - minNeeded = 1; } battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; @@ -12220,7 +12215,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; - minNeeded = 2; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } @@ -12229,7 +12223,6 @@ static void Cmd_forcerandomswitch(void) firstMonId = 0; lastMonId = PARTY_SIZE; monsCount = PARTY_SIZE; - minNeeded = 1; battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; // there is only one pokemon out in single battles battler1PartyId = gBattlerPartyIndexes[gBattlerTarget]; } @@ -12238,13 +12231,15 @@ static void Cmd_forcerandomswitch(void) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) != 0) + && GetMonData(&party[i], MON_DATA_HP) != 0 + && i != battler1PartyId + && i != battler2PartyId) { - validMons++; + validMons[validMonsCount++] = i; } } - if (!redCardForcedSwitch && validMons <= minNeeded) + if (validMonsCount == 0) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -12252,19 +12247,7 @@ static void Cmd_forcerandomswitch(void) { *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; - - do - { - i = Random() % monsCount; - i += firstMonId; - } - while (i == battler2PartyId - || i == battler1PartyId - || GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_NONE - || GetMonData(&party[i], MON_DATA_IS_EGG) == TRUE - || GetMonData(&party[i], MON_DATA_HP) == 0); - - *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; + *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[Random() % validMonsCount]; if (!IsMultiBattle()) SwitchPartyOrder(gBattlerTarget); diff --git a/test/move_effect_roar.c b/test/move_effect_roar.c new file mode 100644 index 0000000000..2d4eadda85 --- /dev/null +++ b/test/move_effect_roar.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ROAR].effect == EFFECT_ROAR); +} + +SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, player); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_ROAR, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROAR, playerLeft); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Roar fails if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + MESSAGE("Wobbuffet used Roar!"); + MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Roar fails if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_ROAR); } + } SCENE { + MESSAGE("Wobbuffet used Roar!"); + MESSAGE("But it failed!"); + } +} From afe09e96532165c044848ace9a3a3ed034567041 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Sun, 19 Feb 2023 21:08:30 +0000 Subject: [PATCH 108/290] Test Dragon Tail Remove the "But it failed!" message if the foe cannot be switched. --- data/battle_scripts_1.s | 7 ++- include/battle_scripts.h | 1 - src/battle_script_commands.c | 2 +- test/move_effect_hit_switch_target.c | 72 ++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 test/move_effect_hit_switch_target.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 6fa0cd7ad7..53925b578d 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2128,9 +2128,9 @@ BattleScript_EffectHitSwitchTarget: moveendall jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted - tryhitswitchtarget BattleScript_EffectHitSwitchTargetMoveEnd -BattleScript_EffectHitSwitchTargetMoveEnd: - end + tryhitswitchtarget BattleScript_MoveEnd + forcerandomswitch BattleScript_MoveEnd + goto BattleScript_MoveEnd BattleScript_EffectClearSmog: setmoveeffect MOVE_EFFECT_CLEAR_SMOG @@ -3708,7 +3708,6 @@ BattleScript_EffectRoar:: accuracycheck BattleScript_ButItFailed, NO_ACC_CALC_CHECK_LOCK_ON accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE jumpifbattletype BATTLE_TYPE_ARENA, BattleScript_ButItFailed -BattleScript_ForceRandomSwitch:: forcerandomswitch BattleScript_ButItFailed BattleScript_EffectMultiHit:: diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 70d398e2a5..d4e4d4b3ce 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -293,7 +293,6 @@ extern const u8 BattleScript_WishMegaEvolution[]; extern const u8 BattleScript_MoveEffectRecoilWithStatus[]; extern const u8 BattleScript_EffectWithChance[]; extern const u8 BattleScript_MoveEffectClearSmog[]; -extern const u8 BattleScript_ForceRandomSwitch[]; extern const u8 BattleScript_SideStatusWoreOffReturn[]; extern const u8 BattleScript_MoveEffectSmackDown[]; extern const u8 BattleScript_MoveEffectFlameBurst[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b4bafd215c..fdd3d4f07b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9792,7 +9792,7 @@ static void Cmd_various(void) && GetBattlerAbility(gBattlerTarget) != ABILITY_GUARD_DOG) { gBattleScripting.switchCase = B_SWITCH_HIT; - gBattlescriptCurrInstr = BattleScript_ForceRandomSwitch; + gBattlescriptCurrInstr = cmd->nextInstr; } else { diff --git a/test/move_effect_hit_switch_target.c b/test/move_effect_hit_switch_target.c new file mode 100644 index 0000000000..9c50a4e4c0 --- /dev/null +++ b/test/move_effect_hit_switch_target.c @@ -0,0 +1,72 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + ASSUME(gBattleMoves[MOVE_LOCK_ON].effect == EFFECT_LOCK_ON); +} + +SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted replacement") +{ + KNOWN_FAILING; // Only 18/50. Waiting for an improved PASSES_RANDOMLY. + PASSES_RANDOMLY(90 * 1, 100 * 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, non-fainted replacement") +{ + PASSES_RANDOMLY(90 * 1, 100 * 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_DRAGON_TAIL, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, playerLeft); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail does not fail if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + NOT MESSAGE("But it failed!"); + } +} + +SINGLE_BATTLE_TEST("Dragon Tail does not fail if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(player, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + NOT MESSAGE("But it failed!"); + } +} From 29c64c82f329c45131c7e31e7e48ad69ae3fdb97 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 21 Feb 2023 10:44:58 +0000 Subject: [PATCH 109/290] Test Red Card Dragon Tail activates Red Card if the target does not switch. --- asm/macros/battle_script.inc | 4 + data/battle_scripts_1.s | 7 +- include/battle.h | 1 + include/constants/battle_script_commands.h | 1 + src/battle_script_commands.c | 10 +- test/hold_effect_red_card.c | 378 +++++++++++++++++++++ 6 files changed, 399 insertions(+), 2 deletions(-) create mode 100644 test/hold_effect_red_card.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 6c985e3cdd..7c94f06ffe 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2247,3 +2247,7 @@ various \battler, VARIOUS_JUMP_IF_EMERGENCY_EXITED .4byte \jumpInstr .endm + + .macro hitswitchtargetfailed + various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED + .endm diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 53925b578d..239d221093 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2129,7 +2129,12 @@ BattleScript_EffectHitSwitchTarget: jumpifability BS_TARGET, ABILITY_SUCTION_CUPS, BattleScript_AbilityPreventsPhasingOut jumpifstatus3 BS_TARGET, STATUS3_ROOTED, BattleScript_PrintMonIsRooted tryhitswitchtarget BattleScript_MoveEnd - forcerandomswitch BattleScript_MoveEnd + forcerandomswitch BattleScript_HitSwitchTargetForceRandomSwitchFailed + goto BattleScript_MoveEnd + +BattleScript_HitSwitchTargetForceRandomSwitchFailed: + hitswitchtargetfailed + setbyte sSWITCH_CASE, B_SWITCH_NORMAL goto BattleScript_MoveEnd BattleScript_EffectClearSmog: diff --git a/include/battle.h b/include/battle.h index 2c16887bf6..c3281174d0 100644 --- a/include/battle.h +++ b/include/battle.h @@ -651,6 +651,7 @@ struct BattleStruct // When using a move which hits multiple opponents which is then bounced by a target, we need to make sure, the move hits both opponents, the one with bounce, and the one without. u8 attackerBeforeBounce:2; u8 beatUpSlot:3; + bool8 hitSwitchTargetFailed:1; u8 targetsDone[MAX_BATTLERS_COUNT]; // Each battler as a bit. u16 overwrittenAbilities[MAX_BATTLERS_COUNT]; // abilities overwritten during battle (keep separate from battle history in case of switching) bool8 allowedToChangeFormInWeather[PARTY_SIZE][2]; // For each party member and side, used by Ice Face. diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 9f18455a84..0b71c22db9 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -258,6 +258,7 @@ #define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 #define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 #define VARIOUS_STORE_HEALING_WISH 168 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 169 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index fdd3d4f07b..5667beb4ac 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5968,7 +5968,7 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_RED_CARD: - if (gBattleMoves[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET + if ((gBattleMoves[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET || gBattleStruct->hitSwitchTargetFailed) && IsBattlerAlive(gBattlerAttacker) && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && GetBattlerAbility(gBattlerAttacker) != ABILITY_GUARD_DOG) @@ -6199,6 +6199,7 @@ static void Cmd_moveend(void) gBattleStruct->zmove.active = FALSE; gBattleStruct->zmove.toBeUsed[gBattlerAttacker] = MOVE_NONE; gBattleStruct->zmove.effect = EFFECT_HIT; + gBattleStruct->hitSwitchTargetFailed = FALSE; gBattleScripting.moveendState++; break; case MOVEEND_COUNT: @@ -11067,6 +11068,13 @@ static void Cmd_various(void) gBattleStruct->storedHealingWish |= gBitTable[gActiveBattler]; break; } + case VARIOUS_HIT_SWITCH_TARGET_FAILED: + { + VARIOUS_ARGS(); + gBattleStruct->hitSwitchTargetFailed = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c new file mode 100644 index 0000000000..c32c489d5a --- /dev/null +++ b/test/hold_effect_red_card.c @@ -0,0 +1,378 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD); +} + +SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non-fainted replacement") +{ + PASSES_RANDOMLY(1, 2); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BULBASAUR); + OPPONENT(SPECIES_CHARMANDER); + OPPONENT(SPECIES_SQUIRTLE) { HP(0); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Bulbasaur was dragged out!"); + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if holder faints") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if target is behind a Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card activates after the last hit of a multi-hit move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_DOUBLE_KICK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_KICK, opponent); + HP_BAR(player); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if no replacements") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if replacements fainted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(0); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if knocked off") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_KNOCK_OFF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if stolen by a move") +{ + u32 item; + bool32 activate; + PARAMETRIZE { item = ITEM_NONE; activate = FALSE; } + PARAMETRIZE { item = ITEM_POTION; activate = TRUE; } + ASSUME(gBattleMoves[MOVE_THIEF].effect == EFFECT_THIEF); + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_THIEF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THIEF, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if stolen by Magician") +{ + u32 item; + bool32 activate; + PARAMETRIZE { item = ITEM_NONE; activate = FALSE; } + PARAMETRIZE { item = ITEM_POTION; activate = TRUE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_FENNEKIN) { Ability(ABILITY_MAGICIAN); Item(item); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Fennekin!"); + } + } + } +} + +DOUBLE_BATTLE_TEST("Red Card activates for only the fastest target") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(3); Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT) { Speed(2); Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(4); } + OPPONENT(SPECIES_UNOWN) { Speed(1); } + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_ROCK_SLIDE); + MOVE(opponentRight, MOVE_TACKLE, target: playerRight); + } + } SCENE { + // Fastest target's Red Card activates. + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Unown was dragged out!"); + + // Slower target's Red Card still able to activate on other battler. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + MESSAGE("Foe Wobbuffet was dragged out!"); + } +} + +DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker is rooted") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_UNOWN); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_INGRAIN); } + TURN { + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + MESSAGE("Foe Wobbuffet anchored itself with its roots!"); + + // Red Card already consumed so cannot activate. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + } + } +} + +DOUBLE_BATTLE_TEST("Red Card activates but fails if the attacker has Suction Cups") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_OCTILLERY) { Ability(ABILITY_SUCTION_CUPS); } + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_UNOWN); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); + MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft); + MESSAGE("Wobbuffet held up its Red Card against Foe Octillery!"); + MESSAGE("Foe Octillery anchors itself with Suction Cups!"); + + // Red Card already consumed so cannot activate. + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerRight); + MESSAGE("Wynaut held up its Red Card against Foe Wynaut!"); + } + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if switched by Dragon Tail") +{ + bool32 hasWynaut, activate; + PARAMETRIZE { hasWynaut = TRUE; activate = FALSE; } + PARAMETRIZE { hasWynaut = FALSE; activate = TRUE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + if (hasWynaut) PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Red Card activates and overrides U-turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_U_TURN); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Red Card does not activate if attacker's Sheer Force applied") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = TRUE; } + PARAMETRIZE { move = MOVE_STOMP; activate = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (activate) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + } else { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet held up its Red Card against Foe Tauros!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") +{ + GIVEN { + PLAYER(SPECIES_GOLISOPOD) { MaxHP(100); HP(51); Item(ITEM_RED_CARD); } + PLAYER(SPECIES_WIMPOD); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!"); + ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); + MESSAGE("Go! Wimpod!"); + } +} + +// SINGLE_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed") From 1e2eeb4d797aaba2324dfbaa41a283fa6ac9fa86 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 21 Feb 2023 16:26:49 +0100 Subject: [PATCH 110/290] fix wrong assumption --- test/ability_download.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ability_download.c b/test/ability_download.c index 77d090a306..132c0eb5ba 100644 --- a/test/ability_download.c +++ b/test/ability_download.c @@ -4,7 +4,7 @@ ASSUMPTIONS { ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); - ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].split == SPLIT_SPECIAL); } SINGLE_BATTLE_TEST("Download raises Attack if player has lower Def than Sp.Def", s16 damage) From f3c6b647c089d75c53dbb26cf5cfccd5fade73ee Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 21 Feb 2023 15:30:42 +0000 Subject: [PATCH 111/290] Hydra fixes and improvements (#2718) * Build tools for check * Display PASSes when Hydra exits * Print buffered output at exit * Remove unused test summaries * Show SKIP if ASSUMPTIONS fails --- Makefile | 2 +- test/test.h | 1 - test/test_runner.c | 27 +++++++++------------------ tools/mgba-rom-test-hydra/main.c | 16 +++++++++++++++- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 8e3ff29753..2b997fee59 100644 --- a/Makefile +++ b/Makefile @@ -464,7 +464,7 @@ LD_SCRIPT_TEST := ld_script_test.txt $(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 check-tools +$(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) --silent diff --git a/test/test.h b/test/test.h index cbcf117178..c69a4fa925 100644 --- a/test/test.h +++ b/test/test.h @@ -39,7 +39,6 @@ struct TestRunnerState u8 exitCode; s32 tests; s32 passes; - s32 skips; const char *skipFilename; const struct Test *test; u32 processCosts[MAX_PROCESSES]; diff --git a/test/test_runner.c b/test/test_runner.c index 3cb1f7c213..0be1634317 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -60,7 +60,6 @@ void CB2_TestRunner(void) gTestRunnerState.exitCode = 0; gTestRunnerState.tests = 0; gTestRunnerState.passes = 0; - gTestRunnerState.skips = 0; gTestRunnerState.skipFilename = NULL; gTestRunnerState.test = __start_tests - 1; break; @@ -70,20 +69,15 @@ void CB2_TestRunner(void) if (gTestRunnerState.test == __stop_tests) { - MgbaPrintf_("%s%d/%d PASSED\e[0m", gTestRunnerState.exitCode == 0 ? "\e[32m" : "\e[31m", gTestRunnerState.passes, gTestRunnerState.tests); - if (gTestRunnerState.skips) - { - if (gTestRunnerSkipIsFail) - MgbaPrintf_("\e[31m%d SKIPPED\e[0m", gTestRunnerState.skips); - else - MgbaPrintf_("%d SKIPPED", gTestRunnerState.skips); - } gTestRunnerState.state = STATE_EXIT; return; } - if (!PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + if (gTestRunnerState.test->runner != &gAssumptionsRunner + && !PrefixMatch(gTestRunnerArgv, gTestRunnerState.test->name)) + { return; + } // Greedily assign tests to processes based on estimated cost. // TODO: Make processCosts a min heap. @@ -111,6 +105,7 @@ void CB2_TestRunner(void) return; } + MgbaPrintf_(":N%s", gTestRunnerState.test->name); gTestRunnerState.state = STATE_REPORT_RESULT; gTestRunnerState.result = TEST_RESULT_PASS; gTestRunnerState.expectedResult = TEST_RESULT_PASS; @@ -130,7 +125,6 @@ void CB2_TestRunner(void) } else { - MgbaPrintf_(":N%s", gTestRunnerState.test->name); if (gTestRunnerState.test->runner->setUp) gTestRunnerState.test->runner->setUp(gTestRunnerState.test->data); gTestRunnerState.test->runner->run(gTestRunnerState.test->data); @@ -150,12 +144,6 @@ void CB2_TestRunner(void) if (gTestRunnerState.result != TEST_RESULT_PASS) gTestRunnerState.skipFilename = gTestRunnerState.test->filename; } - else if (gTestRunnerState.result == TEST_RESULT_SKIP) - { - gTestRunnerState.skips++; - if (gTestRunnerSkipIsFail) - gTestRunnerState.exitCode = 1; - } else { const char *color; @@ -206,7 +194,10 @@ void CB2_TestRunner(void) default: result = "UNKNOWN"; break; } - MgbaPrintf_(":R%s%s\e[0m", color, result); + if (gTestRunnerState.expectedResult == gTestRunnerState.result) + MgbaPrintf_(":P%s%s\e[0m", color, result); + else + MgbaPrintf_(":F%s%s\e[0m", color, result); } break; diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 5dfc995176..4ce9b09bd0 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -38,6 +38,8 @@ struct Runner size_t output_buffer_size; size_t output_buffer_capacity; char *output_buffer; + int passes; + int results; }; static unsigned nrunners = 0; @@ -72,7 +74,11 @@ static void handle_read(struct Runner *runner) runner->test_name[eol - soc - 1] = '\0'; break; - case 'R': + case 'P': + case 'F': + if (soc[1] == 'P') + runner->passes++; + runner->results++; soc += 2; fprintf(stdout, "%s: ", runner->test_name); fwrite(soc, 1, eol - soc, stdout); @@ -404,6 +410,8 @@ int main(int argc, char *argv[]) // Reap test runners and collate exit codes. int exit_code = 0; + int passes = 0; + int results = 0; for (int i = 0; i < nrunners; i++) { int wstatus; @@ -412,8 +420,14 @@ int main(int argc, char *argv[]) perror("waitpid runners[i] failed"); exit(2); } + if (runners[i].output_buffer_size > 0) + fwrite(runners[i].output_buffer, 1, runners[i].output_buffer_size, stdout); if (WIFEXITED(wstatus) && WEXITSTATUS(wstatus) > exit_code) exit_code = WEXITSTATUS(wstatus); + passes += runners[i].passes; + results += runners[i].results; } + fprintf(stdout, "%d/%d \e[32mPASS\e[0med\n", passes, results); + fflush(stdout); return exit_code; } From d73ab0246f0e0ccb24861dae1d3c9ec5a71b9f51 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 21 Feb 2023 23:50:29 +0100 Subject: [PATCH 112/290] Fix Explosion + Galvanize + Volt Absorb and Mind Blown (#2688) * Fix Explosion and Mind Blown * Use battler ability in jumpifabilitypresent --- asm/macros/battle_script.inc | 6 ++ data/battle_scripts_1.s | 69 ++++++++++++--------- src/battle_script_commands.c | 33 ++++++---- test/ability_damp.c | 20 +++++++ test/ability_volt_absorb.c | 28 ++++++++- test/move_effect_explosion.c | 46 +++++++++++++- test/move_effect_mind_blown.c | 109 ++++++++++++++++++++++++++++++++++ 7 files changed, 268 insertions(+), 43 deletions(-) create mode 100644 test/move_effect_mind_blown.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7c94f06ffe..573ffff261 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1317,6 +1317,12 @@ .2byte \holdEffect .4byte \jumpInstr .endm + + .macro jumpifmorethanhalfHP battler:req, jumpInstr:req + callnative BS_JumpIfMoreThanHalfHP + .byte \battler + .4byte \jumpInstr + .endm @ various command changed to more readable macros .macro cancelmultiturnmoves battler:req diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 239d221093..95d774b20f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -3417,27 +3417,20 @@ BattleScript_EffectFreezeHit:: BattleScript_EffectParalyzeHit:: setmoveeffect MOVE_EFFECT_PARALYSIS goto BattleScript_EffectHit - -BattleScript_EffectExplosion:: - attackcanceler - attackstring - ppreduce -@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) - tryexplosion - setatkhptozero - waitstate - jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop + +BattleScript_EffectExplosion_AnimDmgRet: + jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionAnimRet call BattleScript_PreserveMissedBitDoMoveAnim - goto BattleScript_ExplosionLoop -BattleScript_ExplosionDoAnimStartLoop: + goto BattleScript_ExplosionDmgRet +BattleScript_ExplosionAnimRet: attackanimation waitanimation -BattleScript_ExplosionLoop: +BattleScript_ExplosionDmgRet: movevaluescleanup critcalc damagecalc adjustdamage - accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE + accuracycheck BattleScript_ExplosionMissedRet, ACC_CURR_MOVE effectivenesssound hitanimation BS_TARGET waitstate @@ -3448,17 +3441,25 @@ BattleScript_ExplosionLoop: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_ExplosionLoop - tryfaintmon BS_ATTACKER - moveendcase MOVEEND_CLEAR_BITS - end -BattleScript_ExplosionMissed: +BattleScript_ExplosionAnimEndRet_Return: + return +BattleScript_ExplosionMissedRet: effectivenesssound resultmessage waitmessage B_WAIT_TIME_LONG - moveendto MOVEEND_NEXT_TARGET - jumpifnexttargetvalid BattleScript_ExplosionLoop + goto BattleScript_ExplosionAnimEndRet_Return + +BattleScript_EffectExplosion:: + attackcanceler + attackstring + ppreduce +@ Below jumps to BattleScript_DampStopsExplosion if it fails (only way it can) + tryexplosion + waitstate +BattleScript_EffectExplosion_AnimDmgFaintAttacker: + call BattleScript_EffectExplosion_AnimDmgRet + moveendall + setatkhptozero tryfaintmon BS_ATTACKER end @@ -3466,14 +3467,28 @@ BattleScript_EffectMindBlown:: attackcanceler attackstring ppreduce - tryexplosion + jumpifbyte CMP_GREATER_THAN, sB_ANIM_TARGETS_HIT, 0, BattleScript_EffectMindBlown_NoHpLoss + jumpifabilitypresent ABILITY_DAMP, BattleScript_MindBlownDamp + jumpifmorethanhalfHP BS_ATTACKER, BattleScript_EffectMindBlown_HpDown + setbyte sMULTIHIT_EFFECT, 0 @ Note to faint the attacker + instanthpdrop BS_ATTACKER + waitstate + goto BattleScript_EffectExplosion_AnimDmgFaintAttacker +BattleScript_EffectMindBlown_NoHpLoss: + jumpifbyte CMP_EQUAL, sMULTIHIT_EFFECT, 0, BattleScript_EffectExplosion_AnimDmgFaintAttacker + goto BattleScript_EffectMindBlown_AnimDmgNoFaint +BattleScript_MindBlownDamp: + copybyte gBattlerTarget, gBattlerAbility + goto BattleScript_DampStopsExplosion +BattleScript_EffectMindBlown_HpDown: + setbyte sMULTIHIT_EFFECT, 1 @ Note to not faint the attacker dmg_1_2_attackerhp healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER waitstate - jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop - call BattleScript_PreserveMissedBitDoMoveAnim - goto BattleScript_ExplosionLoop +BattleScript_EffectMindBlown_AnimDmgNoFaint: + call BattleScript_EffectExplosion_AnimDmgRet + goto BattleScript_MoveEnd BattleScript_PreserveMissedBitDoMoveAnim: bichalfword gMoveResultFlags, MOVE_RESULT_MISSED @@ -8360,9 +8375,9 @@ BattleScript_AbilityRaisesDefenderStat:: BattleScript_AbilityPopUp: .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ABILITY_BATTLER - recordability BS_ABILITY_BATTLER pause 40 .endif + recordability BS_ABILITY_BATTLER sethword sABILITY_OVERWRITE, 0 return diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 5667beb4ac..19d0b3afb6 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5017,10 +5017,17 @@ static void Cmd_jumpifabilitypresent(void) { CMD_ARGS(u16 ability, const u8 *jumpInstr); - if (IsAbilityOnField(cmd->ability)) + u16 ability = cmd->ability; + u32 abilityBattler = IsAbilityOnField(ability); + if (abilityBattler) + { + gBattlerAbility = abilityBattler - 1; gBattlescriptCurrInstr = cmd->jumpInstr; + } else + { gBattlescriptCurrInstr = cmd->nextInstr; + } } static void Cmd_endselectionscript(void) @@ -11183,14 +11190,15 @@ static void Cmd_tryexplosion(void) { CMD_ARGS(); + u32 dampBattler; if (gBattleControllerExecFlags) return; - if ((gBattlerTarget = IsAbilityOnField(ABILITY_DAMP))) + if ((dampBattler = IsAbilityOnField(ABILITY_DAMP))) { // Failed, a battler has Damp gLastUsedAbility = ABILITY_DAMP; - RecordAbilityBattle(--gBattlerTarget, ABILITY_DAMP); + gBattlerTarget = --dampBattler; gBattlescriptCurrInstr = BattleScript_DampStopsExplosion; return; } @@ -11200,14 +11208,6 @@ static void Cmd_tryexplosion(void) BtlController_EmitHealthBarUpdate(BUFFER_A, INSTANT_HP_BAR_DROP); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr = cmd->nextInstr; - - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) - { - if (gBattlerTarget == gBattlerAttacker) - continue; - if (IsBattlerAlive(gBattlerTarget)) - break; - } } static void Cmd_setatkhptozero(void) @@ -16033,6 +16033,17 @@ void BS_CalcMetalBurstDmg(void) } } +void BS_JumpIfMoreThanHalfHP(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u8 battler = GetBattlerForBattleScript(cmd->battler); + if (gBattleMons[battler].hp > (gBattleMons[battler].maxHP + 1) / 2) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + void BS_JumpIfHoldEffect(void) { u8 battler = gBattlescriptCurrInstr[5]; diff --git a/test/ability_damp.c b/test/ability_damp.c index 33d1ae466a..c473660f5c 100644 --- a/test/ability_damp.c +++ b/test/ability_damp.c @@ -19,6 +19,26 @@ SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies") } } +DOUBLE_BATTLE_TEST("Damp prevents explosion-like moves from enemies in a double battle") +{ + u32 move; + PARAMETRIZE { move = MOVE_EXPLOSION; } + PARAMETRIZE { move = MOVE_SELF_DESTRUCT; } + PARAMETRIZE { move = MOVE_MIND_BLOWN; } + PARAMETRIZE { move = MOVE_MISTY_EXPLOSION; } + GIVEN { + PLAYER(SPECIES_PARAS) { Ability(ABILITY_DAMP); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, move); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_DAMP); + NONE_OF { HP_BAR(playerLeft); HP_BAR(opponentLeft); HP_BAR(playerRight); HP_BAR(opponentRight); } + } +} + SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from self") { u32 move; diff --git a/test/ability_volt_absorb.c b/test/ability_volt_absorb.c index f485f65574..bef35e2b4b 100644 --- a/test/ability_volt_absorb.c +++ b/test/ability_volt_absorb.c @@ -63,6 +63,30 @@ SINGLE_BATTLE_TEST("Volt Absorb is only triggered once on multi strike moves") } } +DOUBLE_BATTLE_TEST("Volt Absorb does not stop Electric Typed Explosion from damaging other pokemon", s16 damage1, s16 damage2) // Fixed issue #1961 +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); + ASSUME(gBattleMoves[MOVE_EXPLOSION].type == TYPE_NORMAL); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); HP(1); MaxHP(TEST_MAX_HP); } + PLAYER(SPECIES_ABRA); + OPPONENT(SPECIES_GRAVELER_ALOLAN) { Ability(ABILITY_GALVANIZE); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_EXPLOSION); } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_VOLT_ABSORB); + HP_BAR(playerLeft, hp: TEST_MAX_HP / 4 + 1); + MESSAGE("Jolteon restored HP using its Volt Absorb!"); + HP_BAR(playerRight, captureDamage: &results->damage1); + HP_BAR(opponentRight, captureDamage: &results->damage2); + } + FINALLY { + EXPECT_NE(results[0].damage1, 0); + EXPECT_NE(results[0].damage2, 0); + } +} + SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") { GIVEN { @@ -75,11 +99,11 @@ SINGLE_BATTLE_TEST("Volt Absorb prevents Cell Battery from activating") ABILITY_POPUP(player, ABILITY_VOLT_ABSORB); HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); MESSAGE("Jolteon restored HP using its Volt Absorb!"); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Using Cell Battery, the attack of Jolteon rose!"); } - + } } diff --git a/test/move_effect_explosion.c b/test/move_effect_explosion.c index 872f3f7090..41e74044ba 100644 --- a/test/move_effect_explosion.c +++ b/test/move_effect_explosion.c @@ -8,7 +8,6 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Explosion causes the user to faint") { - u16 remainingHP; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -17,12 +16,29 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint") } SCENE { HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + MESSAGE("Wobbuffet fainted!"); + } +} + +SINGLE_BATTLE_TEST("Explosion causes the user & the target to faint") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); } } SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it misses") { - u16 remainingHP; GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -31,12 +47,12 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it misses") } SCENE { HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + MESSAGE("Wobbuffet fainted!"); } } SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect") { - u16 remainingHP; GIVEN { ASSUME(gBattleMoves[MOVE_EXPLOSION].type == TYPE_NORMAL); ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST); @@ -49,5 +65,29 @@ SINGLE_BATTLE_TEST("Explosion causes the user to faint even if it has no effect" ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); MESSAGE("It doesn't affect Foe Gastly…"); NOT HP_BAR(opponent); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Explosion causes everyone to faint in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_EXPLOSION); } + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); + HP_BAR(opponentLeft, hp: 0); + MESSAGE("Foe Abra fainted!"); + HP_BAR(playerRight, hp: 0); + MESSAGE("Wynaut fainted!"); + HP_BAR(opponentRight, hp: 0); + MESSAGE("Foe Kadabra fainted!"); + MESSAGE("Wobbuffet fainted!"); } } diff --git a/test/move_effect_mind_blown.c b/test/move_effect_mind_blown.c new file mode 100644 index 0000000000..6b053cfb56 --- /dev/null +++ b/test/move_effect_mind_blown.c @@ -0,0 +1,109 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_MIND_BLOWN].effect == EFFECT_MIND_BLOWN); +} + +#define HP_TEST (400) + +SINGLE_BATTLE_TEST("Mind Blown makes the user lose 1/2 of its HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST); MaxHP(HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MIND_BLOWN); } + } SCENE { + HP_BAR(player, hp: HP_TEST / 2); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); + NOT MESSAGE("Wobbuffet fainted!"); // Wobb had more than 1/2 of its HP, so it can't faint. + } +} + +DOUBLE_BATTLE_TEST("Mind Blown makes the user lose 1/2 of its HP in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST); MaxHP(HP_TEST); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIND_BLOWN); } + } SCENE { + HP_BAR(playerLeft, hp: HP_TEST / 2); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); + NOT MESSAGE("Wobbuffet fainted!"); // Wobb had more than 1/2 of its HP, so it can't faint. + } +} + +SINGLE_BATTLE_TEST("Mind Blown causes the user to faint when below 1/2 of its HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2); MaxHP(HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MIND_BLOWN); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Mind Blown causes the user to faint when below 1/2 of its HP in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2); MaxHP(HP_TEST); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIND_BLOWN);} + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); + MESSAGE("Wobbuffet fainted!"); + } +} + +SINGLE_BATTLE_TEST("Mind Blown causes the user & the target to faint when below 1/2 of its HP") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2) ; MaxHP(HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MIND_BLOWN);} + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, player); + HP_BAR(opponent, hp: 0); + MESSAGE("Foe Wobbuffet fainted!"); + MESSAGE("Wobbuffet fainted!"); + } +} + +DOUBLE_BATTLE_TEST("Mind Blown causes everyone to faint in a double battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(HP_TEST / 2); MaxHP(HP_TEST); } + PLAYER(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA) { HP(1); } + OPPONENT(SPECIES_KADABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_MIND_BLOWN, criticalHit: FALSE); } + } SCENE { + HP_BAR(playerLeft, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIND_BLOWN, playerLeft); + HP_BAR(opponentLeft, hp: 0); + MESSAGE("Foe Abra fainted!"); + HP_BAR(playerRight, hp: 0); + MESSAGE("Wynaut fainted!"); + HP_BAR(opponentRight, hp: 0); + MESSAGE("Foe Kadabra fainted!"); + MESSAGE("Wobbuffet fainted!"); + } +} From 54e388a3752e81d6c8137f740097dc68540f5fad Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Feb 2023 00:30:12 -0300 Subject: [PATCH 113/290] More detailed hydra test results --- test/test_runner.c | 4 +++- tools/mgba-rom-test-hydra/main.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index 0be1634317..c2d3f66d25 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -194,8 +194,10 @@ void CB2_TestRunner(void) default: result = "UNKNOWN"; break; } - if (gTestRunnerState.expectedResult == gTestRunnerState.result) + if (gTestRunnerState.result == TEST_RESULT_PASS) MgbaPrintf_(":P%s%s\e[0m", color, result); + else if (gTestRunnerState.expectedResult == gTestRunnerState.result) + MgbaPrintf_(":K%s%s\e[0m", color, result); else MgbaPrintf_(":F%s%s\e[0m", color, result); } diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 4ce9b09bd0..107ca339be 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -9,7 +9,11 @@ * COMMANDS * N: Sets the test name to the remainder of the line. * R: Sets the result to the remainder of the line, and flushes any - * output buffered since the previous R. */ + * output buffered since the previous R. + * + * //Missing P, F and K documentation, please tell me what to put here lol + * + */ #include #include #include @@ -39,6 +43,7 @@ struct Runner size_t output_buffer_capacity; char *output_buffer; int passes; + int knownFails; int results; }; @@ -76,8 +81,11 @@ static void handle_read(struct Runner *runner) case 'P': case 'F': + case 'K': if (soc[1] == 'P') runner->passes++; + else if (soc[1] == 'K') + runner->knownFails++; runner->results++; soc += 2; fprintf(stdout, "%s: ", runner->test_name); @@ -411,6 +419,7 @@ int main(int argc, char *argv[]) // Reap test runners and collate exit codes. int exit_code = 0; int passes = 0; + int knownFails = 0; int results = 0; for (int i = 0; i < nrunners; i++) { @@ -425,9 +434,25 @@ int main(int argc, char *argv[]) if (WIFEXITED(wstatus) && WEXITSTATUS(wstatus) > exit_code) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; + knownFails += runners[i].knownFails; results += runners[i].results; } - fprintf(stdout, "%d/%d \e[32mPASS\e[0med\n", passes, results); + + if (results == 0) + { + fprintf(stdout, "\nNo tests found.\n"); + } + else + { + fprintf(stdout, "\n- Tests TOTAL: %d\n", results); + fprintf(stdout, "- Tests \e[32mPASSED: \e[0m %d\n", passes); + if (knownFails > 0) + fprintf(stdout, "- Tests \e[33mKNOWN_FAILING:\e[0m %d\n", knownFails); + if (passes + knownFails < results) + fprintf(stdout, "- Tests \e[31mFAILED: \e[0m %d\n", results - passes - knownFails); + } + fprintf(stdout, "\n"); + fflush(stdout); return exit_code; } From bca47a0891a7e69781425cb7b30d3573dee88aeb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 09:17:23 +0100 Subject: [PATCH 114/290] Update src/battle_script_commands.c Co-authored-by: LOuroboros --- 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 ce9ea50f70..344c5091bb 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6914,7 +6914,7 @@ bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) { bool32 aliveOpposing1 = IsBattlerAlive(BATTLE_OPPOSITE(battlerId)); bool32 aliveOpposing2 = IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId))); - // No pokemon on opposing side - postopone. + // No pokemon on opposing side - postpone. if (!aliveOpposing1 && !aliveOpposing2) return TRUE; From 31138455ded2fd6d711777b4ee19cadd5245e1b2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 09:28:12 +0100 Subject: [PATCH 115/290] remove unneeded VARIOUS_JUMP_IF_NO_VALID_TARGETS --- asm/macros/battle_script.inc | 5 ----- data/battle_scripts_1.s | 1 - include/constants/battle_script_commands.h | 7 +++---- src/battle_script_commands.c | 16 ---------------- 4 files changed, 3 insertions(+), 26 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7c94f06ffe..03a4d6222d 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2049,11 +2049,6 @@ various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES .endm - .macro jumpifnovalidtargets jumpInstr:req - various BS_ATTACKER, VARIOUS_JUMP_IF_NO_VALID_TARGETS - .4byte \jumpInstr - .endm - @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 239d221093..036d662e8e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8573,7 +8573,6 @@ BattleScript_TryAdrenalineOrbRet: return BattleScript_IntimidateActivates:: - jumpifnovalidtargets BattleScript_IntimidateEnd showabilitypopup BS_ATTACKER pause B_WAIT_TIME_LONG destroyabilitypopup diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 0b71c22db9..9699a29211 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -255,10 +255,9 @@ #define VARIOUS_TRY_WIND_RIDER_POWER 163 #define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 164 #define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 165 -#define VARIOUS_JUMP_IF_NO_VALID_TARGETS 166 -#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 167 -#define VARIOUS_STORE_HEALING_WISH 168 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 169 +#define VARIOUS_JUMP_IF_EMERGENCY_EXITED 166 +#define VARIOUS_STORE_HEALING_WISH 167 +#define VARIOUS_HIT_SWITCH_TARGET_FAILED 168 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 344c5091bb..e0f0116ffd 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -11068,22 +11068,6 @@ static void Cmd_various(void) AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, gActiveBattler, 0, 0, 0); return; } - case VARIOUS_JUMP_IF_NO_VALID_TARGETS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - u32 count = 0; - - for (i = 0; i < gBattlersCount; i++) - { - if (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) && IsBattlerAlive(i)) - count++; - } - if (count == 0) - gBattlescriptCurrInstr = cmd->jumpInstr; - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } case VARIOUS_JUMP_IF_EMERGENCY_EXITED: { VARIOUS_ARGS(const u8 *jumpInstr); From 64e26f5c86f202ff9327c7c3a21a02fadbcd6b80 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 13:11:16 +0100 Subject: [PATCH 116/290] Fix Contrary String on Intimidate --- data/battle_scripts_1.s | 45 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8ed23a922d..fdec43234e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -484,15 +484,13 @@ BattleScript_Teatimevul: moveendcase MOVEEND_CLEAR_BITS goto BattleScript_MoveEnd BattleScript_Teatimesorb: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS goto BattleScript_MoveEnd BattleScript_Teatimerod: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget playstatchangeanimation BS_TARGET, BIT_SPATK, STAT_CHANGE_BY_TWO setstatchanger STAT_SPATK, 1, FALSE statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer @@ -504,8 +502,7 @@ BattleScript_Teatimerod: moveendcase MOVEEND_CLEAR_BITS goto BattleScript_MoveEnd BattleScript_Teatimemotor: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget playstatchangeanimation BS_TARGET, BIT_SPEED, STAT_CHANGE_BY_TWO setstatchanger STAT_SPEED, 1, FALSE statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer @@ -3386,8 +3383,7 @@ BattleScript_EffectAbsorb:: setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB goto BattleScript_AbsorbUpdateHp BattleScript_AbsorbLiquidOoze:: - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget manipulatedamage DMG_CHANGE_SIGN setbyte cMULTISTRING_CHOOSER, B_MSG_ABSORB_OOZE BattleScript_AbsorbUpdateHp:: @@ -5505,9 +5501,8 @@ BattleScript_NotAffected:: goto BattleScript_MoveEnd BattleScript_NotAffectedAbilityPopUp:: - copybyte gBattlerAbility, gBattlerTarget pause B_WAIT_TIME_SHORT - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget orhalfword gMoveResultFlags, MOVE_RESULT_DOESNT_AFFECT_FOE resultmessage waitmessage B_WAIT_TIME_LONG @@ -5996,8 +5991,7 @@ BattleScript_EffectSkillSwap: attackanimation waitanimation .if B_ABILITY_POP_UP == TRUE - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget pause 20 copybyte gBattlerAbility, gBattlerAttacker call BattleScript_AbilityPopUp @@ -7752,9 +7746,8 @@ BattleScript_EnduredMsg:: return BattleScript_SturdiedMsg:: - copybyte gBattlerAbility, gBattlerTarget pause B_WAIT_TIME_SHORTEST - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_ENDUREDSTURDY waitmessage B_WAIT_TIME_LONG return @@ -7895,8 +7888,7 @@ BattleScript_CudChewActivates:: BattleScript_TargetFormChange:: pause 5 - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_EMPTYSTRING3 waitmessage 1 handleformchange BS_TARGET, 0 @@ -7908,8 +7900,7 @@ BattleScript_TargetFormChange:: BattleScript_TargetFormChangeWithString:: pause 5 - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_EMPTYSTRING3 waitmessage 1 handleformchange BS_TARGET, 0 @@ -8372,6 +8363,8 @@ BattleScript_AbilityRaisesDefenderStat:: waitmessage B_WAIT_TIME_LONG return +BattleScript_AbilityPopUpTarget: + copybyte gBattlerAbility, gBattlerTarget BattleScript_AbilityPopUp: .if B_ABILITY_POP_UP == TRUE showabilitypopup BS_ABILITY_BATTLER @@ -8611,9 +8604,10 @@ BattleScript_IntimidateEffect: copybyte sBATTLER, gBattlerAttacker statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary printstring STRINGID_PKMNCUTSATTACKWITH waitmessage B_WAIT_TIME_LONG +BattleScript_IntimidateEffect_AfterString: copybyte sBATTLER, gBattlerTarget call BattleScript_TryAdrenalineOrb BattleScript_IntimidateLoopIncrement: @@ -8624,6 +8618,13 @@ BattleScript_IntimidateEnd: pause B_WAIT_TIME_MED end3 +BattleScript_IntimidateContrary: + call BattleScript_AbilityPopUpTarget + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatUpStringIds + waitmessage B_WAIT_TIME_LONG + goto BattleScript_IntimidateEffect_AfterString + BattleScript_IntimidatePrevented: call BattleScript_AbilityPopUp pause B_WAIT_TIME_LONG @@ -8637,8 +8638,7 @@ BattleScript_IntimidatePrevented_Item: BattleScript_IntimidateInReverse: copybyte sBATTLER, gBattlerTarget - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget pause B_WAIT_TIME_SHORT modifybattlerstatstage BS_TARGET, STAT_ATK, INCREASE, 1, BattleScript_IntimidateLoopIncrement, ANIM_ON call BattleScript_TryAdrenalineOrb @@ -8881,8 +8881,7 @@ BattleScript_SturdyPreventsOHKO:: BattleScript_DampStopsExplosion:: pause B_WAIT_TIME_SHORT - copybyte gBattlerAbility, gBattlerTarget - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpTarget printstring STRINGID_PKMNPREVENTSUSAGE pause B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET From e0b76e98ff319901d1316ad9305620dbd57d56ed Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 14:55:34 +0100 Subject: [PATCH 117/290] Add MOVE_SHELL_TRAP Effect (#2716) * implemented Shell Trap Co-authored-by: AgustinGDLV --- asm/macros/battle_script.inc | 5 + data/battle_anim_scripts.s | 144 +++++++++--------- data/battle_scripts_1.s | 18 +++ include/battle.h | 1 + include/battle_scripts.h | 1 + include/constants/battle_move_effects.h | 3 +- include/constants/battle_script_commands.h | 1 + include/constants/battle_string_ids.h | 4 +- src/battle_main.c | 3 + src/battle_message.c | 4 + src/battle_script_commands.c | 87 ++++++++--- src/battle_util.c | 3 +- src/data/battle_moves.h | 2 +- test/move_effect_shell_trap.c | 168 +++++++++++++++++++++ 14 files changed, 344 insertions(+), 100 deletions(-) create mode 100644 test/move_effect_shell_trap.c diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 5c71cef706..66c60a7cf0 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -2249,6 +2249,11 @@ .4byte \jumpInstr .endm + .macro jumpifshelltrap battler:req, ptr:req + various \battler, VARIOUS_JUMP_IF_SHELL_TRAP + .4byte \ptr + .endm + .macro hitswitchtargetfailed various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED .endm diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 71bd93d70a..75a831a331 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -12036,168 +12036,168 @@ ShellTrapUnleash: monbg ANIM_TARGET waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 delay 0x6 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapYellowImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x0 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x4 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x8 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0xc - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x10 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x14 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - launchtemplate gFireSpiralOutwardSpriteTemplate 0x3 0x4 0x0 0x0 0x38 0x18 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - launchtemplate gShellTrapRedImpactTemplate 0x2 0x4 0x0 0x0 0x0 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 waitforvisualfinish call ShellTrapFireLaunch1 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 call ShellTrapFireLaunch2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 waitforvisualfinish clearmonbg ANIM_TARGET end ShellTrapFireLaunch1: - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 delay 0x3 return ShellTrapFireLaunch2: - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x0 0x0 0x0 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xfff6 0x0 0xfff6 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xa 0x0 0xa 0x38 0xfffc 0x3 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0xfffc 0x5 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xf 0x0 0xf 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0xffec 0x0 0xffec 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - launchtemplate gShellTrapFireHitsTemplate 0x28 0x8 0x0 0x14 0x0 0x14 0x38 0x4 0x4 0x1 - launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x0003 0x0000 0x0006 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 return diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8ed23a922d..5bf5f52b0f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,6 +417,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp @@ -557,6 +558,23 @@ BattleScript_AffectionBasedStatusHeal_Continue: waitstate end2 +BattleScript_ShellTrapSetUp:: + printstring STRINGID_EMPTYSTRING3 + waitmessage 0x1 + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + printstring STRINGID_PREPARESHELLTRAP + waitmessage B_WAIT_TIME_LONG + end2 + +BattleScript_EffectShellTrap:: + attackcanceler + jumpifshelltrap BS_ATTACKER, BattleScript_HitFromAccCheck + jumpifword CMP_COMMON_BITS, gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT, BattleScript_MoveEnd + ppreduce + printstring STRINGID_SHELLTRAPDIDNTWORK + waitmessage B_WAIT_TIME_LONG + goto BattleScript_MoveEnd + BattleScript_EffectSteelBeam:: attackcanceler attackstring diff --git a/include/battle.h b/include/battle.h index e177338234..48c283ab4e 100644 --- a/include/battle.h +++ b/include/battle.h @@ -143,6 +143,7 @@ struct ProtectStruct u16 quickDraw:1; u16 beakBlastCharge:1; u16 quash:1; + u16 shellTrap:1; u16 silkTrapped:1; u32 physicalDmg; u32 specialDmg; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index d4e4d4b3ce..7904f5dc1f 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -453,6 +453,7 @@ extern const u8 BattleScript_BattlerFormChangeWithStringEnd3[]; extern const u8 BattleScript_DampPreventsAftermath[]; extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; +extern const u8 BattleScript_ShellTrapSetUp[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index beab881512..061271dd56 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -398,7 +398,8 @@ #define EFFECT_VICTORY_DANCE 392 #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen +#define EFFECT_SHELL_TRAP 395 -#define NUM_BATTLE_MOVE_EFFECTS 395 +#define NUM_BATTLE_MOVE_EFFECTS 396 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 9699a29211..26064bcfb1 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -258,6 +258,7 @@ #define VARIOUS_JUMP_IF_EMERGENCY_EXITED 166 #define VARIOUS_STORE_HEALING_WISH 167 #define VARIOUS_HIT_SWITCH_TARGET_FAILED 168 +#define VARIOUS_JUMP_IF_SHELL_TRAP 169 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 3f8853024f..e561a9cb98 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -639,8 +639,10 @@ #define STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT 637 #define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 638 #define STRINGID_PKMNSABILITYPREVENTSABILITY 639 +#define STRINGID_PREPARESHELLTRAP 640 +#define STRINGID_SHELLTRAPDIDNTWORK 641 -#define BATTLESTRINGS_COUNT 640 +#define BATTLESTRINGS_COUNT 642 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, diff --git a/src/battle_main.c b/src/battle_main.c index b23d8af553..6588d3c5ee 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4954,6 +4954,9 @@ static void CheckChosenMoveForEffectsBeforeTurnStarts(void) case MOVE_BEAK_BLAST: BattleScriptExecute(BattleScript_BeakBlastSetUp); return; + case MOVE_SHELL_TRAP: + BattleScriptExecute(BattleScript_ShellTrapSetUp); + return; } } } diff --git a/src/battle_message.c b/src/battle_message.c index 2b8005f64b..ec2527d846 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -774,6 +774,8 @@ static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!"); static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p"); static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); +static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); +static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { @@ -800,6 +802,8 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_ZMOVEHPTRAP - BATTLESTRINGS_TABLE_START] = sText_ZMoveHpSwitchInTrap, [STRINGID_PLAYERLOSTTOENEMYTRAINER - BATTLESTRINGS_TABLE_START] = sText_PlayerLostToEnemyTrainer, [STRINGID_PLAYERPAIDPRIZEMONEY - BATTLESTRINGS_TABLE_START] = sText_PlayerPaidPrizeMoney, + [STRINGID_SHELLTRAPDIDNTWORK - BATTLESTRINGS_TABLE_START] = sText_ShellTrapDidntWork, + [STRINGID_PREPARESHELLTRAP - BATTLESTRINGS_TABLE_START] = sText_PrepareShellTrap, [STRINGID_COURTCHANGE - BATTLESTRINGS_TABLE_START] = sText_CourtChange, [STRINGID_HEATUPBEAK - BATTLESTRINGS_TABLE_START] = sText_HeatingUpBeak, [STRINGID_METEORBEAMCHARGING - BATTLESTRINGS_TABLE_START] = sText_MeteorBeamCharging, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1d6ab5faeb..3826a47517 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -350,6 +350,7 @@ static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); static bool8 IsFinalStrikeEffect(u16 move); static void TryUpdateRoundTurnOrder(void); +static bool32 ChangeOrderTargetAfterAttacker(void); static void Cmd_attackcanceler(void); static void Cmd_accuracycheck(void); @@ -5732,6 +5733,22 @@ static void Cmd_moveend(void) else gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]); + // Set ShellTrap to activate after the attacker's turn if target was hit by a physical move. + if (gBattleMoves[gChosenMoveByBattler[gBattlerTarget]].effect == EFFECT_SHELL_TRAP + && gBattlerTarget != gBattlerAttacker + && GetBattlerSide(gBattlerTarget) != GetBattlerSide(gBattlerAttacker) + && gProtectStructs[gBattlerTarget].physicalDmg + && gProtectStructs[gBattlerTarget].physicalBattlerId == gBattlerAttacker + && !TestSheerForceFlag(gBattlerAttacker, gCurrentMove)) + { + gProtectStructs[gBattlerTarget].shellTrap = TRUE; + // Change move order in double battles, so the hit mon with shell trap moves immediately after being hit. + if (IsDoubleBattle()) + { + ChangeOrderTargetAfterAttacker(); + } + } + if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET) { gActiveBattler = gBattlerAttacker; @@ -6196,6 +6213,7 @@ static void Cmd_moveend(void) gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].usesBouncedMove = FALSE; gProtectStructs[gBattlerAttacker].targetAffected = FALSE; + gProtectStructs[gBattlerAttacker].shellTrap = FALSE; gBattleStruct->ateBoost[gBattlerAttacker] = 0; gStatuses3[gBattlerAttacker] &= ~STATUS3_ME_FIRST; gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE; @@ -8643,6 +8661,38 @@ static bool32 CanTeleport(u8 battlerId) return TRUE; } +// Return True if the order was changed, and false if the order was not changed(for example because the target would move after the attacker anyway). +static bool32 ChangeOrderTargetAfterAttacker(void) +{ + u32 i; + u8 data[MAX_BATTLERS_COUNT]; + + if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) + || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) + return FALSE; + + for (i = 0; i < gBattlersCount; i++) + data[i] = gBattlerByTurnOrder[i]; + if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[3]; + } + else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) + { + gBattlerByTurnOrder[1] = gBattlerTarget; + gBattlerByTurnOrder[2] = data[1]; + gBattlerByTurnOrder[3] = data[2]; + } + else // Attacker == 1, Target == 3 + { + gBattlerByTurnOrder[2] = gBattlerTarget; + gBattlerByTurnOrder[3] = data[2]; + } + return TRUE; +} + static void Cmd_various(void) { CMD_ARGS(u8 battler, u8 id); @@ -10010,34 +10060,14 @@ static void Cmd_various(void) case VARIOUS_AFTER_YOU: { VARIOUS_ARGS(const u8 *failInstr); - if (GetBattlerTurnOrderNum(gBattlerAttacker) > GetBattlerTurnOrderNum(gBattlerTarget) - || GetBattlerTurnOrderNum(gBattlerAttacker) + 1 == GetBattlerTurnOrderNum(gBattlerTarget)) + if (ChangeOrderTargetAfterAttacker()) { - gBattlescriptCurrInstr = cmd->failInstr; + gSpecialStatuses[gBattlerTarget].afterYou = 1; + gBattlescriptCurrInstr = cmd->nextInstr; } else { - for (i = 0; i < gBattlersCount; i++) - data[i] = gBattlerByTurnOrder[i]; - if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 2) - { - gBattlerByTurnOrder[1] = gBattlerTarget; - gBattlerByTurnOrder[2] = data[1]; - gBattlerByTurnOrder[3] = data[3]; - } - else if (GetBattlerTurnOrderNum(gBattlerAttacker) == 0 && GetBattlerTurnOrderNum(gBattlerTarget) == 3) - { - gBattlerByTurnOrder[1] = gBattlerTarget; - gBattlerByTurnOrder[2] = data[1]; - gBattlerByTurnOrder[3] = data[2]; - } - else - { - gBattlerByTurnOrder[2] = gBattlerTarget; - gBattlerByTurnOrder[3] = data[2]; - } - gSpecialStatuses[gBattlerTarget].afterYou = 1; - gBattlescriptCurrInstr = cmd->nextInstr; + gBattlescriptCurrInstr = cmd->failInstr; } return; } @@ -11068,6 +11098,15 @@ static void Cmd_various(void) AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, gActiveBattler, 0, 0, 0); return; } + case VARIOUS_JUMP_IF_SHELL_TRAP: + { + VARIOUS_ARGS(const u8 *jumpInstr); + if (gProtectStructs[gActiveBattler].shellTrap) + gBattlescriptCurrInstr = cmd->jumpInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } case VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES: { VARIOUS_ARGS(); diff --git a/src/battle_util.c b/src/battle_util.c index 1855754110..ccc7445b52 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -948,7 +948,8 @@ void HandleAction_ActionFinished(void) u8 battler1 = gBattlerByTurnOrder[i]; u8 battler2 = gBattlerByTurnOrder[j]; - if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash) + if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash + || gProtectStructs[battler1].shellTrap || gProtectStructs[battler2].shellTrap) continue; // We recalculate order only for action of the same priority. If any action other than switch/move has been taken, they should diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index bf54142764..82883fb8c9 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -11613,7 +11613,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_SHELL_TRAP] = { - .effect = EFFECT_PLACEHOLDER, // EFFECT_SHELL_TRAP, + .effect = EFFECT_SHELL_TRAP, .power = 150, .type = TYPE_FIRE, .accuracy = 100, diff --git a/test/move_effect_shell_trap.c b/test/move_effect_shell_trap.c new file mode 100644 index 0000000000..27dc4b7f64 --- /dev/null +++ b/test/move_effect_shell_trap.c @@ -0,0 +1,168 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].effect == EFFECT_SHELL_TRAP); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_WATER_GUN].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_LEER].split == SPLIT_STATUS); +} + +SINGLE_BATTLE_TEST("Shell Trap activates only if hit by a physical move") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = TRUE; } + PARAMETRIZE { move = MOVE_WATER_GUN; activate = FALSE; } + PARAMETRIZE { move = MOVE_LEER; activate = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, player); + MESSAGE("Wobbuffet set a shell trap!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + + if (activate) { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } else { + MESSAGE("Wobbuffet's shell trap didn't work!"); + NONE_OF { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } + } + } +} + +SINGLE_BATTLE_TEST("Shell Trap does not activate if attacker's Sheer Force applied") +{ + u32 move; + bool32 activate; + PARAMETRIZE { move = MOVE_TACKLE; activate = TRUE; } + PARAMETRIZE { move = MOVE_STOMP; activate = FALSE; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, player); + MESSAGE("Wobbuffet set a shell trap!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + if (activate) { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } else { + MESSAGE("Wobbuffet's shell trap didn't work!"); + NONE_OF { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } + } + } +} + +SINGLE_BATTLE_TEST("Shell Trap does not activate if battler faints before being able to activate it") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SHELL_TRAP); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, player); + MESSAGE("Wobbuffet set a shell trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("Go! Wobbuffet!"); + NONE_OF { + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player); + HP_BAR(opponent); + } + } +} + +DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 1 and attacks both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_TRAP); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); + MESSAGE("Wobbuffet set a shell trap!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + } +} + +DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 2 and attacks both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(6); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_TRAP); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); + MESSAGE("Wobbuffet set a shell trap!"); + MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + MESSAGE("Wobbuffet used Celebrate!"); + } +} + +DOUBLE_BATTLE_TEST("Shell Trap activates immediately after being hit on turn 3 and attacks both opponents") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SHELL_TRAP].target == MOVE_TARGET_BOTH); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WOBBUFFET) { Speed(7); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(6); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_SHELL_TRAP); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SHELL_TRAP_SETUP, playerLeft); + MESSAGE("Wobbuffet set a shell trap!"); + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wynaut used Celebrate!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + MESSAGE("Wobbuffet used Shell Trap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, playerLeft); + HP_BAR(opponentLeft); + HP_BAR(opponentRight); + } +} From 83281944faaedc401de52bf7968cc041378bdf24 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 16:24:27 +0100 Subject: [PATCH 118/290] Add tests for Contrary --- data/battle_scripts_1.s | 9 ++- test/ability_contrary.c | 143 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 test/ability_contrary.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index fdec43234e..d78b4cdd94 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8606,8 +8606,8 @@ BattleScript_IntimidateEffect: setgraphicalstatchangevalues jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary printstring STRINGID_PKMNCUTSATTACKWITH +BattleScript_IntimidateEffect_WaitString: waitmessage B_WAIT_TIME_LONG -BattleScript_IntimidateEffect_AfterString: copybyte sBATTLER, gBattlerTarget call BattleScript_TryAdrenalineOrb BattleScript_IntimidateLoopIncrement: @@ -8620,10 +8620,13 @@ BattleScript_IntimidateEnd: BattleScript_IntimidateContrary: call BattleScript_AbilityPopUpTarget + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_IntimidateContrary_WontIncrease playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds - waitmessage B_WAIT_TIME_LONG - goto BattleScript_IntimidateEffect_AfterString + goto BattleScript_IntimidateEffect_WaitString +BattleScript_IntimidateContrary_WontIncrease: + printstring STRINGID_TARGETSTATWONTGOHIGHER + goto BattleScript_IntimidateEffect_WaitString BattleScript_IntimidatePrevented: call BattleScript_AbilityPopUp diff --git a/test/ability_contrary.c b/test/ability_contrary.c new file mode 100644 index 0000000000..7fd902280b --- /dev/null +++ b/test/ability_contrary.c @@ -0,0 +1,143 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Contrary raises Attack when Intimidated", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + PLAYER(SPECIES_MIGHTYENA) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_SPINDA) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_INTIMIDATE); + if (ability == ABILITY_CONTRARY) { + ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack rose!"); + } + HP_BAR(player, captureDamage: &results[i].damage); + } + FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.125), results[0].damage); + } +} + +SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normally lower them: Overheat", s16 damageBefore, s16 damageAfter) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + ASSUME(gBattleMoves[MOVE_OVERHEAT].effect == EFFECT_OVERHEAT); + ASSUME(gBattleMoves[MOVE_OVERHEAT].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SPINDA) { Ability(ability); } + } WHEN { + TURN { MOVE(opponent, MOVE_OVERHEAT); } + TURN { MOVE(opponent, MOVE_OVERHEAT); } + } SCENE { + MESSAGE("Foe Spinda used Overheat!"); + HP_BAR(player, captureDamage: &results[i].damageBefore); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack sharply rose!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack harshly fell!"); + } + + // MESSAGE("Foe Spinda used Overheat!"); + HP_BAR(player, captureDamage: &results[i].damageAfter); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack sharply rose!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's sp. attack harshly fell!"); + } + } + FINALLY { + EXPECT_MUL_EQ(results[0].damageBefore, Q_4_12(2.0), results[0].damageAfter); + EXPECT_MUL_EQ(results[1].damageBefore, Q_4_12(0.5), results[1].damageAfter); + } +} + +SINGLE_BATTLE_TEST("Contrary lowers a stat after using a move which would normally raise it: Swords Dance", s16 damageBefore, s16 damageAfter) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + ASSUME(gBattleMoves[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2); + PLAYER(SPECIES_WOBBUFFET) {Defense(102); } + OPPONENT(SPECIES_SPINDA) { Ability(ability); Attack(100); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Foe Spinda used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damageBefore); + + //MESSAGE("Foe Spinda used Swords Dance!"); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack harshly fell!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack sharply rose!"); + } + + // MESSAGE("Foe Spinda used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damageAfter); + } + FINALLY { + EXPECT_MUL_EQ(results[0].damageBefore, Q_4_12(0.5), results[0].damageAfter); + EXPECT_MUL_EQ(results[1].damageBefore, Q_4_12(2.0), results[1].damageAfter); + } +} + +SINGLE_BATTLE_TEST("Contrary raises a stat after using a move which would normally lower it: Growl", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_TANGLED_FEET; } + GIVEN { + ASSUME(gBattleMoves[MOVE_GROWL].effect == EFFECT_ATTACK_DOWN); + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_SPINDA) { Ability(ability); Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_GROWL); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + MESSAGE("Wobbuffet used Growl!"); + if (ability == ABILITY_CONTRARY) { + // ABILITY_POPUP(opponent, ABILITY_CONTRARY); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack rose!"); + } + else { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Spinda's attack fell!"); + } + + MESSAGE("Foe Spinda used Tackle!"); + HP_BAR(player, captureDamage: &results[i].damage); + } + FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(2.125), results[0].damage); + } +} From 5808e82434ab03d10396485028398f618858eac6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Feb 2023 15:05:39 -0300 Subject: [PATCH 119/290] Added assumption fail total, made fails into their own counter and changed "SKIP" to "ASSUMPTION_FAIIL" in log --- test/test_runner.c | 7 ++++++- tools/mgba-rom-test-hydra/main.c | 31 ++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index c2d3f66d25..eb5d12c778 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -187,7 +187,10 @@ void CB2_TestRunner(void) } break; case TEST_RESULT_PASS: result = "PASS"; break; - case TEST_RESULT_SKIP: result = "SKIP"; break; + case TEST_RESULT_SKIP: + result = "ASSUMPTION_FAIL"; + color = "\e[33m"; + break; case TEST_RESULT_INVALID: result = "INVALID"; break; case TEST_RESULT_ERROR: result = "ERROR"; break; case TEST_RESULT_TIMEOUT: result = "TIMEOUT"; break; @@ -196,6 +199,8 @@ void CB2_TestRunner(void) if (gTestRunnerState.result == TEST_RESULT_PASS) MgbaPrintf_(":P%s%s\e[0m", color, result); + else if (gTestRunnerState.result == TEST_RESULT_SKIP) + MgbaPrintf_(":A%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); else diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 107ca339be..75c705f177 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -44,6 +44,8 @@ struct Runner char *output_buffer; int passes; int knownFails; + int assumptionFails; + int fails; int results; }; @@ -80,12 +82,17 @@ static void handle_read(struct Runner *runner) break; case 'P': - case 'F': + runner->passes++; + goto add_to_results; case 'K': - if (soc[1] == 'P') - runner->passes++; - else if (soc[1] == 'K') - runner->knownFails++; + runner->knownFails++; + goto add_to_results; + case 'A': + runner->assumptionFails++; + goto add_to_results; + case 'F': + runner->fails++; +add_to_results: runner->results++; soc += 2; fprintf(stdout, "%s: ", runner->test_name); @@ -420,6 +427,8 @@ int main(int argc, char *argv[]) int exit_code = 0; int passes = 0; int knownFails = 0; + int assumptionFails = 0; + int fails = 0; int results = 0; for (int i = 0; i < nrunners; i++) { @@ -435,6 +444,8 @@ int main(int argc, char *argv[]) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; knownFails += runners[i].knownFails; + assumptionFails += runners[i].assumptionFails; + fails += runners[i].fails; results += runners[i].results; } @@ -445,11 +456,13 @@ int main(int argc, char *argv[]) else { fprintf(stdout, "\n- Tests TOTAL: %d\n", results); - fprintf(stdout, "- Tests \e[32mPASSED: \e[0m %d\n", passes); + fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); if (knownFails > 0) - fprintf(stdout, "- Tests \e[33mKNOWN_FAILING:\e[0m %d\n", knownFails); - if (passes + knownFails < results) - fprintf(stdout, "- Tests \e[31mFAILED: \e[0m %d\n", results - passes - knownFails); + fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); + if (fails > 0) + fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d\n", fails); + if (assumptionFails > 0) + fprintf(stdout, "- \e[33mASSUMPTIONS_FAILED\e[0m: %d\n", assumptionFails); } fprintf(stdout, "\n"); From e3ed11475457999e828349eb499b3fa0ae25405a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 22 Feb 2023 15:09:47 -0300 Subject: [PATCH 120/290] Updated commands comment --- tools/mgba-rom-test-hydra/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index 75c705f177..f506d0428d 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -10,9 +10,9 @@ * N: Sets the test name to the remainder of the line. * R: Sets the result to the remainder of the line, and flushes any * output buffered since the previous R. - * - * //Missing P, F and K documentation, please tell me what to put here lol - * + * P/K/F/A: Sets the result to the remaining of the line, flushes any + * output since the previous P/K/F/A and increment the number of + * passes/known fails/assumption fails/fails. */ #include #include From 460dceb48b480bead43c13ae2d9d9f68e4c791a6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 19:20:18 +0100 Subject: [PATCH 121/290] fix intimidate derp --- data/battle_scripts_1.s | 1 + 1 file changed, 1 insertion(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d78b4cdd94..a5ed319a01 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8605,6 +8605,7 @@ BattleScript_IntimidateEffect: statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | STAT_CHANGE_ALLOW_PTR, BattleScript_IntimidateLoopIncrement setgraphicalstatchangevalues jumpifability BS_TARGET, ABILITY_CONTRARY, BattleScript_IntimidateContrary + playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printstring STRINGID_PKMNCUTSATTACKWITH BattleScript_IntimidateEffect_WaitString: waitmessage B_WAIT_TIME_LONG From 1f694ae7ed851e821c1b981af7aca81aa619cfbe Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 20:41:01 +0100 Subject: [PATCH 122/290] missing pla sprites --- graphics/pokemon/basculegion/back.png | Bin 0 -> 625 bytes graphics/pokemon/basculegion/front.png | Bin 0 -> 960 bytes graphics/pokemon/basculegion/normal.pal | 19 +++++++ graphics/pokemon/basculegion/shiny.pal | 19 +++++++ graphics/pokemon/decidueye/hisuian/back.png | Bin 0 -> 850 bytes graphics/pokemon/decidueye/hisuian/front.png | Bin 0 -> 966 bytes graphics/pokemon/decidueye/hisuian/icon.png | Bin graphics/pokemon/decidueye/hisuian/normal.pal | 19 +++++++ graphics/pokemon/decidueye/hisuian/shiny.pal | 19 +++++++ graphics/pokemon/enamorus/back.png | Bin 0 -> 841 bytes graphics/pokemon/enamorus/front.png | Bin 0 -> 896 bytes graphics/pokemon/enamorus/normal.pal | 19 +++++++ graphics/pokemon/enamorus/shiny.pal | 19 +++++++ graphics/pokemon/enamorus/therian/back.png | Bin 0 -> 844 bytes graphics/pokemon/enamorus/therian/front.png | Bin 0 -> 999 bytes graphics/pokemon/enamorus/therian/normal.pal | 19 +++++++ graphics/pokemon/enamorus/therian/shiny.pal | 19 +++++++ graphics/pokemon/samurott/hisuian/back.png | Bin 0 -> 912 bytes graphics/pokemon/samurott/hisuian/front.png | Bin 0 -> 930 bytes graphics/pokemon/samurott/hisuian/normal.pal | 19 +++++++ graphics/pokemon/samurott/hisuian/shiny.pal | 19 +++++++ graphics/pokemon/samurott/shiny.pal | 0 graphics/pokemon/sneasler/back.png | Bin 0 -> 821 bytes graphics/pokemon/sneasler/front.png | Bin 0 -> 913 bytes graphics/pokemon/sneasler/normal.pal | 19 +++++++ graphics/pokemon/sneasler/shiny.pal | 19 +++++++ graphics/pokemon/wyrdeer/back.png | Bin 0 -> 854 bytes graphics/pokemon/wyrdeer/front.png | Bin 0 -> 1094 bytes graphics/pokemon/wyrdeer/normal.pal | 19 +++++++ graphics/pokemon/wyrdeer/shiny.pal | 19 +++++++ include/graphics.h | 48 +++++++++--------- src/battle_ai_util.c | 2 +- src/data/graphics/pokemon.h | 48 +++++++++--------- src/data/pokemon_graphics/back_pic_table.h | 12 ++--- src/data/pokemon_graphics/front_pic_table.h | 12 ++--- src/data/pokemon_graphics/palette_table.h | 12 ++--- .../pokemon_graphics/shiny_palette_table.h | 14 ++--- src/data/trainer_parties.h | 2 +- 38 files changed, 341 insertions(+), 75 deletions(-) create mode 100755 graphics/pokemon/basculegion/back.png create mode 100755 graphics/pokemon/basculegion/front.png create mode 100755 graphics/pokemon/basculegion/normal.pal create mode 100755 graphics/pokemon/basculegion/shiny.pal create mode 100755 graphics/pokemon/decidueye/hisuian/back.png create mode 100755 graphics/pokemon/decidueye/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/decidueye/hisuian/icon.png create mode 100755 graphics/pokemon/decidueye/hisuian/normal.pal create mode 100755 graphics/pokemon/decidueye/hisuian/shiny.pal create mode 100755 graphics/pokemon/enamorus/back.png create mode 100755 graphics/pokemon/enamorus/front.png create mode 100755 graphics/pokemon/enamorus/normal.pal create mode 100644 graphics/pokemon/enamorus/shiny.pal create mode 100755 graphics/pokemon/enamorus/therian/back.png create mode 100755 graphics/pokemon/enamorus/therian/front.png create mode 100755 graphics/pokemon/enamorus/therian/normal.pal create mode 100644 graphics/pokemon/enamorus/therian/shiny.pal create mode 100755 graphics/pokemon/samurott/hisuian/back.png create mode 100755 graphics/pokemon/samurott/hisuian/front.png create mode 100755 graphics/pokemon/samurott/hisuian/normal.pal create mode 100755 graphics/pokemon/samurott/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/samurott/shiny.pal create mode 100755 graphics/pokemon/sneasler/back.png create mode 100755 graphics/pokemon/sneasler/front.png create mode 100755 graphics/pokemon/sneasler/normal.pal create mode 100755 graphics/pokemon/sneasler/shiny.pal create mode 100755 graphics/pokemon/wyrdeer/back.png create mode 100755 graphics/pokemon/wyrdeer/front.png create mode 100755 graphics/pokemon/wyrdeer/normal.pal create mode 100755 graphics/pokemon/wyrdeer/shiny.pal diff --git a/graphics/pokemon/basculegion/back.png b/graphics/pokemon/basculegion/back.png new file mode 100755 index 0000000000000000000000000000000000000000..cb4e0c0883e7391e103718b619a7d7c593117371 GIT binary patch literal 625 zcmV-%0*?KOP)D7 z5hx!8maw4!000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPxq@WN$AP^7` zco-P?q{v`ADB$GaKu}O1FgPG!IQUR_U|?W4R7k7>n$iFO00Cl4M?{!*(FQ&M00EUr zL_t(|ob8f5OT$nUhJ#Qjbvng>LkB&y5Tu#9*y2zrF5-|PS*kxqoi4Nm!6^kHw021r z>1Y-!?IM{nb-Dk=bM8%B`+b+{=&!+hmp$rHkOFi z6I$KqBjAjq4Sc{?#eGmI?us&*?dPhfCFs}{hz}VG zF{-@@5pVAx&h#w8?|M?ciJ`f}RYF<4_Fl^|fU}?5SZaCR1t_7g!vjnJX03ApVEQEZ zDR-BAB2Ve=tS=wU&NB%OZRCR00vZ5NwB^ENP^b@-&{;3w0dP!$qXp03T|ff%6D`!d zfp6qKHWvWcBB?k9EqDXtZZ$wJAVDS-*LAeujn@NGj#8rQ-hWbi76!jx0a0XbxouEF zos7o1VUa0u?72{Kj9fj#PyoxQGy|rEwMh00000 LNkvXXu0mjfr*!_m literal 0 HcmV?d00001 diff --git a/graphics/pokemon/basculegion/front.png b/graphics/pokemon/basculegion/front.png new file mode 100755 index 0000000000000000000000000000000000000000..4d46e3cbc637fe4110e0a8df7495e2d4da6db96a GIT binary patch literal 960 zcmV;x13&zUP)D7 z5hw_TMKxvs000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPxq@WN$AP^7` zco-P?q{v`ADB$GaKu}O1FgPG!IQUR_U|?W4R7k7>n$iFO00Cl4M@0Xn2lB-L00QJm zL_t(|ob8f7Yui8=#*b2qK#AcBHWci^2hx&i5(#7p1k$a89Op_5k#R(=4&jz8ojL}* z2M4rd=#W8>FW^8S!S19&eIS)UUoaR$y#)FV`krF>kDM>i(i_B~=l8zPd(Ryq|JUET z@^-rO)MtGKn52LPO|40Oe9t!U?Qsgk!hQ;9bjbJ-0I<;_LrnZhC%>6&g&CBhu)1_U<8!=w6srTA~P)!%#$F&9ZhK;POP+YcF_&fAA)g=!Do5%4dEWVGl&NRG7I?Zaw_4Z>dCMsQ;?rOH$KMfy-qBQscLnRlkv>TTfan11%L* z$G0Lx3qumJ i|3ux=daCh1wf+FDY-@nhW|Kq!0000AP_kztSKoVgJKw3K`ALQtcz+&N?L(z#+|?v~PqJf6vfZUe5(U5Cz4z|vOvry;JO2W^n`CQs zRM{lEMWwg~6p3Ec*MZVD-{-4=vR&EdoNunF0Q<}9Kv^wwRn=DapqEuu-C74Yr1-o# zPL%8C*A}gxuZq`SQp=*RYG_ z-doli;k&S$9B8@16aY*C%XNcnih?WV%NK6j&L)6QAqD=0hbi2amQK*dC=;R~gvXFM z8GxU8u$v087lWXY0;YJJ><$5haWO9qJQGu6(CdUrvQ!OIGcmQ-=`j3_aSBjkQi!p= z4*VbpS*8Y|O6Xw<+UYoxAYU6n2JN17UMBcr0vl z324RuqAm-ZAa@K!*a?6ryv=36HU2w<1x$tK65Qh=QLZvI^f6mKGy?b{uDSq zrL?sQm@vy{Qp$0z#s-UfWFo-0l)0BZZXMfku{6~R*0h8bcL?0!gtG)%rN@ZWk3$9W8oW;N~3=igLI9FtW=@ub1+ICc#MS_lX*lM(^01;F?q;6130PZb|yyM1#mCtDW*j> zh6{li97eYf;3+1M`jLcb%`-*O+vq$22A*K_=ScQT3(d-?ULPkwkt5hxK~SA`8F%{b c{$3;GFKMiIKa1T==l}o!07*qoM6N<$f(o5<0RR91 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/decidueye/hisuian/front.png b/graphics/pokemon/decidueye/hisuian/front.png new file mode 100755 index 0000000000000000000000000000000000000000..f3c4d93af1fb2cf6727504961a4dc89d3626f676 GIT binary patch literal 966 zcmV;%13CPOP)(*zQ0S&1zE4{XN3gbrLI-aRw9BKRnGOyw$H6To6c3rg={~v5Rq>PkN5=2z`@R47 zJ-tu1rWJJMigs07ph~M%Y14&(Z+PA!z`gI9WKoXI;Lak0Z$i|g`SEZwKt1^J@tkhWoMu0-j#e-5{8G+@gMV$6aGQ`6-_&Gqp0$Tylex~)?8Kf@q-b|Mee-aiwt+3j{8pv8%ll6{)ZAa9DFHm-LN z*pHsxmWTIdfkUy^F+CdC0O<;o^7f3y+55pBeZo1lAfeK~E9KFJcqZR2LE5jat>bgp z$Msl7(c&`B1@!tp%bP!Wic>j0`cwoyyvL=KF>K8wx4;w^l7w3#fkA__9sJ%!;DeNB z1wcQQLV(rqnTtT5j^)u;^cSyRuvi7!PS{l zC;@X23}=+DF}G$g1aL~U3vwoUMryp~@j7c~=2fNd@m-;s$vxBS*Er>5HvWa;+_Td< z=WFwRO)+NUp&~a2FtH=j-Ivt`fTyQBDRSjSi$Bx`C9g0EnCq^b0fXKke6dqqr{Z>i_@%07*qoM6N<$f@P=AI{*Lx literal 0 HcmV?d00001 diff --git a/graphics/pokemon/decidueye/hisuian/icon.png b/graphics/pokemon/decidueye/hisuian/icon.png old mode 100644 new mode 100755 diff --git a/graphics/pokemon/decidueye/hisuian/normal.pal b/graphics/pokemon/decidueye/hisuian/normal.pal new file mode 100755 index 0000000000..a5a61bafe0 --- /dev/null +++ b/graphics/pokemon/decidueye/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +115 106 106 +16 16 16 +238 238 238 +189 189 189 +238 156 57 +65 41 32 +106 24 41 +189 106 41 +205 49 41 +148 32 41 +41 41 49 +213 148 98 +74 74 90 +172 106 74 +115 65 57 diff --git a/graphics/pokemon/decidueye/hisuian/shiny.pal b/graphics/pokemon/decidueye/hisuian/shiny.pal new file mode 100755 index 0000000000..5dd5e9e8f6 --- /dev/null +++ b/graphics/pokemon/decidueye/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +115 106 106 +16 16 16 +238 238 238 +189 189 189 +238 82 57 +65 41 32 +16 57 41 +172 41 41 +32 131 98 +24 90 65 +41 41 49 +172 139 106 +74 74 90 +131 106 90 +90 65 57 diff --git a/graphics/pokemon/enamorus/back.png b/graphics/pokemon/enamorus/back.png new file mode 100755 index 0000000000000000000000000000000000000000..1b2b00e218f9f00d05f649ab21fd56845f8afffc GIT binary patch literal 841 zcmV-P1GfB$P)D7 z5D71?693r%000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP^3p!LMeSoHyF@vN&frW4IVDB0G0ScK7DR}525QO_4 z3Iyb#1qBMe50!T(xg^%RJmX0}|L?t%eDb`pz&GEy=c-vE<})F#o#49=SA`J56){WV zLM&20iCuut84ofqZ~?|M3ySm|5a;iLFL}s9bPj+&-DVyzSAfTw0(Qv21uE5W*swGY z9RW%yh#?0dXi*`kAqZo$m!EEFuq*RL3nb2zhi(VfY~TG1KE8g zfbTal;AYCt^6?`v#$m6TVH>30kRUR*GsX-A#1h^rGPfh=L8_lU3g8?y_5lS35SQ&7 z^#Rvu0E+~yQp-Iq<45W)qrfVxYD}ncoQI!Oz#(cXA0I13G{E=%BXnRH;5G4#tfRwUyG+_YnP_{%D27Cb4nUf51;`M2|C!Z)UPYK5#x7p~`k+7p Txv2ET00000NkvXXu0mjfD7 z4i6~@lXDON000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPS6X|3#AjbR$egk)H1r>g`@nkuc-k0~z=hGcR|1&hpyt^s#F7@Qi zR|!llY+}z63@#uN3!Y~pysQEy()?%gp#}n-nhzv+qy)aX;QGF6Vg*2fsf%HH$X1L2 z1r7?4Uem~u0_emNv!vNXIa2|#UC$vpNTjEoLDfI++$@42+r zVeAkt5f9?Q8LcuALm+Lm;*4PBe?sxZ7w_fh?MF^nHIEe=- zUhW@N`ZXZ0RWFi@B(qoAVSNz>S(aVRPgh#T2<)Ieo@d$jIj*7|7@(&=v#aMnM1hZE zr~}eowC7)6Wlvf=qY(^#HP61KSJ7}|40k}KA*CzV$6Ng|{3SHL_>SaJ=Phr*1?s#X zMOK-8;NS=(uvm|m*-;73BZJGY#MpsqJ#`MFqY8hxZLtGbtT8K!qW7}PF$mUsT;y1V zmk(iJSQ7Mjf3&TbDDj?Rwec`qSAd=HCT97kngZl+CX>(kY%_;}kza32CX;+N+?;_x z&!Zc#-rk+UEncSWgb(sYnkdGgr?ccTNp~+pIFC?cmZr&h+E(R}EBg99Wd{rWnHXeCmU{lxE`4696|?sSj=F*rSwIzBF-F{1T^FfXeXbZ9u@Kf5Qg= z#`gdrwF0o|y%N4ttPl|5-fL0ZZ3VbXQX*QYfPVuB1awEXAfmdcPnJSdn5%%?g#^SY z9&LZXZHRtW0od}dw|SSY{#!y1NGLAiNM@6gUO2h*P+kG46Ok2%ieljj6Drpv7{3AU W4&fabTMu^t0000 literal 0 HcmV?d00001 diff --git a/graphics/pokemon/enamorus/normal.pal b/graphics/pokemon/enamorus/normal.pal new file mode 100755 index 0000000000..08f6e5ebf1 --- /dev/null +++ b/graphics/pokemon/enamorus/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +74 74 74 +180 180 189 +252 252 252 +16 16 16 +118 50 58 +147 33 30 +224 116 156 +243 46 46 +174 74 87 +199 46 41 +243 84 143 +187 62 94 +255 197 60 +239 228 176 +0 0 0 diff --git a/graphics/pokemon/enamorus/shiny.pal b/graphics/pokemon/enamorus/shiny.pal new file mode 100644 index 0000000000..180ae687e5 --- /dev/null +++ b/graphics/pokemon/enamorus/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +74 74 74 +180 180 189 +255 255 255 +0 0 0 +131 57 82 +164 24 24 +230 131 164 +255 90 0 +189 82 106 +222 74 41 +255 139 238 +205 98 189 +255 197 32 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/enamorus/therian/back.png b/graphics/pokemon/enamorus/therian/back.png new file mode 100755 index 0000000000000000000000000000000000000000..8ef80407f583e2838b0e46e9a2e69fd4503d1f6d GIT binary patch literal 844 zcmV-S1GD^zP)D7 z4izI;Yhcv?000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPgqq$|2WS||<0Ds*Ulsl zWQCOX-n4*Gem?Hu=)jXa#Y7#D`-WBEqxa*n_oxGepBuA~wnSJ2o(x~N_JJ5uTE-?xFN6G-_X#l2*6*#*Dq!Lbg2>0Sq5BlT9xcN)r}+yz!C zLO3a9~i8-U|A0|r~M0YaTY zC$38{1o{RbirpF3B}5T&t#!#)NOwUsuQk_Dk*vv9rVY?_q#UQp5=T|11?UDyN2e>J zv#d&0LYfA6(`(w~Bd#}s>(XX?-Ug1gKTW#PV7*a-9^&meC2qYGn}$$2UGF5Ngd;%L z)Z!`K2Gp$pb?g%C*WM=RD7 z4h{t@P%g3n000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP0PS4v7s z^DZv@{QR`Ey^|px^Hh(=E-AY{UjM~B@8qxm006*=;>-X500Cl4M@0Xn2lB-L00Rq2 zL_t(|oVC@xYui8+0Pr(Hq~59|ZK3s25$_6Drw+}OD!Uu|EK#zhKCqjip@{R?VuX%P zDFIRADHs=eWG)1E2_Y^xw{nzkga>uXu@ zoUZE|Mg~{~P+SJ;huIa1Gy^ERw*f-nQ3(Oji#3u0gt3asobY0c)N6amCLv}yD}cfj z^p%ED3RF~Qg+u`1&F85OEJ$t*5sCq-!0+mX^33IqH0hGXI5U?6XZJ-yr{ur`ryP%RF-|DgtXDZCqb)s)*8pg>kx=kvCxZju@ z1)@)!c{i5e^%rseQ}k&q025K9wb*jykNolXUqWmJp*n5s2cS`%gPiD%e*h>kLiWN8 z!N)CCrr@Cv134C-`;0M6tLCIc!z{bA1VVT(g&4J-daPYyPfW58J(xDH%o3b?j*zl- z<}qfmwg;7DlZzi^WDes)6yQgn-N(Vk$;m?p&lrbR*5R6ofaYJEFdy%)E6r!mBBe z8-Bx4TY>0cSq8czjTn&jG`$NE04|ntek5+>RaifGs@@C%bYu(^U`od*bIjr1*%^Kn z0~dB+Ee0+X11T7lI}&dfMpX0-Wr*i3(4(vHm4Yva7r(~<(6in!2IfC}y@kua?$IZz#%gfJp3Ez8UcV;Gmxh-U|=Nz#_a2tZ#HS-%UTel#I^5tlfS*O zl3{`+K-oUrUI5MbwE~|hex0Yjp8)9rpqmY#DSDCt{G|ZD7 z5I8ZCK*b0E000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP4I|bCe0WH}DVBG^RA6jLwFqU1@a6IZ2-mer`WdW$8!BPRO@#Uz%J{tg(X&g6A zbB@5QRUlWuha!*z(LoPg%w!KuGCb@eP_xE2JO&m4*u#sOAa=R}>j)Hy5m1IVfpAgR zBHknLrGUo)bop%unE6WNBYBg324L3%P;}bJ(z0Gj{*k1TXQq`sUT?bkuvPS(=w~em zMuAe8qlgO)M00kppTEBSup*aC^M9dN*{Q*~1ISfaY1?`Lu+QE_WH4Z7tpfC(=L#GV zoC4S_I|Edp0G*EQrO33;ZDU&{h$s^Hdp%WD=Kg>keiK>Ns1k%_8i4AQdhhkfV85-k z2=#~rSvU~%B1{PEDV4Y!p)fTTa^%fmp4uD`JuRa?ABVT!P}(LD$hW2svz;+HyG=k z-AM}`L?t4PXc;IHVjL-8w0~Qrh0||40*{$L=QOR z$GlW0v`%BdHZBY-<{3X#b@vq}%nng^YiR;7Av^-eFag+Z+M~fekXY_5FtNB*cMjd1 mM3t&*7n1-sy9(=c&G8o`RmGQTvojz70000D7 z5I8xUn@u_Z000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP*YurE(hP92cn?uvgSu*}_*=9%(30$=*(zv=yz+g4TdvJw1-;zd+^05$b zm1a4(Cg9>ARcx@i-;i1Ptkaz~uF_;Gp?P@U+1b%3ivEv)?c=K;fbsLwK^+8yY=J7Q z;UyZMtYRbt$c@V106~BrIIvX~1R^BzF8DG4wzkq%aUd@wP%JDpAp-!$f+TJL3P^xA zftsj(=Ox55B04NrQBy{DziX7-mcd4O3!I?`>bnOkkxd@ssN3NvI?QE8lzmqZwkb0J zWHo)k&v{;Xfr0Y?c7U8@yJ>2PGs565|cM&QP11|T)!gQhx4W7|vK5dCUAmGoPGKJW$FokY4Qo`yK)r;P6Mt z8k0QI3K}MDQ&`$;*Vm z%n@V&&_$H`O%Nv7&7;PM*B`CekN&(48WwzNCv5D4*Q1Zkv5zZDw1Xt8A=<&DwVWc6&AA z`Ko2NQxJCn3NQUloX}-QJOos568tN)7Jdi5Wbv=#58-ov&or~g1poj507*qoM6N<$ Ef~sAU6951J literal 0 HcmV?d00001 diff --git a/graphics/pokemon/samurott/hisuian/normal.pal b/graphics/pokemon/samurott/hisuian/normal.pal new file mode 100755 index 0000000000..65d979af94 --- /dev/null +++ b/graphics/pokemon/samurott/hisuian/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +112 96 64 +208 192 120 +240 224 168 +160 144 96 +72 64 80 +248 248 248 +128 168 176 +32 64 104 +40 96 168 +190 54 54 +192 184 200 +96 120 120 +32 48 72 +0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/shiny.pal b/graphics/pokemon/samurott/hisuian/shiny.pal new file mode 100755 index 0000000000..f7c51115a3 --- /dev/null +++ b/graphics/pokemon/samurott/hisuian/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +112 96 64 +208 192 120 +240 224 168 +213 82 98 +222 218 220 +248 248 248 +128 168 176 +36 49 94 +32 69 155 +162 145 134 +192 184 200 +96 120 120 +32 48 72 +0 0 0 diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal old mode 100644 new mode 100755 diff --git a/graphics/pokemon/sneasler/back.png b/graphics/pokemon/sneasler/back.png new file mode 100755 index 0000000000000000000000000000000000000000..b39320894ca8d955bbf59954d6a2701e1b60fcdd GIT binary patch literal 821 zcmV-51Iqk~P)D7 z5d|gVurvGs000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPhCjzQ4l1z~=q} zvAe=XQV8h}<**TU{|4VoCc7aC_QDNhGn@C}`@Zw?UI=+u59@zi8GZE6I19tzG2Zj# zeB5^8;~@~Ky-wzVB0e6Ehlty2>CS2tN3~iZKvvZZv2ZjXfO{ZU)rlq+D1HfNQauf#y z@?IhTd_8_I1zOM^ac!D!H*eGNDFy&E`OTLxU=IP{&%WNCLM)vEo7+Fvr#M!40yNE& zrkB2B+q={NZZFU@O`l>L6m5vX#dc5!3^(SOcFW>`M!4Gz3kBcb8Q?hzFu|0UAB0%m z$pq`-i#B>0Xb*(_9Jt&xrVJNhanJ5A)W2*;%Mx_X5`7<7KD zDvK;vcPzNxvd<8Pbtm8=z&zcLC}2iwCHI#SM7Q^(@03tV-B6G$I{_(c-eoJLeD4T> z4*=9bDi_Nt!^;}XfozbRrie*($`WvbJ&6GD{;gvd(P*s!cw-AtTe+{3bOzu!6DXnx z@W~iJ4_u7|ih!)o-;#U`pvbze&#heoWg1W|ZJxd6_3{k7q8Y`!D9|5_lsP9u1r5Le z$VoZ`IHg@bCF7YgDHvsDs^;SOmCbsD7 z5d|)EV(N4N000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPEe<_1(SX6BIHQ(nP~8 zol555CG7|38puHix0It}yM%s^KIyIn+wxp3HhMq)|M&EsM96XDh(}U5}&3{PBLiav=VXCO`*o?uC#`ho6>S5E}lC+W|MA zp~QX~;Fk>$vU>Oo2+K$y}R;A|FwNN{8UFH8NNw>yB_8hEFFHBj@|1eg#5xcUzpR|A;db`Suh%*a$d9KNRkfkwG;KnW{= zD__lhErrn@Y_EXP!Ndaev~VbJr1G)l>N^L!OQ0Ky<7y4W^LLGdSl2+rV^%!{y70LHut`FD@Jv>L?@wMYb@W$_d4(hD_}vS$M*>&N<`RMWYM>4WyM1H2rT`nhfOpy@Cr`=hUq53N~BvUag7C9bs+ n0V&%7wCR`aVPivEGqA2dM@rwYmKAmH00000NkvXXu0mjf59)ut literal 0 HcmV?d00001 diff --git a/graphics/pokemon/sneasler/normal.pal b/graphics/pokemon/sneasler/normal.pal new file mode 100755 index 0000000000..5cc13df592 --- /dev/null +++ b/graphics/pokemon/sneasler/normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +49 41 49 +74 74 98 +74 57 82 +123 139 180 +16 16 16 +164 189 222 +164 123 57 +123 98 189 +238 197 49 +255 255 255 +255 32 65 +90 65 131 +255 41 41 +189 41 41 +139 24 24 diff --git a/graphics/pokemon/sneasler/shiny.pal b/graphics/pokemon/sneasler/shiny.pal new file mode 100755 index 0000000000..b3bc5103e3 --- /dev/null +++ b/graphics/pokemon/sneasler/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +156 213 164 +49 41 49 +106 90 41 +74 57 82 +156 148 82 +16 16 16 +238 213 131 +74 148 156 +106 74 98 +123 213 230 +255 255 255 +90 172 32 +74 49 74 +246 189 8 +213 148 24 +213 148 24 diff --git a/graphics/pokemon/wyrdeer/back.png b/graphics/pokemon/wyrdeer/back.png new file mode 100755 index 0000000000000000000000000000000000000000..00f1ba932de55c027c83d07b22b389a1da1c01a9 GIT binary patch literal 854 zcmV-c1F8IpP)D7 z5epGqhw8@w000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPYgfB*mh zNJvQFm{_2wsCamIaDa&L@bJLM&^SOqSXfvtvk9f!#M}KVC6Hx76bt@{Zj>ozSGwqL(OvNo zFh8pIOrq79NolW&kn_!*bMA}=fv<${KK>&sHTkk z>Eqtih?Jzn+BW6%kCPj~jTq8pfU+<^D6AA&VO9x=!=OYw*n{HEykvyaU_jjtstbt; z3L%MvOfxopGbj^sDnx9a!3N^F5pMDFj3$E`$6^Jul;blmZn)cZN)>>B@4fspzt=nO(m)&Z;Ewy$V1h2|cU#cv9 zCWGh-csA%={3}pT<7(>1Sb>#px7~aSQnZaM)^V0cV!^V|Hj5*e)H5 z2L}2O{BEoZVTN!?X_&88hC`RKTaSA70Y}rlbLj#{0Qwr^9@t|!#!y3S@UlH}0$4DB gnUo)Bt~op4H#IbZS=}eo@&Et;07*qoM6N<$f{6NiHvj+t literal 0 HcmV?d00001 diff --git a/graphics/pokemon/wyrdeer/front.png b/graphics/pokemon/wyrdeer/front.png new file mode 100755 index 0000000000000000000000000000000000000000..9e5bffce51c892308229b0856acf0c06e7b636d4 GIT binary patch literal 1094 zcmV-M1iAZ(P)D7 z5epeoTw?VA000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPYgfB*mh zNJvQFm{_2wsCamIaDa&L@bJLM&^SOqSXfvq^5IwX$^kPKh`3djGycrvcS(BAwl$~#9XV<$1NSk#AyHc=22D#qQ>JbP=V4VOR5riYlIcr^w7cQIv z_kj`&x|6wUIVZq%FcP&cbR18(om0T6iaVzZCFfeS8{I;jmd@>rfb*s9oB$vw&iyU= ztrkv9DunYy zh)Jkt_+6_pzInTSqMBb`_f+9_NkIMU(>xhaS_{3|0UL3&LR8ar>|@qh(cI?y8HD%{ zM7VhfF&0^Z7mi1{w^GLK47YNLaW26j1Hc%+eL^YsB`B4G*Bp?a+fs%Mo}r=;JqG9= zfnPF=G{&J?@}`l94n`3Axf09Bc+CGFbgPaG;) zew`#^nYK{Mr`@*hLBar|41{9_!vlb2LLi|xcE6>;YRMp%0D#Uc0mPWrrxa2p^6BV` z(V0ki^#rIo^ccWoverwrittenAbilities[battlerId]) return gBattleStruct->overwrittenAbilities[battlerId]; - + // The AI knows its own ability. if (IsBattlerAIControlled(battlerId)) return knownAbility; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 385460228b..38d8138e89 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -919,14 +919,14 @@ const u32 gMonFrontPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/fron const u32 gMonFrontPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/front.4bpp.lz"); const u32 gMonFrontPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/front.4bpp.lz"); const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4bpp.lz"); -//const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); +const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz"); const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); -//const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); +const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); //const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/frontf.4bpp.lz"); -//const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); +const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); -//const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); +const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); #endif const u32 gMonFrontPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/front.4bpp.lz"); const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz"); @@ -1031,7 +1031,7 @@ const u32 gMonFrontPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlo const u32 gMonFrontPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/front.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/front.4bpp.lz"); const u32 gMonFrontPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/front.4bpp.lz"); @@ -1043,7 +1043,7 @@ const u32 gMonFrontPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/his const u32 gMonFrontPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/front.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); +const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz"); #endif const u32 gMonFrontPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/front.4bpp.lz"); const u32 gMonFrontPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/front.4bpp.lz"); @@ -2131,14 +2131,14 @@ const u32 gMonBackPic_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/back. const u32 gMonBackPic_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/back.4bpp.lz"); const u32 gMonBackPic_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/back.4bpp.lz"); const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp.lz"); -//const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); +const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp.lz"); const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); -//const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); +const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); //const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/backf.4bpp.lz"); -//const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); +const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); -//const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); +const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); #endif const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz"); const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz"); @@ -2243,7 +2243,7 @@ const u32 gMonBackPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlos const u32 gMonBackPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/back.4bpp.lz"); const u32 gMonBackPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/back.4bpp.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz"); const u32 gMonBackPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/back.4bpp.lz"); const u32 gMonBackPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/back.4bpp.lz"); const u32 gMonBackPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/back.4bpp.lz"); @@ -2255,7 +2255,7 @@ const u32 gMonBackPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisu const u32 gMonBackPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/back.4bpp.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); +const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz"); #endif const u32 gMonBackPic_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/back.4bpp.lz"); const u32 gMonBackPic_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/back.4bpp.lz"); @@ -3337,14 +3337,14 @@ const u32 gMonPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/norma const u32 gMonPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/normal.gbapal.lz"); const u32 gMonPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/normal.gbapal.lz"); const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gbapal.lz"); -//const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); +const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gbapal.lz"); const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); -//const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); +const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); //const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/normalf.gbapal.lz"); -//const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); +const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); -//const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); +const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); #endif const u32 gMonPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/normal.gbapal.lz"); const u32 gMonPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/normal.gbapal.lz"); @@ -3449,7 +3449,7 @@ const u32 gMonPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlos const u32 gMonPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/normal.gbapal.lz"); const u32 gMonPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/normal.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/normal.gbapal.lz"); const u32 gMonPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/normal.gbapal.lz"); const u32 gMonPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/normal.gbapal.lz"); const u32 gMonPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/normal.gbapal.lz"); @@ -3461,7 +3461,7 @@ const u32 gMonPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisu const u32 gMonPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/normal.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); +const u32 gMonPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/normal.gbapal.lz"); #endif const u32 gMonPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/normal.gbapal.lz"); const u32 gMonPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/normal.gbapal.lz"); @@ -4570,14 +4570,14 @@ const u32 gMonShinyPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/ const u32 gMonShinyPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/shiny.gbapal.lz"); const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shiny.gbapal.lz"); const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); //const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/shinyf.gbapal.lz"); -//const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); -//const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); +const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz"); const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz"); @@ -4682,7 +4682,7 @@ const u32 gMonShinyPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/ty const u32 gMonShinyPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/shiny.gbapal.lz"); #if P_GEN_5_POKEMON == TRUE -//const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/shiny.gbapal.lz"); const u32 gMonShinyPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/shiny.gbapal.lz"); @@ -4694,7 +4694,7 @@ const u32 gMonShinyPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra const u32 gMonShinyPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/shiny.gbapal.lz"); #endif #if P_GEN_7_POKEMON == TRUE -//const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz"); #endif const u32 gMonShinyPalette_PikachuCosplay[] = INCBIN_U32("graphics/pokemon/pikachu/cosplay/shiny.gbapal.lz"); const u32 gMonShinyPalette_PikachuRockStar[] = INCBIN_U32("graphics/pokemon/pikachu/rock_star/shiny.gbapal.lz"); diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index ebe0c316f8..0cb20daaf4 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -908,13 +908,13 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonBackPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonBackPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonBackPic_Calyrex), - SPECIES_SPRITE(WYRDEER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Wyrdeer), + SPECIES_SPRITE(WYRDEER, gMonBackPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonBackPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonBackPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonBackPic_CircledQuestionMark), //gMonBackPic_Basculegion), - SPECIES_SPRITE(SNEASLER, gMonBackPic_CircledQuestionMark), //gMonBackPic_Sneasler), + SPECIES_SPRITE(BASCULEGION, gMonBackPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonBackPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonBackPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonBackPic_CircledQuestionMark), //gMonBackPic_Enamorus), + SPECIES_SPRITE(ENAMORUS, gMonBackPic_Enamorus), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonBackPic_VenusaurMega), @@ -1024,7 +1024,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(QWILFISH_HISUIAN, gMonBackPic_QwilfishHisuian), SPECIES_SPRITE(SNEASEL_HISUIAN, gMonBackPic_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_SamurottHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonBackPic_SamurottHisuian), SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonBackPic_LilligantHisuian), SPECIES_SPRITE(ZORUA_HISUIAN, gMonBackPic_ZoruaHisuian), SPECIES_SPRITE(ZOROARK_HISUIAN, gMonBackPic_ZoroarkHisuian), @@ -1036,7 +1036,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(AVALUGG_HISUIAN, gMonBackPic_AvaluggHisuian), #endif #if P_GEN_8_POKEMON == TRUE - SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_DecidueyeHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonBackPic_DecidueyeHisuian), #endif SPECIES_SPRITE(PIKACHU_COSPLAY, gMonBackPic_PikachuCosplay), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 24ebc78f38..4da64827a1 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -908,13 +908,13 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(GLASTRIER, gMonFrontPic_Glastrier), SPECIES_SPRITE(SPECTRIER, gMonFrontPic_Spectrier), SPECIES_SPRITE(CALYREX, gMonFrontPic_Calyrex), - SPECIES_SPRITE(WYRDEER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Wyrdeer), + SPECIES_SPRITE(WYRDEER, gMonFrontPic_Wyrdeer), SPECIES_SPRITE(KLEAVOR, gMonFrontPic_Kleavor), SPECIES_SPRITE(URSALUNA, gMonFrontPic_Ursaluna), - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Basculegion), - SPECIES_SPRITE(SNEASLER, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Sneasler), + SPECIES_SPRITE(BASCULEGION, gMonFrontPic_Basculegion), + SPECIES_SPRITE(SNEASLER, gMonFrontPic_Sneasler), SPECIES_SPRITE(OVERQWIL, gMonFrontPic_Overqwil), - SPECIES_SPRITE(ENAMORUS, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_Enamorus), + SPECIES_SPRITE(ENAMORUS, gMonFrontPic_Enamorus), #endif SPECIES_SPRITE(VENUSAUR_MEGA, gMonFrontPic_VenusaurMega), SPECIES_SPRITE(CHARIZARD_MEGA_X, gMonFrontPic_CharizardMegaX), @@ -1023,7 +1023,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(QWILFISH_HISUIAN, gMonFrontPic_QwilfishHisuian), SPECIES_SPRITE(SNEASEL_HISUIAN, gMonFrontPic_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_SamurottHisuian), + SPECIES_SPRITE(SAMUROTT_HISUIAN, gMonFrontPic_SamurottHisuian), SPECIES_SPRITE(LILLIGANT_HISUIAN, gMonFrontPic_LilligantHisuian), SPECIES_SPRITE(ZORUA_HISUIAN, gMonFrontPic_ZoruaHisuian), SPECIES_SPRITE(ZOROARK_HISUIAN, gMonFrontPic_ZoroarkHisuian), @@ -1035,7 +1035,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(AVALUGG_HISUIAN, gMonFrontPic_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_DecidueyeHisuian), + SPECIES_SPRITE(DECIDUEYE_HISUIAN, gMonFrontPic_DecidueyeHisuian), #endif SPECIES_SPRITE(PIKACHU_COSPLAY, gMonFrontPic_PikachuCosplay), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index a8c986d795..a85829be29 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -908,13 +908,13 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(GLASTRIER, gMonPalette_Glastrier), SPECIES_PAL(SPECTRIER, gMonPalette_Spectrier), SPECIES_PAL(CALYREX, gMonPalette_Calyrex), - SPECIES_PAL(WYRDEER, gMonPalette_CircledQuestionMark), // gMonPalette_Wyrdeer), + SPECIES_PAL(WYRDEER, gMonPalette_Wyrdeer), SPECIES_PAL(KLEAVOR, gMonPalette_Kleavor), SPECIES_PAL(URSALUNA, gMonPalette_Ursaluna), - SPECIES_PAL(BASCULEGION, gMonPalette_CircledQuestionMark), // gMonPalette_Basculegion), - SPECIES_PAL(SNEASLER, gMonPalette_CircledQuestionMark), // gMonPalette_Sneasler), + SPECIES_PAL(BASCULEGION, gMonPalette_Basculegion), + SPECIES_PAL(SNEASLER, gMonPalette_Sneasler), SPECIES_PAL(OVERQWIL, gMonPalette_Overqwil), - SPECIES_PAL(ENAMORUS, gMonPalette_CircledQuestionMark), // gMonPalette_Enamorus), + SPECIES_PAL(ENAMORUS, gMonPalette_Enamorus), #endif SPECIES_PAL(VENUSAUR_MEGA, gMonPalette_VenusaurMega), SPECIES_PAL(CHARIZARD_MEGA_X, gMonPalette_CharizardMegaX), @@ -1023,7 +1023,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(QWILFISH_HISUIAN, gMonPalette_QwilfishHisuian), #if P_GEN_5_POKEMON == TRUE SPECIES_PAL(SNEASEL_HISUIAN, gMonPalette_SneaselHisuian), - SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_SamurottHisuian), + SPECIES_PAL(SAMUROTT_HISUIAN, gMonPalette_SamurottHisuian), SPECIES_PAL(LILLIGANT_HISUIAN, gMonPalette_LilligantHisuian), SPECIES_PAL(ZORUA_HISUIAN, gMonPalette_ZoruaHisuian), SPECIES_PAL(ZOROARK_HISUIAN, gMonPalette_ZoroarkHisuian), @@ -1035,7 +1035,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(AVALUGG_HISUIAN, gMonPalette_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_CircledQuestionMark), //gMonPalette_DecidueyeHisuian), + SPECIES_PAL(DECIDUEYE_HISUIAN, gMonPalette_DecidueyeHisuian), #endif SPECIES_PAL(PIKACHU_COSPLAY, gMonPalette_PikachuCosplay), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 012a95cf1f..fdc5b9d405 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -908,13 +908,13 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(GLASTRIER, gMonShinyPalette_Glastrier), SPECIES_SHINY_PAL(SPECTRIER, gMonShinyPalette_Spectrier), SPECIES_SHINY_PAL(CALYREX, gMonShinyPalette_Calyrex), - SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Wyrdeer), + SPECIES_SHINY_PAL(WYRDEER, gMonShinyPalette_Wyrdeer), SPECIES_SHINY_PAL(KLEAVOR, gMonShinyPalette_Kleavor), SPECIES_SHINY_PAL(URSALUNA, gMonShinyPalette_Ursaluna), - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Basculegion), - SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Sneasler), + SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_Basculegion), + SPECIES_SHINY_PAL(SNEASLER, gMonShinyPalette_Sneasler), SPECIES_SHINY_PAL(OVERQWIL, gMonShinyPalette_Overqwil), - SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_CircledQuestionMark), // gMonShinyPalette_Enamorus), + SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_Enamorus), #endif SPECIES_SHINY_PAL(VENUSAUR_MEGA, gMonShinyPalette_VenusaurMega), @@ -1024,7 +1024,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(QWILFISH_HISUIAN, gMonShinyPalette_QwilfishHisuian), SPECIES_SHINY_PAL(SNEASEL_HISUIAN, gMonShinyPalette_SneaselHisuian), #if P_GEN_5_POKEMON == TRUE - SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_SamurottHisuian), + SPECIES_SHINY_PAL(SAMUROTT_HISUIAN, gMonShinyPalette_SamurottHisuian), SPECIES_SHINY_PAL(LILLIGANT_HISUIAN, gMonShinyPalette_LilligantHisuian), SPECIES_SHINY_PAL(ZORUA_HISUIAN, gMonShinyPalette_ZoruaHisuian), SPECIES_SHINY_PAL(ZOROARK_HISUIAN, gMonShinyPalette_ZoroarkHisuian), @@ -1036,7 +1036,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(AVALUGG_HISUIAN, gMonShinyPalette_AvaluggHisuian), #endif #if P_GEN_7_POKEMON == TRUE - SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_DecidueyeHisuian), + SPECIES_SHINY_PAL(DECIDUEYE_HISUIAN, gMonShinyPalette_DecidueyeHisuian), #endif SPECIES_SHINY_PAL(PIKACHU_COSPLAY, gMonShinyPalette_PikachuCosplay), @@ -1328,7 +1328,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - + SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_EnamorusTherian), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index 1759120b7f..e3f1fb303c 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -6873,7 +6873,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] { .iv = 0, .lvl = 5, - .species = SPECIES_MUDKIP, + .species = SPECIES_WYRDEER, } }; From 1c832768bb3d9fa9661221f8141e6eb306fb3f48 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 20:44:03 +0100 Subject: [PATCH 123/290] fix trainer party --- src/data/trainer_parties.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/trainer_parties.h b/src/data/trainer_parties.h index e3f1fb303c..1759120b7f 100644 --- a/src/data/trainer_parties.h +++ b/src/data/trainer_parties.h @@ -6873,7 +6873,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] { .iv = 0, .lvl = 5, - .species = SPECIES_WYRDEER, + .species = SPECIES_MUDKIP, } }; From 60be59d18b04ef0dec2ee0948dfcfaeda59ad059 Mon Sep 17 00:00:00 2001 From: Zunawe Date: Wed, 22 Feb 2023 13:13:57 -0800 Subject: [PATCH 124/290] Fix wrong route in hidden item flag name --- data/maps/Route114/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/Route114/map.json b/data/maps/Route114/map.json index 10f15233c9..17c483c0fa 100644 --- a/data/maps/Route114/map.json +++ b/data/maps/Route114/map.json @@ -503,7 +503,7 @@ "y": 30, "elevation": 3, "item": "ITEM_REVIVE", - "flag": "FLAG_HIDDEN_ITEM_ROUTE_113_REVIVE" + "flag": "FLAG_HIDDEN_ITEM_ROUTE_114_REVIVE" } ] } diff --git a/include/constants/flags.h b/include/constants/flags.h index f39a7219c0..4bef779385 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -580,7 +580,7 @@ #define FLAG_HIDDEN_ITEM_ROUTE_121_HP_UP (FLAG_HIDDEN_ITEMS_START + 0x27) #define FLAG_HIDDEN_ITEM_ROUTE_121_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x28) #define FLAG_HIDDEN_ITEM_ROUTE_123_REVIVE (FLAG_HIDDEN_ITEMS_START + 0x29) -#define FLAG_HIDDEN_ITEM_ROUTE_113_REVIVE (FLAG_HIDDEN_ITEMS_START + 0x2A) +#define FLAG_HIDDEN_ITEM_ROUTE_114_REVIVE (FLAG_HIDDEN_ITEMS_START + 0x2A) #define FLAG_HIDDEN_ITEM_LILYCOVE_CITY_PP_UP (FLAG_HIDDEN_ITEMS_START + 0x2B) #define FLAG_HIDDEN_ITEM_ROUTE_104_SUPER_POTION (FLAG_HIDDEN_ITEMS_START + 0x2C) #define FLAG_HIDDEN_ITEM_ROUTE_116_SUPER_POTION (FLAG_HIDDEN_ITEMS_START + 0x2D) From dc83708443b1def89264d0c63f5ac710769b7003 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 22 Feb 2023 22:51:59 +0100 Subject: [PATCH 125/290] Remove unused script BattleScript_TargetAbilityStatRaiseOnMoveEnd --- data/battle_scripts_1.s | 10 ---------- include/battle_scripts.h | 1 - 2 files changed, 11 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5bf5f52b0f..04b709f826 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9164,16 +9164,6 @@ BattleScript_BattlerAbilityStatRaiseOnSwitchIn:: waitmessage B_WAIT_TIME_LONG end3 -BattleScript_TargetAbilityStatRaiseOnMoveEnd:: - call BattleScript_AbilityPopUp - statbuffchange STAT_CHANGE_NOT_PROTECT_AFFECTED | MOVE_EFFECT_CERTAIN, NULL - setgraphicalstatchangevalues - playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 - waitanimation - printstring STRINGID_ABILITYRAISEDSTATDRASTICALLY - waitmessage B_WAIT_TIME_LONG - return - BattleScript_ScriptingAbilityStatRaise:: copybyte gBattlerAbility, sBATTLER call BattleScript_AbilityPopUp diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 7904f5dc1f..8c6b074c18 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -256,7 +256,6 @@ extern const u8 BattleScript_SturdiedMsg[]; extern const u8 BattleScript_GravityEnds[]; extern const u8 BattleScript_MoveStatDrain[]; extern const u8 BattleScript_MoveStatDrain_PPLoss[]; -extern const u8 BattleScript_TargetAbilityStatRaiseOnMoveEnd[]; extern const u8 BattleScript_TargetsStatWasMaxedOut[]; extern const u8 BattleScript_AttackerAbilityStatRaise[]; extern const u8 BattleScript_AttackerAbilityStatRaiseEnd3[]; From a86b870cfdbf313024ff4ddd7f1d1b9eaee50660 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 22 Feb 2023 23:06:22 +0100 Subject: [PATCH 126/290] PLA cries --- sound/cry_tables.inc | 28 +++++++++--------- sound/direct_sound_data.inc | 4 +-- .../cries/basculegion.aif | Bin 0 -> 122206 bytes sound/direct_sound_samples/cries/enamorus.aif | Bin 0 -> 171902 bytes sound/direct_sound_samples/cries/kleavor.aif | Bin 0 -> 66940 bytes sound/direct_sound_samples/cries/overqwil.aif | Bin 0 -> 50784 bytes sound/direct_sound_samples/cries/sneasler.aif | Bin 0 -> 51992 bytes sound/direct_sound_samples/cries/ursaluna.aif | Bin 0 -> 59604 bytes sound/direct_sound_samples/cries/wyrdeer.aif | Bin 0 -> 87764 bytes 9 files changed, 16 insertions(+), 16 deletions(-) create mode 100644 sound/direct_sound_samples/cries/basculegion.aif create mode 100644 sound/direct_sound_samples/cries/enamorus.aif create mode 100644 sound/direct_sound_samples/cries/kleavor.aif create mode 100644 sound/direct_sound_samples/cries/overqwil.aif create mode 100644 sound/direct_sound_samples/cries/sneasler.aif create mode 100644 sound/direct_sound_samples/cries/ursaluna.aif create mode 100644 sound/direct_sound_samples/cries/wyrdeer.aif diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7714cd00ec..98225fa8e8 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1334,13 +1334,13 @@ gCryTable:: cry Cry_Glastrier cry Cry_Spectrier cry Cry_Calyrex - cry Cry_Unown //Cry_Wyrdeer - cry Cry_Unown //Cry_Kleavor - cry Cry_Unown //Cry_Ursaluna - cry Cry_Unown //Cry_Basculegion - cry Cry_Unown //Cry_Sneasler - cry Cry_Unown //Cry_Overqwil - cry Cry_Unown //Cry_Enamorus + cry Cry_Wyrdeer + cry Cry_Kleavor + cry Cry_Ursaluna + cry Cry_Basculegion + cry Cry_Sneasler + cry Cry_Overqwil + cry Cry_Enamorus .else cry Cry_Unown cry Cry_Unown @@ -3456,13 +3456,13 @@ gCryTable_Reverse:: cry_reverse Cry_Glastrier cry_reverse Cry_Spectrier cry_reverse Cry_Calyrex - cry_reverse Cry_Unown //Cry_Wyrdeer - cry_reverse Cry_Unown //Cry_Kleavor - cry_reverse Cry_Unown //Cry_Ursaluna - cry_reverse Cry_Unown //Cry_Basculegion - cry_reverse Cry_Unown //Cry_Sneasler - cry_reverse Cry_Unown //Cry_Overqwil - cry_reverse Cry_Unown //Cry_Enamorus + cry_reverse Cry_Wyrdeer + cry_reverse Cry_Kleavor + cry_reverse Cry_Ursaluna + cry_reverse Cry_Basculegion + cry_reverse Cry_Sneasler + cry_reverse Cry_Overqwil + cry_reverse Cry_Enamorus .else cry_reverse Cry_Unown cry_reverse Cry_Unown diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index fb4c6b44f6..2129f32a19 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3986,7 +3986,7 @@ Cry_Spectrier:: .align 2 Cry_Calyrex:: .incbin "sound/direct_sound_samples/cries/calyrex.bin" -/* + .align 2 Cry_Wyrdeer:: .incbin "sound/direct_sound_samples/cries/wyrdeer.bin" @@ -4014,7 +4014,7 @@ Cry_Overqwil:: .align 2 Cry_Enamorus:: .incbin "sound/direct_sound_samples/cries/enamorus.bin" -*/ + .endif .align 2 diff --git a/sound/direct_sound_samples/cries/basculegion.aif b/sound/direct_sound_samples/cries/basculegion.aif new file mode 100644 index 0000000000000000000000000000000000000000..a1405ee8d7370b6ead460cf4f240cc865c5ff301 GIT binary patch literal 122206 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

}Fu0xkp~-BZ^~C)3T+}~ktY?lGWV>_% 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/kleavor.aif b/sound/direct_sound_samples/cries/kleavor.aif new file mode 100644 index 0000000000000000000000000000000000000000..1052cabd3a570ac77529f99bc69c3f5f6c35f9c8 GIT binary patch literal 66940 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/overqwil.aif b/sound/direct_sound_samples/cries/overqwil.aif new file mode 100644 index 0000000000000000000000000000000000000000..56b3d97558e473a68ca83db893f2800830475b4a GIT binary patch literal 50784 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 literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/cries/ursaluna.aif b/sound/direct_sound_samples/cries/ursaluna.aif new file mode 100644 index 0000000000000000000000000000000000000000..7f054dc5cb433cffeeb5c786b91daf1171b2469c GIT binary patch literal 59604 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 literal 0 HcmV?d00001 From 23272074bf18017142b733445e650c59ad77d378 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Feb 2023 09:53:57 +0100 Subject: [PATCH 127/290] fix uninitialized ai modifier variable in ai calc damage --- src/battle_ai_util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 531a4aa6b7..4641ba2cdd 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -802,6 +802,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, } else { + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); dmg = 0; } @@ -1166,7 +1167,7 @@ s32 AI_GetAbility(u32 battlerId) // We've had ability overwritten by e.g. Worry Seed. It is not part of AI_PARTY in case of switching if (gBattleStruct->overwrittenAbilities[battlerId]) return gBattleStruct->overwrittenAbilities[battlerId]; - + // The AI knows its own ability. if (IsBattlerAIControlled(battlerId)) return knownAbility; From 3ff8c95c4eac9c1cb92569e29a0109f4fe07bc43 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Feb 2023 10:53:55 +0100 Subject: [PATCH 128/290] add meltan melmetal teachable moves --- src/data/pokemon/teachable_learnsets.h | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 19b22d9b3d..746aeb9b4c 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -30118,11 +30118,67 @@ static const u16 sZeraoraTeachableLearnset[] = { }; static const u16 sMeltanTeachableLearnset[] = { + MOVE_HEADBUTT, + MOVE_REST, + MOVE_PROTECT, + MOVE_SUBSTITUTE, + MOVE_THUNDER_WAVE, + MOVE_TOXIC, + MOVE_THUNDERBOLT, + MOVE_FLASH_CANNON, + MOVE_SNORE, + MOVE_FACADE, + MOVE_ROUND, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_IRON_DEFENSE, + MOVE_GYRO_BALL, + MOVE_STEEL_BEAM, MOVE_HIDDEN_POWER, MOVE_UNAVAILABLE, }; static const u16 sMelmetalTeachableLearnset[] = { + MOVE_HEADBUTT, + MOVE_REST, + MOVE_PROTECT, + MOVE_SUBSTITUTE, + MOVE_FACADE, + MOVE_BRICK_BREAK, + MOVE_THUNDER_WAVE, + MOVE_ROCK_SLIDE, + MOVE_THUNDER_PUNCH, + MOVE_TOXIC, + MOVE_ICE_PUNCH, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_SELF_DESTRUCT, + MOVE_SOLAR_BEAM, + MOVE_HYPER_BEAM, + MOVE_SUPERPOWER, + MOVE_FLASH_CANNON, + MOVE_ICE_BEAM, + MOVE_MEGA_PUNCH, + MOVE_MEGA_KICK, + MOVE_GIGA_IMPACT, + MOVE_SNORE, + MOVE_ROCK_TOMB, + MOVE_ROUND, + MOVE_ELECTRIC_TERRAIN, + MOVE_BRUTAL_SWING, + MOVE_BODY_SLAM, + MOVE_ENDURE, + MOVE_SLEEP_TALK, + MOVE_IRON_DEFENSE, + MOVE_GYRO_BALL, + MOVE_IRON_HEAD, + MOVE_HEAVY_SLAM, + MOVE_DARKEST_LARIAT, + MOVE_HIGH_HORSEPOWER, + MOVE_BODY_PRESS, + MOVE_STEEL_BEAM, + MOVE_STEEL_ROLLER, MOVE_HIDDEN_POWER, MOVE_UNAVAILABLE, }; From a870ec3c2295cdb11afac73a17308d70ed8286f6 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 23 Feb 2023 15:20:12 +0100 Subject: [PATCH 129/290] enamorus_t cry, basculegionf sprite, new typhlosion back sprite --- graphics/pokemon/basculegion/female/back.png | Bin 0 -> 633 bytes graphics/pokemon/basculegion/female/front.png | Bin 0 -> 928 bytes .../{iconf.png => female/icon.png} | Bin .../pokemon/basculegion/female/normal.pal | 19 +++ graphics/pokemon/basculegion/female/shiny.pal | 19 +++ graphics/pokemon/typhlosion/hisuian/back.png | Bin 767 -> 932 bytes include/constants/species.h | 5 +- include/graphics.h | 10 +- sound/cry_tables.inc | 4 +- sound/direct_sound_data.inc | 3 +- .../cries/enamorus_therian.aif | Bin 0 -> 178022 bytes src/data/graphics/pokemon.h | 12 +- .../pokemon/form_species_table_pointers.h | 3 + src/data/pokemon/form_species_tables.h | 6 + src/data/pokemon/level_up_learnset_pointers.h | 1 + src/data/pokemon/species_info.h | 25 +++- .../pokemon/teachable_learnset_pointers.h | 1 + .../pokemon_graphics/back_pic_coordinates.h | 4 +- src/data/pokemon_graphics/back_pic_table.h | 2 +- src/data/pokemon_graphics/front_pic_anims.h | 1 + .../pokemon_graphics/front_pic_coordinates.h | 134 +++++++++--------- src/data/pokemon_graphics/front_pic_table.h | 2 +- src/data/pokemon_graphics/palette_table.h | 2 +- .../pokemon_graphics/shiny_palette_table.h | 4 +- src/data/text/species_names.h | 1 + src/pokemon.c | 1 + src/pokemon_icon.c | 4 +- 27 files changed, 172 insertions(+), 91 deletions(-) create mode 100755 graphics/pokemon/basculegion/female/back.png create mode 100755 graphics/pokemon/basculegion/female/front.png rename graphics/pokemon/basculegion/{iconf.png => female/icon.png} (100%) create mode 100755 graphics/pokemon/basculegion/female/normal.pal create mode 100755 graphics/pokemon/basculegion/female/shiny.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/back.png create mode 100644 sound/direct_sound_samples/cries/enamorus_therian.aif diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/female/back.png new file mode 100755 index 0000000000000000000000000000000000000000..a652e2fa53525cb97b3484ca6d63b62320d56980 GIT binary patch literal 633 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 z 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
  • 8X~RQFZ2+bGB3JOZ6pL=^CZ#sb-0Gje3{vrR|I7PPh~J*6XtFwX*Fh z#}OOC>NjguYh)pnM1wQ{?AJW!z4LABHBS_0)PLI!1y+TJKyJg|1}9pzwhHgT;Mc&? z@H+5iumf?6aFUY5*vO;Bk560??+`4HP9e*Zt??=*7`F)=0(`@)W-my5meDt(SNf>r zuY&BP)hUY-uO_VG&Lpfu2q6WKHz++Zn|uSq0Pl%52t9QdIUc&l25TUj;q#$uLyKMC z9ABf1szG{^PNl3C&l7Q^2ekc7KWs|N1^p2vwqta?wre_yn{_6OpZuWK0?p8KN>n_?P-IpW>Wpw#C9=#`mE-)KkX8c0#obw>?1f5B8?Gk2szfXP7Kr zNl+e8d4+bgalMA6f@vOT(lrOvSt7SkE3Y?2+&2Q7z{|1ei1ui|_$okQ

    Oi^b52O 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%0D7RT!r%teDz#*_4 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 PU+ z?J|+fH*5QPns5EW$c~<1qWXee7gNPL)t9tYZRHJDId9;Q9AUQ#i*Tz*vhdo-E!S~# zdEKNE#l$U{PozZ-UJY-7s;RH2bL4MUgn#0DF}W7yWzEw8?$3mD@@d8$zKy2>5LDjbkc;!1$|ywuLV%* z!@&uOSrg+D;=_Z&J;Hz5jY4Z8Lger&$`YcR)5eQ(|M3Krk?nW~pT#QDz2IIN&}noE zqsCh^rB%~k&R5Vk$iLjW%W6Uiats^VdqG>6mi)&q8k13#hp@j$GqPGe@HWaWIzK&O zoZ$;e^zi2+O?)Z}PYjl-0$11@`Tbs>^W;*}nK-%bu(SBdsXeZ`}pZV=T zb>Bi?7Av=zi_BFmkgqYH4#VvBGyOxAa!-hBa=zEaSs2gq018#Gm^=w!Z$=49u5!+l?@{Kj5hf{gAl)R&Hv>?A>4!2TTN7);aksc!F6nCzNiid|grQPi49*#xU zK&_Jnn#2X}YjNDI9jOxj7|sNQ&~;9o^~@|Fq=*> z7FxFgcVmmjjPy6Q8u-`w=F>1u!wOMoKG11yp^cF`R!twrJX8~Pd!k6~{t9>5D&U#* zf_D7Y;KFc1G7{!yg^|5gwU1G`?FXl}+(prxkN#ZW#|BXc6*Q=g|vj zVfK*Jf`e`>In9$BOU?Ga?$KFeV*|JN33|}zZ~l#{nMGwLEr7<(Lb`N$f5xba{ zU-WV?XQh$`Qocw&H%3Hli7p)FnQx(ht-;=^j_%1|>(E3IPjBICwiPzPTn62LIs0Vz zS>l)Pk3Q}DWF#=BxAU8Q*%@iqag&Ns&V=x#NcBj|V3x1HeEn?qR&{7@Gc&JEYa74& za$~FJRx{3+3MI`7csF|cvP9LwZI{d1V5z`<{}zA5FZs{tasLRtiWKwi%QBeQ)2M4~ zicy4@WpS)9OAoz&LV`%_8|mN;)puD>pee*x$zKdPelb=>U;wn!id34-yuHN(H|;2gOlYOm|m;{c6=S z(wa%kXRJC>5EnQtwMlxCSelz{GT)eU%>9Ave&TE58$yeC9pJp`FL&#Tx+H(?PZgCb zsv#KS-`E_Ql>~s${Nio$8jDo&IS`|x`V6~e{%fRW#JFq5vM&0KS10l*JRmf~p=uUQ z&Hgb5`&VM?_n_(dj3Dn&U`-$kSyLN=c6aRtZrZN zU3F1qR93Y{|3XF?r>)AgJn75Y>;7t|x~HzP(yYF5EO5+fY(5Uu@bw4N*~<84wxQ=_ zX_bUNv6%VRZ02iht}#XfSE5nZys0iZ{oc`ZuenhRV-I4rqF3Miuh`B_L;2Qt=lnZpHzH z>np~&H)R1*pPkj)+|ka@&SVP03-hrK05Wk#pJ7c}PLsX9?J zESvo%-ix1D2VaS(X;HuN)_N6V0!qO6qu!u~$SbCy9_j;B9b zd(Cl1UAkNs$A*cJdS*tGzUsUBDby_Z)(xtzI)`9h3NIDB9yOIiKC=|El{?o-7C!5? zP_@-LHPK7vbP)?wGBU{M$$nD@2DD_l+f zqV_RGACsR{FQ=DNSXQ8A{Egvry29JRR}kXm%o9*=|7C1ptJpjv8_@Us{%2Ne@QyXf zB%U_#Thv;ln{HHP!PDPCvPpfT6*T#SJWpiM-`O=Y56|rN3Uv*(umj?VdMh70Wx{{i z+3dS+2JjZwWj*_G{E_$;;YoH8(NSNpKPFBL)(%e)&GiR;gPam7yabuA_n9_Y8;!_z zQOX;vy5koA6zz|y zoHI)-X35Rd{vpx1V(v#JWrIm~-`&{FF@^o9SOyVL)$v{Kn)BFJ(n0sd)P7&>(!+HV z{o3mrE*E;^GMQB5@-o`_;7iT-<8ipWysx{7ZFb|}&*5y&U2mXV=zfeeb7nhCeV~kfSP# zT3{uOdf;Dbj3LX_-#RtPM(?pfKo5$C+d`4EK}68OMT-(}f{jGRVsUASKO?80N#^1A zPPCXp`jRYiBsPfjbYO3Y44Cn z={oK+`qQhlyWwYdOcu2)reMrHWSNg3C&(tNesqE88b}8_WffqrEfd?3W=7fIzthTe zvK2jLQZoxpB`!K<;($<38P@G&RhiQXMe4aLbOIm9#t1KRJ2Bah;=$Wq9o1Q%RDVLR z^ubvxCy|k44O!@I5A9Ce6F#TT1KUl)3PYiy6jw`W*zzeAX%!;Doc4Z9lueA!m{SXp zB&sV}#Rs$fB&RprJtdD|H_vS!p>OC3www0nrND(Y^*3iD(N~-D7Ht)XicT5DtTOyQ zKEp171JRoTKUou4TDk+L@R`*!D$e)-ys!mX&5xK1tkOm=G14yKwgM`CQIF8B$RC{b z?HlsbUxn6s>Ag^-aeS@#0>KLj2NJj2!{GSa0+-{z;aA>1@1xo-_SntbL$aSv#x`Mb zdQa9tmt*}cpMO=%s+bv3mHZ`qyFg-gNRl^hM@)JDed`$O>ht2pCL?jBV#=Fg<0kHh zfBaW0M0x63P&Awq-?6Lri^}i34sA&s9%<24XE5i*6SpO_4IK!-vwsbDhfd>~ zyiXeQgY=BM+g=ea1NZhLF`t$omdvgy=@o2&e|glJKw-;bMcMCAKQHu+_63dFe35>y z=K~3xX>B(tZ42i2nEHc#vK^x7|z*=+ZTC{;RGEm!h!aPIw>+w93bsN1)U2`dvCO@q4QEQ?;#1xO|7D(YU zSw2;sr?mQ7b$!c>C!CsfkVa9~dSf(T<5hk4wh*L&(VG|a>e=g^So^bE)1Bz0v0Egr z4c<(Q`B5Z1*h}q9ffw;uWD;fD zo3YyblrhpA7qEN}*cJK1-7Ipb6>PONne=jB%1vUKdlg*r1CJ;`$#tktU<- z$V&WMO`aL3ZcqOpUMSTr@gQ2m1 zjI^>hNDg>r4CAk88ycgwfRC;KFE`PRIX! zCyl)XS&+%pJ=qYm$|CHaJR(jCt&*$uVuAZnjMabY^74}0<<)m8i73@bFXER>MsKQI zU`FQXe~dl8u4YYgliuUs&0hoCqt^#Q=yI2%b8PC*n`BO0-6U&~=JUwEGAb&NF0jgf z#T?BykqP9OkN9p|{jFr`xbxYo;Qs2~@?N08WWGwKjadw`B;lU;0&+vZk!Y-0%*;5_m*^ESE zoB5ipQ0G-r`JJveM)Tgh0+L|zq5qrBvs*W;`=(7hLQU`iZ>*p1_uNnjS?HzIPThlW zK9)Vw@v@~`$y=pM>zi_k{W`qPc`4iKTx1>XOK0m^UQ@5Qcr6?`+PiFDwd**URca>K zTI3uY;a@Q~bi?P6kMDqnsG@z}O{*1OXCAVm&Ev)g(oKz|zrcC_#jH*$BiU*t_M@a_ zx5&S|4QoNOlf7gLzs!cIH&r<$->|I4v*ZjNrSFqQ^tx5c-_-2OqxE!oj+~|2bT+RIoB?^sBQk+U8HJ4l$Ok8)h9(XpV!KA~ z3Us$VApORNpYsI%8sux`FA{hVv(3NCc)?!CjzEHZ<=WC(Wtm1Xh{%GOHMoK)RU9(HCRlV)n&uhrafMwal!>I?_=zjs8R? z^0G#KHknSPxyWKNM;>*I$Qq=(=5bQGwY|JvCeP>Pbw@b!y+!gL%wb8rf1JLd5s_-n zdUu4_qB5x}&=kyOgUwUC9z95_%CTN9q^^fWTaia~LvmR`l8ZFrf1BCqH1bN%l9qa+ zDtWIw+dbedkzL%rUKu(Od7pVz2~rhF6&LtXvKK0pAlZ$b>*Jw{?iRRZ!MlS5vxVku z-(7zttFcjr4>wDhql`AzNB=h@Gjc1fdCj*CTER551svzcMKSM@s4jESifpx5WN&hU z;#Y5fXhv|9-3@Ax^X`Ml$nbLajF)IP38o44wU37H1y6;>hE#Ym5`j~Bmz~ctmR2OY zb$KY8D}vJ;#qL>unk#sB=u{UP8U5d58^@&g&+CE4pYr* ztGrPR_vCnBI-SH|V0i0fP1gZxwc6e79TqoKE#1buIA3k}spB`VoyzJq53UJq5sjFb$0nwFW0Y0 z8=jOkq#Icyw#2N>FKds*@ytdYBS_NfA7r1{rh+^*JR7|3>VlUc2Kp%yWGw@sFUJ`-vx~c zBQAZ#svL3)jKneW(0r}h+8AH3VRbTgdc|r25*L# zUCPcIz7p9RJ|3xqscyd$_Il~!;Qca)#d@PGsUFG|PDimFii$e^nZ8QqdTbiJ0fkO= zc9Feh&)EPr5t;REqRPj1iiyIm^wLqEahAJ6qjHY7q4RJrU8KX0$C`hdli5ggU2AESd`q6P?Bo)4`Jd>4GFk_s zqoe=vXYyt9t;3Vf4NcHP)|@1TI{H3)Yb5t=GSkqZ2Jx*n#_Q&ALay*iyZ^eioqxe6 z{Gpfq&)-RN8BgeLRU5cTb$5`HE96f&9Gq+4m$TIx%zt_H0KH%5Ma5YsR(nk&`|YLf zNBC{ikRjN&6~hOa=Ztc=uQSq{&}J+Gch^CEC!LLp#vAjDzi1#7UBIU;DDuo#w19de z7kj5YMHbTcWRCHR?_Ym2e-Tv59h`ZYp(eZ#?i-m6MN(!w-vPi9e`8nR2Ae`(K~;PY zzKI<6dne@X!aUfRPPLl)VvP!BcIy>=D3ZG)opo+;aaeLORwT-W(1&eidyL<#=j^Gh z=>F&S11I0qt0#uI9aReBwiPx9ndy9QtR?giE5Pg1TeK85O5ajcWicuSR$DWzPEqrq zXpe&$>;`--Q! zn~n!o(L?I?Ixx43pS8_G)mEb-DN=P3L@325*??< z(N#ucUnnZGZ(iVWOc&opHcuBu-EXZ{0iB#E8%mG(vB`BPv*BaNB{Dh0E*x29|FG+Y zvm-NTN#v8vtBCxcufs1)cc&e154Q(6Tg5AHr z(X1RR#GmgpzGCErQjR$-h za0}P_K0!X?AUQ;~)OAJJYbdXv_pME%SQT>* zISjw~VJEM%1zMDHvZZq!Uijkjq@x#77bbO>=rO zg3To<$qZi62td786>R!pIaQ^H%N1MfSazL3e1_t#GFcC=+Ryr^KCMz?M^IOFNtYAn zys@5Pe{s&KwQL1lC7z4Bs*cmkt*N)bJMvBDmDS_{HH@}IZcYOJ^bOS@pd3NE8!p_w z#0T~1MREfAyjE6mU|QLU(m_@duDz$2QTEAfat!W!%gk^64&6s#GKTa8-;s;`LYk02 zaW`I*6G#>|n3ji<^}LJ~Z%K39`6Hkjnjv4ydU~YnuT!yNYM+V)&-W|+gn45Z4YGdZ zC%g+S;EMQDg}}l|v0pq_ZD>yA37_cTopVF(M0Y*j*xpEM9AkgAOA4Rv3|6!noYjN9 z8{(Q**t?}ZNdg}48~WJVMmv6-?E-SQ)Ym@{8<-uq?f+`7WS{s!v$1r@RZbdBfWt>5jL;X9EfP94{i14TIUUjpfZ=}bK20o;NCz2 zOeNZbo*-3Ov|g_cvLUF*V(`U{y>(SZQeH5_?DUD$Z4HU_tR6MknV5Ad5Gx0G-F|Stj`E*I4IQVu(@fY)*x%g6 zaHYaU;AV{1H=q7FLa4rcZFDij$4VYgQQtlFarL0E;txF%_Mr-;sr{4qT{BTU5(+j8R&(2WgPoI@4R?vEdLDWz z=-JqDT2KA$&UJqxh0G4-bNEO<8>UeSd`%DRAfD+@FnR;;D&=b$wJK1+pVRmcxXA&l ziRJk3`hPbHXzhLWy6P(|o@_?9m|UFG19(GofSHVGoxx2O$pHUuI`Q7C>$G#9INc(h zg#}+t4%{^pRAINCok`{g>QA&ZsZTQMmm(t0iMsA% zHI3w>KO61g{Vt8Za4vHVM%t<0<#v%lOi`o3!8e9)q=KHTD$@_<5TqC#A={x+`(2!( zWq1*uAG6a%R+fLk?&sox=|(*3&1%!>bUmxZEq;*Aqt)04zSztWsO!&cY+zl1)s81~ zNIV?-N|ghb(nOWemly+)on4u-HQYZ{L?$<@lP>ae;-}F4NK&V?YAi>Kw(j2W6uSws z)+!*K=}I^*k~}iZ%`4ui)?~gKD+bCM>M$eF-oMxN^?Y4`{6SN423BP<&BAJv`(&|E z-h60mXRAn8y;qJ>oB3-a%xjTJ`YzJg`yvN0KR2NxCOVhWtSs*N#{4wt4z=k6R?s)i zciQ~j%*s-cJFJ91B^70>&UB^Zam+g4UpFi8qJhHMqDRdP}c37#X=E=9;y zVFxcI_79b|&#QXkfD>n5b-s8Vy!Gy1P8lcYv<_ZM=okJ^WT1suLGe{o!r#ZqFxpMG zp)Yw)bz08U?|FA@6_@M~uML&pZ@7oDSl|6$qsE$t=@vLpdVA}vwM(plDtU`Oq=z_HBH1HT>_0^{%m5j@E#4TXJ3K_soy_PLi-c>2#@cJ0neum< zOJ{~(@rl|fdwZ4L)cQK_rYoxfIKMr36C|P!Hvh%_tbnp^W66G(HOW%?jd!IBRdscZ#)0EYi0C6*qX(Ys z4Hb*@K;Fx036^pX<{_JORZ>{0IR8RD-H=?TolNWm_f=-E*cy0 z$Lf@%rm@8+tv{%<wn38ZlgK#$??^g4ZPlc{-AYw1=BXl4@i$=92zuB)JMd-85)>5=k3;Pg^?f zcr}kh=|W49MRYc@R#vK=as+O^r@FiD=(X0Z=nG7%8Qlu@zoMMT>GlLBy1^YOUV0C_ zL^W1zlWU;}{zc{GBh9olLhrCGq$#zKFT24nVE z?%NTl3O5*5eVG3kXMN*+yUmn9nYsflxy5$qPpTsF3W~UW+*x*7AmZ=9yKQr7!mW25 z&d_?1_{b|L8v5D)I>|5-R1r1YzmXVM$ZaZf$qEXUP_%ciOIIL4mVKmEv8z0%sz7>j zxMuhttbs0y-nR^k@a23GklJ;)DPGgb>@gq7$C{mZX1dsFfg81#m7Nt}g;7~^(aJ~^ zY62D}2dSx9+i2SRn^cWYlF zdFnAfmA^zgl|zr_t5MmLlOE(UFJdeLI$9>cRdUFt|+%K(P%`iM~!=Z({W*r57 z@IP;RUQA{mNeq-gMU4KWnm8lV>)s>{ddyogC?%Zuhe;e*f+|RhYT_1=y)h|uWcle* z+J_WY-+>!0AYt+dI8>Avt+tUTbP+JBwJIK!1HWJO)aOVS(m^(H8@ped2}LHdLAr|tDQ`A7}KjIte@Ku(dL zpu*n9uCg^WR`0^+H&+)YBcR@#Vs7P0$$I)5>eqX^OJ9S#rZB4koxxx-9(6k)_PYh$ z#ol|lADYR4`vq=~)^1Vk_h^LkA)FodDQ}zlOrDcVP-bp`;{F!cm7iHgcF!zfoMEl_ zzve}2wmFFRFl(4kFzsKoF2Y5=+={ni@qW05!vA;Jn8P;WYh)l{mXEX|pXhP*%=;)m zLm$6XLF0fM>x#~T?Pb5=EFDKe#Xs&V@3iO&f9+?ax$nb&`CBa2Gj)D>TlsVg^pe^1 zUfvT^Q!afPl{=08OiQtGaQb!SC)sA?R-Hhi)h#j#+JTus$baxGJP%EzrIE5#g#1HN zkO=!sf5ra1+aKQfy>H2yYrkj-=sJHrYXS*=v&HNJp6V1wa@{mR$zjo2`jTi-$=_GIw9m03ZO zk-XNsk!1Qx{ipBKOXx>CinP$qU%{l(hb~qX)Bw^CKi?89fjXWP)9?md)ZghS=OMCB8EzG)u6t7cp{JoYKB7{~fxr`&kUnZXkW@_$i5W7Q{7mb!A7DPF zVYZzI^zsh&&2L~K-j=PVH+;$9lS~h#p{G;QYsMxcyK#t5HTPQokX33YYMMdoLUR>| z&1mKIb5c!p6o=uQiFYSNI(wz{GO^U_>=uj6M~Ab=D*?y!QTJE*&Rc;Ft~Pj+L(Xa2 zjl7IBaL%7H6dsdr4ojq^y{}Bpq*vvtDh2dLauqz;SYdE`}5LgtRAHjA%Za z1XMA-8VL0>@|GUe+i9$I*;m0F*QZ5}rl zu>1PCUQVXTug(dluyY8BxLctFE~=N3ROBKXs4Kz=I@Aq@ON7pZ``B~cw(cA6k-Hy` z(e~0-ndD#r#evN1e06?yn*pO}t80@==$wWion<=Q`F(&;bOkD0Pfek};AAWzpXpfs zpW%Z$euA0RIK|J9To8#O!X4DHpc~MV}5`DxjF5sjTC5b>hV;CcYkbDL2Hyb2R;5fWH!#_Q1;UaY`@_LW_#LK*Y}h84GAxMnL*o;`SO+M zF6WCcNQK#``bjRgW3$&lXQsPduEjf@+pT6-3-7fTJ6pVtVu{!%_lQnFZ>otM!1I{< zhcnwg>|~d}>h-t@+L2+%>+U2k5{KU=?Q|uQS0$4xSw-_H2R~v=<2z|m0pn2f)9kdTg8dd z-WVt*W}&K;P~(y7HI0tu3)wC3N|nWZc^+?K2Ref^SF1#2%#s61dpxNp;0b2vCBV|B zqS^%DA79}mcLHu3ngs9QOw|0Y;)8BXI-|x7Co2eY)I6eMpanS1XQ5u5N0N14UY$9H z#otg<#mm2C1yT$QQG|22W>XtejoR!sn@rN99yAtrL=Tb-xxIsEIdT)Ogle=U@)HW` zvbuuY=56;r%ZsWN9Msd~YMD|Og2$vROG*$^Feu$#pd~X1{#r%A}^}?FPCnEQ*J<#h?>Z)2pHiD_0K zzF}rz=m!5Y-kFv8UG~E0$g^lmEds`qU=#xa&=eSL1Kh|D^Z}^hb9(RWo$h?uMxCc= z=n!bT7mGXS22NsbNh(i!iOyX2S7`eWkXdXjx}_(q6C1-)@v}e-pTR9u1`fJyItT8> z)aWYGV5YLcPVGmc*bX&IUjJV&3S==43)2j`rY?$%4axsy&ym^E68%n9olliS=E!F9 zL%q;X;8dtG|1(vEx#J^f}>yW>i! ze(0wU@KaV_{)D;g66U7l>uYs5M+LYB~P(G@xb^_->4SqzMev+)50Xe`(bNb7WO;5Eosc;tP_nOMe?P3 zhwP~CGN>Iq3lp8d|1!neKo8MN_r+QG4ZLYzZ#hm)clQ@$>;6GjL9O2asnwaB@y=FR z(0k>)0``pzDKDFNN(qz$`-lk~sHEBqRON=+>P-{*;1a5*U(?n`W1|ZX@Y6=LQ5Tyh z>zFTSZLvc)L1t41))_hGm&~0;R%5Vnme1h-0imAeZSee}t=@|_+F%RFIz0&(TY#Nl zImjaM-JTmsaOQc84Kum(i0l~-sT1?g^?AX&~sGGY-9nHcPp{eB84l_4X&kK zkSKKww^tdjF_^i3y$NpR$kxax2YN$z{cGwj-g~6-^pIDi4{vx#aj&3r+g&ZL>4_BY z82@Nm$l`6oFY+2Zr(PjD0^6R#7NTpvY$i80oA>>tu=U{vPhqT492AaV^*2~!?li`+LFSm+w&`nkbyV9HH(}iSq@d%FN zI$FM=rHwLh=U$Tg#cAj`H_7qJk6v*wR8$x3fc?=K=v;P++N0e{Vk43f)`; zyR~p1`p_rmlIg`beVH{yrRWZ?-zVhkzV=l{TK-tGxEbaT7-vKI179q5xe~LazZ)b{ zTdWuSEtCW+XXr;e@1TPTv^up103B( z{gSLA<5e2bSoflHk*9mzZRgnT&rVnO8F;-)I=LF^HNbQfCT&=LbZ@_V<8XUal6l47 z=xgWewAesCfgES=aO<~+BXEP>rh4nuz@}T0(sVScQUNlXN1I8J0V9!_w3bX`v)Lu2 zp$(?>^;6`lOk*dwWI^=d+sOyop4a40=tyuV<$()*r+))G$ZnP|z_ryc!o>{_lH+LaxJ2SL>eCQci?OLK|9el#xSd`*`G@q zCMjqY>=q0Af0+4=fyQ;qw5nTQ{6Em`_+7Cm>UymYS=U>OMNV^3+l9 zkZmKQD~WduKAs<;--8(=FWolIpK$z)_I%E>NJ4lQ@^2oI|5WkFbbFFmsrHZ;;Nqsz zXY?eJ1eVh@X0(5R^*get*78H<2_(~B_090j^`}6rR-E z?f5#U=`Oa9Jf{JkoSmYJslape(;!_!8mk&mN}M7aRWz8v>*@fuayG_x#Y{MJh2&!> z%{HKV7eyMpk8(%wt91n_FnFx98Y5k$?3PDy2HkT9H>w z_x^NKIg8v(P680gHOOThrhh@!%|@kZA6|}rA)A1f^riu_jqX5R?nmrJd1X`v$~fAB z1CD>;15qLR7^{ufya&3h&sIP47r1=0W1^mB6k(_X>@R%1#z+NL-aas$S#d(1km}%; zE1|FWt56y54~-+3Tb+ z$pQ>3Bg@ai(8v9v8>oXc9h^cxLp%KiiuI=?H}YSAh9EO=EjrSm-i~gf9aPl&;o;~= zSL;orEtF~9NqJRAoIvJBFC8audky4t+6YW!8=%2MNNL;&bJ6K`K;|s;Np4Tkigp1y zJpsAo?{S|^QAgBK+?L5{71}{u_Z}cUKd6_erg{+F#QXD~`4avZ)BC^dsXD9%(|pM0 z8_5c>;E49j%)uO$TKa*#rIH`jRk>c(!HIgRy34HKMz0bV z7-0=HUcX{F_%J9(2Ldx-n4;exk+Km?gMUbk-5oO!&e!Zc}1L#Zsdkh#jFh$ z;eV$-o>k)I!C^L|E7c< zflMz~0&DGriEF#ehx)uuyiqlb88&%~-@HYiV$ z>4y3yaF%QIBUChFSb3b4ZhWcnj-5rmKxh2w5AaDh;8?2Q1WqBSN zD?{%l1e=vI$m+mJHzLiYA1d87bz5zh-H}^7T=h~-ywb>kj)F3#5N?n&ybzs9H^Rvu z#ZDS|jO#2NnAs6VYqLCXf(%G98^GsdrY#IjvV}W3PHgf{VVBWH6%@y0S{YO&a9flX z`JpD7fGhm$&c<$c){liO8HX5Zyd`3dOVpIWIG$S_W$N|OdG3G#b4U}pH6eqe#4W{7(_Ul;du5!odijc2>8$O@CCJ6v;x?XPMH?e%9rBnq=Q)jn zU>DBNMeG@Ct6e2@gvOJf+++44XR6y8I=elhk*q93l6ud*pG8Szd?@=|xP5q@(+aMg zQfPW&8qej!8HLi%pkLMRwc|ILJ)sj|xFE9nb-m8y$RG^!2xl!I&od3ZY7=w5l)k z|9ODL#~UlyHYDj?rSYiu(XxOnCi}~p@^^U|iiQs~FY>8(Q=28zALKr02RUZI?Q$=Y z&${Tzv>md(R`S8d1lkqI*GSCsFUd3YmnbQ6Xu@~0cy#0gkiL=^TG(m&v&ygg{?9=Q z4y1>ANZ#nb@EukmU1TG2T#k^_`-BZ}K!bK$>d@=tq6}FVNm2$QD~qZb9|j zTkH@w^lTB}3j9~XsMR^^mqvgOLE@KnnS}LIPK{eY| zofY$OQn(DG>im!b{NsOQF&&BfDu`R@qFde_<}P+`I}2S~6<4WL8WI93{sAay3OxtT z{>$>QI1BykepU_lI5j%@%9_vN5-4W?n}+t81I6o(6R{5b#tyy-w|#HklD#py^M6qX zQ^@kr*&Yy?#B(`Umtxn@D}F!)?Tv}Nlst@SDTlqy-7a<`(`^G#)W!NYWMfHMoZKVR zMF;nQm?Tn=SckB#}vsz8c4+!Lwb!1#gNXOP;AtOsP@0n?)1O|p=ef@^Omp8f|T zfa<2nI8U(ex0X9d{E581qw*$rx6jblHJ2^aMD)EYy*`d**T-(E(MVO=$_|-d$N*D!moY=O{}}BPuKQp>45aT_taczrCXF7VnJu zq2UN)3)rvZ2>OZ1a+1!8PVO!E-!w9bdP|P5uE@Oj$cpg`Y^q+zMjC^_rQQTPGfqDS z1HYEP;+J`8_LOcX56ELwiIqC7_{CeS^3WTs0=!c5^$?v^Usfkcb@qsMQ3JitPHAA- z2T1h)CsDoy<2PSTLWW!%`5P&830_aPIkL9Oswa9ODS+pCjBaDeSvKqo8c!0D$2nPd z#Vj-&s?72v6Vlp#XE~uTug31O%A^<6Gr!XnNXVWbkIHY*E?*_**)UYK4s4iiC$1?= z-BnLe8_xkzogx>hk@C9Srpp20djU=?QP#nXTvFtA?u%+VPS-|i>kOI%C*U@=#f&3w zk?oR76VY2uqqX=dAi+`Chj7;Xglv%82IFObn77vd$I)59Rkdwhe676?CU&DJCW@`t z9oUM^HLwE{yTI=5022#a?7;5s!dC3Uq|V-Jz5jXN{eACx1r9sbnsdxC#+<9DZez4C zSJ2awlZ-Wk88p7;G5J7pW~lmzhx0i~G-{_dbUOR13Ztegr|WVOb8RbcQr*PRqtMD zm33f)x1eOEa?CLAIVN-RY&XM@?cnr(=|{NP@4%cq64~@yJdNIH_#Pq!>|LzwjxM^5 zDaoasu6Y3UK}WBscKg8o4ab8rf?DE*mC53CX3jC`r2TX`W*j~-BB_TxxZj(0EheaE zpjN6YYvbX|BU3Z^w+Sxot#pykBc>ixTR=vC*|mORk}=#Zx8sLnD!RfXCVEU1hjd4g z!C1xF51Djr9iaCbeoSLaqQ~%^{H42Ei>+i;7&M>A%!bo=+rnf=`9Um1wdkqy*;~n5 zS9C+$Jvqi{S{-a`bMl&;pr47tA`~ClGL_7X_}NKU5}!KHQx8^>-bOZ~GxL)R$gCng z`Qxj&!`rI`FTBC*X%1n^X?wFI>uP`*VFt0!`{*W2Fn!HLjkR(h9b@n1DA?n|xLLN+ zBj4Swk=!on8NWHuZq1bWRq6yv*DCJSgA-mFGT)~v9d(tIpB-TRLLon*Lria`s9iyK zsv!@-R`=7MOy!NRwe^;&IRSn9FZr;rImh&)tGEmvr!3A79h1Er<=i~jGm?CK z)~zyK(z%JT(fAY#i4bO7H85|QJ=n81%m_EP6uHq6dzsg5E9q)-Wwk`Kw&Uzr6%XeB zj>3~4-R`xHw#y`5P2894@7%?Cp9P(HtZdd9;l;YkAsfl{IQiyUr>xV|U_I=|V5wmxQ5aZGXaatv`x<7j2%g+Wbiq~w(5|I`+H zu)R;m8coeY=1RwG^8g%Xcl8#BZ99<(B-_q8+K#6V6XLp285c@g{aDT5NiD{W^dtFE zax60o^WdjwFY<}aVz2yX)Dlf`cC-aeoMZ~+Cf-_E(Sr!O0{`52Jj;ie=h<0R;T)6~ zOmslo5~V~ney)%C!LiARfTiDthqRB*ZFitPzh?Kg`{IqC>&WbQ$Gp#M=0KygXs*iJ zIaMk>Kpmi)si+<=4w*~o7awMX;j=snw=~PjV0GY(+BC@vlV8I&ebWPA#FF7X+tWW# zJn0Wr{32&t=Vj}pnoOPv6l17X17rv;>VtZ{j0Tx>6zEtANHfdKoQ&92Hp0Ps#yn}H70vW#yB-YrXe#w!=Gqpvi!r^loP28bCpTx) zn{*EQp}NF8sC)dr{M2rh4R_;hibc$s>1br72V%R-L2s8QXR#D#HC*OYqwVbLTA;3G zMm}oLda@46>{9LL9GRRmIo_&*#_>QkCaz>AW=_?dWT5ie;ZC=t&?FmFyMg;?rpAg; zSxUq)bH0r#No2fX7vl`ipW=;K37_w3D#WZzhAd;2X1?7Dxk=m?C1epZ1ZJZm=Nx&N zmLt+_zoRb>CqF91IJy%?FoTxK(Av~v#A|aEb@vB(j;!!bowZ_7x5leUxEHpoTdcOd zjzELRfr=ai&(ceE)fTMFO#D6@bOGbI`POKN&gMlVzedIP52kQ9++Gf5&8$R4Ss+@| z{qh^cxCCW>Ek2)FbfV-++Q}&%Q<*C;o$0wD=zfdX*Im?9eF(q*Qah*ZsU0v}Uaq=U z7M0sj`L-AdZmk?1@UIHxuAf6YD#~@@Hu?2~qbiqLxo5+TBqT zVYu2dv$VYS#6fZ0N@ZK3oGOkkl-F6`4kn{LP)?j%4%DMJ)+8$l*Zvh%$qr|7-X5c| zq3Ome1LyNzTKbx3V$?Rep%~B@^9eDD}yJhj$oFGj%T7wj6DKm?~URW zC|bz!Mk~~DuZqyknd<*X`A}!{yd$T)o9FXU+P1AT6i%A;4v-f{%0d3))G`uR-O6HUZxCfoL8w*NX+SN=yX2w;xL zN2=8W+5)}g;8ge~D3+V35ax0kSWA`CZlHbSO!1xlKS35Sx{EL5`B7loFkOi`%KOl` zBF&yglHd#yBSu!SBk1Q?BSw-v&oKe~KUmn2`n6&;$TniSy}+)-Bv^mZ826T&wG-F= zNNU2*I+y$-cG&yvTb$t5S=`W`&MD5T!Ze5sVkkcJk7l^+qTb*+vyDGySM|qU!BZK; z{wjo4Tu?=#ylD(_^kxdmQ{%lE!9=Rxva)2-w<8?=ew8jOPC07JS1>w9b)d=(^N`g} z4+6@s8>?ydB~Et8Pj3zr6P>TEFL*;XJCD#mbd&e=o}IW?d%>$Vvwm22n4Mo=rJ#>P zf@w0t63wt1>;GU$u8VWR=I7XR_kdF~&wqw0{7?;dq z__@{)dq=?pCCCb*nkb7Ge*xV0K&Al%adt;@V(eLFN`8lR@kTH9BY)en2`-`2@B`bJ zuKozjotb{oDXKk6TOTT{RqTY4IJC~FI@IVHh*7aBztz(|qA%kCJ*xWH=k48`8aP{d zFugE~KBuZ#Tdl>)#BX(uI8_hr>l5+znY@Uv^`l6`JRPNPz*2=8)#YsY(HLkJfa{rU z95f2R>-y<^_?0Gb=2A6y{}*DutWT$DDk}B!C?$RDs>+MGTysTTRUBpfr~X6bPzT@P zejFV0Z8&IV$sOds{W+VYl^71vXv!Je9_kWRArq2CPw`XS(dF$bRz3R)GhoWI1J(!IbIIN0X1EC;l3EcY`j}AGL3W__{zaDw+KMJ_9f~(l=(n~d37`~IHS%+ zy?PQC$!_%9BxbEGk=dv?@8Mhu5ifKc6L&P-VpG^93F;nh>z-yo*sYHEBl^>6vKL$z ztKoTd8T5to>L1REdU_VmkXXiAjuYSbO}*4&otwD$9}4Jcn2wTY+wF08ayAW5rx$tf zo9F>kn!>0ukCI~w>rj09GJsIXFO+_Rdz7? zc6!X5s-+qWfA||*wuyC>h!WY5zRZQp7~jm^9%}hone4J^ANL-}+t`oW@q=thEJ@`2 zkJa{eqQwT&Fy9z;jao)kR^UpQ;&JRn=wfW?@5LsT? zx`qBK4$4I$i8*npRWgV%4n^aGzU_RJ%)tnDC_4U5;lnC zBl4dt0Z03TC(qJCp-RPU^Es^2EX>J2BNpPL4kOdAX2S3(qqwxh7Eb#bPcLXaR>ubW zoE<}^jTQxs!A4n~px3HP&d=68dLnkQ2Air`I9hAy4001%Up9R61*s07Q-^kEzV%5~ zWf@gTf5t=RW}Ic}=yyK#jXBrR-Qf_g>BS5Zr}Y!L-uNMFsz2%ne&l2L<(A4vdLIg$ zr+&(B>?hvJTGT1Kbb0!;#*0LeTRpJrqX%u%?N}@C$m!!zvfV^Yc?BJ#u{v!l`vbZ8 zqIOdcbphtqQj+O7uLW*DLgGwF%vPqkZ3g$9V$B7=*g&gzHnc;=-vub zS8)n9;S8b4Ow$-{uX65owu3!-BQU2UlZdPPF5r|V}m#iUo64eA97L$y5 zpwqub7Gm~Yc1KZG!*eoO7djMs@C=iv8`tPWJYp+UZzlDP0A0=p*X+exyoQ}$Qotrs zYc7PVtY?4WE%g%PMPHFY)~5QOPvz)m_^{6gvad_ZH$;@V#tB&1x@I6qqmX=WWH-(k z-rVO3?x2fqs6%msPlX?T!OloazAt7UKxv%Bth}qvzqTjm-4(QMsFCUxQDQpPc|O(2 zeyN(<|5Q67a5~s&FEO2nbVE!NE6}Dd>HE|gl|&P{6Bf9vY$xv-Q&F1y%-W7#s6{1> z)^Z|!2aiNO6=*+$)6XNyi70v7_(A9BbWug$VZK35wZ^%Fx;2x14WId7vBoHcjy9KU z<)M63bBc<$n)G+Q1372aOWE)7YAk(>8Po@Rn|*>cx}9fC2MMUZ0J9$-YQZ@i z-8j|Y2$*RxpX?(dWItJi&QxDcDst_N$DquP#u+l~cG%+Ms2o+ncjKu}UzrEZHbzfF z;3NDjud{lK@(G98>8-_CaYb(@r-kYqY6R8CeQM}T_E`I%^H6f2GXclJdd`1cK-W=4 zJU``_=j_EvVW&_;%2}~ClOR=LG}f8=x@-?>*#tWih8FqJxXn8)3eMif#Ec}mfwG&c z;N4tPAAXsq%#wzikx9O#Q}2ltZZ8p2#auY}74})YCm(TY)q(qMZWpnFojvGmNQXnD zAx!yJoL9SaNg{_gCl`!YhwW&!MOKlU*?T{f*2j(OriE6~9bKg|vn=|k9WYCCn5mIc zgwad4#Ede>%bc*8KDw%P+<8GAV5N=HKkO*hvLHkM)bmj#(&}O${G%wvL9Diis9w`? zWEL=M8~$X$C|H>!&`7Yj4q}-jJoP9!2A9<;Gao$Ua`8Ym=87)Mu5!9;q-)p~Ggr$R z<78Vs1}sqp*Py^b@9Lr{td?7c(a(puI8Ys@=E0Hup$EGZxj$H+)vMu)gIM{$z)NnT z7?b2vnxj~&d4(t6=dRZ22GR@v@F6<1hqGRz&<7=~t2c-~-2TSXI)tNixGs)@vPzG` zQCAWE@)}<0WL)9#&in8m_0@3elZ_5$48|**AV%wn#If$Wz8))bi)5IQw4yH#fe^Pk zRH_!;rrt&|*@;zqhmMGf_8%(`ernsOCu@n~%F`Z3U(0E_Rif;UNa1nBA|5|Fu+ADuqDuM`8QDIA-=X>l*dx=Kn^wI8O9kbFn7vi(Npp>10 zDaAw3q%LsE?MN{KyjmKM=Vv(lT*Q+_`iil^ZK&I4PE5LHZpH)uoYRJPfx}bEa6IYd zg`3e5=TTQVk8X=}^yUPC+~?7iGts$|O0_+mZwbP*6X0kIbH2-JCab3AM5sp2p~=C? z%jpE%&J>I?Y8jEQ0<-fn!=Ppm139VAS3i)I%u-DBq95LD%M_W>IQ1UEq*Z}$Ed!$v zVqC@r{YoB|3t%oS*@5TMPG@8XY_%V$@p>JsUodDeJ1fy&RKtxwNcTl&>ZGFS@NZ1K z-VGxwkOkb{_J zl#&QpgB*7lS6_Q$H78uBR;zR<^9$EARlp5T%XFBGbaoGZ%SpSPvtDuo=M3lYci zJ(8TuS(;dP38n8AyQ-NkK}0@EZInZ;(abs0(J~Wy)mffwjAINFK)T?!-DkW3rA!jB zXhuWK33S3-gnKw))&vXGmvn`yvi3kK#I$ryG}l8=@RqZ3eyIN3S4(_&MV*C`*H|g+ zHB8>Tz+9Ol>Z3SI=bx=F(1)87-{oi~KLnyrCg{t|4thj=QqUM8-^vQIDqVTMRdbN= zc`}+WjMrw-7@fn=8{pbci`D8CF4F?+$9W*F&GvpZhe)#(jb%01`6`vMyXeS#qak!{ zp)auq{=n%zGsC&ZHs*1V-fVc!GMt9ll4_u`424fCBmCgCXNdl|Niu?Iw&{^}Wu~iy z!BF~A>zB5&+F8^_+-`2x33`gIS|^g*IoD8?mZTr!0-18U8EZC^qwt*WFsB-0SP`R) z=8g`IeBk>{^aQ%QX>$d=-#^Uf4maww+~5&T`+*&5qMxxR3p4Yl5w%Ej`k7$fosBt3 z)}VJarPY!b1gKr=lGRyq++-)D%i zi)i!GC*$X=ZWTeKdes}wT_tLX1wS2uM8#{CRubf+Vh zr=ZiSB7flb(9m%wklnU1a_>LvVN7OLqi zI7yDM|AW z#AiGS<6xfuQ}=XXaaq2`3DDR^{Szl-WgID^s9#3I<29n%XvV39{mGQiw4dlEzf<`x zC&M%WpZV%2PKOJ_yIct#;GVn$BFO+l5M_tib5u`N&@Q7(h*|24UD#Siq)AdgiO}P$ z&(>?Tj(6D7uB=+?cku!Z`0D&kXAT z)22@_>!b-?6S9P9X>Ppe}hR z4x!Zilm7N2XL;vgcs@U?F#24eDrI+4rHE6ngiSRZ=6@yQlcG0JMeE*TpJ+g) zOr*BDzz*uL1@f3; zo^<%2D5W+=7&UmS8;xkQ4C+%ca|!N?Ui8>*0&P~|TDqb1hUruK4WE`)kA#80 zSLo7*?T%>Hw{dM5)_c2~eFdGmn0?F62oG>v4d?v43)B~N)Kog-e0jRjR5{ahCv}g> zbO*>WVX$($WKMWUH(0}d2KpaWLWB%3W*IrSlfs-ybBkQRPdt|KE~f^1WDj(nqcS_r ztT1BX8rcez(;sndwU$2tCanl*qaBo^qu_;hshVJ^D6x2Ele`cq2}8T zby|GYH`EeXEE^R6iSOvk+I)v2V>xT$7p^vw_3DLke1{3*pKYhU0D>>6|Eh7?6HV7w zb|tqDg9ly9%#w;?fHB9oYviX2t1h3TtzTnS>Qh}2gnl2+vlpDE^!5i<{1%SI-TD%aq7JgRdSRuq zR^o1bq3^3rF!&Mj9PUUj)ZuR830|-*b(NLbyAO9F{9w(ORN6Oz0DIz`=AeRqf+D_3 zU$Kf<|KT`4%k0;_q9we+d6 zjk_?DtdUt*wuANeK)IiWx(k=+>c_@O6K>~a{%tyxGEaVLoiOO)>5r!KKn@VCab0_J zVtb;ThvTd-or#4-JUr`P>cmx?Z+02pev0uG&s=r5&DqpfLR>_Fe2rJ_FTEolSrMN( zZ^dL@cqw$2P54nifp|QbpqJY2V&ixerReHxh0nMlk!A_kb&+$G%Y$dn^EVYmJ=E|2 z$j}4zY+P~6I8iZD%+yNPqc=ONNCj{8kk6h#-nI=-c!A&axE|L>mQmMb~UDp9s46GVaGi%|=N$`{hZXlblP9b(=d{XXZ7dPWMa--i?b z($P@ZAFO*-3}uEy0aZ?=(I43zX{>M@12f?@4^e?Q@oeoziz^MD9zfKM-~{AYYc!qR z$>>nGLBH-IJ+uE@^8h~ZUY@D?Xs&nRC`!QJ)yJndmkEW3=_d^{zZ(veu#0&AnsPEy zb#i$Pv7frWlDuX5o2}s?Q`-&UkTU9yOw$Ol=kxwtJo^{ysRQY_izM##pr&kVUt<3* zP-&@JYU^pJ5t=TZsj8To&!@K&#q64@E0tXYS65y*nFE{*?=XVrm>bXNbRx$Z*vl7k z2OjsGob)sc&EObJWvrMePIJyiIp$?f$1_q0cIFnSVt74W zRcg#n?l-dFNxCgF5q&C&F}T1Z$X?6QY1Zij#NnMdH^zz&!ks8um%rOc-Txd#=Ota; z-Sh@9`C%fE4|7O95EESg=Z_4Xt|k1XFSO7aOF1Cxv4l> z2m?05z)hMAgBOm5k&;jC%^m+kg;>j~4#smeRNfXl#2~qym=dP$P>mFnN91XF2u|iO zo}m@`u|6rQh?~q5&BPk;XAbl%aM&-R^c&e2BptzwytY;=D+PX!-Eeiwh*B9~U%LIj z^LME}-e?-hr#&;o3}PBO6?#oIKz&1l&RO!R<={F%yq9d5ulMKyvV5=Fg4 zbjC~ZOXZ`+iQ-O#?IcRqrz$E3YnFvRfL?ZL=T4m;msup7^)a=KiSw(eq)f8bZZxyj zDvK@-!#A9#)0#cHOTK~^IRl3970m$K^$ z1LXM6?u1{(rTpJO1B#(bMd)9|$6C5MZt#(6odwpwLzP!bs{K{W>^V!+cp;8Zw}*(g zO!jIhzrw4vhYPtQBaA%Ew2($S8Z=!JQk)O={ z_}=TnK<8(=e^+BUCqRxglF_8nqOrGkxS37J!M~``1K?uMfz*5AQPC>9{YHI<5o@b6 z;*{-2MVMWEqrW*4G@#(s@KNCvWey%ZV>hNqS7DMtPkJcwk*iuU?>e=t4|7>c-G!rX z1!D2SU67i&H(~7FG5miy*e?hB))VK&Ms{2h+{y{o&3|0AJ3NmT`}x^Ubkv`r_hi0^ z!ETgICwCg2`_sS2qzI1Z6TPmDr?|?KEyTrLM?f(!c}K|j~xtet1Puh z{YHhnNCsHOZd$6n>_2>UFTTb<)GYPEC9Pymru0pOJ!&q~!_9aYN6lsOjquUO(Msxw zbFjt_S=F9K036T(@TYC;=6Up@>*xa~i05Mcx=t(zQgcw71Hg|nRC~+ExrMs_hLr$M z@jwNT1?H;-xQ)v)rRN2AFj!wiTi^eGOuPg?Zco^TWW!-jF`f{G2g+~M@zv7P4=mh+^$g>9*L{INzwY-3ZNauXCPNTGb?D zHen7}6=q+DQ>`qaA9gLX3%9_bEJrQ+LDl$MW~D!(mT`)A)Dw5xIAao>oKu+hFb4Iv z4t;`SP1_v99y93Dd1RbH)96gBDN9#eekN9Dk&k3An1O+;)bTv|5%wKxh<#5zhM8W7 z>!~SDmm&6DrVW;1itTCJ-5RJed$u3jEIroTpi@^ga;HrICQ$ciPH$f-2iOsiBftJaytSu*1@LpyseL&+%iy!7ZGhUkz zX%E9Mxcnx5#3DL@^;A4AA607YisPA?ZI*^!%W0@j_fcpQgdaU9%}@Z+(hD(O3L~xj zD*CXlGPC0y;36iK5r5I#&@t=dK8LztNB6p+bS=iFV~gbW2oq1|J?M+Gro>{6esD|o4sL@&6xFVvK0K@W>rwN7}Q?CO`b(;BHF zMPBOJRWQ;0i9v~?mRQQlZp7MHYCTs&;fzy=(%`ETten}>A3k9Od3P7{SUaH+AAo7C z3YT4++#ex6!MN6=N1#8mJE!6hSWZvt6WH!u@**lw45w=KH@7k!$)K|HhV>I-jLrZq ztA!8ROSC}cy)7NMtnT4IPH)eIfla}=_eXH<940#Z;BBbLI|)@s(Ha}->GY<@Go^a~ zGZ4OUZcSQa8XWx&xj}p+%J)GjJ+CK=mBv9>O_ziEGfvzl_z!zhd33_>KN!`%5^7YU zx}vB6@nAVo3v*MCrnVk9Ycl_?f%76cxf)KIEBXn_a3tM(19*N7$?SQl#@yr{yft@a zO(O$+iUE!abSd|SKb;N#yF}JDR`a$ZML#-wj+wcQZs3cHau3W%4l4cna1!w<#!i7# zG7FW;4l-^dFnyGL&>m%NL|a>AJ$7E<8tJEF0@!+XRS@dtTG+;gupO~zY6Cf`y`?cQA?;43Nwca|fRuILWX%AfruCfx$q2j*|^Q7{jPRwLp8|Dk~Y z0{dNqH>gB(Xh&V-&QtCOmP}yBuLJ8IhZ}s)le>ijsyumoCH3`fE1B-Mr}Pya7T@u^ zmK9})e|>o;U&IyBm1sRf_vgBm!6bN50Zn>3J*ls$PG`dYrPpT!wYxEl+V8TMF8iP} z-sefiqVXTc1DO(z^)QM|xUK?=KblUAZk*lvmI|OOaj`gcN_i@ZIcU>?x5g9_2WLxIvsP zjdQj-7+^Ksc?<9epTJqXOfF^G!~_sRS~{(Usd;e0UepuM(5DL%!2`$z15x~ED`w-^ z4Pf5a>xxXyEPzUUgYFWGE6t@h5__Micol+czAQ+7wLS~V%Wcfy+0CMBrYVe5PqNiy z*qI?9!(^Q-$DwQ2k<*#tm5r*h4_KiFo|W_>97XjndE~yH10tG-@~{u@-(a}n9=Zf8 z>8L%G?DCuUTpSJ3S4Pv5*-C{n@$(0ja86cQ4zZeinhRWz*T{>)R)l;zk}R|kohb!x z?g+JFM>Pa5MnQZ-arRgH6ZyU=E~!VHvN>2ShtqP{i$n`zVP$p9J_9!y| zYU0l*3O8%WCL)CQ|AFl01Ad)O?_p;#A~R^b1zhqI)rF@rmkMhp@jVTh z=?7koWcEV@9+&;P7whp6xc5CVcaZQ<-&g~O$bV09%MHX)S&V9TGYnEsR?22($66=` z4U8)=SUuVEUbqd`f_t4V?S!6zj^dZ}g{>?G3h}|~n$2h~Lq#)U{R+6JXZ-UQ25SqL z+cg_wJCg)P(p_;JcB42MF&G@M7F8;e?!moyLh{nXn}i-$Q{_SvV=^Y_H@li=@8c=I zBVuh*t_gxwbs!yEv2eV7;e4hujp-&x;3*TZS;;sV>%dP{GDgW*oX$793d=o-^ zwOLO;{wL;=JiPkwUetosT+Y(bBV5S z2oB*5Uw;7q)m;#DZz_IYnEtgy)TiK#lKKRkeLl63X*!ifR&^c*C9O`wC!fT7v{f&n z-q=p1{}UFbA4p^)QDcYLBMY(Cjv0%^JHCIW%r2AVC%$$U_J(;*R6%8!$%b>3+}WO* zxi4J@OW6s7S%>GyJk7{`-*Fz6wFBU}CaH$@GV6yufo$P}UeX?Yey}P*XUS7m&>y{u zpXsh1iSpo$m&~flDSr#jcws_+Z7{$BSe&-(%TYYrtMu<3H3o9FSA^E6eDOvHR#PeJ z0AJ#O)5v9wI9sZ+0k0rK1Z(HNT1 zuQ39~qZ-krfl2{W^q3Xe3r*q<&a|d_r_4xRnT$W-0O;ovy+Zl$(OlBru(UJTEo11H zd&^U7#?;zO)E#l00Fq=MveVX`h2WO@1;7lY)=p;L~e5=cj1F@47qii@ z5BFCa?&~qW&~rr4yG9pzL}WsfXl67qg4sW9iC&ADaFRgJ&;Xc_J$PKMF?;3_j_OMG zBK$o;+8u>y3I6&^Y816)BK*!i&Or*c&Y_H_CxdkYhiB!!i|X=d(_4u{GjP^+V(r<) zmx}TYj7Do}sU<`JI*N@PMk_KLULbsxLvfNffLUy>FS1XD(qmE?me~Q{asiyN6`x#l z?!1}mLe@#JpEKWR0d-O@@OF9D&_cbKSnwJhx;HG<0jAhgAuo-^QM!z%4QP@5BBKZbGFxtYQpP6g@99Vg4lI1O`9O*NwHa;nS$e{vLV zwK3SJw5);GuQn^!U)Ps{=hB@$;s$TG5aiRD8omm(`Z*Bp4Ep9b!X$fAQ@v#$G>01x zX73dRt#v?k9V)U?gYO3+{D#r0!tAqZoW#^N)kib`XK)OAmPhw0I1z|0%UVl8hp{mPMC% z45o;|CHIG&6AM#12o5Wj`t=Ro;Y7|DEQ5=5m0HV6DaO0aj#3$oGEm08Nv~jDbsY6^ zD?NG+*xU4CCu?RjieD|NlIH(scxJLUTk?DB%Xqn*zQxL>JE*xoS#Y;(%d_-@5j+k9 zcNc7v27Y`HJvl4YP*q(QVh>heqMpAP0)}m(GV$34zJf=v2S@ZgzIzD0M+xkZ?|AbL za*~}x9wnZ)8-r#&9$!Hm6On}ROOsyTqo&RAk#j=~O5@Fu4`c6|r zG-A3yJCuTTRACvZgDP|PZdBrZsE0nII&1;|oZ_pO@#w#^*D@Kdn|e$?+)5cGQ}QW` z>D%mrW?xtw1((IM9+mzFLd=PJu@`MSAN^6?`7O6uEt{y8cEN6S1%oH)et3R7@G~@{ z0&~ZA)EK{5fAty7{mg>I^GwjXlM>XZ=CZY)y4Go7MJ$DDi+A zA|*QZ0CkdmJc&EFZ_Jh7*u5X{+~Q0}k8eucor445Fq%awRQ$3`J&z^o^k;YG`oCWA zjf(BN9u9Y&z~83SrKwe@K;fz;OG8$pqa|3a!nx~|=h-dZ^pJnTC(#HN9gGZDRk{1a9INU&S%?K6=&6#)16gKP-qv{{(0>MYxN&BxSO@aeoXh; z7ntA}kVXX9@F42=0CHa>Y<~w>gIY2G&t_x&8$We~qZWNU-;8r+33`5u$_Z4=dE_y& zU%2>gbm2shj0q$uL%DKv(4Olo*Rw@W&h$jEZ_<}#oy^Pi6YCCqIRmLPV${DoOxQmrD`3Idh3dOmB5GNVN-j8t&6BxF4clw z;ZLv`ovZ=OXKVIIPzh)f`6i4U>&- zQ$q-}?%Yh1>#W=3Y);SDOgwb;;gMRwBrw~aRl?*}Fxwy9j_dM(lPv(Utx9dRnwi>F z|Ib3@0L^X!>vhmQ^=1%tAlyt^`aP#p;haYuP+;%jpnoAQQORZIr$^{hXm_{Sfp0%(_TqPnzpoI#lnfCoBCPi=oH zuZ^lL@7IDQo%Db2<5cR2P<#>fh$W5CK>}S&0#{R#{QpG^kyXLwOMc`seu&y2ir(z1OQ7&cXdIhCpRsrrwy9sd>**k(uT&s0R2J)So7Sec=@6ZZ zsaZ(_#Z@$fefZ|X$bp~XBgVi(*Z|ydpxDLQ3sOAvu-ezOx*{~ro`190%Km9s_Y)_%o=oB?Gd%{3bp9L`r(Uuw}N|r!Wzt|95{R&yycSkT9|}DU9wi( z1~c7|jl^Dj*iV`B-wO}Pzs%~=Vb?Gi8`4`l#RY6Ov>4H)$*mCi}DmO3&UoXi!Yhnc}lX=IWoaodN{ zu~t{6mcwu`6@iU#d1uNStzpM}>G)W}%(=1f$8EUFWafQ5qi-uOPc}2p$qjeqO)#Dx zN>>Sd&>L;d{k0?4uhEsM6!|yINKLpE$6TsiqJ#-j@bK#pDIdE$xhU+ zkLci?)d`;W9XXZVQifGHinosQM;xXuTLRmYgDV>Z#w>|j>=QL#YF4EmD64@^qcYmW zX0Gjr{tX)F3|CNtyC?zIEkHe`(5U@zNc01Dz9EulqBo`{t7ado|14-+DS(= zzeC+PmP+g$vHGtL{r{R@0_){XEjR?Vw;@P02Rl6sCMdHw4+5;OlJIk^HYOSVFtz2$ zbko^+7r5uqyz&32lv<$rMjJ!KYwFrR)Rt925hGY17sxZkVAtb`Z3EENgu38zu&Up1 z#pU?QY+R~`PuYINdACI55xRc52eZ~03J*W@013_+?Tfx)1ekH)u#e$ z1Qr}`@H^hiR@QMcp4iINLp5<*`hfXr63w48AE>8%3U_k}-EEKzgrnam{{s=-2EqRU zGwg;*dC&9wCOd<__QRJnV}+MeqlpZH_nuvy0%L}Ng9gAzOam33rvA)seLzLorq+{z z*1(?SW5v0{n$F_AmO~fZMilea%VDl7Z^sr9@WNRZOe0E1_Z7;Nn-P96w(B=M+ zcjpivCgLjT!v3^*i}~R^Pp|?aLBY$#4*eQbKUAb+TJL+aeYZg^QLLaM z;yKSKr+x)X5lj`woES8dxiGKZ?BNP@PT$7c$2;OZ(LaaxvR&om^WtidVp7$pCdpE-|fttZS* z4VjuevY*p2D-v%%QpV6u>-p#XO5FGwxDzR8`08dk4oeySwk)EJp)G~b*S! zKEWQi2h-S&>^KGdniKcYF!1OFVwxWr%nqF zvbQHvaeM-ueg-YL{I%_fz?1n0&kDZCdT2OTLFn(%RG;w#Q?ZJhp(wN_X52-!T1r$c zNu{w!m*eWLfYge!>fewxCgHspLv_`Wy0!a0%9W*Lug(L3?jt5uMg3mD8ZAN|S;9}mg0eo4 z>*g?DvJ5WI(ds7E>}z)DN#0^luvQ?BQ4{vG5?8WZ@)#Ud7IyjuS*<2# zoBqHr-<~<;XVeH7+hqDN2IGkhG@1&nKI1LxOJyBE&qYW2!y@HroJ?iJ1~70LGV=*s zigD;fL#dnYffFu(MRV!HpvAMq-eIs5@7ck7xPvG?AGZ6NDn#d3QE*oR2qp!3T2Ibr zjb#FV1pHP$n2(?2*fSy@SDzKXV+MNRT-8x#IfU6*X?UyGCFdSd5to2(;VfocTpfw= zF=92^Vm0n62R~aFwj_u+=Z>Fix4lutqnm~>EzSp2eNE>CTg1St$H2C7G7av(a(uNp z%+htT`yRZtZZK*W*{kbyU6la0$@E}2UqOx04^^iDall>r5O-o+^B-X0M!`F_W%sP% zr}FWq1TmO36oQT#g{o)rK1}$(O~jCmaK9Z;DYC&BE+dkK5C==4|E1#1-3OsQ=32(- z^W=pj*tz@6w|XKySVuqEJtOJyyv3W`AtgAqwscK1z0X}d!2h`&9D!e&YGoe1gk5>R z7CGk_xnmRfsyWdtS%*{0bz$#MAZzR=j+cfJIZs|Gth<4Vy3s@8DJp=|HnT6fQH#Dn za~KWg+6>=07o2?v#XcXoIX|AzLex93xiFj2XyD$gg*xgJZ>K%?{etXm!#B@icHS(0 zPX^S!eK-JfvHPkJL#o0DzR?bK6ra#Gc7g})f{n~JIEW$_t&fSRGB2Fg7Ix53nVqWj z9o5KICS!P$js3~FCAhM8OjbC;*&kIwlkZVpi?R1JsV`KK+r$*5@yo#2>8^Yq=-8nr;X=`ZZ7K67|3o)b*2e zVwA=y_8Nw*Bl#nqZtCv*wsgen1oC+tUYNeTt1v2uws3>z;OQ^IpcfR(;*znj00Hcf zpR6E!sl?XZ@`1L{F*C4M|H1$-z?I;w19%?w*du7&x;7JjZ{nRBMxIT?wIE@jHu07l zqFGPF=QdYupc33lYz{_OIgFz*7%gBBTD?v0#RSgs@`ZV9#QdRf{R6+>Jy4|wJM*-W zll7NdBr*vsNyJgBSBLHSN*q$COWR==(=!pY6~Cn+tD%{F3kJmH>~YP{tU<+9#CmIe zp>O|~UdE}hzwB6ipdM&Yy~y!NVi?nsui^6PEIXrt3{bOp#{2P@WaqtJmZNc^-s6n8 zJjN3|Nhn0J88t|IGI>*w$w{$Rz2(H2NMnI`VsEr3f$v_?1%Dp5-!WDQyp1yS89IL_ z+nFsQoJ>g!Hq{g+l;r_0cIOjkf#%1f0Nh9-;KPQydwXdL=UgCs+aJteTvoi0|DZPa{ zc|LQS>e_TLP_6w@EBJRJK10QHrABl!SCB)QYB9t9NBpP{Uvo{2gL!|zM4Til+)(=M zN2=WRQzpKp#6=N7#dA>}08w>gQdB8=@(p6eZCunYY;};yG`4*5|F3SB6^!&U2o_-@ zQTB~isDkyx2)Pgka}-&`!e`r7^|rIyYnc_*LT!Q(T}Z{40z|Zeow8rf)a`k@bJ*(z z#e8;mCOGrXOtMLWlbB=_W@5%Q{AB5kzA}!eT2^kP$D|ny+9Q|i&UL;4-CkSSMF(N@ zE`wfLQ~i|UY7$ZOFTsU&Q!QXQ=b;7_1^3T}$1820CjKW<19;WUWN z`S;R6{d$lpF%8W12kO2Mw2=ugjVit>r!m~1f*Yof<149!X4i=t zH$NPWg=Tydbh3({zl3A-BS@+x`!X0G>|J=(h2Z)v>gE4y>gDuw{6$N+OYZTf_KYKE z&SHi`GWd{+5xuIWK7rmekl4RK6yS~Z<9YpHy*wq?_Jy^(#q96_s2TTRW2Q)hPd~*T z{!U%{1%!A3FNSMM>v%BaDZEp8L1hm1$8loqUXWG;;#OuN^(`>>Gg$>}R}k!ymlYBN z(~!*jpG0-CpX~CIE~iAbjvW3`FNKY2f!5Xr-(+Wg&v4w-`RR6;Mt$VR-a2m|)~WbY zU+Vq!bVvRHMFdd~oI-ayh8Og_s)Ju(G+A#XRcKCpH7#JfCcKNc`XSav zB+NuEG|$rNj{S>h;D>r#0IDv$R(Q+v(@PjFnliPa zFVifJiWe{soyZ-t@ojzLNfiLE9SWgPgs9X>c=DA~Rf;QG>+c>wFHb@q&%d&ni9+ zE4xcg5TEgmorWpzNc9%SdRjuP3j%LVz!{Q>nQgt9g0fi+!=dB>>t7dr>MXf&9{atU z{z#{UYx>h)v5rpC>+GRu6oo=E44x~7>SusFg*sA9WCzQw6HTZ^@4;FXLgiZsC$@m+ z6^)L9167VA8;#cK!C-e-y}s%!k?SW8s5De}gF&skKn%s$`SW2*fUBkh9#? z0ND`tmyf7yq>%?<4{^p*t)4?gJW8D$#ZR0eMvP_kQA4P*>Kp9PTlJhfP2y=6<=rkq zgIOd{+o&ee@a}ifQPm%|*bDYO6R2VrXg!}!qLZNj$fpB(yc@j12ry(c(cPQt8Vrs- zMCPzyndXD&&r_q?@YjuqTkrAcP9p+2;OuHMk0KNd)<(9)6LbLf;ytd2adH@J*IOy55=z2E7e*;ardoL@GvZ@>3Q^J*69I0YYy`Pma~?M=wy7GCO5zassV zDVf1m3XL$5eP0q6Y#pv^i!4h0GK|V76d%?HxYyD01KD;7igyE;#&_^Tg+bK^;3rm5 zjm?7nc|m_sEfoSw+65MVA-vyLl)FuEa8X3E-1bpB1l{61)v*&tW%}xm(dPx=^n(|F|1hn5$Pj-0$UnIOm4;ZrQ-=?fs6Y~7X8C%M{}9L zF_g-nD+o6QHQGpcue)$=xzJ3*4GBA$8h^|SqYoWE*;r{u@N=eMqEaB$@g`w%FHyX! z6Vy-jK|gnSpUv4FX{k29;kT&_dk{oj;o!d8!CRa`!@5SEjHE*Fqqe%s_nt>(zW~xN z2L{3MhQo4@^g(MJM|DsU9;z?d>>V-ZCVr?)XzmHD#1?Q+%%mXC&jzoZp=;iqYAGA6 zU^|dVX8txK=wp~1%r3}54}u4()e*A#YxtX8FaQ&&d=9z%`b3TOsx6&8twmv~o!M|- z%C%0ZTHcC*#G@a?$I`r$n|vZpCVu)cNb($4u^LPa6HRQY&u?tV{_Do4+(bplAS%JK z6a@MB)891*l;wd6+XUw568hFlcGW*})=fQ*NK=ih-<#SdCpA}Hp2;?t3>S8&%!=8{ z6`kga`cgM#q`##j`Kco;@C|%wGnGG6#PfoBH?ZP+fnIl!-3<6wG&KjzqI)S^Q;mqsuoi-7?KiN1v*fSOkvXal4Moo_X zgEo+k6-ka^1>J{(=4dPs=r1M@WX9pMiMW1`>9+Ivj1#!>9uYMUpcrlCjdD5}h$cpE z;b)%FTM~jo*es9neb$MW9nFWZvP+32MC!a^JzB57-bscn zE;~_WJOdfbC$=u)Q`^#=lUbgJqYq}nT{L}ypBWjF^K5p@DpS+Hpm z9ooOy6XU2P|IpLg4>tUm>Pm&p@t$-p>-c#oacIZ)Lw9QB#> zFFMMrgBeGI`eR_c8o;pBXZH0q?(Pb2=eBIl8$BYj;>FsI+R%boZr6zk<6xw7(g*BE zer-)Pn80p5$?10OR5_j$S8AUFO?#|AdYW?_nQr$ zaz3L3bI9JIBg~gO`Oc-Fu-otnugOncnF#m@T{jXJN-q%l2K3eQT+snKYVT4lx*RK< zqpgY&?Ml(>R0ZcyUwF27^$I1)H3KyPC&o0+fLsRJ3qzT>&0A|F>Ca};KnR|bxn#!O zO!VkP%$dW^ObhFhl|GIcc;wp4Kz7Vj=Et0*2l|S-0FHF$S@#A>4c2$q!JELA-PlL9 zII}%Y?SO&$O6BnpMteA24n1*NoW~bqk(KN7lZW7(BKY@V;^iJHoP$h7h%^Gw$~uvO zcHlzvfn6R5`q)ZU)(7n{E6nmCw1suV&ce8!TT@rLr@4b{{%vf4}hP7<9v0F)nzPuL%4!a6efDk6AuxW(1f7KfNs zZ~*@E6181F)>=9$zaZRvbEuPM@u%g)ySe=DEV9XTvixk6wj0z8cc~}6ad;mmAE$$b z%1+go1vGyW)~g`wOgQnT1TptH?|UrOPCjz{aq5y_{9Qg`Ia~ zv>Yte0Ip;Tt~G<*vK4wc(mGICdR(_reu)9^sy@EUGtO35%*E8vQX!xfLDK8WE? zyWpwVOVrLG!r?Xp(DDAjnWx~{!`1Q}S`oK~fL$+g#msIdCe1)!8bG9Jj>0t@#bPs= zwH>)&E4VE+yi-M1X=VIe8uZ)>2S7Lun5DRg8;ZZ6ArKL~!7uX5XEI$~-p5^bss~m1 zF1m70suJAO0&4a-)aMyFgY6zYBM)%OZ|1Cx-|92(Z2&Hm%H)mraA{A~Dp8&I(-$o9 zn9hcRxH5K=z0RUSodLsTV$IY7J#;7Q9b@IvYlWxF9Ts&j*Rq{GJs!oSwA#T+naG~V z#wRm(6MgpzT`RANM)A6!eUa|k*~FkAa(PeU>_u?iTk8C8WZA7Ct0Z=Slh5@)&kF}H z_Cm|A!X%kOSEB@L z-lt9Gy$O@D3b)r{*0#x&{>7>K2(F+Bv8@a-sW&^}5fhugF?+Hj{zHHKZaLxI=7JNN z!ZOD33~v5^r_5qKKLi)$1Irf%(d{Qg6$JZTXI-R2C(A;AP$|~UM&4H=5bGUw?-8bV zjRiNlPL)^-Vkz_g{9I1=07rh7mC4GK`_-L zn1U1Z4;+Pco`Q<$jsvzWSkN7Y@jsZfIb@i7prO@pp`PHzD4u2^7|(0G)%~o-p}24= zqP1%1yf=dr($7I5t^$I+G%*cXr zco5%wcaXVj{ruvoRv_{m6v52h490!a07W)Y8u|rwT5g{2PqmKN+6-=fEcaNG_49@I z5kwWSi0H8r|HOM(iRrAIYwV?c5)>UIzKf_r)kY;6Rq^A5OFFQbZPppTLO!Cx7FiAE;4nNw4Kn%^dvGleOsCTmTnjCs z12I)mfn_7&j$&myq^n1wH|XgC5w{o^d=jYdKTyzW`jF;OpKRw|n!=u(#bM}%inWhF zuUBVru&3r3Mf24wJl$~e+93R8i%_4_=^bbj{#?70HS7g8eafAu;F?2OTYrdkDX3b! zV3E#%Kj*VYZ&Ud>;fvRyclhzCZF%-Lsrjx`MSdlJ=jEzT6V*4uwS~cO*i=KESZ|HV zYh&3tS&7?IaqqWgkA0vZ^mo zsg9S0#720;TTJ%MMnzwXYdXZ8UguqP#slJ-eYr^e!$*4w?UARBj$Rd}d;@iLq)ZLV z*$BVNPGS(cA~`t(9>W9`wScRQ$yoYkli>%{XErs3$hz<0I=?=1uI6(k?#=Ci+|nwQ0u%Wpx0?F;U(h}8?oRmXYP zdq4(L!QLszq#f{Y{|5JW1fdl}bBU!gYRJy@qra;fPpC9|Z8+;;C2HI>d?r7rsOu4N zY&rq^g3@L)_oNP}r3wgt3K?e>dEp29Sdd4`P;Kl+WvNLH8^pc4x={RKDwu?Z+vOTM zc1qArUgG`%s`nbK15aY3+m*7_{eVrqKO zYAu-w7G)rRzJbbLg?jl0HAWcS#L*y>ncT@n;^=wqYCfOn$)1Y@)865E6o$EdPPf=4 zo_Psasha%e2Hf)luvS|20QLGk$oewaq9~k0Ei$P^ozMX7Lr~qtGF>toVQ{<~A$sDB0#Or)ngEe_$=>d(8@Ov>B#n z8Ih_6cl8&==_sovfw&ZaU#}PLlcUrTLCjIuO?HIw!KeS771@#g(_pynP&^hNQ1T8_ z=bwfj|45a(o9A?bieW0f->q;`cz`7)!Q1=c`nZFVo`!08A-L5xz=S-A9&Kf{Q2$uI(W|u^vn?0e1W}eC7~(u7|K27J(%=>zMbv6_is2O!=A} zvJTE*1fJ+|pv7Wj<*)3|s;pRp7~(_KpNW|Gl3Hx9x`<|b0rsFXdPz!FdRI`Zt7AVO zev8kj=N@F9)u85sAZzBN!s@ri1DuoHR~!e~PohvUs*)?*U4PbVLw;9kuJ8`bU>qpB zEnh7KXH=0jG=w_#K6$MroL2^7%SxV|H_9#EK9&|VDLi?Gh2Oy#D~V-eAlgK6pf+#n7@U-OHNzV& ziLAMt7tEyZ^9(*doIdlN-mzoyr;p5em$>tU*mn$aug99l@r?JO{yzPjJLop^j5bw& z&JWNpzmB~@JiD*_b)ZPt-}f&&H@nDfc)wbexipk`qkMtC)RNH-H^ULS^TM}@O^1$i zD1D24|5x#1wLSk_?Y@>s@S$@nX(C&iXP0-bG^{QaG@9k2#%Yz*>vrj$Jw5F#Q#yS! zo$7Gb47RYXM$oIa>UDjL=s}peD$IabUOZ3EtkCi_(Jnmab*s`zmZ`Fghc2PK^oY3%V|wXy>4g2X5W#A(jUO^Ju5mPz1g!omR^BU8 z6R#W&1&XuZRBODI9aU9<+Ko4kU@?=UU*no3MEDDOe)>`nIz!}FbaVZ|maF@E4}1Eh znQX&iFUwdq>Bm3s^WMix&Z+mMs6(}PDxj}XL`A&Y)VS7Sbv*muYVWp1;@D8E%<3=M z=A(4GKrHtC39-?Q^{rjqrIq{7O(DkAY$5!^sn*lJjA6e>Vn6*WGjK|9GTz0(F zvpU-CQAY7%c&Y@}{>SV-RcoexVr;j}@RFx~lM%W9h7V1t-+Az$e&R+!7Td{QwZ)dU z@x8iE5By<0N{E4w5Z7pEjhn*Is_vk8((ca0(N9uEws`Iwe5Z$;v$y|t%L(7G_v3wWpL{#4BM>tqmUEcvDo<-E0AD(+t~3{cJVR~s*R^DhWb}^M!Z8U z?Ig!d!J6K}58lB5$HbIV2|7e2&xDUB%W_*#9lK)i_gFpY63L!}Ju^Qu|nMeV^v5f8iRPsYDe; zsOKq{SMluXemhZ@dUyRyp9XuOOCB>lBUAW4??!1EU8g#_M%UZ>(StkzZ`MVbE+%Zk zPJUB|T1e@LrFO2g^K;F8gFDM61S;XYur!uAk(RInSJ(qxf5TwIduT6;_iM%9^D>{w zGUy{z`12IK8rJfCxlvoY){MebIP8jpTw_AEjvpU}>uV`0JLFj@SYLbk)C|7XW;)S@Gb=1iNrQ+x^M!G{ak0vbHghBHnL5!AfHJ!n?A`EVQ*QthB$s z{ea7c^?vxvgFY1fvf9U0BG^p(oEK+%o|RtWE0gfbYWQDo=+Z4_uA9f=ajwSV&TY?2 z<29fA|HpPFH|~;y{_~6cZT5t2($02dbZl~ZLXh7mo5{7W!I6R1EY&W(g89v)L+^&&d365u7B%x`tXTL~%NF*sxr}m&+~AptpbESPfX@Tk1(8J?|;_bqy8JNRM^ z{#FjRxS_^5&-iP^w8A9ckxvft8_&daRYzLwjBAqb)((DgDx|s-q(g%J`i<^)&+S!_ zU?=qSK6>x5c$ue<5Rd!e6wj#uR1Z4QLEn|N*P~}YNL#GM^D^s-o6lB?@$=VoUEGb7 zvgdC)bN+CovsJn3T|9$y*Ns=-n&)n`S-c{vOsH)5jtJ;*gx zg*Qa{^RseB^JgR$C#~rIj6Ce2i%cPR2zjT0tSgYno-1)0Rl`Y=ma&&_(L)`%{( z<%GL+E*5kSqpcdxVf`XU#qCUTj*Bqif?EdyWBgFmD31S~V_C;lH4}JdYNWib=M%mg z_!A2cGr76vBMkLPIzb2Obw`TA-#P@p(ZRIB7^1p)^Z0HSYm%VHEgwAjiM~}F5|^ir zd4C^YE=@;RK*8)p8L34F8%e)-H71w5W`Gsz5M2>=&SM!v?RjNAh-G}vet0@pMBPt; zTO%uNPe(og3A)3<3s$TME_X=HuQ=`Pddv}8_N@$d-!3{c_{FEMf%7NW(+;&VH=@C< zD5N++L4A>(e?iO6thRBQa@0`Xa9;i9Y1+>!b~({bHo`_$=~aIgYf0lO;X|dRHxJ( zeN;JQSqb1KMV`l*;yW{dTFPfdU>oy$&rZ&oj>sf>`nH-xGc z^@F-~$n2_MTQBg`zbOJ6Fziz@jNU3lZ#ZwV(|G!NuTd9weiX1bC#~=s!E+e(9sN8l z>0bG0e!HBVDU46-h4UTs!xgb&AJH0l>&`G9?Snb*}j#Ev} zu|+-bA=vYq71pg}EgQHeY6e9vtl{JicF2?CaG3&d=v!DZG&(;xt0-iM-b4j;iW1(?)myT`^&$~jo`xUFiAZ4NVi{B542`{q5 zPrS9biz>x6k)Wls^zC`%b)VQj(k^C`e&8>7+I_0$Z@}m@JaZYgxQ*8FJA`i23^7qlMfZ8&#DRO|{ zKW)WYI`KAw67vIL3XKdlxAlHl7z5-43R+?p?L_o@wyvQ z^lZf9r%gk2hazFM`f+G{4SJMuHtSP2efRK;0rJm3R1dQFQ4PzYOv{!jQxmR?0UG6&r8%~G)Z`!r+ zt%{e;Z#IST8dR80HTXi^tg#E7~4V4b6a*WNk$UBz3ET)A^wZw#qiEJ2w%zmEZ{+p z=-p!DK_e>79eQbuz9$_(Z1Q#L(*;p(eYBYqE4S!>WpTF{N?#`twkLmhRa9Ex)L#Q# zZV8cYdi=Hq^6D`j!G z4u;dX=SAmC?}v3VJr%hE^okec{WskPzCXC>b9%v-n)FOy#U}dB##-6T!Es&C z8zax?NV+GVSgXhJXKP)O-oDJbuhvabGLne~xz6kYDpEd`tX%%DyV|MN-<%^{OGnI> zfu1*Mk=fO-FVerN$PL~QW%ucx-yPh+ImXj)+((F!9@YD?3~F3uV|{gI{Wp3~cPkF9 zR=107bfbEWV&^|bW_r#{_4p*;&rNIf7IE3ZJiS&?+Vl`n?K?Lm)KnupXxy_^pdX`A z#i)72!ps=CkGtaJuj~0?c6PNH2LCTw&J0?r4u8t$Uc~fw^TiSLv>%)VoFS5Bg`>yW z;$JXoy>L9x@LTOvXTyMUMs4z_I$k zAHs%?(>Zs`&s(WUu28c)Pg&Rjo8EF(={^;M>ng;L;VEtGiZ|21sn6xwWzFNiJh}&5 zuEtaQ!KjmzwRF1s1eKGYWvb!L4Rh%(YwxZS zo&pC3;dR$M<3)`Ab2Ev@K02#{m6StO(xFyd|Mf5mPcfYD4>mc8%9F)O+FLyA81-O; zkw$Rt@MeS2FLe$=_c;$z(Dd?|5Wij&CeyNP3E&x-SCF4zB-ADFp91vTg*^t7xIc* zB4|@tKzRSsc`8OKK3(5u$J^7{`uA7Ll>5pazI0pl9q~wSdGHsjn}lnQhArXw(rO~w zhqS{XM%LC`_QLd?5bgnUnx^wHPEMVwQjnDzxfOEnXG1gjYYU7krzq1A?yu(gRryVO zPr0rS?i^Slk+&AgQW{xB0~(`PDR9Mo}{eyI>075{u~#Z<%wl z^I2!jcdaju2vO;{XN%{K5ip^G~oxoN%i(UcD?{6lHT zIDK%yzT}}0#QT0;nNkm^@fi;|Wls}iWY1y)zXtEc}9wb4RwzQ?Z{$!O;l@-TpVrc_mL}`B;#I`Ss%q3WDsPSd< zw{G;n@b2WNF_s8l-HBJ!gceod@-cS2&pI{ax$lMdQ+iTWKBDq(C&S$8Upt(|*PrD# zO{`#btYAOvnM?0o?f0Kh0eR92&ZkFI=HbI+fpPY`ti8$x*B1NtGgS75aOh8LH0e-l5LTN4?<-sH z{XFbp*>_V+BT3d6zL&2*M)RPtZnXM6{l;^=C7U(upns{4@h8!h>+zw(*vthA>L>i6 zy0v`~-+nq0OZmEGPHW^}Wv$;+ln?X6hFP4l`{P^X4{C*PRYnV1E}acgzWTv`=934ibq7iM2K=DQV!ldE7IkR z^kxb1to<&;?94_Um6aS*BdV-lyJDoZzjyZMdsr9VnOc>S{T0v4W(4ynZP`5UQC)va zG5I?pS$ArzvtTUxvY#9boesJcp*VCI&t{kNlL^>NIko@2P^}x*G|*R9@XVfY>oa*` zK4{h2e!b^s7V)M!yx?KJ`5!x3PSmUhnG(&Twm-9sWwmj2WdD6VyPtV}M&E2DC+KNa z2J+Sp@T`C}{fF%&%0$Q5wF0VG#i$1PX%UD0s|<_UEFxaT(R0bMAA+3TS7jD`=|bgr z^-=67la*N{BP`}Q)2-eU@|%!P9hOz5i`WrQ&SkcZ!#&{hW3aX2{B5>R?8=9(=m7ps zy?l&FdBzFl+pKFYtNK>9+7{=l!`^y_+y`oPW+6G@ulvkoWG%3@j@Gv@bIjQ9Ky$ z6L!)4SII3`%5aDI+jgudj;7RI9e0$z^SL3%desi@|oetR(j>vAOJoDFq-!c#~~?cpfX# z=JJ*HG{5jp&?4+Bymu&-Uw_TwDznBrZj-z!e|kh*AArZ}sDYBtiE;Va_2a%;EM!rU zsgb2tav-jJfR59J-S?-ImG|T#w9yx299QwXI@n@5i|yv=Ti|A0_3BjKHwd~9VByED z-ZSD`c{A`0(=3z&p%sKp|?T{yittL~mb3wYQW*FWISPiRq1Cngx z7n8)~gZ|Z;|D+gEk{n|vPSesj*29!n@zp*VdhHcIU4ZvKz$cbi_fk0EQY*T~{x{Rx zIE$(=(prpU2frHiK-Tk!C*|Zf#WH%kei3cjdox)(eUT(3f zaoEEKY2%<;9M35&)BYfgy1^f8FH~hFi*;SC#Ywo;D)=5&_Hv&4Q1A^^q>5-%Q`hu8 zjAyo*)DoOI6HegGBF1`3#3-S!qp@hPi*Jq6;dTa}KFY4c9r?-5l@>+&h{2v(qob6fK)f2Oci=D&eirK*YR4wvbMy{7RvgA3#1q=G zjfdzAZX#u$4cO&atmT~AVQCDksr^4KtIng!upTmnnNSDwIc-l9J!6}`iZ0^m0UlLF z4z!-~)6hQDf`dn3$6%IT+NXLqoD6jeUzh{GFX(+M-}!`Ce4OELHd z*uR}Os>O-~?&FXh?#9g~V-884)Xi8&vA?i`a|^s$XH93~7lV!X8Wxk=2y;Q1DzIUZ zF(k0|Fk4+>1o^1L^LbBeJ2x07%g4H8j4WWKxLN^%9JjCi?fKt!{JfE;TCm6d;VO322`YF#O|%NTt6#>Uy&;v# zxtE=chrXv+RVO&vkDoQft-aYuT+WU&?&4z)o9~m@>=*Vh8FM=a-D>gccJy6U3O}DF zVy?sDD?`YlY&g*hjIa(Ukir31FQ7Dv590h{w^Dq^@_5g6<_j{Di~N%Yr57b;@RFDe%she z6oUFMiT1-F(pjT@0+Kg_kc;GBoAi?WjvqFsF`u@=5f(ZF0;H=3RKY^SdfWn4&?$B{ zhwNp#J$_ysdy|#iV1=QA6P{x1s9#|LwEs~g$!y=I@E>`o-TDajtTgV2@#j;#x$I+^{y?`-X5=rRp&|5*-^o4rhR{^EBm xd=>_fO~*!fLw{APJXXwELL Date: Thu, 23 Feb 2023 11:43:40 -0300 Subject: [PATCH 130/290] Document the 2 different sText_GotchaPkmnCaught --- data/battle_scripts_2.s | 4 ++-- include/constants/battle_string_ids.h | 4 ++-- src/battle_message.c | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index b7f0f693fb..954509cf56 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -65,7 +65,7 @@ BattleScript_SuccessBallThrow:: jumpifhalfword CMP_EQUAL, gLastUsedItem, ITEM_SAFARI_BALL, BattleScript_PrintCaughtMonInfo incrementgamestat GAME_STAT_POKEMON_CAPTURES BattleScript_PrintCaughtMonInfo:: - printstring STRINGID_GOTCHAPKMNCAUGHT + printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER trysetcaughtmondexflags BattleScript_TryNicknameCaughtMon printstring STRINGID_PKMNDATAADDEDTODEX waitstate @@ -87,7 +87,7 @@ BattleScript_SuccessBallThrowEnd:: finishturn BattleScript_WallyBallThrow:: - printstring STRINGID_GOTCHAPKMNCAUGHT2 + printstring STRINGID_GOTCHAPKMNCAUGHTWALLY setbyte gBattleOutcome, B_OUTCOME_CAUGHT finishturn diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index ae18b61ef2..b34cf6ce13 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -264,8 +264,8 @@ #define STRINGID_ITAPPEAREDCAUGHT 264 #define STRINGID_AARGHALMOSTHADIT 265 #define STRINGID_SHOOTSOCLOSE 266 -#define STRINGID_GOTCHAPKMNCAUGHT 267 -#define STRINGID_GOTCHAPKMNCAUGHT2 268 +#define STRINGID_GOTCHAPKMNCAUGHTPLAYER 267 +#define STRINGID_GOTCHAPKMNCAUGHTWALLY 268 #define STRINGID_GIVENICKNAMECAPTURED 269 #define STRINGID_PKMNSENTTOPC 270 #define STRINGID_PKMNDATAADDEDTODEX 271 diff --git a/src/battle_message.c b/src/battle_message.c index 586fdd268b..f02e38f134 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -469,8 +469,8 @@ static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!"); static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!"); static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!"); static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!"); -static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); -static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); +static const u8 sText_GotchaPkmnCaughtPlayer[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}\p"); +static const u8 sText_GotchaPkmnCaughtWally[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{WAIT_SE}{PLAY_BGM MUS_CAUGHT}{PAUSE 127}"); static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?"); static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC."); static const u8 sText_Someones[] = _("someone's"); @@ -771,8 +771,8 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT - BATTLESTRINGS_TABLE_S [STRINGID_ITAPPEAREDCAUGHT - BATTLESTRINGS_TABLE_START] = sText_ItAppearedCaught, [STRINGID_AARGHALMOSTHADIT - BATTLESTRINGS_TABLE_START] = sText_AarghAlmostHadIt, [STRINGID_SHOOTSOCLOSE - BATTLESTRINGS_TABLE_START] = sText_ShootSoClose, - [STRINGID_GOTCHAPKMNCAUGHT - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught, - [STRINGID_GOTCHAPKMNCAUGHT2 - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaught2, + [STRINGID_GOTCHAPKMNCAUGHTPLAYER - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaughtPlayer, + [STRINGID_GOTCHAPKMNCAUGHTWALLY - BATTLESTRINGS_TABLE_START] = sText_GotchaPkmnCaughtWally, [STRINGID_GIVENICKNAMECAPTURED - BATTLESTRINGS_TABLE_START] = sText_GiveNicknameCaptured, [STRINGID_PKMNSENTTOPC - BATTLESTRINGS_TABLE_START] = sText_PkmnSentToPC, [STRINGID_PKMNDATAADDEDTODEX - BATTLESTRINGS_TABLE_START] = sText_PkmnDataAddedToDex, From d330ca051a80899fcdde8e4c884fa79802fd57ad Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 23 Feb 2023 11:44:23 -0300 Subject: [PATCH 131/290] Document music usage to make it easier to search for a specific track --- charmap.txt | 2 +- data/maps/Route111/scripts.inc | 2 +- include/constants/songs.h | 98 +++++++++++++++++----------------- src/overworld.c | 2 +- 4 files changed, 52 insertions(+), 52 deletions(-) diff --git a/charmap.txt b/charmap.txt index 725f5d1b91..8c886bdf0c 100644 --- a/charmap.txt +++ b/charmap.txt @@ -795,7 +795,7 @@ MUS_LITTLEROOT = 95 01 MUS_MT_CHIMNEY = 96 01 MUS_ENCOUNTER_FEMALE = 97 01 MUS_LILYCOVE = 98 01 -MUS_ROUTE111 = 99 01 +MUS_ROUTE111_DESERT = 99 01 MUS_HELP = 9A 01 MUS_UNDERWATER = 9B 01 MUS_VICTORY_TRAINER = 9C 01 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index f97326c543..44372da37d 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -260,7 +260,7 @@ Route111_EventScript_SunTrigger:: Route111_EventScript_SandstormTrigger:: setweather WEATHER_SANDSTORM - fadenewbgm MUS_ROUTE111 + fadenewbgm MUS_ROUTE111_DESERT doweather end diff --git a/include/constants/songs.h b/include/constants/songs.h index d6a4184959..ffa5c3df0b 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -278,47 +278,47 @@ #define SE_SUDOWOODO_SHAKE 269 // SE_USSOKI // Music -#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI -#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 +#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI // Unused, likely a test track. +#define MUS_GSC_ROUTE38 351 // MUS_FIELD13 // Unused, likely a test track. #define MUS_CAUGHT 352 // MUS_KACHI22 #define MUS_VICTORY_WILD 353 // MUS_KACHI2 -#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 +#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3 // Also used in Frontier Brain victories. #define MUS_VICTORY_LEAGUE 355 // MUS_KACHI5 -#define MUS_C_COMM_CENTER 356 // MUS_PCC -#define MUS_GSC_PEWTER 357 // MUS_NIBI -#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN -#define MUS_ROUTE101 359 // MUS_DOORO1 -#define MUS_ROUTE110 360 // MUS_DOORO_X1 -#define MUS_ROUTE120 361 // MUS_DOORO_X3 -#define MUS_PETALBURG 362 // MUS_MACHI_S2 -#define MUS_OLDALE 363 // MUS_MACHI_S4 +#define MUS_C_COMM_CENTER 356 // MUS_PCC // Unused, likely a test track. +#define MUS_GSC_PEWTER 357 // MUS_NIBI // Used in unused Contest Halls. +#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN // Unused, likely a test track. +#define MUS_ROUTE101 359 // MUS_DOORO1 // Also used in Routes 102 and 103. +#define MUS_ROUTE110 360 // MUS_DOORO_X1 // Also used in Routes 112, 114, 117, 111's non-desert section and 118's west half. +#define MUS_ROUTE120 361 // MUS_DOORO_X3 // Also used in Routes 121, 124, 125, 126, 127 and 128. +#define MUS_PETALBURG 362 // MUS_MACHI_S2 // Also used in Mr. Briney's House and Pretty Petal Flower Shop. +#define MUS_OLDALE 363 // MUS_MACHI_S4 // Also used in Lavaridge Town. #define MUS_GYM 364 // MUS_GIM #define MUS_SURF 365 // MUS_NAMINORI -#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 +#define MUS_PETALBURG_WOODS 366 // MUS_DAN01 // Also used in Artisan Cave, Fiery Path, Granite Cave, Jagged Pass, Marine Cave, Rusturf Tunnel, Scorched Slab and Terra Cave. #define MUS_LEVEL_UP 367 // MUS_FANFA1 #define MUS_HEAL 368 // MUS_ME_ASA #define MUS_OBTAIN_BADGE 369 // MUS_ME_BACHI #define MUS_OBTAIN_ITEM 370 // MUS_FANFA4 -#define MUS_EVOLVED 371 // MUS_FANFA5 +#define MUS_EVOLVED 371 // MUS_FANFA5 // Also used in egg hatching, trades and upon catching. #define MUS_OBTAIN_TMHM 372 // MUS_ME_WAZA -#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU -#define MUS_ROUTE122 374 // MUS_DOORO_X4 +#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU // Also used in the Battle Frontier's Ranking Hall. +#define MUS_ROUTE122 374 // MUS_DOORO_X4 // Also used in Route 123 and Birch's intro speech. #define MUS_OCEANIC_MUSEUM 375 // MUS_FUNE_KAN -#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA -#define MUS_EVOLUTION 377 // MUS_SHINKA +#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA // Also used in egg hatching. +#define MUS_EVOLUTION 377 // MUS_SHINKA // Also used in egg hatching and trades. #define MUS_MOVE_DELETED 378 // MUS_ME_WASURE #define MUS_ENCOUNTER_GIRL 379 // MUS_SYOUJOEYE #define MUS_ENCOUNTER_MALE 380 // MUS_BOYEYE -#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 -#define MUS_FORTREE 382 // MUS_MACHI_S3 +#define MUS_ABANDONED_SHIP 381 // MUS_DAN02 // Also used in Faraway and Southern Islands. +#define MUS_FORTREE 382 // MUS_MACHI_S3 // Also used in Secret Bases and the Safari Zone's entrance. #define MUS_BIRCH_LAB 383 // MUS_ODAMAKI -#define MUS_B_TOWER_RS 384 // MUS_B_TOWER +#define MUS_B_TOWER_RS 384 // MUS_B_TOWER // Used in Battle Tents, Trainer Hill and Battle Frontier's lounges and Exchange Service Corner. #define MUS_ENCOUNTER_SWIMMER 385 // MUS_SWIMEYE -#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 +#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03 // Also used in Meteor Falls. #define MUS_OBTAIN_BERRY 387 // MUS_ME_KINOMI #define MUS_AWAKEN_LEGEND 388 // MUS_ME_TAMA -#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG -#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL +#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG // Also used in the Roulette. +#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL // Also used in the Roulette. #define MUS_TOO_BAD 391 // MUS_ME_ZANNEN #define MUS_ROULETTE 392 // MUS_BD_TIME #define MUS_LINK_CONTEST_P1 393 // MUS_TEST1 @@ -327,17 +327,17 @@ #define MUS_LINK_CONTEST_P4 396 // MUS_TEST4 #define MUS_ENCOUNTER_RICH 397 // MUS_TEST #define MUS_VERDANTURF 398 // MUS_GOMACHI0 -#define MUS_RUSTBORO 399 // MUS_GOTOWN -#define MUS_POKE_CENTER 400 // MUS_POKECEN -#define MUS_ROUTE104 401 // MUS_NEXTROAD -#define MUS_ROUTE119 402 // MUS_GRANROAD +#define MUS_RUSTBORO 399 // MUS_GOTOWN // Also used in Mauville City, Mossdeep City, Daycare, Weather Institute and several Route houses. +#define MUS_POKE_CENTER 400 // MUS_POKECEN // Also used in the Pokémon League's lobby. +#define MUS_ROUTE104 401 // MUS_NEXTROAD // Also used in Routes 105, 106, 107, 108, 109, 115 and 116. +#define MUS_ROUTE119 402 // MUS_GRANROAD // Also used in Routes 129, 130, 131, 132, 133, 134 and 118's east half. #define MUS_CYCLING 403 // MUS_CYCLING -#define MUS_POKE_MART 404 // MUS_FRIENDLY +#define MUS_POKE_MART 404 // MUS_FRIENDLY // Also used in Lilycove's Department Store. #define MUS_LITTLEROOT 405 // MUS_MISHIRO -#define MUS_MT_CHIMNEY 406 // MUS_TOZAN +#define MUS_MT_CHIMNEY 406 // MUS_TOZAN // Also used in Desert Underpass, Mirage Tower, Seafloor Cavern and Sky Pillar. #define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE -#define MUS_LILYCOVE 408 // MUS_MINAMO -#define MUS_ROUTE111 409 // MUS_ASHROAD +#define MUS_LILYCOVE 408 // MUS_MINAMO // Also used in Pacifidlog Town and the Diving Treasure Hunter's house. +#define MUS_ROUTE111_DESERT 409 // MUS_ASHROAD #define MUS_HELP 410 // MUS_EVENT0 #define MUS_UNDERWATER 411 // MUS_DEEPDEEP #define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 @@ -350,29 +350,29 @@ #define MUS_ENCOUNTER_AQUA 419 // MUS_AQA_0 #define MUS_FOLLOW_ME 420 // MUS_TSURETEK #define MUS_ENCOUNTER_BRENDAN 421 // MUS_BOY_SUP -#define MUS_EVER_GRANDE 422 // MUS_RAINBOW +#define MUS_EVER_GRANDE 422 // MUS_RAINBOW // Also used in link rooms. #define MUS_ENCOUNTER_SUSPICIOUS 423 // MUS_AYASII #define MUS_VICTORY_AQUA_MAGMA 424 // MUS_KACHI4 #define MUS_CABLE_CAR 425 // MUS_ROPEWAY #define MUS_GAME_CORNER 426 // MUS_CASINO -#define MUS_DEWFORD 427 // MUS_HIGHTOWN +#define MUS_DEWFORD 427 // MUS_HIGHTOWN // Also used in Route 109's Seashore house. #define MUS_SAFARI_ZONE 428 // MUS_SAFARI -#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD +#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD // Also used in Pokémon League's E4/Champion rooms and halls. #define MUS_AQUA_MAGMA_HIDEOUT 430 // MUS_AJITO #define MUS_SAILING 431 // MUS_M_BOAT -#define MUS_MT_PYRE 432 // MUS_M_DUNGON -#define MUS_SLATEPORT 433 // MUS_FINECITY +#define MUS_MT_PYRE 432 // MUS_M_DUNGON // Also used in New Mauville and Shoal Cave. +#define MUS_SLATEPORT 433 // MUS_FINECITY // Also used in Cycling Road's entrances. #define MUS_MT_PYRE_EXTERIOR 434 // MUS_MACHUPI #define MUS_SCHOOL 435 // MUS_P_SCHOOL #define MUS_HALL_OF_FAME 436 // MUS_DENDOU -#define MUS_FALLARBOR 437 // MUS_TONEKUSA -#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI +#define MUS_FALLARBOR 437 // MUS_TONEKUSA // Also used in Route 114's houses. +#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI // Also used in Ancient Tomb, Desert Ruins and Island Cave. #define MUS_CONTEST_WINNER 439 // MUS_CON_FAN #define MUS_CONTEST 440 // MUS_CONTEST0 #define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 #define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE -#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME (Replaces MUS_WEATHER_KYOGRE from R/S) -#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI (Unused, from R/S) +#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME // Replaces MUS_WEATHER_KYOGRE from R/S. +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused from R/S. #define MUS_SOOTOPOLIS 445 // MUS_RUNECITY #define MUS_CONTEST_RESULTS 446 // MUS_CON_K #define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R @@ -381,7 +381,7 @@ #define MUS_ENCOUNTER_ELITE_FOUR 450 // MUS_SITENNOU #define MUS_ENCOUNTER_HIKER 451 // MUS_YAMA_EYE #define MUS_CONTEST_LOBBY 452 // MUS_CONLOBBY -#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V +#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V // Also used during Petalburg City report at the beginning of the game. #define MUS_ENCOUNTER_CHAMPION 454 // MUS_DAIGO #define MUS_CREDITS 455 // MUS_THANKFOR #define MUS_END 456 // MUS_END @@ -398,7 +398,7 @@ #define MUS_B_DOME 467 // MUS_B_DOME #define MUS_B_PIKE 468 // MUS_B_TUBE #define MUS_B_FACTORY 469 // MUS_B_FACTORY -#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU (Identical to MUS_VS_KYOGRE_GROUDON) +#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU // Identical to MUS_VS_KYOGRE_GROUDON. #define MUS_VS_FRONTIER_BRAIN 471 // MUS_VS_FRONT #define MUS_VS_MEW 472 // MUS_VS_MEW #define MUS_B_DOME_LOBBY 473 // MUS_B_DOME1 @@ -451,9 +451,9 @@ #define MUS_RG_SILPH 519 // MUS_RG_SHIRUHU #define MUS_RG_FUCHSIA 520 // MUS_RG_HANADA #define MUS_RG_CELADON 521 // MUS_RG_TAMAMUSI -#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE (Identical to MUS_VICTORY_TRAINER) -#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI (Identical to MUS_VICTORY_WILD) -#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM (Identical to MUS_VICTORY_GYM_LEADER) +#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE // Identical to MUS_VICTORY_TRAINER. +#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI // Identical to MUS_VICTORY_WILD. +#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM // Identical to MUS_VICTORY_GYM_LEADER. #define MUS_RG_VERMILLION 525 // MUS_RG_KUCHIBA #define MUS_RG_PEWTER 526 // MUS_RG_NIBI #define MUS_RG_ENCOUNTER_RIVAL 527 // MUS_RG_RIVAL1 @@ -472,11 +472,11 @@ #define MUS_RG_NET_CENTER 540 // MUS_RG_NETWORK #define MUS_RG_MYSTERY_GIFT 541 // MUS_RG_OKURIMONO #define MUS_RG_BERRY_PICK 542 // MUS_RG_KINOMIKUI -#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON (Identical to MUS_RG_MT_MOON) -#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV (Identical to MUS_RG_FOLLOW_ME) +#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON // Identical to MUS_RG_MT_MOON. +#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV // Identical to MUS_RG_FOLLOW_ME. #define MUS_RG_SEVII_ROUTE 545 // MUS_RG_NANASHIMA -#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI (Identical to MUS_RG_VIRIDIAN_FOREST) -#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 (Identical to MUS_RG_PEWTER) +#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI // Identical to MUS_RG_VIRIDIAN_FOREST. +#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 // Identical to MUS_RG_PEWTER #define MUS_RG_SEVII_45 548 // MUS_RG_NANA45 #define MUS_RG_SEVII_67 549 // MUS_RG_NANA67 #define MUS_RG_POKE_FLUTE 550 // MUS_RG_POKEFUE diff --git a/src/overworld.c b/src/overworld.c index c3ce7c9125..c9258e05e8 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1104,7 +1104,7 @@ u16 GetCurrLocationDefaultMusic(void) if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) && GetSavedWeather() == WEATHER_SANDSTORM) - return MUS_ROUTE111; + return MUS_ROUTE111_DESERT; music = GetLocationMusic(&gSaveBlock1Ptr->location); if (music != MUS_ROUTE118) From db02cd05f6f68397ec37eed11433aeaa8ddd7b62 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Fri, 24 Feb 2023 00:09:13 -0300 Subject: [PATCH 132/290] Purged the bKGD warning once and for all --- graphics/battle_anims/sprites/new/teapot.png | Bin 881 -> 761 bytes .../battle_anims/sprites/omega_symbol.png | Bin 349 -> 273 bytes graphics/battle_interface/alpha_indicator.png | Bin 266 -> 199 bytes graphics/battle_interface/omega_indicator.png | Bin 271 -> 198 bytes graphics/battle_interface/z_move_trigger.png | Bin 351 -> 275 bytes graphics/berries/babiri.png | Bin 483 -> 399 bytes graphics/berries/charti.png | Bin 430 -> 364 bytes graphics/berries/chilan.png | Bin 469 -> 365 bytes graphics/berries/chople.png | Bin 498 -> 406 bytes graphics/berries/coba.png | Bin 402 -> 315 bytes graphics/berries/colbur.png | Bin 435 -> 382 bytes graphics/berries/haban.png | Bin 466 -> 373 bytes graphics/berries/kasib.png | Bin 459 -> 364 bytes graphics/berries/kebia.png | Bin 500 -> 398 bytes graphics/berries/kee.png | Bin 589 -> 479 bytes graphics/berries/micle.png | Bin 383 -> 291 bytes graphics/berries/occa.png | Bin 434 -> 345 bytes graphics/berries/passho.png | Bin 543 -> 444 bytes graphics/berries/rindo.png | Bin 440 -> 356 bytes graphics/berries/roseli.png | Bin 576 -> 489 bytes graphics/berries/rowap.png | Bin 565 -> 471 bytes graphics/berries/shuca.png | Bin 412 -> 326 bytes graphics/berries/tanga.png | Bin 506 -> 419 bytes graphics/berries/wacan.png | Bin 457 -> 376 bytes graphics/berries/yache.png | Bin 514 -> 430 bytes graphics/expansion_intro/powered_by.png | Bin 336 -> 250 bytes graphics/items/icons/ability_capsule.png | Bin 349 -> 254 bytes graphics/items/icons/ability_patch.png | Bin 312 -> 243 bytes graphics/items/icons/absorb_bulb.png | Bin 365 -> 271 bytes graphics/items/icons/air_balloon.png | Bin 343 -> 248 bytes graphics/items/icons/armor_fossil.png | Bin 457 -> 361 bytes graphics/items/icons/babiri_berry.png | Bin 391 -> 288 bytes graphics/items/icons/big_malasada.png | Bin 393 -> 298 bytes graphics/items/icons/big_root.png | Bin 415 -> 334 bytes graphics/items/icons/black_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/black_sludge.png | Bin 364 -> 279 bytes graphics/items/icons/blue_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/bug_gem.png | Bin 353 -> 252 bytes graphics/items/icons/bug_memory.png | Bin 423 -> 324 bytes graphics/items/icons/burn_drive.png | Bin 342 -> 258 bytes graphics/items/icons/cell_battery.png | Bin 289 -> 207 bytes graphics/items/icons/charti_berry.png | Bin 359 -> 264 bytes graphics/items/icons/chilan_berry.png | Bin 377 -> 271 bytes graphics/items/icons/chill_drive.png | Bin 342 -> 258 bytes graphics/items/icons/choice_scarf.png | Bin 447 -> 347 bytes graphics/items/icons/choice_specs.png | Bin 369 -> 277 bytes graphics/items/icons/chople_berry.png | Bin 388 -> 287 bytes graphics/items/icons/coba_berry.png | Bin 370 -> 271 bytes graphics/items/icons/colbur_berry.png | Bin 376 -> 295 bytes graphics/items/icons/cover_fossil.png | Bin 418 -> 317 bytes graphics/items/icons/custap_berry.png | Bin 406 -> 304 bytes graphics/items/icons/damp_rock.png | Bin 429 -> 329 bytes graphics/items/icons/dark_gem.png | Bin 353 -> 251 bytes graphics/items/icons/dark_memory.png | Bin 419 -> 322 bytes graphics/items/icons/dawn_stone.png | Bin 375 -> 276 bytes graphics/items/icons/destiny_knot.png | Bin 396 -> 299 bytes graphics/items/icons/douse_drive.png | Bin 342 -> 258 bytes graphics/items/icons/draco_plate.png | Bin 355 -> 244 bytes graphics/items/icons/dragon_gem.png | Bin 353 -> 252 bytes graphics/items/icons/dragon_memory.png | Bin 420 -> 321 bytes graphics/items/icons/dread_plate.png | Bin 355 -> 244 bytes graphics/items/icons/dubious_disc.png | Bin 377 -> 279 bytes graphics/items/icons/dusk_stone.png | Bin 376 -> 272 bytes graphics/items/icons/earth_plate.png | Bin 355 -> 244 bytes graphics/items/icons/eject_button.png | Bin 370 -> 266 bytes graphics/items/icons/electirizer.png | Bin 371 -> 271 bytes graphics/items/icons/electric_gem.png | Bin 353 -> 252 bytes graphics/items/icons/electric_memory.png | Bin 421 -> 327 bytes graphics/items/icons/eviolite.png | Bin 317 -> 228 bytes graphics/items/icons/expert_belt.png | Bin 383 -> 292 bytes graphics/items/icons/fairy_gem.png | Bin 353 -> 252 bytes graphics/items/icons/fairy_memory.png | Bin 422 -> 326 bytes graphics/items/icons/fighting_gem.png | Bin 353 -> 252 bytes graphics/items/icons/fighting_memory.png | Bin 419 -> 321 bytes graphics/items/icons/fire_gem.png | Bin 353 -> 252 bytes graphics/items/icons/fire_memory.png | Bin 422 -> 321 bytes graphics/items/icons/fist_plate.png | Bin 355 -> 244 bytes graphics/items/icons/flame_plate.png | Bin 355 -> 244 bytes graphics/items/icons/float_stone.png | Bin 345 -> 251 bytes graphics/items/icons/flying_gem.png | Bin 353 -> 252 bytes graphics/items/icons/flying_memory.png | Bin 420 -> 324 bytes graphics/items/icons/focus_sash.png | Bin 392 -> 288 bytes graphics/items/icons/full_incense.png | Bin 409 -> 312 bytes graphics/items/icons/ghost_gem.png | Bin 353 -> 252 bytes graphics/items/icons/ghost_memory.png | Bin 421 -> 322 bytes graphics/items/icons/gracidea.png | Bin 446 -> 348 bytes graphics/items/icons/grass_gem.png | Bin 353 -> 252 bytes graphics/items/icons/grass_memory.png | Bin 421 -> 327 bytes graphics/items/icons/green_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/grip_claw.png | Bin 413 -> 304 bytes graphics/items/icons/griseous_orb.png | Bin 426 -> 322 bytes graphics/items/icons/ground_gem.png | Bin 353 -> 252 bytes graphics/items/icons/ground_memory.png | Bin 420 -> 321 bytes graphics/items/icons/haban_berry.png | Bin 401 -> 298 bytes graphics/items/icons/heat_rock.png | Bin 434 -> 324 bytes graphics/items/icons/ice_gem.png | Bin 353 -> 252 bytes graphics/items/icons/ice_memory.png | Bin 415 -> 316 bytes graphics/items/icons/ice_stone.png | Bin 422 -> 319 bytes graphics/items/icons/icicle_plate.png | Bin 355 -> 244 bytes graphics/items/icons/icy_rock.png | Bin 411 -> 315 bytes graphics/items/icons/insect_plate.png | Bin 355 -> 244 bytes graphics/items/icons/iron_ball.png | Bin 352 -> 252 bytes graphics/items/icons/iron_plate.png | Bin 355 -> 244 bytes graphics/items/icons/jaboca_berry.png | Bin 395 -> 298 bytes graphics/items/icons/jaw_fossil.png | Bin 444 -> 352 bytes graphics/items/icons/kasib_berry.png | Bin 403 -> 297 bytes graphics/items/icons/kebia_berry.png | Bin 393 -> 286 bytes graphics/items/icons/kee_berry.png | Bin 447 -> 339 bytes graphics/items/icons/lagging_tail.png | Bin 400 -> 296 bytes graphics/items/icons/life_orb.png | Bin 330 -> 239 bytes graphics/items/icons/light_clay.png | Bin 362 -> 268 bytes graphics/items/icons/lucarionite.png | Bin 333 -> 246 bytes graphics/items/icons/luck_incense.png | Bin 404 -> 307 bytes graphics/items/icons/luminous_moss.png | Bin 385 -> 288 bytes graphics/items/icons/lustrous_orb.png | Bin 458 -> 332 bytes graphics/items/icons/magmarizer.png | Bin 376 -> 279 bytes graphics/items/icons/maranga_berry.png | Bin 401 -> 294 bytes graphics/items/icons/meadow_plate.png | Bin 355 -> 244 bytes graphics/items/icons/metronome.png | Bin 356 -> 262 bytes graphics/items/icons/micle_berry.png | Bin 340 -> 235 bytes graphics/items/icons/mind_plate.png | Bin 355 -> 244 bytes graphics/items/icons/muscle_band.png | Bin 418 -> 318 bytes graphics/items/icons/normal_gem.png | Bin 353 -> 252 bytes graphics/items/icons/occa_berry.png | Bin 366 -> 262 bytes graphics/items/icons/odd_incense.png | Bin 402 -> 304 bytes graphics/items/icons/odd_keystone.png | Bin 395 -> 289 bytes graphics/items/icons/old_gateau.png | Bin 330 -> 228 bytes graphics/items/icons/oval_stone.png | Bin 364 -> 267 bytes graphics/items/icons/passho_berry.png | Bin 383 -> 289 bytes graphics/items/icons/payapa_berry.png | Bin 390 -> 293 bytes graphics/items/icons/pink_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/pink_nectar.png | Bin 379 -> 286 bytes graphics/items/icons/plume_fossil.png | Bin 393 -> 301 bytes graphics/items/icons/poison_gem.png | Bin 353 -> 252 bytes graphics/items/icons/poison_memory.png | Bin 419 -> 322 bytes graphics/items/icons/poke_radar.png | Bin 395 -> 299 bytes graphics/items/icons/power_anklet.png | Bin 415 -> 311 bytes graphics/items/icons/power_band.png | Bin 417 -> 309 bytes graphics/items/icons/power_belt.png | Bin 412 -> 308 bytes graphics/items/icons/power_bracer.png | Bin 401 -> 301 bytes graphics/items/icons/power_herb.png | Bin 353 -> 256 bytes graphics/items/icons/power_lens.png | Bin 428 -> 319 bytes graphics/items/icons/power_weight.png | Bin 404 -> 303 bytes graphics/items/icons/prism_scale.png | Bin 325 -> 228 bytes graphics/items/icons/protector.png | Bin 381 -> 277 bytes graphics/items/icons/psychic_gem.png | Bin 353 -> 252 bytes graphics/items/icons/psychic_memory.png | Bin 420 -> 325 bytes graphics/items/icons/pure_incense.png | Bin 401 -> 308 bytes graphics/items/icons/purple_nectar.png | Bin 379 -> 286 bytes graphics/items/icons/quick_powder.png | Bin 392 -> 296 bytes graphics/items/icons/rare_bone.png | Bin 331 -> 242 bytes graphics/items/icons/razor_claw.png | Bin 360 -> 264 bytes graphics/items/icons/razor_fang.png | Bin 342 -> 244 bytes graphics/items/icons/reaper_cloth.png | Bin 401 -> 306 bytes graphics/items/icons/red_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/red_card.png | Bin 311 -> 211 bytes graphics/items/icons/red_nectar.png | Bin 380 -> 288 bytes graphics/items/icons/rindo_berry.png | Bin 353 -> 260 bytes graphics/items/icons/ring_target.png | Bin 330 -> 245 bytes graphics/items/icons/rock_gem.png | Bin 353 -> 252 bytes graphics/items/icons/rock_incense.png | Bin 407 -> 310 bytes graphics/items/icons/rock_memory.png | Bin 414 -> 316 bytes graphics/items/icons/rocky_helmet.png | Bin 385 -> 289 bytes graphics/items/icons/rose_incense.png | Bin 408 -> 311 bytes graphics/items/icons/roseli_berry.png | Bin 400 -> 298 bytes graphics/items/icons/rowap_berry.png | Bin 440 -> 332 bytes graphics/items/icons/sachet.png | Bin 369 -> 275 bytes graphics/items/icons/safety_goggles.png | Bin 386 -> 288 bytes graphics/items/icons/sail_fossil.png | Bin 438 -> 332 bytes graphics/items/icons/shed_shell.png | Bin 393 -> 285 bytes graphics/items/icons/shiny_charm.png | Bin 356 -> 274 bytes graphics/items/icons/shiny_stone.png | Bin 390 -> 294 bytes graphics/items/icons/shock_drive.png | Bin 342 -> 258 bytes graphics/items/icons/shuca_berry.png | Bin 369 -> 275 bytes graphics/items/icons/skull_fossil.png | Bin 450 -> 347 bytes graphics/items/icons/sky_plate.png | Bin 355 -> 244 bytes graphics/items/icons/smooth_rock.png | Bin 427 -> 323 bytes graphics/items/icons/snowball.png | Bin 333 -> 242 bytes graphics/items/icons/splash_plate.png | Bin 352 -> 243 bytes graphics/items/icons/spooky_plate.png | Bin 355 -> 244 bytes graphics/items/icons/steel_gem.png | Bin 353 -> 251 bytes graphics/items/icons/steel_memory.png | Bin 419 -> 323 bytes graphics/items/icons/sticky_barb.png | Bin 332 -> 247 bytes graphics/items/icons/stone_plate.png | Bin 355 -> 244 bytes graphics/items/icons/sweet_heart.png | Bin 328 -> 235 bytes graphics/items/icons/tanga_berry.png | Bin 416 -> 310 bytes graphics/items/icons/toxic_orb.png | Bin 347 -> 259 bytes graphics/items/icons/toxic_plate.png | Bin 355 -> 244 bytes graphics/items/icons/wacan_berry.png | Bin 386 -> 283 bytes graphics/items/icons/water_gem.png | Bin 353 -> 252 bytes graphics/items/icons/water_memory.png | Bin 417 -> 320 bytes graphics/items/icons/wave_incense.png | Bin 400 -> 304 bytes graphics/items/icons/weakness_policy.png | Bin 316 -> 228 bytes graphics/items/icons/whipped_dream.png | Bin 392 -> 292 bytes graphics/items/icons/white_apricorn.png | Bin 367 -> 265 bytes graphics/items/icons/wide_lens.png | Bin 370 -> 260 bytes graphics/items/icons/wise_glasses.png | Bin 333 -> 248 bytes graphics/items/icons/x_special_defense.png | Bin 410 -> 308 bytes graphics/items/icons/yache_berry.png | Bin 395 -> 298 bytes graphics/items/icons/yellow_apricorn.png | Bin 368 -> 271 bytes graphics/items/icons/yellow_nectar.png | Bin 379 -> 286 bytes graphics/items/icons/zap_plate.png | Bin 355 -> 244 bytes graphics/items/icons/zoom_lens.png | Bin 385 -> 280 bytes .../object_events/pics/berry_trees/chople.png | Bin 697 -> 637 bytes .../object_events/pics/berry_trees/custap.png | Bin 669 -> 588 bytes .../object_events/pics/berry_trees/jaboca.png | Bin 693 -> 593 bytes .../object_events/pics/berry_trees/kasib.png | Bin 606 -> 532 bytes .../object_events/pics/berry_trees/kebia.png | Bin 600 -> 521 bytes .../object_events/pics/berry_trees/micle.png | Bin 627 -> 571 bytes .../object_events/pics/berry_trees/occa.png | Bin 618 -> 566 bytes .../object_events/pics/berry_trees/payapa.png | Bin 589 -> 521 bytes .../object_events/pics/berry_trees/roseli.png | Bin 593 -> 521 bytes .../object_events/pics/berry_trees/shuca.png | Bin 638 -> 552 bytes .../object_events/pics/berry_trees/tanga.png | Bin 697 -> 599 bytes .../pokemon/alcremie/caramel_swirl/front.png | Bin 805 -> 729 bytes .../pokemon/alcremie/lemon_cream/front.png | Bin 805 -> 729 bytes .../pokemon/alcremie/matcha_cream/back.png | Bin 747 -> 657 bytes .../pokemon/alcremie/matcha_cream/front.png | Bin 805 -> 729 bytes .../pokemon/alcremie/mint_cream/front.png | Bin 806 -> 729 bytes .../pokemon/alcremie/rainbow_swirl/back.png | Bin 755 -> 660 bytes .../pokemon/alcremie/ruby_cream/front.png | Bin 809 -> 730 bytes .../pokemon/alcremie/salted_cream/front.png | Bin 804 -> 729 bytes graphics/pokemon/altaria/back.png | Bin 703 -> 603 bytes graphics/pokemon/ampharos/back.png | Bin 640 -> 563 bytes graphics/pokemon/bagon/back.png | Bin 646 -> 552 bytes .../pokemon/basculin/blue_striped/back.png | Bin 741 -> 629 bytes .../pokemon/basculin/blue_striped/icon.png | Bin 462 -> 362 bytes graphics/pokemon/beartic/back.png | Bin 628 -> 526 bytes graphics/pokemon/bidoof/anim_frontf.png | Bin 852 -> 781 bytes graphics/pokemon/bidoof/backf.png | Bin 570 -> 487 bytes graphics/pokemon/breloom/back.png | Bin 811 -> 705 bytes graphics/pokemon/budew/back.png | Bin 580 -> 484 bytes graphics/pokemon/carvanha/back.png | Bin 716 -> 605 bytes graphics/pokemon/castform/rainy/icon.png | Bin 375 -> 296 bytes graphics/pokemon/castform/snowy/icon.png | Bin 395 -> 321 bytes graphics/pokemon/castform/sunny/icon.png | Bin 386 -> 312 bytes graphics/pokemon/celebi/back.png | Bin 732 -> 641 bytes graphics/pokemon/cherrim/sunshine/icon.png | Bin 405 -> 334 bytes graphics/pokemon/chespin/anim_front.png | Bin 923 -> 797 bytes graphics/pokemon/cinccino/back.png | Bin 686 -> 578 bytes graphics/pokemon/cinderace/back.png | Bin 761 -> 649 bytes graphics/pokemon/cinderace/front.png | Bin 840 -> 726 bytes graphics/pokemon/corsola/galarian/front.png | Bin 684 -> 582 bytes graphics/pokemon/cranidos/back.png | Bin 832 -> 731 bytes graphics/pokemon/cursola/front.png | Bin 970 -> 878 bytes graphics/pokemon/darmanitan/zen_mode/icon.png | Bin 414 -> 323 bytes graphics/pokemon/deerling/autumn/icon.png | Bin 498 -> 379 bytes graphics/pokemon/deerling/summer/icon.png | Bin 507 -> 378 bytes graphics/pokemon/deerling/winter/icon.png | Bin 503 -> 377 bytes graphics/pokemon/dewgong/back.png | Bin 568 -> 502 bytes graphics/pokemon/ditto/back.png | Bin 434 -> 360 bytes graphics/pokemon/dunsparce/back.png | Bin 664 -> 569 bytes graphics/pokemon/eevee/backf.png | Bin 696 -> 615 bytes graphics/pokemon/elekid/back.png | Bin 741 -> 652 bytes graphics/pokemon/espeon/back.png | Bin 677 -> 617 bytes graphics/pokemon/flabebe/back.png | Bin 642 -> 526 bytes graphics/pokemon/flabebe/blue_flower/icon.png | Bin 374 -> 301 bytes .../pokemon/flabebe/orange_flower/icon.png | Bin 374 -> 301 bytes .../pokemon/flabebe/white_flower/icon.png | Bin 375 -> 302 bytes .../pokemon/flabebe/yellow_flower/icon.png | Bin 377 -> 302 bytes graphics/pokemon/flareon/icon.png | Bin 496 -> 404 bytes graphics/pokemon/floette/blue_flower/icon.png | Bin 431 -> 352 bytes .../pokemon/floette/eternal_flower/back.png | Bin 783 -> 668 bytes .../pokemon/floette/eternal_flower/front.png | Bin 807 -> 710 bytes .../pokemon/floette/eternal_flower/icon.png | Bin 449 -> 376 bytes .../pokemon/floette/orange_flower/icon.png | Bin 431 -> 352 bytes .../pokemon/floette/white_flower/icon.png | Bin 429 -> 352 bytes .../pokemon/floette/yellow_flower/icon.png | Bin 436 -> 353 bytes graphics/pokemon/florges/back.png | Bin 768 -> 673 bytes graphics/pokemon/florges/blue_flower/icon.png | Bin 651 -> 480 bytes .../pokemon/florges/orange_flower/icon.png | Bin 648 -> 479 bytes .../pokemon/florges/white_flower/icon.png | Bin 619 -> 470 bytes .../pokemon/florges/yellow_flower/icon.png | Bin 650 -> 480 bytes graphics/pokemon/furfrou/dandy_trim/icon.png | Bin 598 -> 455 bytes .../pokemon/furfrou/debutante_trim/icon.png | Bin 594 -> 458 bytes .../pokemon/furfrou/diamond_trim/icon.png | Bin 624 -> 492 bytes graphics/pokemon/furfrou/heart_trim/icon.png | Bin 602 -> 477 bytes graphics/pokemon/furfrou/kabuki_trim/icon.png | Bin 573 -> 451 bytes .../pokemon/furfrou/la_reine_trim/icon.png | Bin 580 -> 444 bytes graphics/pokemon/furfrou/matron_trim/icon.png | Bin 581 -> 455 bytes .../pokemon/furfrou/pharaoh_trim/icon.png | Bin 579 -> 443 bytes graphics/pokemon/furfrou/star_trim/icon.png | Bin 639 -> 496 bytes graphics/pokemon/galvantula/back.png | Bin 575 -> 492 bytes graphics/pokemon/gastrodon/east_sea/icon.png | Bin 565 -> 403 bytes graphics/pokemon/geodude/back.png | Bin 652 -> 593 bytes graphics/pokemon/glaceon/back.png | Bin 647 -> 541 bytes graphics/pokemon/golett/back.png | Bin 933 -> 788 bytes graphics/pokemon/gourgeist/back.png | Bin 653 -> 536 bytes graphics/pokemon/gourgeist/large/back.png | Bin 673 -> 546 bytes graphics/pokemon/gourgeist/small/back.png | Bin 639 -> 522 bytes graphics/pokemon/gourgeist/super/back.png | Bin 681 -> 560 bytes graphics/pokemon/greninja/ash/icon.png | Bin 681 -> 491 bytes graphics/pokemon/gurdurr/back.png | Bin 683 -> 564 bytes graphics/pokemon/hippowdon/back.png | Bin 740 -> 663 bytes graphics/pokemon/hitmonchan/back.png | Bin 830 -> 713 bytes graphics/pokemon/hoopa/back.png | Bin 860 -> 718 bytes graphics/pokemon/hoopa/footprint.png | Bin 190 -> 102 bytes graphics/pokemon/hoopa/unbound/icon.png | Bin 623 -> 521 bytes graphics/pokemon/jellicent/backf.png | Bin 617 -> 521 bytes graphics/pokemon/jellicent/icon.png | Bin 489 -> 418 bytes graphics/pokemon/jellicent/iconf.png | Bin 499 -> 430 bytes graphics/pokemon/jigglypuff/back.png | Bin 518 -> 447 bytes graphics/pokemon/keldeo/resolute/back.png | Bin 857 -> 742 bytes graphics/pokemon/keldeo/resolute/icon.png | Bin 558 -> 482 bytes graphics/pokemon/kricketot/anim_frontf.png | Bin 1048 -> 976 bytes graphics/pokemon/kricketot/backf.png | Bin 625 -> 540 bytes graphics/pokemon/lapras/back.png | Bin 786 -> 682 bytes graphics/pokemon/larvitar/back.png | Bin 594 -> 527 bytes graphics/pokemon/lucario/back.png | Bin 906 -> 800 bytes graphics/pokemon/luxio/back.png | Bin 784 -> 707 bytes graphics/pokemon/luxray/back.png | Bin 890 -> 792 bytes graphics/pokemon/lycanroc/dusk/front.png | Bin 1001 -> 894 bytes graphics/pokemon/lycanroc/midnight/front.png | Bin 920 -> 841 bytes graphics/pokemon/magearna/back.png | Bin 782 -> 661 bytes graphics/pokemon/magearna/front.png | Bin 938 -> 828 bytes .../pokemon/magearna/original_color/back.png | Bin 797 -> 667 bytes .../pokemon/magearna/original_color/front.png | Bin 966 -> 834 bytes .../pokemon/magearna/original_color/icon.png | Bin 519 -> 444 bytes graphics/pokemon/marshtomp/back.png | Bin 748 -> 641 bytes graphics/pokemon/mimikyu/busted/back.png | Bin 505 -> 425 bytes graphics/pokemon/mimikyu/busted/front.png | Bin 554 -> 488 bytes graphics/pokemon/mimikyu/busted/icon.png | Bin 426 -> 327 bytes graphics/pokemon/minccino/back.png | Bin 601 -> 519 bytes graphics/pokemon/minior/core/back.png | Bin 493 -> 412 bytes graphics/pokemon/minior/core/blue/icon.png | Bin 447 -> 356 bytes graphics/pokemon/minior/core/front.png | Bin 532 -> 455 bytes graphics/pokemon/minior/core/green/icon.png | Bin 440 -> 355 bytes graphics/pokemon/minior/core/indigo/icon.png | Bin 443 -> 356 bytes graphics/pokemon/minior/core/orange/icon.png | Bin 443 -> 355 bytes graphics/pokemon/minior/core/violet/icon.png | Bin 442 -> 355 bytes graphics/pokemon/minior/core/yellow/icon.png | Bin 438 -> 355 bytes graphics/pokemon/minun/back.png | Bin 673 -> 574 bytes graphics/pokemon/mr_mime/back.png | Bin 868 -> 747 bytes graphics/pokemon/necrozma/dawn_wings/back.png | Bin 951 -> 847 bytes .../pokemon/necrozma/dawn_wings/front.png | Bin 1413 -> 1294 bytes graphics/pokemon/necrozma/dawn_wings/icon.png | Bin 709 -> 595 bytes graphics/pokemon/necrozma/dusk_mane/back.png | Bin 1187 -> 1033 bytes graphics/pokemon/necrozma/dusk_mane/front.png | Bin 1311 -> 1217 bytes graphics/pokemon/necrozma/dusk_mane/icon.png | Bin 559 -> 485 bytes graphics/pokemon/necrozma/ultra/back.png | Bin 863 -> 760 bytes graphics/pokemon/necrozma/ultra/front.png | Bin 1312 -> 1268 bytes graphics/pokemon/necrozma/ultra/icon.png | Bin 626 -> 561 bytes graphics/pokemon/nidoqueen/back.png | Bin 785 -> 698 bytes graphics/pokemon/nidorino/back.png | Bin 794 -> 740 bytes graphics/pokemon/ninetales/back.png | Bin 699 -> 628 bytes graphics/pokemon/oddish/back.png | Bin 656 -> 552 bytes graphics/pokemon/oricorio/pau/back.png | Bin 884 -> 761 bytes graphics/pokemon/oricorio/pau/front.png | Bin 828 -> 706 bytes graphics/pokemon/oricorio/pau/icon.png | Bin 452 -> 341 bytes graphics/pokemon/oricorio/pom_pom/back.png | Bin 836 -> 721 bytes graphics/pokemon/oricorio/pom_pom/front.png | Bin 733 -> 617 bytes graphics/pokemon/oricorio/pom_pom/icon.png | Bin 462 -> 361 bytes graphics/pokemon/oricorio/sensu/back.png | Bin 750 -> 667 bytes graphics/pokemon/oricorio/sensu/front.png | Bin 883 -> 784 bytes graphics/pokemon/oricorio/sensu/icon.png | Bin 481 -> 350 bytes graphics/pokemon/persian/back.png | Bin 731 -> 665 bytes graphics/pokemon/phanpy/back.png | Bin 525 -> 454 bytes graphics/pokemon/pichu/spiky_eared/icon.png | Bin 375 -> 312 bytes graphics/pokemon/pikachu/alola_cap/back.png | Bin 749 -> 633 bytes graphics/pokemon/pikachu/alola_cap/front.png | Bin 717 -> 624 bytes graphics/pokemon/pikachu/alola_cap/icon.png | Bin 499 -> 384 bytes graphics/pokemon/pikachu/belle/back.png | Bin 953 -> 837 bytes graphics/pokemon/pikachu/belle/front.png | Bin 900 -> 808 bytes graphics/pokemon/pikachu/belle/icon.png | Bin 586 -> 453 bytes graphics/pokemon/pikachu/cosplay/back.png | Bin 740 -> 634 bytes graphics/pokemon/pikachu/cosplay/front.png | Bin 708 -> 611 bytes graphics/pokemon/pikachu/cosplay/icon.png | Bin 444 -> 367 bytes graphics/pokemon/pikachu/hoenn_cap/back.png | Bin 742 -> 631 bytes graphics/pokemon/pikachu/hoenn_cap/front.png | Bin 723 -> 638 bytes graphics/pokemon/pikachu/hoenn_cap/icon.png | Bin 497 -> 383 bytes graphics/pokemon/pikachu/kalos_cap/back.png | Bin 750 -> 633 bytes graphics/pokemon/pikachu/kalos_cap/front.png | Bin 726 -> 632 bytes graphics/pokemon/pikachu/kalos_cap/icon.png | Bin 506 -> 388 bytes graphics/pokemon/pikachu/libre/back.png | Bin 837 -> 717 bytes graphics/pokemon/pikachu/libre/front.png | Bin 751 -> 657 bytes graphics/pokemon/pikachu/libre/icon.png | Bin 487 -> 380 bytes .../pokemon/pikachu/original_cap/back.png | Bin 760 -> 636 bytes .../pokemon/pikachu/original_cap/front.png | Bin 737 -> 635 bytes .../pokemon/pikachu/original_cap/icon.png | Bin 498 -> 385 bytes graphics/pokemon/pikachu/partner_cap/icon.png | Bin 507 -> 389 bytes graphics/pokemon/pikachu/ph_d/back.png | Bin 853 -> 747 bytes graphics/pokemon/pikachu/ph_d/front.png | Bin 846 -> 758 bytes graphics/pokemon/pikachu/ph_d/icon.png | Bin 498 -> 405 bytes graphics/pokemon/pikachu/pop_star/back.png | Bin 978 -> 841 bytes graphics/pokemon/pikachu/pop_star/front.png | Bin 831 -> 732 bytes graphics/pokemon/pikachu/pop_star/icon.png | Bin 524 -> 411 bytes graphics/pokemon/pikachu/rock_star/back.png | Bin 876 -> 764 bytes graphics/pokemon/pikachu/rock_star/front.png | Bin 803 -> 692 bytes graphics/pokemon/pikachu/rock_star/icon.png | Bin 499 -> 394 bytes graphics/pokemon/pikachu/sinnoh_cap/back.png | Bin 742 -> 631 bytes graphics/pokemon/pikachu/sinnoh_cap/front.png | Bin 723 -> 638 bytes graphics/pokemon/pikachu/sinnoh_cap/icon.png | Bin 498 -> 384 bytes graphics/pokemon/pikachu/unova_cap/back.png | Bin 760 -> 636 bytes graphics/pokemon/pikachu/unova_cap/front.png | Bin 737 -> 638 bytes graphics/pokemon/pikachu/unova_cap/icon.png | Bin 503 -> 384 bytes graphics/pokemon/pumpkaboo/back.png | Bin 591 -> 515 bytes graphics/pokemon/pumpkaboo/large/back.png | Bin 619 -> 547 bytes graphics/pokemon/pumpkaboo/small/back.png | Bin 591 -> 510 bytes graphics/pokemon/pumpkaboo/super/back.png | Bin 634 -> 562 bytes graphics/pokemon/pyroar/icon.png | Bin 555 -> 492 bytes graphics/pokemon/relicanth/back.png | Bin 745 -> 612 bytes graphics/pokemon/reshiram/back.png | Bin 747 -> 670 bytes graphics/pokemon/riolu/back.png | Bin 803 -> 713 bytes graphics/pokemon/sawsbuck/autumn/back.png | Bin 901 -> 801 bytes graphics/pokemon/sawsbuck/autumn/icon.png | Bin 498 -> 426 bytes graphics/pokemon/sawsbuck/summer/back.png | Bin 825 -> 716 bytes graphics/pokemon/sawsbuck/summer/icon.png | Bin 468 -> 389 bytes graphics/pokemon/sawsbuck/winter/icon.png | Bin 464 -> 390 bytes graphics/pokemon/sealeo/back.png | Bin 584 -> 486 bytes graphics/pokemon/shellos/east_sea/back.png | Bin 689 -> 577 bytes graphics/pokemon/shellos/east_sea/icon.png | Bin 518 -> 359 bytes graphics/pokemon/shinx/anim_frontf.png | Bin 981 -> 917 bytes graphics/pokemon/shinx/backf.png | Bin 728 -> 634 bytes graphics/pokemon/shuppet/back.png | Bin 576 -> 494 bytes graphics/pokemon/silvally/back.png | Bin 718 -> 640 bytes graphics/pokemon/silvally/front.png | Bin 957 -> 837 bytes graphics/pokemon/sirfetchd/front.png | Bin 1032 -> 907 bytes graphics/pokemon/snubbull/back.png | Bin 561 -> 477 bytes graphics/pokemon/spheal/back.png | Bin 473 -> 393 bytes graphics/pokemon/staravia/back.png | Bin 779 -> 689 bytes graphics/pokemon/swablu/back.png | Bin 711 -> 621 bytes graphics/pokemon/swalot/back.png | Bin 698 -> 589 bytes graphics/pokemon/togetic/back.png | Bin 618 -> 545 bytes graphics/pokemon/tornadus/therian/icon.png | Bin 647 -> 479 bytes graphics/pokemon/unfezant/backf.png | Bin 827 -> 725 bytes graphics/pokemon/unfezant/icon.png | Bin 466 -> 397 bytes .../pokemon/vivillon/continental/icon.png | Bin 562 -> 492 bytes graphics/pokemon/vivillon/elegant/icon.png | Bin 559 -> 482 bytes graphics/pokemon/vivillon/fancy/icon.png | Bin 583 -> 508 bytes graphics/pokemon/vivillon/garden/icon.png | Bin 552 -> 482 bytes graphics/pokemon/vivillon/jungle/icon.png | Bin 539 -> 470 bytes graphics/pokemon/vivillon/marine/icon.png | Bin 558 -> 494 bytes graphics/pokemon/vivillon/modern/icon.png | Bin 564 -> 492 bytes graphics/pokemon/vivillon/monsoon/icon.png | Bin 546 -> 493 bytes graphics/pokemon/vivillon/ocean/icon.png | Bin 582 -> 510 bytes graphics/pokemon/vivillon/poke_ball/icon.png | Bin 562 -> 496 bytes graphics/pokemon/vivillon/polar/icon.png | Bin 569 -> 493 bytes graphics/pokemon/vivillon/river/icon.png | Bin 549 -> 483 bytes graphics/pokemon/vivillon/sandstorm/icon.png | Bin 548 -> 478 bytes graphics/pokemon/vivillon/savanna/icon.png | Bin 563 -> 486 bytes graphics/pokemon/vivillon/sun/icon.png | Bin 557 -> 484 bytes graphics/pokemon/vivillon/tundra/icon.png | Bin 568 -> 491 bytes graphics/pokemon/whiscash/back.png | Bin 724 -> 609 bytes graphics/pokemon/wingull/back.png | Bin 647 -> 561 bytes graphics/pokemon/xerneas/back.png | Bin 838 -> 740 bytes graphics/pokemon/xerneas/front.png | Bin 910 -> 799 bytes graphics/pokemon/xerneas/icon.png | Bin 597 -> 435 bytes graphics/pokemon/zapdos/back.png | Bin 586 -> 497 bytes graphics/pokemon/zygarde/10_percent/icon.png | Bin 446 -> 381 bytes graphics/pokemon/zygarde/complete/icon.png | Bin 592 -> 537 bytes 450 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/battle_anims/sprites/new/teapot.png b/graphics/battle_anims/sprites/new/teapot.png index 6be0680dfce165621cf650c7b94fb1f8d456f83e..0e26606418919a0f8b49d83ce7792fedfdc2f2af 100644 GIT binary patch delta 690 zcmV;j0!{t#2Kfb$7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007LNklvXS?Bns(SN}l3 z`p7>`)BFKJ{H*XkU=}}q0Kj?17~cmlAx3!DPbmbD0GV~)O*AbC^E^i;#PZC5m&t#q zPE$qX8ps)PjHQq#fE4#K7}RB27=Y0I4DbZ*k7m2@BL`@N5VH6y`^h{W@Rk1o5pj_T zSdbH_UHq^=pY&`Oexf3T&fp+o=aWEQH~+He+5FG;wV_gL<R#K(a`Pt6hRRs6gNAQF-HGmDUtvvP89|6@xI09OL-a#S6UjXR{ z*aL6}0uR_Tpt>`pLkS#U3TOW32s=PqU;v{DuK<4EXykZJOOY6AnG2R_%{GA$N>Uq_%raN+NaOtuKxzhVLaTn2E(;HS;_ZEK`s{Mv5_QuJuPH2?Jr-4m?8eIo_@ z!OsL}9@AJIz`y$C?Z61yrb26f$FCudBC+52r^R!1&@FpIeE_NBjT)02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NasL_t(|ob8mqPuoBg$1hSO=unA+5E=;< zQY4{Y$~^xY4G zlY)n??Hlj=$@kv(y>kfpUw>5@x|9wq8{6pyhGFcd0z1Z5e>zYtK`KC2A(tk%%@ym! z{qmB$z>9~wdocXz#uv`Hb&cS#YB|HEuRWHxDl-jEive4O0yM`Rb+EGs$?H~s86#G! z3?cMS<@v!ToFpCc?Aj0&G}nWn@T zTgMK)2ulKJ@ml#v1Iw(l8ZKG_kpg=6oVV}vI81`X0RkfdgzAoS&Q%K;qlRlJGj^l_ zX~Fq@46JM(6LNN2x8{I{7+4lhs5>p6JOZI?;^CYRf0Dr4uR28x^fZ7WC4eF3fPPy6 zN7g>cOs3ay2-SqoJN>>&S;Y_;JMs)~7AV9369BV4tSAA{7|1eAxqzE~G7x}6H~K1s z1Qr9vc6XW9@zH=odofVQFJ*Cp#A8_kz!Yj#q%1zA%P5!yIR7vpF>ow^Tj8w=TWBJn z4M-Nif82k6Teju>w(7CL`O|wX100)W_$2heR)cKt_7i{>qShtA)G{gWBp!Svk9xt@ zfZPP-g9Jd_D<}-*6d1FG!3|xzO9JGT`wc(=O#!s%n^{11I-W!UjzHYdq8oF%=oEkZ z10=vHt;_>xfq+QU#8uPWpZ_x1JV*lopSPYdJRro(H-t>-+Oq~&@2IX;&V5cN*((ja opd;Z5#B^WMi5QrhCjZOz8+s?4P36)aUjP6A07*qoM6N<$f{LYJWB>pF diff --git a/graphics/battle_anims/sprites/omega_symbol.png b/graphics/battle_anims/sprites/omega_symbol.png index a821d5e40aa7b4fab4b28d545b787e47508920b9..150501367aa7aa0a870a2ad8ef72813e9bf7fdee 100644 GIT binary patch delta 198 zcmcc1G?8h71SbbG0|SH0lCEPDtL^IrN`m}?|D%DkikqeY)iijzIEGmCo(=LAYf#{r zvgiL?Z;8r=j@?;hpA~Bi*Z$=_qVcACV<*pU<4+y8I@Z|9JV|o;^YQIYO%;oVt1Od# zNOK+KlGJat*r1`$dT#x?A0OQ(+6x@5zG!12-^?Q#&APHt)2NNd{I$K}rI$zf3|SNs#-!Fbl2>1Eevp5;KtFnGH9xvX&pI=LyAp>Z+b}14xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}9o-U3d6?4`G+?70Fz>>n8)4-eb|E^Z(%lpy$t32NIO~fi8ynK^HBIgSIVm&0W8+MaVs=$-t@GmT{*|{&rgTe~DWM4fdN5@o diff --git a/graphics/battle_interface/alpha_indicator.png b/graphics/battle_interface/alpha_indicator.png index 0e302576b6aced8d385e93eee3a2919ea2e4d1c3..66f37f1d3353444663abadfb73b5801d24158d07 100644 GIT binary patch delta 123 zcmeBTI?gyjf|G-pfq_9omp^!7wSBrkNswRge>8Abanlr_8Z%E9#}J9BXM1+?G8k|$ zf86~4jG^cfPgxc5a<_HAo-uq%;{0Hc>VDQgONIa7ge~beceo|*_{}W$n<01Ro?d03 O2@IaDelF{r5}E*SM>cc- delta 190 zcmX@k*u^wKBAJDmfq~)e-A6${ioL|s*OmP#hZLid(zlr#BY;BUC9V-A!TD(=<%vb9 z4DLQI0e diff --git a/graphics/battle_interface/omega_indicator.png b/graphics/battle_interface/omega_indicator.png index c56d51c151e6c578e4a8935a7cf6bd4efaceb009..f321fc8263fd4ba43bac4e7039a1a86731282272 100644 GIT binary patch delta 122 zcmeBYI>tCbf|G-pfq_9omp^!7wSAgENswRge>8Abanlr_8dFaf#}J9BXV2^uWH8`h zcKq@sezPk}NkZy&;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ1c1lDE6d|E27ojsj(kJzX3_D&{07ED#e2YP-;*<;0fIHnCg5<%Ea8DT5FZAvWVV nBCR0@c*K&E**naVlMPrIIx?8=Ez0_J8f1y5tDnm{r-UW|^XEH` diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png index 5e27dbabbe83560938b5871700ea63f0a8158dd5..d719494d9f0a64b59552862bed58adfc2c8056b5 100644 GIT binary patch delta 200 zcmcc5G?{6F1SbbG0|SH0lCEPDtL^IrN`m}?|D%DkikqeY)iim!IEGmCzMbeT)S$rQ zymG7S`})MoUGaxlW$w4R-s4f3QgoPgilN@=MOJ1L{1Y;^)MUKb=^^z*b*A?uw$o2r z?l!emZQ8VHV`J7@#Sf+lGnO8DUUWpPZPrDxvZoDOW-#|mcy97X?9=phdv+g+{u_08 t!n=v?d`>T0qVH93>9K6Oe4hOVgMcm5g-01Jw}H-K@O1TaS?83{1OOTIVoLx3 delta 276 zcmbQtbf0O0L^2CA0|P^2NcwRg#a`m+>&pI&U5Hni<4No1X< zXkX8mn z?p*j<-p0i=C(uQ_CnVqq%Z8-bGZsb%BM$9yYv1_HwX?H*WBrrT+P*7sKC8D(6FzRj zbFy{O?2Bs_HTg7tc2tz<-C+>@;$K+wt3w6_>YDM+4-6jMD9vF}tFL-8jjQ#QcXx$t z@xlTL8=l;2W^P}1Hy=vjS2@|@Bs7^lA~SpG$JXHHIWmGtahJsYlz16NyjoLvC&oU3 zr|X~ZPxHjRbLFI*-tronHKl7D<-Nu7O)iIlhkyUWbnT8WmiAk!|LotlLrznb{Y6GQ SM;91LFgb7-Iwj0001`EabER000McNliru;{yc%9V2mZQ~&?~02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009R{L_t(|ob8Z7YQsPbMdg$pKrx z;BmRtpquijg7Z>ISn@~|pKlgWU?J-Ah|B3WI7o8QXRY?>e`I|G*SSipKvLxEN+MV% zLb*;wVE~}xR{8?I%x4;6X{DPB=&Y3}SiK~hqXq@6k~wp}R3Lc~4ftw6b5t)U#qiAl zcu`5zloIuoX8UmvLQd#pHUPXvBt&+4K{81Y*Bws%LiH41068*(@?KwV<`%+TP#Klw z;x!CyfbM{gD?$7QfD7<&)B_USDGJR-@WXcIf3Us*&D28&%TK_W00000NkvXXu0mjf DZ04v0 diff --git a/graphics/berries/charti.png b/graphics/berries/charti.png index 9f119ebac0e9d1d9883bf3b3a92d57e18c57fe3f..399cd626efa83c80a69c4de5143c382c0f866630 100644 GIT binary patch delta 290 zcmZ3-{Dx_Q1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)!g=UaSZY3d^`Cp-(dre zW^RiwfA3fPS(01UD6@R!wI#8C66dHL|M=?a`>q4OOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007cSL_t(|ob8b@4#F@DMGN8pAXUs@gvRi*(%3C42oPbHs_jSEl?&~hUninYtJTnvsvo-(#002ovPDHLkV1gZ0 BiW2|; diff --git a/graphics/berries/chilan.png b/graphics/berries/chilan.png index 8f717bb82cfe103413e8dd976fca23cf26519e51..286ed5c3fae40a05c224dbd6b632c57120a6330b 100644 GIT binary patch delta 291 zcmcc0{FZ5g1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)!gxPaSZY3e0%vKU$X)a zYrvMR4gdcioE9YLqw!&z&bQRaBL3|;ukM)tH!O@lb9~1X`$rqEZJ1TQx^lZXgA0p^ zZbQ?VDK{+mEp*M~?zIJ+40y7Gr>ntn-uC>~SVk7j%N(nl{Oj94>-KQj&HcbLb;9g& z?G$OAwGzxi5Aq-M&h_xC3ze{TJeTPz@t$Q@S6IvQTVfNs!oKJSYDpcuU)AtVWYYS) zzHjHJxK{3J{r*3@Dk$Q$9>c1#^DbJu9*D(x8ok`i|KsVJP6_D^0m1XsjvVx!&XHi+ jT(h(!?bH1~zhbu3^C~~(-}6fd=u-wyS3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008+(L_t(|oaK?RN(3sc6XU#MGkA)TSJIkny;bN+;LGj}IQ>TpbM zyHIhuqbMQPqm<>+{GRo<#gsZP`t6e48R*2Cy6u>0T-F|=whJ3R{!mps(rxhZSyxQU z&S|zr2L@$l&!#Wy1b-OXk1 z|1CbUDSTl{!Gk%$8XMlFS_tis&s%fgm)UoNsKd6F9})|~?c#bC%|Cg%{lf#vPlwOn c|LHp~rkZ!_=BX=Gfx*V$>FVdQ&MBb@0F`5)rT_o{ delta 424 zcmV;Z0ayN(1M&lq7-Iwj0001`EabER000McNliru;{ya19VgZcD82vy02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009G0;G_d zUgf|c04UIbu7B#)Hd8w3ugW-JO=yYZh{&pN3)!b4X1Z~Uw3Spuwu*(&N)*W>WvrPIKt8? zp!1M_qK4qzBbR-TfBPTxYr9hHmE|4>V+~Z>F2p`La72kmW0UB@14?1ddlcPlURaB^ j?9X=dd-p)tUR2+76H7yhvf?_Rvl%>H{an^LB{Ts5IAw8E delta 327 zcmdnZG>LhFL^2CA0|UcSohMs>6nlxMuPggwW)?9W-qUZN-2w`Um$*ih1m~xflqVLY zGPwJ=1o*itl%*Ca80(o7wk~-HRKihG;O7pMF$S_3yc#s+ffP%+qpu?a!^VE@KZ&dp z747R8lf2zs{x4_W6marJ&aA90>AqY zm^RIyXP#mAIc0uw>MXzdbstNomGU`W(Gd}Szi@@giPm?Mql({aH)m|#uk5){ zX?5L&9xt&2+FmEu=JPMPlI)q6_dDUM+sg_zw#~|s3bGe=1?u0ePRw|+3N)kb;3><8I2^{rP6^s8Uo-f(Q WU8H6hlB~TBowWK`+Y z;IgEFD=Ila&@oi}@#F`yelaZg%w4cPGooZu*84w4IXhO>YuEoc%;LcObnPC~C-y`sA70<;_Ez{W z-`dU3w>0`x7)$)S6}L)FmEl`EOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007rXL_t(|ob8dpbps&`MA>x;u$L`h0T*C2 z2pN>M-P3;g+?N}NP2;91CN6h8P&v<` z^qP&f9gj}sT)XFQ%+&6)-cH!kq?RwWddSem5)9dO=%5q zw3NtYDB~1y%24)xpjXggSaw)w2}4O-Pe53aYJg$JCs)p6lKM8>b`_UA^?qt`_|NUn z;r=yMPYY*-vY6`}53+f}DX1E|q%&eaztL>gTe~DWM4f(>aO^ delta 392 zcmV;30eAlO0@4GJ7-Iwj0001`EabER000McNliru;{yc%7Yn{C6mS3l02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008z$L_t(|oaK^1YQr!TL=8?4;HDRd+XJ-7 z?mFSm&pKdzye-6tT%f2oNRHjF5GeXmpxe?}crlL|NqCy(pQ#O}JN~gA81MMbz1C`2 zymOV7If@7s{%Vf#Q%M0NUd}0UF#f~*b%_bs2y4@|%0ya`f158;ezg4PcVM_$K_!ws z9-RCIi5v{@AuMhm0&h!j?4Iq3(_sZ3 z=gb<0|NjqfEz{yc-9 zu~~CE>#`)-&sWs0e{C^ue(CsaMdcy+IZ_7i{vU1b*Jtee%e>~(!haqSPs{Ir5S}Ad iv&W=ZD(`Qkzepp;Y%d?aW^JHH89ZJ6T-G@yGywqZZ;FWk delta 385 zcmV-{0e=4M0?PxC7-Iwj0001`EabER000McNliru;{yc%6Etig{7C=+02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008evL_t(|oYjyqZo@DPMTx>mPtXf=$r^yM zW&>nAXAq4ZpdvIDU5Z{n@YuDt4c&N%Bx~pxjqmyCLk4*C^Zn5fzd!#iUK{-Bvmu^a zHyvuxon-*{s=2Co#Cm(wAjotq`95hN5w1i`fu|t86#H5If4HoaBBpm%6NE*e%Hyo+ zPd*pM-E8wLxtNqNF2NXl$!~#%%N^g@B;A4(hWi3>U5H8YZKk+9+}UF?-dSKA-%>UK z;K`nbh-NdszJluVXYWdYHk7dx*Z(d)1#*3sH$S`NtX_TQLt6OF9l8Dg9M2Tw&r`am#1J~Mqd@XPrczp5(t%^C z|12twvZYptPh=FC-Y{pg5|DhDmmm7jte85LPd4G-;2tzopr0IPeFO#lD@ delta 426 zcmV;b0agBv1M~xs7-Iwj0001`EabER000McNliru;{ya1BM>ihmdpSE02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009_DL_t(|oaNH7YQr!P24EZ0rBj3H3urJ- zr-X}_PK9F9Jw6N`JqWtj)U$`m>6oF!Yl9&uZ{WUM&kiZ*q&`5YMt%HuC;L3_pB#PT zzQ4|vZtwwCxN$;?sQZNtbYGkXv?Rd%wIawI(5gx!J}|h#fBbE)DzpZ;#k>)%LPYkS zgrJODikR*F5u$R8m=6sIwox}mz=RcM_57pUzhq!E2>`JcvW(RuEKEqT-pOvRzy$h+ z=~F|s^u`1a0M^?`mhT5xa=6#g^X{$(;E?F1lNN*|`cukSGYANZW7G)_{<#*7#b9g# zg%&o1Q{*THJT~rBiz25l;J-aQ%K&`yrU)cGYjKGHZ}AhcDqY0A+q2m(JO78zH-Y?I U_n5kgH2?qr07*qoM6N<$g1XbRApigX diff --git a/graphics/berries/kee.png b/graphics/berries/kee.png index 1c83b65b1943a2fc373ad1b59dd70662352c3394..37e1dc087c015edc35962a71b10bab437738bf75 100644 GIT binary patch delta 406 zcmV;H0crlt1m6RY7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003_Nkl{YyEf~)HMl?B47vfBa6&G5ghQo&dAbo#O zQVkp6@+J|uOG-(J_-)09kn?UhedQG6lE35CSn<2@c0mUC!uWU*sD`Ix)O5HCPFEQZ zNfGO_Vf<0#`%*}NnKAIJm_Q{ar!^aIq8Tjkfq_W@*|F@PGd#i8bwoG_=flXl%moHR zE1XY(7O555g3c6g!bzW}fNiF&M0S5F(6PX7sMrgMH$7Gu1T#J$x**ebaRKgedO`&3N%_SV&8r4Z-&O(j>hN z{(B&0jdoM{0E_nqy~MOi!`X28>Ts6KKcDgjO|28Fq*!t&00000NkvXXu0jG}g2@ZU As{jB1 delta 516 zcmV+f0{i{n1I+}G7-Iwj0001`EabER000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00D7HL_t(|oYj&sZi6rshMfp@Ks`Wh#!QJv z77~#g;3Pc&Mm<1y^aOS<(3H-dGA1LJ>w9hsCdvWYCt0%o&)>5#X6%2~T!{PmqVMC# zO~s=RFz>HRN7AJ)^cNwd@5Oo4H2~-6%y<_4nv?EZ#N`?plt|984aBbya2RL@xcLC;z!g!Ad|nn z4o24}?9x&%e>AQGXzKQ4fD{5*HiDK8)ljd>H^SPT)_j9PW;ej1Xp~x~!{+QX08r&j z498_pUDr8a41sh2s->$!&>mIpgJAD^HDHb_{;cfXXL;ZShORi6-y@Uf*6yfY7_Rl@>{6nlxMuPggg7C|N{8G{Q)0)ax}C9V-A!TD(=<%vb9 z4DLQI0e%sbNXzXnee9fdrA2;Mzg<>_ulK?{@EZ_Xm_#a;)l#wwI1`U^VgL=>|oKGo5kMD z(3n*_iOu$dfdhAl($gTe~DWM4f DUd?p@ diff --git a/graphics/berries/occa.png b/graphics/berries/occa.png index 1ad829e5f1a65fc9cdc66a0c61f044cb2e0834d2..1d2af365f926b6a656173da503485ca0134dcf3a 100644 GIT binary patch delta 270 zcmdnQe3NN{1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)tvBjaSZY3e0%9MUyA|{ zYd}__#{d6^FS9Eg^I6?}^J1^W`K79pF0G6Gzjn>l_`b(KT=tkUDD)cWFLjyI-NCTK zm$Sl%@6g)Q%I9SQpDp^Vu`mCGDx;El!N-i|Kna2PKzAkEwyO7zwQCnQiqDV}muEfp z=h@R6AB-m)6!`YDQj(P?c8~ChUt72STt3_M15^2Xe-~wgusmkY4}H(9`}f2K)cVPr zHb}nKe!l+Z(V6p@<{PcOUH&fq?Nb5%iu}Sy9o|a&4=8_PdVg!{HF4F=oNHrL<^%&h O#o+1c=d#Wzp$PzMMuCO^ delta 359 zcmV-t0hs>T0OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007oWL_t(|ob8b@4#F@DMLpyKmKfX>2`-QU zbt_VkU}Nb?Ixt)6V8*BmzAX-AAPy5Vf2s7IzQ3XZ{PRmfN`rm2d(ST!=K;36(Q{Sd zO&T2sFNrq4~~j+Y74T&9%XI|_ZWL(YJ@CPR6-iuc_q3ZZZV4!L9;A}$u2db zELfpKuEfz$v;|f#48`7Tu0=rVw7gt1VJ+CW6%=VxZ4<8rn{Wa<&4t&O;3$YFs5b2c z7ygpfr6Pn2cLg{jy}A1vp>S$B1YWV{0O>m}<~#o9BTr}IQ=dSJ$(R5D002ovPDHLk FV1iVPhvxtQ diff --git a/graphics/berries/passho.png b/graphics/berries/passho.png index c5414754505f3307821ecdc3ecae7fd633ab60cd..156dc18d18253e28f0fd1c219dc9466ebd5f1f8b 100644 GIT binary patch delta 370 zcmV-&0ge8j1iS-~7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003iNklUL(7nLe??k0GcN{9P?F};xL740V z+y&@Qg&YO>W(wE}MS`scL%H?teQnW&7}0&2<$Imhn$Q%$l|un4G;g~LVl8!{*4W6I zdF+Uo0k|-XyP&A8Dg6kVwZDW^Z$e%+)VmmBFERL(YQzJ)$g6PcM#J_GtM6&-_{3Oo zV}5qe(=SV|_@3Q!o=2bS)u}n}-~Ty(wPZ^TuIUq1C;pL;{-O{)&3AqwpW+Y@$*+#X QOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BcuL_t(|obAy)Pr^VL2k?RkGRh*lUdhGL zP-7%)<|KXqS)53kU>g=(JV#yNxlPlgxqp~l_y!GM&bx!O$BUbTga7gQ<$1X_2>uh) z84C~9Sw{%LF8Axg=9b;i&YZj9gM$$7ThJLUhYnazZ#9U=f92O2F7UPs_mN=cGWFrX zl`x|Q=vwG~`YVK4K2Vv3)LU}oZWXC*>E|BQ*N;e$v9LhmLC0Ohp`$)9F6+%Yj|7hm zAWorYC8(HZjO%WwFiSxdAWn3b7g?ABYE0xoikPp8$N)Vh73g?^{CZVn%7A>K@|)C7 zC+3#L3S?j|XOjwGX5?xC?clhCbL4~ywiAq|4)rfIQNBI00000 LNkvXXu0mjf!2ry- diff --git a/graphics/berries/rindo.png b/graphics/berries/rindo.png index 91e895d04311e573be0436d3a2b2a91fc07b1b2d..74107789382335a7c622ac38ecf16b243454728b 100644 GIT binary patch delta 282 zcmdnN{Df(O1SbbG0|P_C9nP&2tL^IrN`m}?|D%DkikqeY)m-*;aSZY3d^=?)-w_2K zmxIR+{ICCbOQum|!orBm@KYiy|9mi9Z1Mfoc~zxfyo~G4TXwfNuzxjlvy}9>Z?8D# ztbU;QM>QUW*H1cUaw?tLcjVxa2>$0aYuh>f7jnGbc6y=={07plTv2hP9k(j%-ZIh7&EdeRaH$-Mp-zO%EdLf1ZDE^x15TCsHg&Pxny zRxO|4tDRIeHNE2QqTe=*(ebm+raskfjSjD|U$*@8BzE!Lv3EZ+U%y?zzVlFh=K8ug ac^^$y=LC_-kAePU@N{MKb6Mw<&;$Vdwt@%% delta 365 zcmV-z0h0dY0=NT^7-Iwj0001`EabER000McNliru;{ya16b!3%YPSFY02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007)cL_t(|oaK^14uUWcMW+V#P%l6SFJR#S zMn>J@g2W5x2~4fF9VG_@ZbK&p5)7|LizjvGJ6@8U z?rolD02Jx9tlS!Gh)R(LNXXP8vIoHGy&QogfC7R3`5iE|e*zD7n4Rum;EHT59!w(2 znW2CzGYU?o6c4&0+GTb>PCp1U!#TR@Gc&rnhCl zb9Y9k_yD3jnvWeTXm}aNj83&L)kTKKY-4m(L(+I_ZFbC^bpxTwlm=*P7ZhmNJ`uGtv_1**Yj4D z)Ykh%D}`9OPn6Q&P#gcNAJ;&yEsOen-{oBGzV+VP7_Id%=vB}4suloR9{{cmTs?mx zdVs)hh=RY;7gTS9CgEa!X;1+)HZev7{Lb{IDv;!e20uu5x(yYP3dSf8>1SD8)( z&_ww1FnKl%gSQ^*@bzsl0Ol{f8Na6M(<-xp$7EBlC-MZKI_99>Y! delta 503 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Cr4L_t(|oZXPIQo=wKMRx|l89LA(U{`yG zO=xJ4ywKQCY-ns4g%qZ-!@vg!+R!;Kq_8x^!Wj`H@dq-)N10G--@uQh?G+ zGw>qU+aXG!60gw<&6=U>;?kD_#RPOVw&P*s%k_nNl_||<+mB!1$l#t*4$Y~*3Y;y< zSJi7&flj#Mf59aD7|Wo_72u`<)}$9cNuXWjf>Q=yz4nN_W1BU!I0bOyo2j3oT-Rz$ z0cfmSGAL4YkOT}cL|+C4rfQTay3irz$G~Va4nxpW4G9o+t{R%&OZ%kM6)Y}*E;*2h tYY*o4Aolw?J}HV}&OJ#>?)XvbAI@fV3sjPSV*mgE2>?k&PDHLkV1m2+*dPD^ diff --git a/graphics/berries/rowap.png b/graphics/berries/rowap.png index bbeee3f3b4608f8daae62c16537a0c0da84bbb7b..decb5a2a99884fad677ac9b53c0717681f42260b 100644 GIT binary patch delta 397 zcmV;80doGe1lI$Q7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003-Nkl~fQqG{fpGR|ld`kPMvVt? zMY+udf?n8eiVUWj+K!|Pq?;_5b1ZqZMfnbpfvDDDhQ!o(?>$Sk7z=8U<894y^5LFg zAYg&VfCp>7NOF0T^5|W?8uG_@;Jx=tAHla12xj;f^n`aq?BBu13*M&Nl;Z`iadOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CJ^L_t(|oXya^PQx$|2XG?=DM$=tgeIFL$NY3b@ zKR+4Y^uy)&Y5=Y$12FJF-2Nv_0N^kUAbK7tN%~%d>sD?Ue-cZi!_D`q0ZC-kC^1B& zT>auq1U4-&x=Rc{S*rTFbD-lAwE~cqa8^T>uboU$gEWSVH4wh%Sxl(85wXmh*6S>b z3*@{kNZMrs@Zi!yTT0847RCd)*`~z6LMR&utmYPm3Pgz{BMKl&nTZgWgx| z$?U$0{LkH2<1W?I?Mf9$v+FXSbwNV{aG38#){*+{^~MKPG1yvmW0HZ>^Ge z#+rFhq-Ca#jlMwm&LiUMYEq9!uzqXZB{qX;>woR{T=V&!);dm|To%6L`0i^m_2xEp trZxYP0$Sedn>6#QHm;s@X#O9C{1{J8W&SDWQ-D5T@O1TaS?83{1OSjea>oDw delta 337 zcmV-X0j~bW0-OVo7-Iwj0001`EabER000McNliru;{ya1C<&OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L006*AL_t(|oaKIGLbyf?K+WTeBV()@ATUJSDnA~+IBAE+`OD$!@BM(>&55^%uD73 zX9O){n}0pIu1g@)#rf0Exs!fqe&YIiLU}jihs{5>^Kwkh+EiS>uZCN3Ry>E=@p6WY z32YgMSQdKGJAmV11}~Aj(O@VY2syU74KMu5vc4ow&9x&8ONW z-y>Q)G o!G}L09a{F6{y$XrdU+L7_jc|{CiRNez%XR+boFyt=akR{07e3uRR910 delta 432 zcmV;h0Z;y;1NsAy7-Iwj0001`EabER000McNliru;{ya1G85&a02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ACJL_t(|oZZkdZo@DP1yBkIP_$F!7|0wg zo&)IufvFpazCkkwUL0r2*0sn|C>JQ2Q-_R@t$AC2+rSXt98Y~X1zytX_jcKp+**$fu()J5Gu(M9ic@2JckwEGo0XB zjY(F3upXh-DRks4uNOv4oVB6{@JI|IK#1b3^)5c0JJa5rB@?g?@d3$(VYy#O20$Rr z|IlFyJYuj2LIU-4JYogeNQ*3dhfM~eHS^CMG61P3*u3Weu;#uTE=vF@<*5h&&8gh~ a!}SBNT4B=s&!1EP0000cE*d3E55u4-}tg`?{~dTz8gHIFT170u&~p_SA=QD z8yAKL*H&=qJSo#sbKN8p(IZi&Ze$b?3 zkf?MmR&3{#3uaFH@9OSkaJ>A^{L!oXtasKMA9_D=O|xict>>hPRi`)Q)$DS!x_tBF vjsuRfT(|K5Z#!qY>+7kzQdJ`Ie<#Q7uH~rK^jvlq=xGK|S3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008YtL_t(|ob8e^Qp7L}MLhvrW0sk1gM9%K z`2vf@4U*ooMbd9!?Fqo#Ah|7$Q(0?L3M_ZcC6ydBa~Yb*J(mnj1jdQa*hxc11oTaC47P@HOz` dfBA>?4b}8W5gnWA)Vu%y002ovPDHLkV1gDrnZp18 diff --git a/graphics/berries/yache.png b/graphics/berries/yache.png index 3f397827701679cf57db19244f171ec6afdcb507..43ebf0768281b97f3da8d52e8722bda3607e1266 100644 GIT binary patch delta 356 zcmV-q0h|7U1g-;+7zqdi0001B+zGXjdp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003UNkl{hYNT`G8 C{jW*@ delta 440 zcmV;p0Z0C>1A+vQ7-Iwj0001`EabER000McNliru;{ya18WC3TE8qYC02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AaRL_t(|oaN9#O2t472H>Ge*Op$O1{B}U zN8bTl^a2V&T>2J|x^*)ru#E1DX50xvC*I(BIg^4g)Ak)e%%<>vB$L#be^$p=hhS~$ z15h@X%dnY2wyTUeS~qo(=I5>Jwx%d+8J6TuYb#JTO`3ZSf3CYPicKBum6LmBsSc#& zBx-o@gID-~(<07u;^6lqK(bRN^WVQm!0Q-R0$&PGh&M6F!-4n215Ti2CLid{S&LZ3 zKZ6G%ViK@1BR^owzV1SbbG0|SHMLoVBi)%NuQB|(0{|Ixr%#Z6OyYBD`t978lF?hT0MJD|W( zZ1k@Fso_DTBWG)8m>&6*aqGyTwxkDV8y?Dq ze+h7&HWt|$EB4~x?5pB)xgMIe7#&=j$gw9e;~sNSK+c)X=cNNaU2n+U!Lai<_ltkt S!XZFg89ZJ6T-G@yGywpM=u>3? delta 261 zcmeyxc!6nxL^2CA0|Ubs!RIzWioL|s*OmP#3mdZ>w{&u2Gf+sp#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mgWiLOx74>Jrb!k=_1>rp24?QwLQh{Z5>7=yz*&*^xI{B{6fD zHlOckuxOb&bG1VV-%g>C~X*ci-LsIn&eC&t;uc GLK6VH31OcA diff --git a/graphics/items/icons/ability_capsule.png b/graphics/items/icons/ability_capsule.png index 4cb366137fb5c1c6e016792d615d891835589d6c..49a70ffa56c3c5e85712427e041cd301abdcc8c6 100755 GIT binary patch delta 179 zcmcc1^pA0Z1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&eux;TbtOguXwn(u%D z2aBs?cJ1B&+m1SPo7p-%FILxKeEyGHCud_glh8~i`DCFFCuUyN72=jYDU#Ar9Tc^@ z;~a-lkAT<8C-)b9)$|IyIB&=530mxXGuJpxw_dST+gScEU!uIKLeZZ4|9(#TU&we( XlBIU~B;%Jrn;AS^{an^LB{Ts5T*^>- delta 274 zcmeyzc$aB{L^2CA0|SFlq{3++#a`m+>&pI^m5EVTGj_YqVW5zBiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaf4o-U3d6?2jk78oUnurM-mM0CZUuCigNQTn+#mXH1iG90$N!oqO$z1kyt TmIYgY4q)(f^>bP0l+XkKmI+>R diff --git a/graphics/items/icons/ability_patch.png b/graphics/items/icons/ability_patch.png index acbef74623f7ea65a994931b036e3f79009be211..8f14ab7eeee8d2b392bb5b876846e2a49b44dd9f 100644 GIT binary patch delta 168 zcmdnN^qFyj1SbbG0|UeLm1j>)thTQgC<*cl{*MOEDsGwrRFmZC;uxYa@os;hP=f-8 z%WW5tDSQ6sI@e!%#q>4p$4&Fo2e$p?Sm6JB+GfVm4OS+`N8TKHm=?_Aeo1T6<}0Tc zRHXZ_(po2Wcx}s!N#dJ4=1ec#C~zWp;a9VUnamd-Kl$#y?=YuGt|-$7{Zgq7K&pI=Nsxnw^RUxXX`qmJiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y}r`$=ls!LIqbJ4^TG7)5S5QVoq|x0%?I10TGdwO_If|=jT`|YcM?gvsdEc#j0lt zE$aKj*S&hubFMj|@5_Df(A8<@W-w1nI&)tp?&d{H(M5ha>o*=hqZz;~dGwNxOk$g{ f0hg2SGFb+OmuDpUkG-Af404U9tDnm{r-UW|#a2*M diff --git a/graphics/items/icons/absorb_bulb.png b/graphics/items/icons/absorb_bulb.png index d958ab368400806acaa18f633728fb51d7cb556b..a63f7a8bcc4a57df0b9ecc18498672109bbb684c 100755 GIT binary patch delta 196 zcmaFM)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+CN7=W%XL_R zr=@!O{Gb2)_sm##W{V)3wc`^zeYYZ+{~R}dOqu4Oc}p;YUtx&}OO{EcPz9S)-|YXt z8oU<7ZxCx%-yp0bxFT!M#EBMR0&vUz1?vrf(T5@j| pTs@Q1qGEqt>kjFM$NmTAzq-w|_fW%*PM}j5JYD@<);T3K0RX{UTGapm delta 290 zcmeBYddoCHBAJDmfq_9NQsFd^VlVOZb!C6d%ET+r+Rggb6euKK;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbkr;B4q#hm1X1N;)K6D*wCJcRtzI5dwb zsPt`^v{5N%&t7czH7@kFf&%z^5Ul9r_8ym`d& zbcdGYZU@UGJv~P~Jw1Wco=m-UdU}}wmv3D%3A%g9Xu&qGC5(>BXDk;93N{u@H_FOT i_~{oQIDPv@MusmR#f5Afi#7or#Ng@b=d#Wzp$PyZw_j%f diff --git a/graphics/items/icons/air_balloon.png b/graphics/items/icons/air_balloon.png index 6ed3a9ad214d26512c6cdac550934aa244e69a89..dbcff6d13bad5c6b20af3c7947465d1bd0e2cdc3 100755 GIT binary patch delta 173 zcmcc4^n-DN1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H^x;TbtOl<9Q&pI^m5Eo*JnCfc7od=MiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag3o-U3d6?2jk9GIJ$m^ijgnxxosJmb-l zB{^J=S6DDET`(s>Rl$Joz%j$1prE$mp57_Ff-(XPMG=lUGcK+<>ENezhIOGsC&P~F zLuUkX+7wh(__8%N$unKBSXjUqX3#QQu3@E^Tw;o*5&O{^1qKFI0bzE5@Yat&s~J39 L{an^LB{Ts592iyp diff --git a/graphics/items/icons/armor_fossil.png b/graphics/items/icons/armor_fossil.png index a24d2ec4da2ea92769d904e4094a51fdb2bb7184..7647f9db555bf089b299e48011b468231053156b 100755 GIT binary patch delta 287 zcmX@f{E}&c1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&H{ba4#PnAke$b|14L zhqHH+;gkRN6~2?Uy^7mXCy`lW#CFI=?*Hj+bsvwHFx;PcbHZCgw!cTM5`7wqnwKoU zee!|M`E5%%-286u6FzZcTSLGnrWd@W41ZZGlJvOv_cLtXWVWh)f=xko!wWxY&5%>K zVk3LsC@8Xau87{_Sp7nAQ-6#@@3zy6j(hxIZRAWXwU%9?a!=o&ERZ)~zopr0H<+@p8x;= delta 383 zcmV-_0f7GL0?7lA7-Iwj0000ISs=>*000McNliru;{^f@9w$eBosa+k02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCv2MaZ z3eG7$G!tqzaJiFodV%9HFXeJ^7Pm$-f=v zUvbWVdiJa|cOSi{f|=~oka4dU34>W~XWpVL1R|KN>#*)}e=JLlmz(&GyF#d2LigCfol3aT^vI+Ca%5cE!1Mb z!4e=XaqxG1#e(Dffy+;|zL}KHuCwgrTc(0~{VaykKTJw#vsi1=dKNrevy=OdYmB7V zO~#4o`U|!=T-kYRicEuQ(*lujo(!uDsp%A-|XZHTQ`*EV=DokNyGO#^CAd=d#Wz Gp$Pznv0-Qc delta 316 zcmZ3$)XqFXBAJDmfq_9NQsFd^VlVOZb!C6d%ET)tB`-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|APZ!6KiaEXKt@#ca@GxBX!e+{y+B@-3 zm(0oHQ13H3Z+K)HI3~{3JIU#l?>)t3DKqoDKTrIVmj2_**k9Rf+t9?N>r#-Zz2^JB zva>g=lG&@~6(^?Tx9-qY*gkz>g7}Gr9P-)`e$kexCGRJi>Q!Ve-?+uJa9)pbf85lC z9d80Z?K-QNbgPk7kxgm&>D7sRjqkqRzM!gWzEo;WUhGr*$INBZRD3OFvho0(%HZkh K=d#Wzp$Py@@NtI# diff --git a/graphics/items/icons/big_malasada.png b/graphics/items/icons/big_malasada.png index d24cd9e00d3121ae551fc82c594a5391e3d29981..a651027774bb3307dc4f6bedef00129b9becc707 100755 GIT binary patch delta 223 zcmeBVUd1#)f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfof)Yx;TbtOguW_BHv*J z4p;33JS*=0|NmAmYnR^L&t;x97VZj(x9etXDmr}RjEj+LrFjFHyDV)SCg#Pp z2XNOM4RJ%i3_41t>3;k_Pc#0BkM)hUWe$Q R=|ER9c)I$ztaD0e0syLKWzzrv delta 318 zcmZ3*)X6+SBAJDmfq_9NQsFd^VlVOZb!C6d%ET+jJLhPK8&F8R#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mq*GFdponv&D>re@6SF< zcizsb=QDTL$FJ96iHw@Gv+C=*SZ!9;1Lrg^-q~BURAJI$R>>8N3=7QlLq2StVFh$7 NgQu&X%Q~loCIJ2Fbs7Kw diff --git a/graphics/items/icons/big_root.png b/graphics/items/icons/big_root.png index e857cc5f301e74dc95dbcdeb839ac9e802f63ab0..ef20e8ea541239af49916673741a17bf2875258d 100644 GIT binary patch delta 259 zcmbQwe2!^?1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Hba4#PnAjWW$#>X+ zLwfVy|0lQ3+_pfg-A~B%0qdMOpN}`n$^FheTv6>}AtowzPI%%THp2-Ln!D~jlsDg? zQND4l(PwQ#%iW=;J$^8}h$>UrUD-EzDzoU8#QW2Qk1pdhd2%ZMbfFDTYmuT0 zC%t^-r_>ZV&9teDEvLaiQ^euGlRUuxlKtgH}Mc*$EJbs%*000McNliru;{qHFA}pb~!CL?T02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCoM?cKq`A;?^d7yrX)m5ez?v}UX5f|%zyaSiS(;l9?k`g# z;UY(}GocdN0c^~t5SsCUgeoR~fJLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WNo1X< zXkX8m_b7?W~xX?V{ZBI4Cdf-7QOICDli9e2-L`EZd$vRb42!wlN^}>CuG?7bY?#^i}WF zoFL5gY{m|W_CuB@k9iBu*|H^sB|SPSOydlLIon1P0e!Bd{t_vPoR%HzhZ=W9ODQr= kVftit$mU4H6U!u^V~e!n7N5!A19TIEr>mdKI;Vst0A#*mkN^Mx diff --git a/graphics/items/icons/black_sludge.png b/graphics/items/icons/black_sludge.png index 2e1fac755f6e1ebd387828cdb667b0172769013b..9987ef73b6ba849f882e592e71330535f7ad732d 100644 GIT binary patch delta 204 zcmaFEG@WUJ1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$&7x;TbtOx!!+Am3pF z9;fUL|Nl>K&z!t8H*fMWRUv)GpB?%H8l!`E(BmQ!@t9eX-S=5uO`q*44$rjF6*2UngAC#Ub_GQ delta 289 zcmbQv^oD7IL^2CA0|SFlq{3++#a`m+>&pI^NrqQR-7H(;GEhjo#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m$U< ks&wA?Q?opC-rweXJS<|3Z&-pC0o}vk>FVdQ&MBb@001&;9{>OV diff --git a/graphics/items/icons/blue_apricorn.png b/graphics/items/icons/blue_apricorn.png index 35d0ed23b24bd46ac022e2fa3b8e65abc9c2ad5b..9e1b19fb30b2ca86eb7382dc3d80002fa7b42610 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0W-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tc9r;B4q#hl~>1u+9I11>Hu2TP|eH?4)8 z0&)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!ZT>6Htw16164!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4z)thTQgC<*clX84Z^4g_>N1J!Kyba4#Pn7DM}ZJ}lZ z4i{Axr{d55|8Mg)@!L}Sa?0^ywsO_m-_Bo{p>I*pBP7@5;oQ{0wDps~m9_`78SPms zyrwS*muQ>WSgdzBV6A{!64RZi_IR~mx<#sxn-b%bPtxDn%0zW@qNDEPF?POkM69Wm|wFvXZeOr sMKd0Con8N>hF9jXu>7mnoBtW*n~1Sz_CDVn2y{P#r>mdKI;Vst0Fp;@NB{r; delta 348 zcmX@Yw48Z@L^2CA0|SFlq{3++#a`m+>&pI^m5GmC$MaQiBv44a#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8my#J3-DHCetft5yLb~%URV%!%7neu-{ns*Y~0e9aBz3|`~6Ik zx>o{kNp1Xg@9$NGK9}kZ?ze93PSE9XTI#Spv+K(8=(y85}Sb4q9e0AwwKHUIzs diff --git a/graphics/items/icons/burn_drive.png b/graphics/items/icons/burn_drive.png index c83fbd335896fb69b0d5bec7e57d911034dbdc17..9486eff484acf45f61232638f9f31f690154d7b9 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPqN=OeXm4^T+F#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0EWt6_W%F@ diff --git a/graphics/items/icons/cell_battery.png b/graphics/items/icons/cell_battery.png index 6183bdb085b331e37b8df0e501c0a7f616f4d2fe..23fde6a299b8d0f1da5b80d2b0c664d65aaaf17a 100755 GIT binary patch delta 131 zcmZ3;be?g71SbbG0|UeLm1j>)thUb=C<*clX84Z^4g_>N1J&4hx;TbtOuTzhQH()> z!^JV7^|$=Zt1Bj`{8awDK;hGbO(l5^s*4QTqD7i(8QFVdQ&MBb@0Q<)~sQ>@~ delta 213 zcmX@lxR7arL^2CA0|SFlq{3++#a`m+>&pI^m5EozO#a9H2S6e564!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ27JlDE6d|E27ojsj&FOM?7@862M7NCR>#JY5_^D&{079N=eR70huJLlmz(&GyF#d2LigCfojSOTB4YTH{*ETksudFsPUl7xl hth@F7q4>Vbyh6*F)-tIqx(9RvgQu&X%Q~loCIEr{Qy>5U delta 284 zcmeBRdd@UKBAJDmfq_9NQsFd^VlVOZb!C6d%ET+9I@@iY9Z*QT#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m}6~ad%3? zs;>-=6^*y-xkEnvQ{E!_g(ZE9I^utk&msF)BGG5(i`B>1hw_8hop5FUYr;3g16DBsSS#+|$(p|;1y({3) dr&IY~nM!YqZGYz9@CfJ>22WQ%mvv4FO#lK5Yb^i( diff --git a/graphics/items/icons/chilan_berry.png b/graphics/items/icons/chilan_berry.png index d1516f7323dc1f2d41d6b928dfeec32d3e960690..c78465aa2183784fb25dae9019d59d3ec89c2ac7 100755 GIT binary patch delta 196 zcmey#)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#?rDAu6B z!4fOJ>Gyn#3qe<|hrgX~+_XaTufT)W=RKA8_ZEvWxNgysIW7>eQgMzrOP$rW1yh8$ z=1k5yc;xENYX*GX2UowE<9x&Ou!GX~mD~MtpT#996-Dbf&1*7n&AG$kT;H}brbOm_ o;#{exHN_iJYbShjFTd0tQ}CEYy&=Yv9q1GWPgg&ebxsLQ0B1*A3jhEB delta 302 zcmeBY`pGmwBAJDmfq_9NQsFd^VlVOZb!C6d%ET)pa%#pr7NC%LiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae-JY5_^D(19KFyuRIz~Oq9w`o$?%xdQD zBBtb(*-s)~ao*Y)tT&ZsGI)>mB$W?)k93{dR%PBmNKb3=f=U2%BgUbDwQ` zyGqyX<1v@#?a-UOd)}d~V)J>bSFP>RT-^91L(rjgYh(AJH3~}4W>4lkBpWr~dPRWE x;b{+EY{+_Ftv1c4CdNQ0aK9Qu*4#fQ#hoWBC0AT2um?Jh!PC{xWt~$(695I_ad7|u diff --git a/graphics/items/icons/chill_drive.png b/graphics/items/icons/chill_drive.png index a2c7e98a6893275c11b47a829d37be8a4e0668c6..d3d5e019c2469a4d3fac90b9d18e55ff276e5329 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPozve4S(EKo?i#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0BxdQ+W-In diff --git a/graphics/items/icons/choice_scarf.png b/graphics/items/icons/choice_scarf.png index 51157fcc22f097f39c733412520d48ece1571f84..99e126453ec9f13f3ff2097901cfb07913860046 100644 GIT binary patch delta 272 zcmdnbe4A;41SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J#`Jba4#PnAkhXTj+=a zhfDJxm*W4Q{gPD!jW+sa#pQe(Q#;-#BB=;d%8NN zPhI_>I61Up+sWD+v#VLevnF?keRwC76|=10W9_N36%f`d^jcy3mbj34m4P0UwSTsL+iH%xQ{riovs|x)@7}r%h_q|%7 z{yVS1V8fc}XW2Mx19n*jcHc>Spu3PYZ>nBIvG*~P9Y>|_OD7%w9{*vpo$ht^()_P8 R?f|{T;OXk;vd$@?2>_64hO__x delta 373 zcmV-*0gC?H0>1;07-Iwj0000ISs=>*000McNliru;{qHFA|o*d+{yp|02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC)thTQgC<*clX84Z^4g_>N1J$&6x;TbtOx!!cQH)uU z!&#MQ!M*&pI^NrqQRE;Db!ZJ>~NiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae{o-U3d6?2jk6vR0cH}@v!sIe&~t4g@L zo`{&pc`Pv0FR7t$#vyOf1y-UGGnAIG8)`5tZRrw~kXSv<+K_dn28XCNQ|hW|?5n3u z*Amq>Vz8Y0_UY5u%if}r4Ki(CKB;^TeH)N%F?F)&mEF^JLlmz(&GyF#d2LigCfol3ZT^vI+CN7=mD0D=D zgXM5T)Bpbk2Yf}mzi-%j=S^9|k=MVLcf9C1XrXaj=}p#dy`WQR9CiDz3HW47d#p6A z(iQwvY{E59{KG#xi&fn-6~$ESj<-BG;@&dvbNlgDMFyXFEFliQhCc-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|wPZ!6KiaE9Z8wC#;@bs7+Sg4@e_kP93 zEsalkZJgOWrfxB5oTm11TVRg-4#v>`zpi^{&HB%}>d@N1o2JdN6wKWv zFw)*Y?7n1e!3^aC0-GnOFiNH!ku!eD&loJ{;T_CUbP0 Hl+XkKA%kz# diff --git a/graphics/items/icons/coba_berry.png b/graphics/items/icons/coba_berry.png index 5ac21683e07f5d7342f009cfc8aa83e9c029e1f7..05f117f4bfa48bf6783c1256a2a57a2ff3dbe983 100755 GIT binary patch delta 196 zcmeyw)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+CT^W*D0V=B z!`YST-v48+E9?TN^PT+>+{C-|j|$h^Ek)r=d#qbKD^0D~TwE+Aza#~Q>KuE}7AkhQ zsA>DMNj>|n?3Df-YR7Q8Q13Rw4e>di-%d?`uJS+ic5|-64t0ZThY#Fqmt;;}pIkSu pYw3e~<$5(S56c#wzH9fIQO<^W!q!!vLV-?U@O1TaS?83{1OP~WT`>Rv delta 295 zcmeBY`ouIrBAJDmfq_9NQsFd^VlVOZb!C6d%EYT=cpx&+4k#pE;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tb=r;B4q#hj`Arv(oy@USjqHV`#fcc9LP ztHXtTn)C?=s|~mLpFIvP>hRmGym#V~EA~s*Zf$q&lb5%yc z!z(FTz26mmWsd)~d6JnmC)sYYj;YX$qG`Dta+aPaw%afkN>?fvtlw^M`O>%GhlMkD pw>=0ISNl=-|7(|N{JcMr@)thTQgC<*clX84Z^4g_>N1Jz9Pba4#Pm^gQ$qfn~> zhcj=>@A#kUA6Yy(DWk+tS0f zD>J{>NKLu?MW1rZyZ`SKQ)*!IpAnk>^g^2H<=XUv-WvxU7`1+Gtt1jk^A=R z8-H%eD)N5&6Z&9_{j2x8E#G8JoZI$w+t&T}D?Wc#v6lE=-86l2U9Y^2EYn8j3o_zB PCo*`t`njxgN@xNA7s6?+ delta 301 zcmZ3^^n+=FL^2CA0|SFlq{3++#a`m+>&pI^m5EnL-K6(PK2S)!#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mU$IbewQj=fI{{F3={m#QXix(6Z9DWgZmv!>=v*rQIN^=z2GFKYhIHHlteIiZd zq}UHfp`^kGe=koF*{uKbLh*2~7Yu5^V1P diff --git a/graphics/items/icons/cover_fossil.png b/graphics/items/icons/cover_fossil.png index bc8bbe69b5ee1c2d6db9c3e2fc959044e527a49e..1202bb4556982ea61cfc26c09ec2429455055754 100755 GIT binary patch delta 242 zcmZ3)yq9T$1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hYba4#Pn7DKzH{THj z4wr78rtkYd@NF@jRW{jIY;w}`kHP(q^@S&v@7($=Ws0cR;l3lg4#}4Aawm!&vwpl$ zkn{DG#A!#j+;@;zA(1D^pKF_vX<%c$ShHAvLMz9W7g_5#B@V}RMsO79@oFoW^1OO% zw_~T{4()!2ttEWs(N7jlQ(w}}s`4n=^Oy4L`41Wc%KB m^P`3H&px^>z3-I$E%vQJtlAUf?#lrk&fw|l=d#Wzp$PzWUU9Mj delta 343 zcmdnXw1|0vL^2CA0|SFlq{3++#a`m+>&pI^m5EnL^6Q(QM}R`&C9V-A!TD(=<%vb9 z4DLQI0ed_&uf(2v|N zj9+9#t?6+&u#Szbe3nTMkMA!=iTZFZ4+)<=mu)M*@7?p-qW;NF?)|r`HuGyVb_OtN z>3vTw61^a$_pnmpg;rO7i;d12$vvC7Tl{B#&OE(DO=m^lI^U@$7b>u@t#C-~DPC25 zL%^+ZWnaVrtw}MaASi9Nbkcr(WRg4M(ru4>8GcT$#5HxQffTw1p!Z@K$MGo}A# nPWudB#_-K7i!6Ou|B`u)jMno%tKND6eZk=A>gTe~DWM4fIvaz1 diff --git a/graphics/items/icons/custap_berry.png b/graphics/items/icons/custap_berry.png index 3fa594667d46ec342b5b3c790038481f9e289182..56f1492c3cf70c2d6f73d0f5ca814058bc1ab836 100755 GIT binary patch delta 229 zcmbQnyn$(g1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s;ba4#Pn7DM}L%zcb z94)7xT=?{le~}wy$3G%G$pR>^!%7Yi_z)cJYa`STy5`D4q#D z9WNOgN|mPbU%3`_Rc=usYs0m3nbGNJ) zW#BFdKT~^k1&f)T(ybk9*H(0Fd~mzCY(m_Nzy#?T_Zn`m_x(`jtF-yov%V*%m;PI) ZJ}Z*000McNliru;{^f@A`byLOqBot02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCv5HykE%AfDay2seR!$oo4 z%l3MpY;Rq$M}+7^mB25km0;C9q6XBmFL(r>2K$jPvKZrNU6=V4Mky6w-}p>u(9Qvm zH9-!u)u7h=8A#O7=gFoef}$~DLeR=nj?spaywBShXB@d5o(vf`=JlJ1b??UO@P70R dea_Cm&lfqeEgWxo4iNwV002ovPDHLkV1g@Vfw}+y diff --git a/graphics/items/icons/damp_rock.png b/graphics/items/icons/damp_rock.png index fe908739e5bda6005cd8e8c4399d9739359e2aa6..97c75b08fda4ccbcd38956a4add92cab3be8d073 100644 GIT binary patch delta 254 zcmZ3>e3EH`1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Cba4#PnAke;wh*%- zhqE?I%m4om*{)wL-DP}s@?pgjPe1=$UG~ykYr0=ZpsbK<^|7zhW<*wZuHJF;lSyo= z%bo2@HNX6td1m|4##dkS-^*^)w*%y1AC>s_&@CFId<=D<>|*w&%fS(>>Yown)RY{xb7XGCm1|k{an^LB{Ts56$yM^ delta 354 zcmV-o0iFKI0<8m(7-Iwj0000ISs=>*000McNliru;{qHFA{qAz1$Y1e02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCG{iF44r@)#=^Hd5IYATg?31QFIr3;-!?*dfqt*rSyNM0b}eC zVKD#~zC!>ucy)J)*r6>kML6DKUF9G+vsGP{T0}B~SdB}IbVX5FC{WYVzAVBdQ)4zP z{p{mo52cE&-@ytsHQzNyu>95yAAlJlj2_lEfJw29G0XM@QQM{@G17F6(%6P1C6)EO z>C_?hsJzM@I0&U;$Hfg5YWL}VLUK%cEaJSSA0+cKS=}nPmjD0&07*qoM6N<$f&x~F Ag8%>k diff --git a/graphics/items/icons/dark_gem.png b/graphics/items/icons/dark_gem.png index 947f04167490568a9a072b7bf8aa17e1d602a135..8999ca25acccf81ef6e86cf9334c51d3023326e3 100644 GIT binary patch delta 176 zcmaFJ^qX;l1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Cx;TbtOguZmo9}=E zhfC^@JO588NvxihJNeuvTjPece-*YA6*edzNbFEg7h5*hdd5fbEyXX^2-Wd)7GITl z=r%1Oke9jT=B`UB)0212wEQ?D=C_snp@R4oiyxo89AdLhzw(Vt*r$(&P5gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!p{#RF15il3#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFGCe48Emf#qcqaulV97TdYO*=Ij979<37>k&lm{yz?ym{9{NQH@^?X^Iq USdaN*pd%POUHx3vIVCg!0GmHlJ^%m! diff --git a/graphics/items/icons/dark_memory.png b/graphics/items/icons/dark_memory.png index 258bd309bf404e482f3adcdb1677fe43265cc681..3cb69c7a5f67d70f4d6ce1e016f279f2b67d8259 100755 GIT binary patch delta 247 zcmZ3?e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#Pn7DM}X}-e> zJS?x-4b>F?{@?#r%Ecj5FZBDAGaff|)?c?@IF0?xBCVR>13H<`Q^J|gTywc}mE}EC z%p0L8#e9>4f&{-C@w~O}SviYI-hFBJ;RrRY#(XB3c+oFHhKkAQo$^d;j=wYsPg;6x z;^t|ZXG|_WuydO+Gvkd2_rnF>MHXcmKihU`#)Xz|Mn{^bR~BZ!UC0~H$MtYctVg7! rPovZ7i&pI^m5GmC`DUo!380X8iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag*JY5_^D&{079N?E=Wo3PkqbQv2$|w0m-b0j866+bv?}y{>02gL{(NS-UQ@{1dw1_? zn11Hz306E%@myzy^2LjZCk|9Rd$+SQp?RuImSoDgIhDHw&S;j4+7v&#<2&Kvqo-=B z?~2dOo6Y}BWcM=dvzE-)4k^Sjm2^LyIX%Hz();oyCmY385)$e=m$q80|HDzZ<%){< o@|oO;_a@HbOkZ3j#m>MmZMtpS+s*YQKyNU3y85}Sb4q9e0B{g~k^lez diff --git a/graphics/items/icons/dawn_stone.png b/graphics/items/icons/dawn_stone.png index 0465d18bad46738f1dd93e637b31e98e411e6bf0..a0db015327fd01fadfefeef7d0106676ae799439 100755 GIT binary patch delta 201 zcmey)G=*t`1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JyKpx;TbtOx!y0B43LE z2TLpK&;Ryz)3TUuO|LGvY*MJ^u;KVe*Cm?{MpbGhMW|hU;_}UCQC`)&)EcfkOkxx6 zaXb)EsqdVc;bihgOHp2FPRv!~Yb{U9Lsj01UTrvKdn`vJex~Um&2`QD&pI^m5Eo;WVYP5BA}3XiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag7o-U3d6?3MZcjP;yAix^1gYgBYOjbvj@$PAuv~%AL#RnfXH@x|RM6Koj*BQ6HMk+nP7H_zg@;m26c6-$y*PIW#>Ej{JLlmz(&GyF#d2LigCfof)Xx;TbtOl+OV$ahqM z!`W5iyZtAwysp{y^Ic48O%`qWrmylyrTpqWdk>Q@F7_qPs+V*fRX#f%S$42$W6Qxy z2kvgrNm87U_AOQL3%g`#J+qo#Nc(S=hUwdmG_p(ylovYSeA*|sI`LF9hux9jeEmaw zkK#`1ZJ!_Wc}BvNnX8i27p=KkawGOjM96#P{k;No1X< zXkX8m*>^ylKa1Xi|Mn`Nfp2g~Xg=3w8A~Ir!{P#7?xVEZizwo7n!3>{N{eo6EKAAJ=O8uD`lb5`S;#Qhe zb|dP#`#tN+ORV~vOg9{P6d0dho!$P)Wd6^ME(x#G&ITBN-rFAZWaCo%(k9t+6I!;+ Q0=k#M)78&qol`;+0M{pdv;Y7A diff --git a/graphics/items/icons/douse_drive.png b/graphics/items/icons/douse_drive.png index eee5ae35f1efa90dfee9e4e1dc3eec5082c23847..f59616159aed0435f89fdba79504a4ba226ceaa5 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPqp7ZZ7QJ5Wfx#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0K3*;F#rGn diff --git a/graphics/items/icons/draco_plate.png b/graphics/items/icons/draco_plate.png index 9b08c31c8df7bbd046af83623c1f118db34a6118..21339c048226491da1259b88645a08855672c49b 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR6pZVSfO`wo?iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!Ci2+@cA$`WiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0O&AQCIA2c diff --git a/graphics/items/icons/dragon_memory.png b/graphics/items/icons/dragon_memory.png index d073dace311d1b6d64b92c6985d07dc34d537c6a..3888b3f3af5f63efb9886471b44175cc25857d91 100755 GIT binary patch delta 246 zcmZ3&e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DM}L7`>^ z9+$fgCM*a4|G%vlawSTC?z_&)`~>5~S^qezLPfKUw>JI=uxpK&VS3E&Qbxw2kNbG^r*oUk-Jbh{eg1>rypwC5n%q44 p?85ev|GavSrT1Tby#3!K@x7nePfcU`zYOSj22WQ%mvv4FO#nVHbh7{e delta 345 zcmX@ew1jzrL^2CA0|SFlq{3++#a`m+>&pI^m5GmCCf_*uD^N(h#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m}$F_ezAaio2v8bfP`+d9j3#1fOW_v0(zqz~nzXMyxjutcSdwZ+@i=N21 z7|`2sZR_`U>)DE%W(CJyyT_WHC~%cwm+R|y`Wxoixmjv>CtX5^4)FbB%`}` p#o3IjZZpc4gde=QV%{-E2J21EL7YB^e1ZO8@O1TaS?83{1OS8Rf)oG% diff --git a/graphics/items/icons/dread_plate.png b/graphics/items/icons/dread_plate.png index f93493f97bbbe7afe74486d13afc8e0344776473..8679df524d240940861934bff3e5fac51c37170e 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR6t9XmcGN6!niEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1J$&7x;TbtOx%0^pwM9j z4%dquQ34uAXq&!n9&m&pI^m5EnT-h2_i5l~3H#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mpRhM~5X;Aw-rnA;mzu7`N;S%yJbCPxn^%;oUzfr;p9NOQ$=a$M>EF|m zlRp=6q+fbxtR6n!ax=%7oh8fm)O??3tnDD)thTQgC<*clX84Z^4g_>N1J%@fx;TbtOx!xrQS7h+ z2dn86{+<6@yB#hytnb$QHQjg-Q}Q2W<4unbJNru3Rd!^A`JI&HH|DqAv4g{SF_%So z@pKDw#a-MCMe|m9-|2U0EHsW);SbFJ#UY}&NxbF4>zB9YaT@mSw__Iy-zpYVuwv60G>yv6?@8wrAyF6vtRg%hW26PL9r>mdKI;Vst0MrRpbN~PV delta 301 zcmbQh^n+=FL^2CA0|SFlq{3++#a`m+>&pI^m5EnT*iOV*5-22I;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+TcDr;B4q#hl~>1x5}oF0KPNy}Z2I0^}A? z>hA8|sMw;s9SHHW!_VxpUgv`QWRTp35;>4`eoPIVJgaX=0l| z=u6}DLzbCS75p|Z2&qdR@?1a1a)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR6WeQK`LZFa%iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cNJLlmz(&GyF#d2LigCfodu}T^vI+CT^YR&38b7 zgOzpbqVM(vj$4l2U!{3^rbT7vxxYmW>^(aS8RQIg+6?8}PHL=6Tj9u~@#B$nmICMd z$sH-#4wEttU2E`QOEuHHovY)KH8cN)np1Xdw8^4tvow!#UDD2NQeU{WYkuTkUcMip i-0!lQLuKt=eZK4ahQ-KKGvYVU6%3xPelF{r5}E)^3RP$T delta 295 zcmeBT`ouIrBAJDmfq_9NQsFd^VlVOZb!C6d%EYV4v8AxNo1X< zXkX8mOJSEv$draTO6nV?xJ>R!i~N<+(I_OV zdKkG*rTAS%OQQ{b<;-2 lJ?mOI_zk&~D*Fr=7;^q7U0<0wLm%iW22WQ%mvv4FO#ryqU@rgw diff --git a/graphics/items/icons/electirizer.png b/graphics/items/icons/electirizer.png index 73f6f8f26ed76c28f4a505f5109b779f1b216af4..f0351e64d61c52dc1df31aeac65d21507b88b63c 100755 GIT binary patch delta 196 zcmey&)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+CN91Bkn4Z~ zhug)-tk-|zD}HZr5^p~Er;>l-mBK#~i>AkLy=}{xocYv8(|yq?9YL2Ek8G8R*VsbN zC_LeDo5wt7?|iqnjIzud&oFLz+_UK^PnYr?i>60?45~S%dLIpJ^!MLSdH1xkF*r7Q pskqsuwcG3&KhB#QSNHvPj9DPd3sd&1SAkAp@O1TaS?83{1OW08T!R1r delta 296 zcmeBY`ph&zBAJDmfq_9NQsFd^VlVOZb!C6d%EYT+(Y?7_0w^S2;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbwr;B4q#hm1X1NCBZJ^OM*azWvm`pH;E$C(v08p00i_>zopr0J}J2TmS$7 diff --git a/graphics/items/icons/electric_gem.png b/graphics/items/icons/electric_gem.png index 88e604f182f83899b0039f7a423433e74b0fe9be..e17e3f4d139a34708c5b6f56c960ffa8d59fd030 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!{G17AKTt@##5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFHPc;L&TY_Uwofb*d<0#VfZ`!HR;26TH$5_Pd#I)kH;LW=pLMluQ3ttIc UtkCMp2Reem)78&qol`;+0Bl@Ur2qf` diff --git a/graphics/items/icons/electric_memory.png b/graphics/items/icons/electric_memory.png index ce9a8f362472756d183dc3b583780ae0966271b4..0ab5da3770d42219d4038eea35ee7be3e027254d 100755 GIT binary patch delta 252 zcmZ3=e4J^51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kvba4#Pn7DM}ZLt;w z4p(OffzAK^=d|1h=YvF~2H*ZMyh_H1Q8tJ+}L4)g+pr>mdKI;Vst03EV*bN~PV delta 346 zcmV-g0j2)O0;L0x7-Iwj0000ISs=>*000McNliru;{^f^2Nf3Y+fe`j02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCo+QjC){Ox;q-L%|%$nM%zr?xCwTf;ciKCz%(Q zuDbgWr0UF>$rGhl-Gy;11sLDn19K#2&J1K=y!-C{LXg2qY#N0OvUl(P0~sLEVO%13 z_wM~yAftti!_AA=-n+jV%rPxV?pS*ltc5|w9O#y)yT8D8GMc2NxmQ6{F)%I$%9QTf s2ywLZim-@P8)4p&UIk~PdKw1+0POuj&NrELoB#j-07*qoM6N<$f~Dex{{R30 diff --git a/graphics/items/icons/eviolite.png b/graphics/items/icons/eviolite.png index c08cc595068054e99a5c95b9de191a2550df20cb..b8bc613f8f507cd73443e043adfe9af177c1eff5 100644 GIT binary patch delta 153 zcmdnX^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOg!7~$aTPg zgJp5v*Z=nKW;rdq=$wCY!sVU~DLsb;C*E6~75?I^$lU!`vM1V@uXoi@|2CJg*2T_T vM^Wxy+x9i{RNXBC?U~fvzZ!3?VmFs`W#Sg_wp9Td&*16m$Lg}qDWM4fRun@` delta 242 zcmaFDxR+^yL^2CA0|SFlq{3++#a`m+>&pI^Nk*KHW2;q06HrLJ#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m})Ul2=c4&a`RMcubp)>g-)(bC%_proO)Z;bVyfe){_UZITBjg~d%{+I~e< kmo-mwLi>?rEDQ{Oyn@Y1`T6=l^BFu{{ajeqIVCg!0CjgrwEzGB diff --git a/graphics/items/icons/expert_belt.png b/graphics/items/icons/expert_belt.png index bc00454907e3e76c93b63311c592c4440205824e..62d4b8bc2605d8dd6e0ea5ab9ddd261b0f1eb4c3 100644 GIT binary patch delta 217 zcmey*w1jDb1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz9Sba4#Pm^e2uQ0%Y) z2iJqY=WW)yUEa4={GOYZMUR!xFM@*AF=o3u0St8MfB4;h<|R5m}Y{P|9-)@z4sn7i*hjD6}s@M5$HY! MPgg&ebxsLQ03}XrLjV8( delta 308 zcmZ3&^q*;hL^2CA0|SFlq{3++#a`m+>&pI^NrqR^^0{YOF;Gan#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mE{Yye;9yo4IL$D%xG_w8 z!><26>=kccU;ik0kfn*~Pv?(wM-5W;FLq|!{_6Nm(crx0hNY`HHG{@cVrbKksK8>Dj+vXO!()z8!!OpT7`&9JXs^#CtF+K>+ zbw42F8(nJ_C(G2oFDIhI`~S=&p_AtyPkixLPgTe~DWM4f Dn>=<2 diff --git a/graphics/items/icons/fairy_gem.png b/graphics/items/icons/fairy_gem.png index 871f74426d8ea309c3738acf32c8ecdc47c5760e..5fe8f6ed99e3d8510df4847063e953ab6615a5ce 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!_+;eSX+R;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4z)thTQgC<*clX84Z^4g_>N1J!Kxba4#Pn7DM}X}%T% z4p&yLFK_?TUEBD>r+yq;UR8T7{u#sd8SE#F*6cY1^Z|pXtDnm{r-UW|t_XOp delta 347 zcmX@cw2XOzL^2CA0|SFlq{3++#a`m+>&pI^m5Gm?Z%&ucUZ9Y8iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag5JzX3_D&{079N?E=Wo3PkqbPjcg;BzK z=aHkff`=w%Fco>7JrL9*D|=G)-NIuDeMiplZT)oVL8!E&%*@HgL5G{d@78hzT`f+# z&CDrx6TQWEz3e)rEwAb0s<%?Xa*-rcQNU~ZXm=@9Gtdwc(L zrEH0qm6>(pR`vJrW(%j25A(dT-#2YF@R-4LH>vcy_zgd|QgH?LMO}@Bh5>37*WEf6 rFBP9YW!)`~&wXFCETpeqwqRgTS94)0P<*5f^a+EftDnm{r-UW|einl` diff --git a/graphics/items/icons/fighting_gem.png b/graphics/items/icons/fighting_gem.png index 7f4fc8b97d31d9a170ad6352ca32435e7d0ebc63..2293767794857c1e718e7b9e19411afc05feca50 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hfZ&mz4f1r?fiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0KT$S`v3p{ diff --git a/graphics/items/icons/fighting_memory.png b/graphics/items/icons/fighting_memory.png index ad21a2d078c4e665c575d9cb0dd5d7c5f7702240..f46e89d7333512312a6cebdb0249e2d792970dbf 100755 GIT binary patch delta 246 zcmZ3?e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DM}MWMqA z94yTo#}+;N|9@M1=e1?EFQ=%dhugAkdpmzoTztU;3Dr9y8;X21cSil(H=ij#%(;?F z@R{a|iMu;@oX-i%;4;@*#1xag_++Aqu;_7f#=c(2 p@Qce!?z6Rh?DYRyx_18+;p3w0*UvD;T?IOx!PC{xWt~$(699AeaHs$P delta 344 zcmX@ew3vB&pI^m5Gm?qx9wW4xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag*JY5_^D&{079N?E=Wo3PkqbMBi$|zxd zbMKu{!9x=>yvp)rbgmKn88nZDc2ImFN)kFBW5U%tg6Ds8j( nhj+~e?@zpG+Z<@y3kgTe~DWM4fldgZo diff --git a/graphics/items/icons/fire_gem.png b/graphics/items/icons/fire_gem.png index deb8979bd8eb153df3014897ff566b1e58280782..d6caa7d3d17b4867a275ef66772da51ddc13467d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hf!`X(V3MeFA;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tber;B4q#hm1X1xyJdEKH0V?jAR9-0%?8 zN=)HlIVYf*m@KXkV8-GtA)l#~7iNxGc=ic6_AwCCWCSSOapscFep_X|4LV&8O zsC!3dTBhF9rFVdQ&MBb@0LF_{`2YX_ diff --git a/graphics/items/icons/fire_memory.png b/graphics/items/icons/fire_memory.png index 33116aed1223ea6b9bd195ec18e47bc5fa1bf0cb..bc62b02c15e99a4cfdf38772b0e511d93d67084e 100755 GIT binary patch delta 246 zcmZ3+e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DM}X`yBV z9%jR1d5>&<{NKM;hGU85bidL&vJ>1Rr`0>@@>e{~6`m_{F`HK)pwQ$%mhXlhwm%{d z6fc}jE;)SWfM)8h7HMHaM!lt%jwb2|r5>Mbuzm?w6=#0OM$;sr1l?+@qg^Wk9-oLi zUlbH-ocPM-E0;0%BlDk*KLYo;3f%MAI`@k7o|q>R%1exD7%uNvKhf@o)5`PWpH3uh p(iV%)tmEzZ*vtR*$C~|5c%S`c{~Y;xbt};E44$rjF6*2UngGdGb4LIG delta 347 zcmX@ew2XOzL^2CA0|SFlq{3++#a`m+>&pI^m5Gm?k;jx@2Ph<7;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|iPZ!6KiaE&%2lypeSy>b(70ZRRPUPZ&I1{an^LB{Ts5Z9;;T diff --git a/graphics/items/icons/fist_plate.png b/graphics/items/icons/fist_plate.png index 0142938d511cdc336851632b141a898d8c86f63a..7e6cb2b92d31e79e81e58c9989899f03676de6e2 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR^Waba9b3h^S64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR@JJY5_^D(0kKILq6hz{8qw9!2~f1l)HLwkI&}^2fh^f~5f0{U0T-i>#55E~NZ2@N zIk8AMF)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQZUDnN804OA0;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbur;B4q#hla&XL%bGcvur|9GEZ2!Kbi@ z`2~x>A-1Ati(Y4E9(B9F^8Ug-0g85+ng-rmr>@~WkR|&r!oj>P;9~TVn1sCC^uuI>? Y5M^cgtTQrE8R!fKPgg&ebxsLQ0PDA4>;M1& diff --git a/graphics/items/icons/float_stone.png b/graphics/items/icons/float_stone.png index 61f096fc368efcfd43f7c49a83cf057e7637fdc0..a421d553fbc9c2f5d7fc0b1e3de247d9ef9febe1 100644 GIT binary patch delta 176 zcmcb~^qX;l1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Cx;TbtOguZmldr*m zhuM41)BpCz+Pq>P@U5$wc~WWV*8R^D;x;l?Xe2fFtbOM2eD=;$sdr>&2b?&poL$gv z)$`TJG=GO&<|qEZ9pbwy{A8c*sC0R&pI^Nk*KHDfE5g9H5YRiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaevo-U3d6?2jk7T6_-h&XI$?crs8kdvC4 z?5g1&aq`5C8yreUSEMXi^X3uHV-3xjJ9aH=wp4O+^U~8(d?=uM>eQ)qdF$RK_!$Q5 z_V$u+S$5>cjU%QeYZ=aH`f?U>dN#jEPw+1;Rp8auZ-|QGW4ZECnc;t=2+NQ6Aq_yw O89ZJ6T-G@yGywptmt61w diff --git a/graphics/items/icons/flying_gem.png b/graphics/items/icons/flying_gem.png index 563e80f3bf057503429cc7386637f4e6b889de96..eb328c85ee90b3246583fbe29f5a0b31a080575f 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^sd3Jqw?HBB64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4z)thTQgC<*clX84Z^4g_>N1J!Kyba4#Pn7DM}L7~G6 z94^cm9Y<&U|9@LgC2ID!OPa^OyG@Ur_H_Qj8TvC+RZp6`ZqZuKJNZ*iM(k8P*C(iZN7;`PtyEXKh&-$uWaOVys4fl#JS;ZdtkiiNvDH` z?z<1IoU%x((`vii!c{u^ChNEKzw%zN)YrRnYE@JF&*~K` u&&e!{x^pOcS3GlS&7P^S=Jw5KOpgS?g60t89ZJ6T-G@yGywo7H+P!= delta 345 zcmV-f0jB=M0;B_w7-Iwj0000ISs=>*000McNliru;{^f^1~#pen_>U}02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCyTl-Ye3#witGe0vYf5e*GhWMI7e?*2xQ!D*R>YYeh?@BRZBAUU(#MDXt2 z`>#PpiMSC;Xy*~V_V%s00000NkvXXu0mjf@N$PW diff --git a/graphics/items/icons/focus_sash.png b/graphics/items/icons/focus_sash.png index e0df9798ef492f7d6b2e785b44f7aab2c8710365..a09d2d26bd5be2e67c45cebc6010d333fb81d775 100644 GIT binary patch delta 213 zcmeBRUcfX#f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfol3aT^vI+CeEE0DAb_9 z;S$U9@Si%Lnu^Zy{vVUJFW!)yUC*_^_Py*)0Y+&?i#3~G%eeP6DhU_|e_-tJ2sEf% z%@i@UN#Ch?)vw>@+C3ugP2Y2^r~3RN+3((;o~5uId2aXPsfDA{>cg&lceVwz=6HM! z>q@xe^R&aTb?S0mrsAi@5r?Ne-(?W<>Ral2n}(U!%jYJnW#*OMxBn~9Z492SelF{r G5}E+~t7Po} delta 317 zcmZ3$)WJMKBAJDmfq_9NQsFd^VlVOZb!C6dB*Uwy_(k=dDo{wg#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mDe0WR%Is++ZK}mHi*hE-U=g#4sQdZtKi7f(hYs`0Jiqhu4DW{Bx~x7~w>W*u zSiax(p`AaNaZMAA4=asvM7jtRG_BtrFsM`DM z1Z-OT^N{Mhr_R#piqp2vasRukd-k_g+n+t|y%qm_7W0ab+0lC$OHw6`nfCAS1G<&L M)78&qol`;+09UehPyhe` diff --git a/graphics/items/icons/full_incense.png b/graphics/items/icons/full_incense.png index 230927e085dcf775935ffc1a76478a1b5567d958..a44f6bffa8e9a17946003c42493ff1975492fe6c 100755 GIT binary patch delta 237 zcmbQqyn|_i1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx||ba4#Pn7DPKx6ok) z9%t?A4o~j<-zVCpwq)|Tl3-n)#qIV79)A>P+`jGM%MH@I55zuH=H9w>SFUYbN9cm3 z4O3@mX}AZlADG<0y0zNYsKCr%nh}GibysAj;GC|ERKDCL%Q_=Dj9JevT@rY5X2uHf z&w5@1a|z$98FNoObBP}3 g>*uvUkI8>w($r^Tk(|@%26Qunr>mdKI;Vst0Q0SGK>z>% delta 334 zcmdnNG?RIPL^2CA0|SFlq{3++#a`m+>&pI^m5Engci#rr^FSf-64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>MHUV4D~uDxxjoFEWSYnFrf4POfF1dMwhjO-y|P42qXYdB_I; zST)mO!zz)KUC*|B3hmw!HZ|RksmLYGPn*3d;mpiFhrTZ&{u4H7&XabO5f@j;Ue?Xs zv3P5>`2^GA@9$g{7Kgu&+FJd6)z#ex`~)sBZ3@#3YN>Dw;N)OY%u5atVqsEUA)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^Zr$gGETE8hiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst09$odo&W#< diff --git a/graphics/items/icons/ghost_memory.png b/graphics/items/icons/ghost_memory.png index 3041643aaae310df75027b50b583157979b80f50..2a9b4f65997b2cb8d01fc6e2ceca5070ad64b9ee 100755 GIT binary patch delta 247 zcmZ3=e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#Pn7DM}UB1H# z9B$l7Qx|^wd%x^Ke9ZOPsrRQ^sxvh{{-J*1Q-h%Z>mJR96ODe{NAEgx-C*^+(eqKU zr+ov78=iC*z|a|LEieT5>AhK*94P!t`)r$xY)$h8@MddeM^6v=1AV(vHJMtf0N9gPvKy6*)l%|=z0cES3j3^P6*000McNliru;{^f^1}?t;12g~t02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC+>nTD7XJQD*mD7$-x3@$Ee@N1~&{kb&{;yZak~9MRCAY>5oAckliK86c#THbwC6 z-TSXWMvJ9cW=`9C@BSVTM>Kg#nbO|7U@Z(1nLxK#-~A1?lQE^d+;cWW6$9fopp4P! sgAhl{?DRC+eGujyncZ+Us;6-P015y_0FdujE&u=k07*qoM6N<$f{l!YKL7v# diff --git a/graphics/items/icons/gracidea.png b/graphics/items/icons/gracidea.png index 31bac3846cde562c1b5467f1b810c03f27d4dc78..fdbd8c8af00a677566419fd3ad0b182205879579 100755 GIT binary patch delta 273 zcmdnTe1~a*1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J#`Nba4#PnAjT>&39OV zXZB>X35EZEpKEiHzkS?@Gqfz}`Nr$7=QDh8VarLYNO@Ige0;6Isb$Tjh4c9ZoXWpH^C3}XU)t1FU z9YOt*000McNliru;{^f@9}$t?IYOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC8}|yK;;uq5y+M!Q?MzY?!CB4Bo4ij5`7cJ_ z4Y*#4&z1lxN`QGl5ROP8&fO^>9nTUH=WB;>rRSA^H1izMe@s+HusHPtFL$fMhJrFGI;c(V*>UE-hZ*JCzY~w7cMRT?N zrC`nuAf7tgR*H_iSr)k?i3x->yeu?R??iwFB|*jyG8qDgntVbB==&c(^#T$`E0+JV Ss=WXJ002ov22Mn-LSTYuo{kCt diff --git a/graphics/items/icons/grass_gem.png b/graphics/items/icons/grass_gem.png index df57119b27d3b6fe0d0d0049edfab9c492580b62..756a769cab2254c00ffe27353a6451c3ff4aaf4d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^(qOviNuZE;iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0C>4ovj6}9 diff --git a/graphics/items/icons/grass_memory.png b/graphics/items/icons/grass_memory.png index 646568c412748023460c2d11430a035cb28fad9a..4ef16802d7f304a775ac8fd992021e4e96550863 100755 GIT binary patch delta 252 zcmZ3=e4J^51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kvba4#Pn7DM}MWGf2 z4p(L#mdpSC=Zoj)ZhxDaUYT{yP`@~KT0Pq@n}j7(IP$p?Tpvvl;y%ZAO|*T%Ne8(m z*Nz8|EPIT8R~l&_KCo?PprGjSt!5TGrOz^`e(<&UzW&)4k%<`-iv3yI*S=#*4vqI* zP&|L{-ouQ7p{JHujdV#^y)z4*}Q$iB}_Gfd) delta 346 zcmX@kw3K;*L^2CA0|SFlq{3++#a`m+>&pI^m5Gl{B~I&=7EnmM#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m%t!rmY4ZKJ2@WzIvy>VQx>Zp5Dt)fl!{FZl9P--Q~G07Ex6j oJwL7LHF)o_zG-uyZ7(qB1P?mb7uY6T1A2tP)78&qol`;+0P+-tegFUf diff --git a/graphics/items/icons/green_apricorn.png b/graphics/items/icons/green_apricorn.png index dc821541bc81faf4287b45d7b1aa2307f0ad6ef0..da60f8544acb1172ca5f5a5fea44a82a524df734 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0W}R;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tc9r;B4q#hl~>1u+9I11>Hu2TP|eH?4)8 z0&)thTQgC<*clX84Z^4g_>N1J%s;ba4#PnAkeeQRs*Q z2aBw-z>ojU;x3aVg16pzlg4s7=%0w&-a^|wQiAKbbPXqR*z+u!`@+V#BjIJa&C#hV z&EF@vU3ky`&ikculi-WrOCnulw8|Xo7>p0cC4F$+A`)7w6%-gF_-VGlq9qTklxmw+ zZJ%{?SMkGZ?j5rt`Cru7{Mt0(Nlo{p%M5aJw%2#A+VydY)_kUKvIYBU|IGQ+D*u)F YM;2?tg3{^Bfo^5+boFyt=akR{06fiW&;S4c delta 338 zcmdnMG?#gTL^2CA0|SFlq{3++#a`m+>&pI^NrqQZ+DOxUI#5Ww#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mSZZ8U!18FP3k*TcKd_6cu%-}zydTGsI&3%ECZesWTU!ARgrD(}DNyJw%>k=I;v ir2fOh+x|D}FN?cx)3^Bjj%78_0}P(7elF{r5}E*P`GRTy diff --git a/graphics/items/icons/griseous_orb.png b/graphics/items/icons/griseous_orb.png index 5140ea3acde5081d0359d061c75956a6582af9da..e306e58661944a524c1f84d7ef2ce6bf26441690 100644 GIT binary patch delta 247 zcmZ3*e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#PnAkfpn(wdz z4@>d~?%)5uzh&xW^3=LoKl5bL7MbJwon6*%x$;Y3!5O70@grxnvbMfyli8nbymlWa z*Y$JJSA7FqSj|{;#GMyTHWxg{!~(jD`!EA`1FYot8f%OkI~VRwv7x?%rgg)_A;SACyuo3e>*S;nb(JR41?K9HEP rX}VvqLP>qkn+Y#|KFEJ_yoTYdDm&-fn3O7@>lr*<{an^LB{Ts5R0?xn delta 351 zcmX@aw2FCxL^2CA0|SFlq{3++#a`m+>&pI^NrqQZ^y);Z2|yw764!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>Xdb&7Ztbv^B9)j!%hb)CRKu2}h0Sub4C*#Mefms!gQ=mO@$5J|(6E4;tF9WK4sPCESf0;Pv}AYr`zTSVRaY1%C4RZJx4JxY zh8z10hUx3>?w&p?vq3lY&ZE0~t5;UCAIVkHvkuGWeI+nleM u-4xW9a=tP@maEy@)KuWF%*w{Zz@WOpdYke`n^{2LFnGH9xvX)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^#7`}=1Slk4;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tber;B4q#hm1X1xyJdEKH0V?jAR9-0%?8 zN=)HlIVYf*m@KXkV8-GtA)l#~7iNxGc=ic6_AwCCWCSSOapscFep_X|4LV&8O zsC!3dTBhF9rFVdQ&MBb@03)4MS^xk5 diff --git a/graphics/items/icons/ground_memory.png b/graphics/items/icons/ground_memory.png index 0f9f31734df68fa62e50018d8e213aca67c17b7b..45ac4379ef3e5877d123d4b908b1336dc0029106 100755 GIT binary patch delta 246 zcmZ3&e2{5^1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ksba4#Pn7DMJBi~^K z9+qStHgS)C|8KAJbu@Xq^p#xtlr>vrj@v7q7niX(HX)BI!s7UgtmleT6gRy})9__H zw}-`c((F0L1#5e!87Qw>bYSoNEfzfw=B52mJEHZHCAMkOQEASk4{ySkR%*?fI!F2X zPp#!aT^(t&_MGEN2-|&juY5=|-@)AH r2E1ODH@v=IKOix`V#WINzr5$|O=W-Xv`I1>=y(QCS3j3^P6*000McNliru;{^f^1{>&1#}@zq02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCVV2)I%Qd@bY@$Q3Q&eEXFX_I%~ zeF##uYE@XE%LsT&^Zkpm!Ir;QK rh@)jT%{1D55au13-EcOlr*QxPxl2Um+3b9*00000NkvXXu0mjf4LgXS diff --git a/graphics/items/icons/haban_berry.png b/graphics/items/icons/haban_berry.png index f413ea9e146a63b70d72f16e30dd4251358ed775..7171d2b07e04665177f7b9108da94f9d678f9b38 100755 GIT binary patch delta 223 zcmbQpyozap1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s*ba4#Pn7DT0X}-e> zJS>K56q(nozsa+Bd%#xjmmBrYoRe3yFXv75%up^>D^hUHy)0pi^lkhoSBfi=Nb{ S^Y4JJWbkzLb6Mw<&;$TX!D-I` delta 326 zcmZ3*G?96NL^2CA0|SFlq{3++#a`m+>&pI^m5Enfb@`Vyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafAJY5_^D(19KaO7(;5OBRM9nrk$zsasJ zKL*JXU#Ctz(?|DOJF|s^cQWo>o4RaG=BzLK{g(gT@1@J1{Oqd6Tv?at8`LzzCSOaP zc35pqXp@coqJ*{5EnHfbuBr^)JhOupyhDmlN7UX@f3!^G#m4TbTmSanaQCpk_dPb) zFlYU}{`}{8HD6sF?!9EQ-?px|Y}Lc+vaL51tJ-#UCG29~t1{C}agN1oWBorT<@eht WPy2pn%^jel89ZJ6T-G@yGywp!<$Lo0 diff --git a/graphics/items/icons/heat_rock.png b/graphics/items/icons/heat_rock.png index 60eae816964f8b2eceee832da2ca518c10e11b5e..cbfa5985829daa9e757b23a6a5d2b277d2f9621c 100644 GIT binary patch delta 249 zcmdnQe1vI&1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kyba4#Pn7DM}O|fPL z9v9x50-yfhzs)J5bL-p6&kaV`bDmlJ6LpOL8^o0x|JE*l``3AOg1$|j5CcwjggWzlh&(rV36it#h s8?-&oRsSg-Aj>Owv3U3XZGW$DKi&pI^NrqREU*q%RS3n{064!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR?Cdb&7 zY_@c2OW+h`oWbO#x>Ufx-NjQ-W5E-qXB}3WoLt%~t(wjX@_ObQ^9D5*X<036ZHuzx z;$pH)l9j#e>|8F(mX(??;l&FbKHj^VZ?IIRI6XTvbLqm1)zcb!lGiX4mdRT)88vRS zNltq;&p0#vz&b7c)i%X@be>O9oDn=PE^c0NRk(nMf7Q>8Tec|gE^lq>5z}TaD%vx> zt!ZgWQPHJy9c)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g^z|(teE>K9k#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFHPc;L&TY_Uwofb*d<0#VfZ`!HR;26TH$5_Pd#I)kH;LW=pLMluQ3ttIc UtkCMp2Reem)78&qol`;+0C?b4vj6}9 diff --git a/graphics/items/icons/ice_memory.png b/graphics/items/icons/ice_memory.png index c0f7cd76e8527420ce18cb2f1b452f3f3b174cca..5dad66f879b8442bd95a183292cec461cb7473b6 100755 GIT binary patch delta 241 zcmbQwyoYIm1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hdba4#Pn7DMJBi~^K z9+u77!oeJW{}*Rpb_ks1ebsiM9|O-$*Uny+EQ`ufz}D^8)QdoF!7 k|6{oCWAxp+*ZP%=XBV@5SpKe44(M(MPgg&ebxsLQ04L{h0RR91 delta 340 zcmdnPG@p5bL^2CA0|SFlq{3++#a`m+>&pI^m5Gl{q~i0fHlUDriEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahGJY5_^D&{079N?E=Wo3PkqnIr0s?i^4 za`eWH7{Nn=-l2>|T?c}Cauxh`a?en{IZ-Sn=iR0(J=V(VcM7$?M%K z*X(oiqIsXK5Rq!xO9}r#i}XXt5o0b?Cdiu2;a_Tfe9)thTQgC<*clX84Z^4g_>N1J$haba4#Pn7DMJBU6h3 z2Xm{#!GHe`O0Nprz1!UKoJaEI+-g&!XZ&FfXZKA#AkC{(Y`Ey&tck%75>wRk*M&(} zad$o{ouuoeq$y$J;^XMI@L66!TY_NLTY=6A-NqLKxtGm5p_wparK;aOf5nAQ&czg| z{3>;f>%EhmyZ-!do6LfCzI(}LO6TMbi3ILBpRvu6v8+*HKD#W_*3fRj{&{6Qa-mm0 mNgVQfJ)g%uzvS$&pI^m5Eo!?7+U4!ayPM64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR^Adb&7( pCz}H+l5*BCr8e)?;YfbW#PB&sr!SS?E(+)q22WQ%mvv4FO#ppjcqsq? diff --git a/graphics/items/icons/icicle_plate.png b/graphics/items/icons/icicle_plate.png index 2d3e27bbbac5016a69a9cd102859d359d225f5b6..7a74d45a55b764643a05ea7fa29567af6fb38c02 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRED`KX2Do{wg#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0C>S+egFUf diff --git a/graphics/items/icons/icy_rock.png b/graphics/items/icons/icy_rock.png index 800b12ec87ab5935870339f21f7d634aa55bc100..56fe8cf4112941a8eb54204f209977f5a49a3f83 100644 GIT binary patch delta 240 zcmbQuyqjr)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hZba4#PnAmzTTBzB8 zgEgR%MOfwc{k;67w@aq={i)>FXuka|!lk}wT1ZEvvE#WYA;r|IlQ>qcn&RTo%0A=5 z_cDfuN!#9UHQUAfh;tu@;XVER4(#qNXKWf3_pWzvmv4A?&o(BhvFgjrMfE;$4oVXy zCON1qy1>5d%DZ>F4Ng}w$i(b0ZRwl3LGlIDvE;+yH4P6qolhN2Q@8+Z! iYet>l55FH&pI^NrqRE@x1rBw?HBB64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqR!T=G?xDNsnf#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0M_1N-v9sr diff --git a/graphics/items/icons/iron_ball.png b/graphics/items/icons/iron_ball.png index e1f82bde1d5f98b751a6fcea99e6425b145d3221..994641c8d320279f130a976edba412d07c964c3e 100644 GIT binary patch delta 177 zcmaFB^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOx!!cQ|N#K z2TQ8p&;Q-c8A1zps1?5{6UlsgzG3+R53w_+49mkiyEz0?nN^&Rn+b5Q(t5pZG1C{5 zGcF(Z9d!KRF!jb7|2nQa8~pncb@sh?2KWb!3 Uc%oW2186UUr>mdKI;Vst0J9)cng9R* delta 277 zcmeyv_<(7GL^2CA0|SFlq{3++#a`m+>&pI^NrqR!@I&W$pa_F_iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV~~2U22FV&#ggvm>&U>cv7h@-BI`s& z`+CMCZ+DmfOW8ji1`CTc_;1fE+pnj;Udq1wXUfKHd(+u3xbi7BUU@NHQesu=v0T=GgT2T3 zF791tp{TharK#!35#CA>mrKS>oG}M~)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQJ_esZOf1r?fiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cNJLlmz(&GyF#d2LigCfof)Yx;TbtOk6tAo9~DM zk8|OPd?)WbkzLb6Mw<&;$T)m1(B{ delta 320 zcmZ3*)Xh9WBAJDmfq_9NQsFd^VlVOZb!C6d%EYUqV|zy+6DTBJ;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{*PZ!6KiaD+Q8@ZYtc-qcNS8NjtXSPlM zD7vIX>|M#)8CN1VoNJP^EBpFts@|pgQ`0}F*W0{bf8c+kf*r$&pm47LQ!M!t<~+4_ z=rB5d{N2rF}Z{2;T2CH4C)thTQgC<*clX84Z^4g_>N1J#`Oba4#Pn3y_=v9Be7 z!=IE)2R8lYo5W;ufop+IsT`zDX87KpYqA(T|;fCirmaP_x9>X z0=B2Nt!}^0@L|&~XgCan4_VtNHf0uHBlZn&b{oKiOmy@dc_xcNc=5+hd)b>Pk#`^%K2m_(~ z=V5#ao+s0NY<4XvwpR>fF0tklc-gn?mhR1YQ=8cJ_Fma+ulI`e&HZCn|Ns5{hjI00 Xwr2jhs}}(M#^CAd=d#X;DWM4f@Oyzb delta 370 zcmV-&0ge9P0=xr|7-Iwj0000ISs=>*000McNliru;{^f@EFnW}Y}5b%02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCb>! z3Kk-hw|g7BLtO=sa zI*-+@Fd&YMbmr<;=rJ$4cue99e2-o))|}>}Vo`9BGM@~5Ef>eNNOo^9UyIb67XyQ$ zO1b&iFtTKEZju#Xpe(xLd2Hx-y5FbgLsrwkTiQ5n?;qG5|L?Iws{5;6HsCh+{zjvW Q00000NkvXX1g=70g6O=Hm;e9( diff --git a/graphics/items/icons/kasib_berry.png b/graphics/items/icons/kasib_berry.png index c09fa20dec70f94d3dbbd8cb4645678a3c5539a0..a62c3e95cbc52b758b7b913a17307208e65cb6ca 100755 GIT binary patch delta 222 zcmbQtypm~x1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s%ba4#Pm^gKkqfn~> zhjTCMlYi>d8m?}O7oXpIdAfka?cCqX8~FFVpHb_feM^O5(JHa1?A#}djxW?o`*(=B z{TcW2xtU5cc6!|SS;;cxVwTsFQdXOLHcS_#Uwo2suH!s-cCnn-z1D`C6Yi}1sxkYg z?IBGOKRXizsgAR3=jNYcW%_+Y-|%zJQ_&yiij#lty?pDz(^bXI{puU8aIUpy&pI^m5EnJ?DvI}w}C?9C9V-A!TD(=<%vb9 z4DLQI0eH!I7)kK)`jfv`Wa4()<9M z#t*!<4s6$*WQrOe>=IBtzV70Z9WT~AJNw&s0>{VwU)E0d4{eL;bZ4}^wC4A9QHgM) zefwRESvTMC7d&XS$yxAPz<~nJLz{#w-g`97Y>H|9c6v{<1$MBcSpr% X&(h9(!LTj~=xhd0S3j3^P6JLlmz(&GyF#d2LigCfogg^T^vI+CT^YRD0D=D zgM~R+f{)(xcmV4f`J&vEST6p)O>*s6F@=p_FIk479YAVoW44$rjF6*2U FngFq^WI_M{ delta 318 zcmbQo)X6+SBAJDmfq_9NQsFd^VlVOZb!C6d%EYU~_ALG8exQ(eiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae#JY5_^D&|b>-^hE&K*04eZ&EZ*!<`*R z(*<;Y9AR41aEOWH`$`|T4@@eNjZZh6?+XenxLW;d`Q`n~ekMyi@6p#;bK4^ZwCuLo_iW?# zr?aj&^KcbJr@mqIl3wY|bzlO=T*Z+f N;OXk;vd$@?2>@fQcH{s6 diff --git a/graphics/items/icons/kee_berry.png b/graphics/items/icons/kee_berry.png index 83749d1b834290f251a24847a7328cef4a855f3e..bbd6c53cf2eaf05e499b1ce50e9b8ad1ee93576f 100755 GIT binary patch delta 264 zcmdnbe3@y21SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxYzba4#Pm^gLfL%zcb z94+2UH6DEX*T0*2b?ju-+dmQy)y~n#xxIZshyN!z!waDki!@aQHrWLGTk@r;Evd1T z_+*70dk*h3t*SMA7w*=+@Vr*C*hyUYJEtFiWgN>a zmz6x+u6)jGn>9XeXgPRxQAJbYLcNPtM=iu|cd=BFEUfPxIXF1bT1;07-Iwj0000ISs=>*000McNliru;{^f^1`GB3*K+^>02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCmfS)rMgSEo!ZP-|lh{RGReE^*(Ya2F>;TF1kBob=%zPwcG zy<+Tl0K`{I83@K9*I``-%nOX>GK^%SExe|4T6KUvgyORwf6t)Tahm%$TPCI4@Nu!k z>DI0A17$H{(zTXP=M!15Ruva3(l{@eJDhM7r-buj&7{z&LbMPWxKT!!Y6q-*%}A#@ z0SgtC-3@G>7WnwG#>s8-bg3t#c8|R%1}@HEs1z_y)thTQgC<*clX84Z^4g_>N1Jz9Tba4#Pm^gQ$qu3Dz z4rgwsclA#cJ6`z2`iAYRQCwL&Z@adqm9>GhiLPw##AuKqRi>Iux571Mfw QPGn&4boFyt=akR{03af2IsgCw delta 325 zcmZ3%G=X`7L^2CA0|SFlq{3++#a`m+>&pI^NrqS6*e$X}04OA0;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|$PZ!6KiaE6te1)0}cv>e*2e93k{fbeg zieX{td7hVYKX?8Y^jXZzo&HAY?e*!EwVDU!KaJTqf8vWR&L{7rolHGwyxHqSRkLm3 z?-K?YoVKwg?WYu23}^5xVhm!mXxriYY?VT?Quunmr?K9;`se&Y&)i%2nQhYiJf~_o zhU*6p^*-DwnmUWeC2e2T>mU!=v)lO{<~Hekw?b diff --git a/graphics/items/icons/life_orb.png b/graphics/items/icons/life_orb.png index 9a9ed7c68272db9e6913f34583fa65b677706101..68aaa8e51adf602bcfdc39a1af3268fb49fbe7a6 100644 GIT binary patch delta 164 zcmX@b^qz5o1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%TNx;TbtOx!!cP^iIx zgT%MX1XpAW~^ZVw2Hyg)z4*} HQ$iB}_|!{J delta 255 zcmaFQc#3I)L^2CA0|SFlq{3++#a`m+>&pI^NrqQmJJeLh4JagD;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tb*r;B4q#hl~>1z`g&F0KPNoxHrd4CYPP zv~lA^r4T38BRXeqa3~#JAvJ5-G`6Q4Gh1eeFPC(_!YQdfed%mfXUnvgnVG3KEHzGD y5@0jXTCUiW7Gmbz9NqOuCZv5)MPmp9L%p@Q;Da{vV|ReIF?hQAxvXJLlmz(&GyF#d2LigCfoiHfT^vI+ChiUJ6guL- z(Y52x|C5(9^p_c3Z<(#IDDHaugidx|)r4}@%yKRB%MbQ0$hziZbW2%@^+AttbYBnS z67@42FEpmPo(R!D$h&RvtEVc-oiQzhSPPd(GUJZZ0>%uRihGw~n0 m{^>1j+4Jk?{r&m%qW1P3Oh=V>6s-cfgTd3)&t;ucLK6TPo?d?d delta 287 zcmeBSdc`zBBAJDmfq_9NQsFd^VlVOZb!C6dB*QDOx~bRD5hx^H;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zCi68`?>!lvQAXA zuV+m1c6a%|l>O6Dpe$oakY6x^!?PP{Ku)8li(^Q|oVor71rHhUc$;N#aW5!gdOgYB z((FWKQ{1lq96R{fYaI1YPC8%2QLiL<&t~#%qslWOUbC`vSDiY3_vlg?XHNcOX@1KS zW@;}LK4dJeX~tGj%pU1?y|r+|3z4&7RkCu1+}dyZ%08~X9^-yDRjljmF2?n%Rx;jR f{_Q&V{zsh7_r*)zu8Ii*x`x5i)z4*}Q$iB}2yA6< diff --git a/graphics/items/icons/lucarionite.png b/graphics/items/icons/lucarionite.png index ea4955c8a0ce049d135b42f8f9e92691c877fc72..b429914872883fa1b29c5097578050b42cc242ff 100644 GIT binary patch delta 171 zcmX@h^o?)thTQgC<*clX84Z^4g_>N1J$H@x;TbtOgwwRo3BBE zhb7>b^U-_%_xO261Qe{@JZC!Rt)PE`PTNeoPkE($4X{0%@p65(I&pI^nTeT4H6$wJC{Ree#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLxJ3H(RYwcXU0e{lI;Lj9u}-F?J_*ZC zwy>==vg6qN#pi{R^o*rEP3co6%C;X_#=^iLa#>cA-DOVBbfAR{p00i_>zopr04oDk A!vFvP diff --git a/graphics/items/icons/luck_incense.png b/graphics/items/icons/luck_incense.png index 396ab2f613214054432e0b2c30cd9a8cc6643679..6a14050cf92518cd4b1c12a676a3e09ad87c2860 100755 GIT binary patch delta 232 zcmbQjyqRf&1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|@ba4#Pn7DP~ZN9?_ zJkGCs1Sb9a|Nq>S?B#y9PX7^T;Xf!Sb3C5K=2la9lg*8;DG_$NCY&wO+SVodwi}a?a@9I(zbq%nvzRMgvInSrmx&LD{rM5 z7c!_{@+n+7n{&~^wBrmx!gs^1*saq}FS~dlc-h{cDnhy~>?!rGOPbbA$~(V%-^0`9 b{}!05)Uz3=6&%?BbS{IZtDnm{r-UW|*C=ht delta 329 zcmdnYG=+JBL^2CA0|SFlq{3++#a`m+>&pI^m5Endr)X~5I-rnviEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagrJzX3_D&{07C@>muDctZm)W=n@ZAC}2 zf{))Co5gEw1hpn=#KpyFuuTjS710*)7n#HH%!6$iC)YAhJr?QNCZ;|C2F1&yJY<7^ zteWYtVU9&j Wn9N{v6lwsvo59o7&t;ucLK6Tud2K2H diff --git a/graphics/items/icons/luminous_moss.png b/graphics/items/icons/luminous_moss.png index 6ee31c5e1b2e25f0bee21f6fcc51c3edf680537d..b15ba36d8e3cb40a002b264ba3823991aca7ed2b 100755 GIT binary patch delta 213 zcmZoJLlmz(&GyF#d2LigCfol3aT^vI+CeH1<$ah46 zgN2nvBw8z}x#uJZom0%=39!{h;@8H)EB^2cxUy^QK$1&fCp!LZ&>}p{M6W z<$q?DsR0)wcZi8O9y!xmq8Y-Y*kd|<=c15bULsn$qN=N8!X2&Vw^|0QY;L}-GRwMm z$9B&a%NUoKKM@s1wzp5L?EW!(?sr2|<6LY0-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{lPZ!6KiaE&%2e>6BS~@X#$Rw)tF-$UY zb4{^j;%RCsXk}_zx314XZt==hK^=-c!b_H|dd2ZHq(xP8rdnVBL@ybeLHFIZ+7-`+KvM7mnO$B})`DSKj_iDM44$QipdGltun1jXX`*SRd zpIJ^h99sVD%ucNtkFSNST@}gjxIi}{qSe+Rfq_9dLsi#9-#Q2ANCr<=KbLh*2~7YM CWoUu` diff --git a/graphics/items/icons/lustrous_orb.png b/graphics/items/icons/lustrous_orb.png index 08b452aba90db20f9785705e6bf8636b4bdec194..ab931ff4684920d676abcd03a3b0f9f6c6d098d7 100644 GIT binary patch delta 257 zcmX@be1>U)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Iba4#PnAke$qR?Rl z4wh~S!H)m`ciUbGnO(B%`;ONOFYbx^?=(eVk+t6(ewE^1L7n|E5)*3*ZdnwZ56CQh zdAdDuCy(K=l%Dk-GtO+`y0N2smzKtftOFfAT&(@AQ@t(1B&2dDSLo>N3^8tevDxX2 zV#bV>zhV{2gtzTjxud-C?A4r08V++z`d5GR{P4`gzF=mc$MvZ@R`Bf+U35uiX$On_ z_Sd<5s*UA*kJYD?zme`=&gwL4`SI2N|4GiPWcDcH{1CRPMhWN-22WQ%mvv4FO#n-= Bd!YaT delta 384 zcmV-`0e}9?0?GrB7-Iwj0000ISs=>*000McNliru;{qHF9~kQ8eNX@Z02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCOla0;NjEze{Qo?Q~Ar>9Y#wLa! zRb{5379AbN=0J6fCS@R*j^=V_0R~3*)V3nr2eD3IwL_zAXT>w0stjy>j~Q zLm=mPSI%0sa%T13jUb1{Zm*m%yZHHzN=0000)thTQgC<*clX84Z^4g_>N1J$&7x;TbtOk8@=o3Fuu zgC$^LK-ByC1lcIwACVF_XPk*Pn3np}&_&F@KK;vSv0 w+%oIQexpY}4*A`CRVMtYtUrB8J9pg-UP(5VLz|C$0y&$()78&qol`;+01v)kPyhe` delta 301 zcmbQv^n+=FL^2CA0|SFlq{3++#a`m+>&pI^m5EndQbo_H7bqlN;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+TcDr;B4q#hm1X1NVQX=A6`gsv6+;bInmTRe`=4t<_Ic6qa)&+0XLcx!KcG@CJihBKP#P$x0oW4)Zn| uUfAN)vAc1Ph=lYJ{uKbLh*2~7a@Txj3` diff --git a/graphics/items/icons/maranga_berry.png b/graphics/items/icons/maranga_berry.png index 2551c0167b24e40e13af93973161ad854d86142b..d56ce9643c4cf1fe3ac0032b969fc0f9f5b01649 100755 GIT binary patch delta 219 zcmbQpyo_mr1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz9Rba4#PnAkfpn(wdz z56k8s8}Ix-vei*wLC7mB`!fk5hd=+3e{g7%*FkYnjWcD<35x>r(z+R3w;VTrH+l8F z@9)`^x&`;#5m#P*F)!)(>6=!YH0|fJom;8YXE^KlhGUKH&Ubv>`5*U$eOB0TZIQ7pJN`)vvr1W-`wMqR3H9x$rV3W9)0WGqn}65*D!QyGGAk9bXpE{ OA%mx@pUXO@geCySOKJ%K delta 326 zcmZ3+G?96NL^2CA0|SFlq{3++#a`m+>&pI^m5Gmy`L{y6BTz`Z#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eSz9H_H+M9WSyvJ zU(cB2?e6k_Df_3RKv~9;AirP+hi5m^fSeVcE{-7;b8;taog9&$h@s+OXVu@8p`YNpt*ug)!9`@|oki}C+*}qFF?7a6=qhO`c21dHu3_uRey=)rF5|njt=FVp zefsyIPG-5KPVKv|KW;hAUUd6)rt!k!Yw!ARvM`87^K?&V^xkxTqKJ)@MfC;o6e-20 UBF0NpfsSVIboFyt=akR{07#>E0RR91 diff --git a/graphics/items/icons/meadow_plate.png b/graphics/items/icons/meadow_plate.png index 5cec7fc16726e4e8acd23eda2d9134c1bd299d39..6571446bb5ff15f15491ff4a118dfc3a489e31f0 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQmh|6G#A5ciV#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0567NGXMYp diff --git a/graphics/items/icons/metronome.png b/graphics/items/icons/metronome.png index 4aa57f95e0c3d5e8523f2bce2a25557b981cf0f8..4270fcaedaa7b76ef06feef2fa6647d1ea0a6979 100644 GIT binary patch delta 187 zcmaFD)W$SHf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfoe)UT^vI+CN90;$#+13 zgEe43$BOUv1s87|X)L?=ua!GK#h^u=QQ&U%q9c6{A;OP2Wg1s)V*aMk{r$*-Jq+`Y zu5tZ%Yx_*LHM`F=$mXot+_`muPrB{~j-@I})&cuApJQF6T;iavZhdWi{)Nj72X#ZI f|5aMn(!Z0T)sdxXiG{u<&;<;hu6{1-oD!M2ZN`ppUXO@geCxr1zkn} diff --git a/graphics/items/icons/micle_berry.png b/graphics/items/icons/micle_berry.png index 74e011d0e84687d3fab85fb3ad8bf46b85a03dac..5e108e5a19bd028cbfda322e7d2bae73a8c3d4fb 100755 GIT binary patch delta 160 zcmcb@^qO&k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jy)%x;TbtOx!xrk?(*4 z2MgoV|MBZCP0`^nw?2L|AwuOBrx}-SvSQ7P%q2&*ta{fnIo!7Sfnq~>kioL%?AqUZ z_Q`bEmg!$FWSFRS;MScAo=-Dlo*(vFx$^GbP0l+XkK DGeJtT delta 265 zcmaFOc!g<#L^2CA0|SFlq{3++#a`m+>&pI^m5EoI{hng|JD`wwiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahEo-U3d6?3Nc-xX|7;Awuz)+Ai9qhSg! zhxCbmt2wq5{8(1`t7zw!<1_4)vbUe?`#FP0A>+ve?nx3>#WRmBoFcu)v*Fa?BT?>? z7;{5-*TvnmJ}viY)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRRNxZ#93n(OB;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbur;B4q#hla&XL%bGcvur|9GEZ2!Kbi@ z`2~x>A-1Ati(Y4E9(B9F^8Ug-0g85+ng-rmr>@~WkR|&r!oj>P;9~TVn1sCC^uuI>? Y5M^cgtTQrE8R!fKPgg&ebxsLQ08YzcQvd(} diff --git a/graphics/items/icons/muscle_band.png b/graphics/items/icons/muscle_band.png index b374760a7121253f34a3ed229a554c914cabcdbb..1954f8a56bda97b2e9694d760c4ea2cedceaf765 100644 GIT binary patch delta 243 zcmZ3)ypL&u1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$hcba4#PnAke$Hs4_d z9_QC8a%=wl|F6fHqsy9Ew?a#P4)@!_KjJab@iEd&riwd{E$}k+eT_oAyxnU3~e`MrmETiRi}^nj@C-kt@!)lXkeWsDb^`l{yX mffsSp*Pq*W;#+#f3+DQZELT45zd04?at2RVKbLh*2~7Yz_i%Lp delta 343 zcmdnTw1|0vL^2CA0|SFlq{3++#a`m+>&pI^NrqR>JVL+F11Kb3;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|SPZ!6KiaDtl9Qm3I1Xu%hz1SE0g7H8B zg99Ifrswpq+sqYgz7ac;L)RZ*HQC!Vy?BX;@0_c9Qa)MFRr#sikni8slSD6YQ95`za`**x`cM{S8qP zZU!q4MJA+ps!cy1XTrV1j3MEd=&Ff9zKn~D&Yfla(mLaBm-M&A^ABB`Ia^-3V^{V6 nIoJ3Z*mk_-kgDSsdd)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hv{nQMNRX`!}64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>zJY5_^D&{07EMQ6yVPRs_aQC=*Yd%Q*qf#AI=W05cYE329d5sg}~sOC;uoI`{TY4e>c3Gx@@W1Z7p#4zJLlmz(&GyF#d2LigCfoe)UT^vI+CLX^pTR`vLPW%VLF3ALY)7$9jMG`bRq@oL7BWb|JshqC!jEywKf0 fYCoORzsml-ih0h~tkuteE@1F<^>bP0l+XkK>x5SO delta 291 zcmZo;ddD$rc^V0u&N2ag8Vm&QB{TPb^Ah zaQATu@N-uvOD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6cUq=Rpjs4tz5?LoI z+SfBCdAqy(U&{XJC{UKMB*-tA!Qt7BG$5zd)5S5QV$RZjN3KH-Jg(~I1*aTro1*&z ze$3*YA^3gUqfHYMugM*9&0no5d6()thTQgC<*clX84Z^4g_>N1J%s;ba4#Pn7DP~LB7KZ zJkHs|v!48~ukdV`>Nj`G=^Bnn@@kBIkM)`4au=C?I5>^v(@dxQwe!=jNhi9$@n^JN zsMKSSY`;Lfk+Z5Q@@k>!f=-?VSvB%*neUdV7Uv(j>XeJ_KQ WIIDt{zEc6vtqh*7elF{r5}E*~(qzj3 delta 327 zcmdnMG>LhFL^2CA0|SFlq{3++#a`m+>&pI^m5Eo&kfY(Y8Bj>P#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mt3!SSL0$PF^IXO8RToZ%DMNCEbM08k+Rb-r5S)GrnH}&#n6^e@RtPfyanOrpQ zW?WpH;boSTT~#YTp7ESz+%GT!kf;!W?RvPBzLbSXi0_wi{}3GBpZa;cqHnQfFXD?bR;g TxfJpQ=xPQ}S3j3^P6k$ diff --git a/graphics/items/icons/odd_keystone.png b/graphics/items/icons/odd_keystone.png index 8ef2d3cdb53688d349b5bfd6ec041ef49cac5b7b..8da9f26aa9f011bac82e6f0457a3b5ce8613049c 100755 GIT binary patch delta 214 zcmeBXUdS{-f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfodjrx;TbtOk6whG~ZDL z4wt8fC;rzLvS+U?tt?ibc+^tKaLc#v9LBFsP8AHB+`QXbW!LZP9GpUHY|9ka-4(uA zy}hBPB`d9<#dXdhq3spXC%8YUXgm_=RQxurnx$Z$>CWm4Q!1Q%IE!SX$^%ut2)>VY zs`&g#B*Ixu?%uZj+=p^j?b`oWz>xXP9-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{*PZ!6KiaEU(y!j3(2(UdUV!pMYntgE& zuP6V7E61mWNo~({vTg9SIr!yHA5Tv2=11IrCQEibdM~t8B-M>|x7X>Cjrn&s+p6lM z$E;I!md!u>TlB|Vrp--rjZK7NdQ3PnepUJy1l{{m%G1gA;bJD+)A!<6N_jL7u=yNc zk-*Bd{q`Z3896_kE=ckv?7W@eY4yY6P};Ij_dZ@(@*p;D#ga+(_K%spC#a;doN}=T PI+wxI)z4*}Q$iB}Fza{O diff --git a/graphics/items/icons/old_gateau.png b/graphics/items/icons/old_gateau.png index 064c997a53bd06883611d753ec8e1dfa7e0e68a7..93edb8f97e3ee61b5275d0611c881dca609b9da0 100755 GIT binary patch delta 153 zcmX@b^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOguZmn(u%C z$5929mw)r`v>qy6(l_LIT{@gWb vt7W5On9~JmlLr}`e}dR6r2ppsZjv_gV3BV4w;>g1JcFmJAFIncr-UW|WhF*? delta 255 zcmaFDc#3I)L^2CA0|SFlq{3++#a`m+>&pI^m5EnN`m(jq1E7$2iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagJo-U3d6?2jk7H}nqurMiVxZjZA;8`fN zZsEd(2RjA&I3~zuP3usZ2*ivJ9aI%$RJLlmz(&GyF#d2LigCfoiHeT^vI+Chnc+DRw}C z!^ z$%ffyl|T1XYsKzeM{_Q9UE{c>@gs4HUz4S3T7$z1wh#U3r8=LUZ<-djRTpfeaeUHx3vIVCg!08%VgmH+?% delta 289 zcmeBXdc!n9BAJDmfq_9NQsFd^VlVOZb!C6d%EYTBwCedP7od=MiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyah2o-U3d6?2jk6vPdrLp>@aXP#RhXg7c)thTQgC<*clX84Z^4g_>N1Jz9Mba4#Pn7DPKr`TZw z4rg7q*}vyoH0|+Oa(8RgE9u13$$uO@YCpN2ebdS?Klq5x#lG`fJ=RS8blq!zqh00`)lQ zCI!6-Nda3+OFcJjR;aX@b9v^Zhx`Zfij@}|-rHLLb6I=_vk4FL3TxZNQ-F?R@O1Ta JS?83{1OR$QXhr}4 delta 308 zcmZ3;^q*;hL^2CA0|SFlq{3++#a`m+>&pI^m5Eo2Q=ut&1yD%5#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mdsx+nE{@CR^i-kh@T(1m2@+W`{4x2xAimj$lrSNyfGB*G>4_*u2-eSwn8W2%m* z@4Jy1vVZ!@^r+Ca2K+M@+)`Z3BDL&Bf(`>SgOOD-?Nmo*)iT|sQo@hRArM%bP0l+XkK DhM95F diff --git a/graphics/items/icons/payapa_berry.png b/graphics/items/icons/payapa_berry.png index fe021c473ec4a2cd04b29db04798f2ec2b5038a5..fd9ac891aa3e000e1028076ada347ca9840cd91c 100755 GIT binary patch delta 218 zcmZo;Udl8JLlmz(&GyF#d2LigCfoi6Bx;TbtOzfQ$$ah46 z!^Jv__3hvHyBA$pwDshqFYVK3GQKJN6Mn$mzQxwDgELw*$t(XV=aV^)xEnfV78^(Z zj`0!{iuLkt`7(8eq=MQRu7rdc9{zT1Yj6JET6U@H9fRTe>#1%ne)eaX_c#dc3T3Xl zWY~Lb_tOLB4<#o|)O1u0yF9ZbH;%RM!Y_fxVOy%LcD_4azu_AHnQFG4vjNqYfDUBv MboFyt=akR{05JDwxBvhE delta 315 zcmZ3=)W$qPBAJDmfq_9NQsFd^VlVOZb!C6d%EYT_wWU6=7APcM;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|gPZ!6KiaEIx_VO|r^0f9h*@?NXNMxSz zfQ5MjlU1i(?5*q*r`gP;70hz`C#FjtlinGb6*x_ zCfF`3eEZ?h`Ql8aE~OcMC*9=&cBlvR7o^Nc@!kCKtC+%*4SQ?E5?i7@PdzBoamlrr z&80Q(w8IMlN7nUAZ!OC7SQUNi3t!sZpo3dK+unJfvFIK1tbMVb7Soo^Id>80QU*^~ KKbLh*2~7Z75P4_- diff --git a/graphics/items/icons/pink_apricorn.png b/graphics/items/icons/pink_apricorn.png index abcedcba49d70b5045f309260ee632dbd94e059a..817e0140c395634872a1188fd559564bb226a159 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WNo1X< zXkX8m_b7?W~xX?V{ZBI4Cdf-7QOICDli9e2-L`EZd$vRb42!wlN^}>CuG?7bY?#^i}WF zoFL5gY{m|W_CuB@k9iBu*|H^sB|SPSOydlLIon1P0e!Bd{t_vPoR%HzhZ=W9ODQr= kVftit$mU4H6U!u^V~e!n7N5!A19TIEr>mdKI;Vst0Caw0pa1{> diff --git a/graphics/items/icons/pink_nectar.png b/graphics/items/icons/pink_nectar.png index 21e88d3023f524f4db91aad886bfa76e86f7bb81..9fbe0f76b34f750ed9aa14d5de1f8ce4e5b7d6cf 100755 GIT binary patch delta 211 zcmey(G>>V51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3;x;TbtOx!#1B;R2L z9@c}>0@MEgzhk#pCZcMMRgj*sg0gyxy->WKzsgTe~DWM4f DGZkAN delta 304 zcmbQo^qXmdL^2CA0|SFlq{3++#a`m+>&pI^m5EnV{d%SC5}=THiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagTJY5_^D&{07CfG4`BYk&~07!tj(s zT3b_7`;bacOw5#pK|QP7yu6M%2J{tg*jTuNbIRltDXA=$=Mt7PSIuy=Nb*#Bx-KiL zQ^0SRoBQS{sTSqPdlxUhnQA6@W}@BYix)4MIu$D)Y1pk^4nNx@mRa^OVnA<>_f^DlijdV9@!gdQ32@aShOU44$rjF6*2UngB67Z2JLlmz(&GyF#d2LigCfokS>x;TbtOx!v#n(wdz z56k1D{ZIdizmwAB_5FM^ilbBVwnDMYf6mtxha?*A&o#KCyy=Icj-|_9wd9;*b7q!= zCB8Xy=dx$vDuzlaZBdi-;(qT9l`BKd52<-2OFVdQ&MBb@0MdhLtpET3 delta 318 zcmZ3>)X6+SBAJDmfq_9NQsFd^VlVOZb!C6d%EYTFlU8)40VpJ1;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{bPZ!6KiaE&%3alJlTnaZ%dG$3JY@6hr zQKj5+c1EJqGdpF8MFC564=;|9Jd{}C`7&dDhN%}z;SpOSD=n+0*n={i+xocppC*KM z_(Z3>yRQzE=s0|1is9ZxN;hnHQWzEoFWD6ouzF&Y)Qrn9Qc_Y^bP0l+XkKif?P{ diff --git a/graphics/items/icons/poison_gem.png b/graphics/items/icons/poison_gem.png index ab339eb718deafb709cadd530e61f3cad86dc403..8e78855276e955c7c10d03a7ab250c36c3c43e03 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?hvQTcc8e4vnciEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst0RPrjKmY&$ diff --git a/graphics/items/icons/poison_memory.png b/graphics/items/icons/poison_memory.png index e665d8176263237afa0dccbb8159920f8257edf4..270c8697dd9121f17659d8feadffd59aeed54fb3 100755 GIT binary patch delta 247 zcmZ3?e28g+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Kwba4#Pn7DM}L7`>^ z9+%i89+4ye|KH9F(Ac`SWS9E$y$5*{BmZ$m?R%i`TB|DfK$_l)M>!jEKZ-1}l3b#9 z!dZf;|4L7X!1EY`7U^J9)qCH&4rb~w9{uP$;q&TAe2q^sdliz`{GNExJ$3VPfAY!{X=PLOx5!PgpN3b?Qte rm+1E=(YyAuP5;>G|MhER{Yl{+0qlp>MP&~IUC-d@>gTe~DWM4fH6?hW delta 344 zcmV-e0jK`L0;2*000McNliru;{^f^1vMYHnHvBA02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC+>nTD5BWM48=pVVp_<#<%yt9Lbq86&V=szPrB>WN=zWY9NE`-Mjxl21s<22MgZ4 zd;c}aXz_B@((t|a?(YF}ih|uc_TB|+VGvgZx<&i$Z?K(=!7eVQ(GXP(j9Y;+L8lKw q94)ie*mUJLlmz(&|3?F76*o-*s+r~K;uxYavGr15+a(#IF9h4)H&x2u_^;nEy-w!CiUtqZHzv%ArsO5)t zk@jS#o~+H`y>!e!p#GC6CeVF&e`mdKI;Vst0Oc%Yi~s-t delta 320 zcmZ3@)Xh9WBAJDmfq_9NQsFd^VlVOZb!C6bBQMOxSn-M>0VpJ1;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQK0O4PZ!6KiaE&%2N;?>a@2I$WL$T`ubA$yj;(%-pjN6NDXv zHv6A9(A6(xDYQv@XURQw6$&L-Ct4IRF!1D>?p708p8@ir Mr>mdKI;Vst00KU4f&c&j diff --git a/graphics/items/icons/power_anklet.png b/graphics/items/icons/power_anklet.png index 3a2091c8ee862346c780002b5a414f3a992016a7..be1982645b982242180700d53c7d6862a13cbe13 100755 GIT binary patch delta 236 zcmbQwyq#%+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|^ba4#Pn7DM}L7^iG z9L`e%4*dWBP&G^TZrQg@KCcz^9ghb6Td5WKRk7P)z4ymfjoCLHs)ct2`z(aDefhZ$n$%omUx?RXjx3p4{`J=SkzmgEA+(0@CN3RxI3je{SB*WqwAlCj74c gG5gQsz45P@_l2_Q)&|^f0Xmt%)78&qol`;+02-=vjsO4v delta 340 zcmV-a0jvJE0-pnr7-Iwj0000ISs=>*000McNliru;{^f@DF^Hq9c%yq02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC(y~=nURc$#k6?5HR)j$m%(|@)1XvX2_tyGY?5~iIF(!QHe~) zIPUH+zzQNbvjL$2Sm2SM*9$~NsBN7K8D88YnC+7Jf=5f!A_*@ m_*q(1n)UTUR-6C*flY7sh&4&xqKgLr0000)thTQgC<*clX84Z^4g_>N1Jx|?ba4#Pn7DMJx6ok& z4(D8#o}K?&wV6HVF1zfz_0tQ*pVx2MzjFH8uFGW0ca(im?Gm;W{euxvf_FP+tc#Ro zcJ^FzYmrTd+Dec1eN$DG4^6aOzVL)(BE#hsnT|?I8=0r&UYZo<@`NvH+rm|569mKV zAFyeB%y-V$LE!jXHhrf9neE=Odz5TGe7gJEbDhVJn0S7D6PtH_GjrDKCEC9E(f|C* d`~UwIiJyPKX4+Jj{}t$922WQ%mvv4FO#peyZ(0BV delta 342 zcmdnWw2*m%L^2CA0|SFlq{3++#a`m+>&pI^m5Eow!a0jk04OA0;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{nPZ!6KiaE6tHu4=(5OI~CD>K_-$E0gZ zcK2^F`W#ii;0JT=u4tbR{4a9YAK&K+%Zb@@+4dm=Kf}NF)JUo7N!Q;h_Qqz{+UfY& z@$6mJ$F7lemrvDnx&o(u;Pv1S+e9u+Df#67CgbW8mO%F|W?}bi*@>?@otv)p&DJ(m zVvxtNzOlc9=};~KP8~=A#dlz$<8wO mot+zhygksh_5Z&Ev&6IcO;2XU1k3|^g2B_(&t;ucLK6UBnSi$d diff --git a/graphics/items/icons/power_belt.png b/graphics/items/icons/power_belt.png index e4273f85c649f5718c320ca4e86ef05514036ee4..456793fb99032e3298b6c562641cc25fea7c419f 100755 GIT binary patch delta 233 zcmbQkyoG6k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|{ba4#Pn7DMJqu3Dz z4rkF7C;sZ&G%mW@mv1)NH~zD4h|W{_(56?@eUB8y9@1yo?O4QlAxg;X$R?qnDGQbv zvMjnO_Vh#Qgr1Oi6P62ZEgx=IUw`nnQ{h1D!gc;FN$h3OD_KH!DqCyZD`OEXJfQtT zSRy|mCn-(l_}Wv`SQuV2YUs}sl(DEeJ@HJ(Zw4!N|9uAU`qp1EDplWZW_{1u|6Bie byBExRD%orm9t9f!-OJ$V>gTe~DWM4f4gP5N delta 337 zcmV-X0j~bE0-OVo7-Iwj0000ISs=>*000McNliru;{^f@C@aU*K+XUF02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCa- zNEhGtH6G>+`@Tb$36yo)bYSoa2AFbN6gjwEc*Nd~V`R8wxJjE+2!sen%v1s) z44Vgbuz>R4Ks>?C@D#8xL&ylPu}YQpFV2y(QI-}Jmk45%b9R=SJj6lXka#;1*kL+a jmB9LVrOVa-{=lj?$RRa5U6?NE00000NkvXXu0mjf1Av0! diff --git a/graphics/items/icons/power_bracer.png b/graphics/items/icons/power_bracer.png index 54aa34844bd5283d773bcac0014076c6814cfe82..9d3d37781bfde21a49b2dffaf6445bd8007ed78a 100755 GIT binary patch delta 226 zcmbQpyq0N#1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s&ba4#Pn7DM}K|U5m z4rfu3XaDzCL@OM-cs6d^bkDfut{b=3UtxVEE_RXeWul7UCLgA5bBP4Dt{P4#5E!dv9WHRrMG)Ei4Kde%vt{nX{R>al@@qMZKW%!GTU z%55RjKkm5uMN^%pm73;VSRPrbsH>{xr0`+#sc|DN2~RgVsQl>2^v|NYG?96NL^2CA0|SFlq{3++#a`m+>&pI^m5EnF{#nA7YM_vKiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafAJY5_^D(2KqFyw1C;Bl3mw$5X!m3zQO z@#rbG&zMAI7A*0~7sxxX^EY#E!1SuB__}R#1pev=ho(MT6qbAXO!KQ7@BD0gtbETc zyO5D|HF}auDT64zkR_K_P`hV V>*cf3J%Ns9@O1TaS?83{1ONkFdR+hj diff --git a/graphics/items/icons/power_herb.png b/graphics/items/icons/power_herb.png index 947996c4cdd69bff960934aced314188fc0dd52a..68225447fbc626274f583a5cecc3506828f9ce78 100644 GIT binary patch delta 181 zcmaFJ)W9@Bf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfok$ST^vI+Chnc!&DUVS z!TR+2wBPX&3od%Bv{pX-aIfM+i#mCRFPajaGnYPO>n=Ri?XlV8{Z7NjHnXy_e0Eoc zh|a6~w4=Jpu5tTv5xxF(te>|ib#X6#_PFUO_jlJPoYT@5%r{lsReA5-(sSCgmx=$o aI%i1>vtYmF)&D@d89ZJ6T-G@yGywpy?^ryn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaec``X~mu(c)hT#J{%3I3YJU~y7RH8AaKITBh^w|3_m0# V_uZ=2l><70!PC{xWt~$(69Bj_UO@l= diff --git a/graphics/items/icons/power_lens.png b/graphics/items/icons/power_lens.png index b18d9118603721027c2f2de4dec3010d3d6f5e47..742db4b4dfaa30c8830d59f29c94d7d49609f760 100755 GIT binary patch delta 244 zcmZ3(yq{@;1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$haba4#PnAkcgQs}S( zk8`rj%?bDZ@7sF7;d0utU#DKUK4^XXL;qz}L3i6J+16^mTBTcD2k!WEZj&!t>nG@| z^zixz_Kyli%wd}Tk!~*jY_BxFv!982!X~oY<@lc1M`rAo+&pI^m5J9#;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>Xd%8G=RLn`eu$SwQfdIpUk|JNNEf3VV z-uY&w-+r~m!{>TXM!KNw{R4ZPcE5fg-J$<{?qA0b%YN^8TqJ(%pA*N$<$W_wE|~my znM9$sId5s`su{tFa%tubLB5=xY3msR)~v`*)-4Wu;8go~>sE^@2HsE6D%P_sZwcF! z-c#DrWl=m!sdvjYtw@D9eotwYM#Vd-t_&@+0ZuX-ydT~d?wbG^XJB!CAk?K1qBC#r>mdKI;Vst0P`k=U;qFB diff --git a/graphics/items/icons/power_weight.png b/graphics/items/icons/power_weight.png index 149679c387039ebf447780311c16a6602f172bca..221416007cf7e3238113e7ff7591677c9dd820a9 100755 GIT binary patch delta 228 zcmbQjyq;--1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s)ba4#Pn7DMJw^*wJ zkMly!rN84hE)3y&Rqc1CXZAnMr`@XpzBalp5XrlCfFUZPdSWO0eObd??(gfSU6r_Z z>yX3snL&$R9tv5;v3l3;i~e@I4H)yL%+5;iTExs|rg_*iwl^u@NAeua19?9(KU5lS z;*^)E>WSvHm6hsInjT{lY+-Qxsb1xzsX}uqWaBuh-pEz#-gV}Jb>IIAxBdUW^UFHv Wv2JWr+av&VDubu1pUXO@geCwgrD)** delta 329 zcmV-P0k;0H0+a)g7-Iwj0000ISs=>*000McNliru;{^f@G73A8s!IR>02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCs}}VDb(Am@LoYxN06~Gh2yS5Y*w~a(Sn%|o@*VvI;QyGi%qPw&q9&g> z;DMSkBis>%LZ#j*x3{B)Y^U7&t;mu{8F4RHti!;zMYOVHTkIw!CbUEaWSG)van|fx zAbtxA<0w}Z7e`42le_den0S{Q2lvo&m6Ibzk6LHtWho+_^bJ|`0}H=OLyh=hF!jv8 bKQPY|tidqR*N%Cq00000NkvXXu0mjf=plVv diff --git a/graphics/items/icons/prism_scale.png b/graphics/items/icons/prism_scale.png index 335816ddbcc430a99e947268e3d57f34c46ed87c..f992c3bd84fda8d5d85b254968ee2d816768dc10 100755 GIT binary patch delta 153 zcmX@g^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOgwwmT#P}H z!!=Np^LPA50WGKZe?Hx9UibBL?%f;xc?xeC+}1X)KiRh0_+-O9-*X3WRvrWDYG@ilJ)sNL>ol`;+0Md*}cK`qY delta 250 zcmaFDc$8^^L^2CA0|SFlq{3++#a`m+>&pI^m5JAg$<$k^5-22I;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tblr;B4q#hm1X1$F`=E*m7LP7$zCOjTB8 zoYAsr#WnQM+?9`OW=U1OXQnA%Wy sDkfo-M8xHo9_NR89K5a@G?^G;7YH$(YI)thTQgC<*clX84Z^4g_>N1J$&6x;TbtOq_c$l8;4^ zgXMyr=!D<#6&j{`opXI=*}vAzJO6oa!*rXc+KR5RE1rrwNltJncRaUr@=OlC7b$61 zbGRPd(~1ZD?+GTVWXKdd$hwW1@;ds<{#j1 v@LObP0l+XkKb^ct4 delta 306 zcmbQr^p|OZL^2CA0|SFlq{3++#a`m+>&pI^m5JBT%>GgNo1X< zXkX8m%mdOq> yo*e8ag7sN;F&|14&|$yS(-h#(p;Rrc&A^bZrndN%cUK?KfefCmelF{r5}E*Nmt&j& diff --git a/graphics/items/icons/psychic_gem.png b/graphics/items/icons/psychic_gem.png index 6b84f38daba8f5abc1199bdb7610e6a1b0287906..b73184955efb97dc67bdd20bfcd587f2028d2f3d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?iKBK4`sHK34qiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst06qOyfB*mh diff --git a/graphics/items/icons/psychic_memory.png b/graphics/items/icons/psychic_memory.png index beda2c22df19697b1682d33e6ebb667f3f0edfc6..6a5aea79a7621d897c757a9d670fb72b0ac0efa1 100755 GIT binary patch delta 250 zcmZ3&e3WT|1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J!Ktba4#Pn7DM}MWMqA z94y6-${n-*|G(YTdu>_m%PH#V*000McNliru;{^f^2oG!(KI8xZ02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCg^jzPrB>WN=z)Ya@f~-Mjxl28f2vY!|$H z_x@{;(ULPQW_0eocYhC$O!Mi3 r5J$^wacSLs5au13-EcOlr*QxP@L5LIy-&$}00000NkvXXu0mjfRt|)? diff --git a/graphics/items/icons/pure_incense.png b/graphics/items/icons/pure_incense.png index 8657683b188233d2e360da0208f3e390d350ecf4..eb5345f014c98b99453ae88088bc33b9ede836f4 100755 GIT binary patch delta 233 zcmbQpyoG6k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|{ba4#Pn7DPKw@`}$ z4{PngBTowd|MqhT*)nI63hsla2Tf=re~$oZkAPkSidjRQ#RZk(-@@b{z})mVVx07#iA(!X=+!MFGxKs4Z{O?bt b>mM+`mt=k8ZqMKbbT5OatDnm{r-UW|Vk2qJ delta 326 zcmdnOG?96NL^2CA0|SFlq{3++#a`m+>&pI^m5J9-aStQI380X8iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafAJY5_^D&{07C@>muDctZm)W=n@ZAC}2 zf{))Bi@j$o1hpn=#9FWJTO3b3%5-^In^uS_2&FI>#+0`d?e|psvyv^qc_k~fMd#nI)N5p3q}U51f#H; TIqvI#j%M(5^>bP0l+XkKdo5|J diff --git a/graphics/items/icons/purple_nectar.png b/graphics/items/icons/purple_nectar.png index 59111f1e4e40ea28ac8eee58cd0820e915a972e2..f792b5ff558e38a3f5f4b1438b5794f470508b5f 100755 GIT binary patch delta 211 zcmey(G>>V51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3;x;TbtOx!#1B;R2L z9@c}>0@MEgzhk#pCZcMMRgj*sg0gyxy->WKzsgTe~DWM4f DGZkAN delta 304 zcmbQo^qXmdL^2CA0|SFlq{3++#a`m+>&pI^m5JBf@cWzXT0kN364!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>vdAc};RLn_EP!Q%|V(dA)A}1$Dh2bfO zw6>siNbX`_f zr-0usH}}m^QZ34n_by(1Gu2G+%tX7(7cX8ibt+aq(y&{-%CBT!^Q>*(&)u~C9Oo>n yUiep diff --git a/graphics/items/icons/quick_powder.png b/graphics/items/icons/quick_powder.png index d83b0b506257bad81e85f36d7743592b50f943c2..fa56dcca7c26cfa6e86c5edabd62cdf9b04a0912 100644 GIT binary patch delta 221 zcmeBRUcod$f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfoi6Ex;TbtOx!y0w2-qR zhjVL!!@vK{+~roX?-%bj%bO$9(Utti^HSBOt)hJx%YGu^W^4fTj+falbv|_ruqE?8;xFnoSx~v@=xL9nx6~gU$Tanu}CgAQ@jUs OBZH@_pUXO@geCy0uw(uJ delta 317 zcmZ3%)WJMKBAJDmfq_9NQsFd^VlVOZb!C6dB*QDGWvwYY5hx^H;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|=PZ!6KiaE&%3akcPTuL{byu1qLZRpxO zaS}twp%X`sMtBMy5;Q8}Euchxv0hPdumcFVQo+l;NtV+7J%H(N^e{#ptNwKTLRMnks^t^oRt8U3 KKbLh*2~7aG1Z-pg diff --git a/graphics/items/icons/rare_bone.png b/graphics/items/icons/rare_bone.png index 80b4af9d58c1da065daf944ab4f7c186a4593288..eb5665a351afee7a1cb598eb646d5231a107a867 100755 GIT binary patch delta 167 zcmX@j^oenT1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvYx;TbtOk6wBQRsjH z2a~eLzyD7rZT@m0(?U;j(T;2Rp`p(hCMWZi736fJusdJl(M~j$c*bICXLx+!LtCdm zs_*KIzHdrDb?|O~S(LcC`$GA^!Udscb1Zu9d@T4{c0s?2;i9lL&pI^m5J9}sW|A{7od=MiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafeo-U3d6?2jk6gXH|1#;X}omt#HPO>Pf zF3HMideG8#=&B)`sPC06>x?MJML%++Q8t{u60N(MySa{sOO;DvI0)Ur3Nj0 y3l**kv;;2mcxGg^TB-V|h2Y7_C+vJLlmz(&GyF#d2LigCfojSv9pqKY(9=%) hFeSb^e*YtF*#maW)>BIM76RSC;OXk;vd$@?2>?`_RM!9i delta 285 zcmeBRdcib7BAJDmfq_9NQsFd^VlVOZb!C6d%EW6f6&>K01r!o5ag8Vm&QB{TPb^Ah zaQATu@N-uvOD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6cUq=Rpjs4tz5?LoI z+SfBCdAqy(U&{XJC{UKMB*-tA!Qt7BG$5zm)5S5QVoq{`f-nac7uSIsJzieN+6?AR z=q}1wp%~(HRMXVNB!WR}p_mlcRHj!Rtc6U9GN}U6i~24e)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOk8`>Td2W+ zgZYA!;D>+W+vH4f z;f^^1C%YIbTtCE$9$a^wW8G4gUGL1&XUDjlGTWFfcJgq4t%ay~Iwv!iM8?%tpnVLU Lu6{1-oD!M&pI^m5J9}D75=n1W-u4#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLC{cV?z7EQ_1o*_yyl_~-{OQs}*}p0p9d{oCee}^ua{C7BUa(_5UHx3v IIVCg!0I1VfssI20 diff --git a/graphics/items/icons/reaper_cloth.png b/graphics/items/icons/reaper_cloth.png index 73f0874426a2e9cef6d5497f6f95ebd7421aeb2c..f4f0bfdb487561474914bb47562d72b5a0aebf2e 100755 GIT binary patch delta 231 zcmbQpyoqUo1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|_ba4#Pm^gQ$qtFor z4wh7jPyf~5Hylftx_qhD^t>4h`aYIRHb}ScE?#*rLGGQP51UzYg^ybMf#3oun^kF7 z)C48J&53SMvvKFkI~qE3Yj5Mu;G*?wrgNwNGs$IP^*WjOKPH%Yqf1@xRj2&02}dnQ`tI09YE;OXk;vd$@?2>?SmYIpzu delta 326 zcmdnQG?96NL^2CA0|SFlq{3++#a`m+>&pI^m5JA!^Zq;jEkGgh64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR?Kc)B=-RLrUEcN99Lz~eem*kb8j<)wG0 z&tT@*RxNGO5L@tH*`wKbhtcZ)&(!TZ1?pED`+DyXpCl@hc;!%5+e_XjXFqe#cACC9 zeZy?8LbIzA`&~@rO&^%4G+1uF%&NjrKc|3mLPXc&PY1OZ3Rv>J*vPPS?(yR;GdSW( zQ+;*_3AFoiKVo3K`!(mYHt&L8A1wMW25%{h;c@RSobFc@Xuri*>^%3~fBz<~wflWh W{>}xSmRCSWGkCiCxvXJLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WS(>TLm&bHA+K%XnAzeGwRr)3BGp~hX&Qi_aI km_C^uvN_W5#4-u!*dndC#b@&O0Nupk>FVdQ&MBb@08Rv9egFUf diff --git a/graphics/items/icons/red_card.png b/graphics/items/icons/red_card.png index 1d07d827fa80c2cf0d01dbc995375355ff3609ad..88c8bf0c171c3db52d2f8470152315e0386d21ec 100755 GIT binary patch delta 135 zcmdnabeVC21SbbG0|UeLm1j>)thO%}C<*clX84Z^4g_>N1JyWrx;TbtOx%0gkdHxu z$LV6&j{h^)x-GwCA(8q=f5zXr)fb~LizsA%lTc_heB$S|;N21yncu6OIk;|2`K`p+ dT(Uogoymsr<;=w&Qh}y1c)I$ztaD0e0st^qJ;DG0 delta 235 zcmcc2xSeT&L^2CA0|SFlq{3++#a`m+>&pI^m5JBPnBnJhcc74XiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y}^3$=luK|5El(M}e}8B|(0{3=Yq3qyag8o-U3d6?2jk6vPd<6bf5JCRR9kamX#6 zG-=W%#-_!O9`S@Pebn@T;ig_dYL9|h&taaV!yz*h3MPamUOkl1bB6IFkHmxu4;i-P dq#9mkh8s2l!QS49tAQpnc)I$ztaD0e0sy5MN~8b) diff --git a/graphics/items/icons/red_nectar.png b/graphics/items/icons/red_nectar.png index 1d2058dca1bb622d2c97a70e3b7ab59c096caebd..73710370e494c3f922bdac292f213323268e5fc6 100755 GIT binary patch delta 213 zcmeyvw18=X1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3iQ78&+;^|$R7>-;E*EM1b5=HTYXQLnO3W?qFubmzM{YkyP@pA8hOx{D8 zJszE@oHHLVT$bcu))P8c_>Ci|D`twOKkLE(R-U~qx=Z^M${o*Hu~yF$Tyk%f8Gk14 z(beDf?Ku@7SMy=pyCYIHuXk16-}Uv~@&3K-@Ap3zuVF~~$8tiLp*9uhHU>{uKbLh* G2~7ZQfno;$ delta 305 zcmZ3$^oMDJL^2CA0|SFlq{3++#a`m+>&pI^m5J9(r}yKlO+X>>64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>vd%8G=RLn_EP!Q%|V(dA)A}1$Dh2bfO zw6>sf+`z|Z1 zQ^2q7*_o4BnF4(w$Ir~1y!WzLlciC4`nfqq&ec~PI~d>Ro!e{q+WyLx;{5k}WB;?i zvY5I3{k`?}9K~DD{Qu9MxGpV0M5JYNCj*1JLlmz(&GyF#d2LigCfoh69T^vI+CN7=e$ag@2 zgC+LBqyOU_vF`rFHnU};wZ<8vhd#&J6e^-#x2f*F;Id+^^iKYL0@vcb cE_}CU41C1YY`0p%9B4m-r>mdKI;Vst0FRSW_W%F@ delta 278 zcmZo+ddM_EBAJDmfq_9NQsFd^VlVOZb!C6d%EW7?`b9TL3@9XC;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tber;B4q#hl~>1r7<;2^LOW9EFamEj=4L zwVDoVEX(M)pfoF@XM&KZKufVi>;xY%Grbm$rVXx}EhD^Q7-j}*FkE>Q!}oB8I2VWX z^aB>h+8jdr5}1$lTKCv4h&mvXo~+Tn@rH!P3C;H6Ge=KzFWkl)*;CN27_ozqVcjl~ V;DbGVc0flkc)I$ztaD0e0sw7sT73Wj diff --git a/graphics/items/icons/ring_target.png b/graphics/items/icons/ring_target.png index fae2b944bee351a510f90ce982908f1f5741e460..08b044df7667837eb804d118d611de763edf2987 100755 GIT binary patch delta 170 zcmX@b^p$af1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H>x;TbtOxzn7&DWs7 zlYGAFzp!PZI0FE*;loHPwL+U3=@{O+Om{~wDn&+*&A^iyKK;|!pM N44$rjF6*2UngBCwPO$(0 delta 255 zcmey$c#3I)L^2CA0|SFlq{3++#a`m+>&pI^m5J9(_KyCm4xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagJo-U3d6?2jk6ofgL7<r_@vYbVP^PoFM5)fNz%wRBagL21uJN3VyD#{&Fz1x>0F>Iq&KwJOeK2J^MYO*v9M x%-fDTGdyGxol)$N7o6!*Wa=ZjsvhWxmNZF0`JTVxx)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?iKBqzAyFHlIl#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mLLPLYkF%s-<-E5{bE?&b_@;LwpX%Ould-L0MI`LoM<8g#cAm zQTL9_v`oFHPc;L&TY_Uwofb*d<0#VfZ`!HR;26TH$5_Pd#I)kH;LW=pLMluQ3ttIc UtkCMp2Reem)78&qol`;+02)thTQgC<*clX84Z^4g_>N1Jx|`ba4#Pn7B32k?*hq z&uZU{KmWzgFWj&#SpBV0I9FEBTZY@;#2NZ?7ny!oDC>G;IoIB;``(A<^H}fM&k!Sd z>!8%+dkr>{DGS2aXK|%77(Y@lnw)Q(Ho3?t>)_St%O|?*s?ZDXPHR%Cp8Y~no0Y5H z@=i!x6wC4bpAUC;R|p*5^`=X&Z`R8d3B3GaPb&qwS6GTy?i7~q72a`I-!1up+77#W d)6@Sj>aRG$(x&pI^m5J9(^wO84T|go664!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR@#dAc};RLq&$@5|R@Akf+)thTQgC<*clX84Z^4g_>N1J$hdba4#Pn7DM}ZK1;o z94^foLHa-cpMTqQ(JC{}>hAI4kQrYs{&7~y6+DozyeqQdNr%CebIunOm7bpsh-$KY zuKHr?ogY7Ayq2n-;n-|YkUdwdUGPmX@BNk=9Ont%A!3hVZj%Och; l{hhy{C*S7E>_LL^2CA0|SFlq{3++#a`m+>&pI^m5Gmo<5S^kcc74XiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafwJzX3_D&{079N?E=Wo3PkqbU5`fldbD1P~-GAR$1o2k~6es0cgR--7LwH7yX z&fY9ueQ-{R@b*5_^aD{6M3jK4f6&1fWgz%&t;ucLK6VEU3r86 diff --git a/graphics/items/icons/rocky_helmet.png b/graphics/items/icons/rocky_helmet.png index 006a9f8aa4a1236a4117423c53524aece23dd9a5..72613a206e40be44b33c1add6c2a81ce1dfd97f7 100755 GIT binary patch delta 214 zcmZoJLlmz(&GyF#d2LigCfodjrx;TbtOxzpjEp$|Y zLz`>L@A*GeZz-*Ryl8b=OorVA$^OT|92=fSXV)%wc;Vk_e1iGY2Q$GBt4h}RUQ(Q~ zYSvEPaIV<74bP&qJAPF*9WQg;#NpN$=W;fTac1)gX+2YinAc8)C!bchwFo{?4&vzk zP?#j)wMa?$kNo1X< zXkX8m{J zr$*_0m!9a!MpaDt4#vmV@fem}487lVKK)+Hq95Xl=ZvrH`ooo5yhn4X+1bKa&&Mnu zB(_|AP&1)aiutngu6t?6Q*XxoGP`3LGyUumdKI;Vst E0L+eZ!2kdN diff --git a/graphics/items/icons/rose_incense.png b/graphics/items/icons/rose_incense.png index c6b6abcc360702f66e2e91dc8f8e50cbd30b8283..95bfc77e1f8e5b003f15054323de5d136e43a5f3 100755 GIT binary patch delta 236 zcmbQiyq#%+1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|^ba4#Pn7DPKx6ly< z4wuU;ydB@|-#08=7O5&&d($-#;3Uk@~ zhSk(KjqgFTe+lEgyXzDgGv6CEep$EEx@5)fb2)J-bKL#sXH*LBms(m-9nX{eB5Xt5 ez3KUX9Od11vDx=|RfGVY%;4$j=d#Wzp$P!M(`o1c delta 333 zcmdnaG=q79L^2CA0|SFlq{3++#a`m+>&pI^m5JAkVZUZuAW%rW#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mM+yBEpOtcZsY2RFKhOhaA)t))T>(J@9zp9oFgl{yS%)l z*>YC8mBXAq)thTQgC<*clX84Z^4g_>N1J%s*ba4#Pn7DO>*pnr-W*?5brd9NU&$x5#-}eqrWV7oHkKD4pYMh+d=XuoSl;PX3BL|!P zgLAZeuVk9pbI(w+yFBCR9nTpL9Usnn&#x;gD6%s(c@9@u#S-s__k_xY5_L+i-tqL9 zdd@cXZ=s@>apdJdmQRyc{5jZq@_LuYQ{Ln?^JbjaW?#qs!|XOwh2Z|V{L?d7GA1;w RTmy6^gQu&X%Q~loCIB8HXD$E$ delta 325 zcmV-L0lNOG0+0ic7-Iwj0000ISs=>*000McNliru;{^f@H5V7xP*nf`02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC_Frv^FIMHs z(5j`yOK73JCO&`yb4fDuP3hwsvtr+a?ixGK@Ufae8y$t^S0Mm4wu_Qcs3+}=n7JYv zf_5>ClPBuIo?@~jq=1lwRp{y7pOb8B^r%GS%+^Sc-Lj^WU)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Iba4#Pm^gRhL7~G6 z94_3gJ3joEzvH^taAqd|(+51iQyeSz{^Ob$U9@!3rO!f7&dzZ0Iof}C?w+l@8(eY) zn(lI)6=7}qb&c<4Nkh*KwT1Q1G#Yj%Z}qz+AN&5f%A?5dGuT(>@@;v>%_1RqvvjkW z7fZtFH49XA5`*000McNliru;{^f@H4g;4$O8ZX02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC(Ew~M+NoWecMTI00000 LNkvXXu0mjfC{B@c diff --git a/graphics/items/icons/sachet.png b/graphics/items/icons/sachet.png index 32c566a91da29c1cc4e8dbb233428baef9659504..e1b2774086c6e69b4ec720b0a88a4fdd6d8dc192 100755 GIT binary patch delta 200 zcmey!G?{6F1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JyKnx;TbtOq?1J&DCJQ z6FqC&=YQ&ET8HHRUI;qo5h0iT_A$eXLgUpE5!u#?6DKi5KKN8}X=7#c#1uC3xhVm& zTZ`RN0-4(G1(pbu$*?wxtcbOJ(z}{Hto*{%u*%wVtBc-=FEqJq$aVLHv0aDa=cO^% sU!FAB?7634O{KinD*J=~p8tQwk`%*Km6Q;973drWPgg&ebxsLQ07~Uu0{{R3 delta 294 zcmbQt^pR&pI^m5JAsoh!k?5GW*G;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbgr;B4q#hly;j(mp{1Y9Nk9~^JnTET35 zqt^Knx5Q0z(RB|*ZMGdXI)YkJp)78&qol`;+07I&5uK)l5 diff --git a/graphics/items/icons/safety_goggles.png b/graphics/items/icons/safety_goggles.png index 7a1efab67adffd72893d7ab8383ab500014ac898..2381790f2a3b530bdeff0ae13f2fe4bd261e1865 100644 GIT binary patch delta 213 zcmZo-UcfX#f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfol3aT^vI+ChnbhQs}S( zkMqWyoJs%w|G&m;- z9odC%XRi|V67XN~XQA*#@c`L#lXmQH%$oF&#Uk&44ZHKM1iz(@hL>3;gqH_B=s3G$ zmx9{ly$YsIVa65J53^%_9`SaIn{VjmX1q3jrTy>q?N!Y4ZnE&iO2*Csx{blp)z4*} HQ$iB}_CRDg delta 311 zcmZ3$)WkeNBAJDmfq_9NQsFd^VlVOZb!C6d%+9aN-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|QPZ!6KiaB%pH*zr<^0du1-*LgYU>!%F z>hZVp%8IOZ>}ha%wI-pQ_2uRtQ;xlwyZN8@zkY`wNoVdm9?5#ucS4-W<+hg=ME>SIRqXGV$!0&7^d^=0%vWOU)1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J&&Iba4#Pn3y{$TC7EZ z$9d_OiGSBuTsly3VP;LoGc%FK*T1rEd<{3d`)2ygqhHok8Lysmv7t)fFq6YG&ll|u z*XE?VF*ePS>AT6(Q8ufH!E7Nv>#e>$j=wqi^?%Of7YL{n*u<5)EIxtN-gaNVtYQ1L zD}r-;;}+a`l~eCJE$H&Iy>HXhD`eiOncV-Ls3UuhecB9;KkJUmFarI-;OXk;vd$@?2>{T# Bc;Em4 delta 363 zcmV-x0hIpC0=5H?7-Iwj0000ISs=>*000McNliru;{^f|1}dzsojCvi02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCv z42E5vpqzF^bP~KkwENUW+*?D=pgKKoBF=eY!H+$su=V%FpT0y+44^qw@XYDG{_pFH z<$9MzFqZjqhh%I_epBtu*zonXsdhp;nSrw^JLlmz(&GyF#d2LigCfogg@T^vI+CeFR+D0W1F zgZV-m)5m}6asturw~y{QY4m?9m)!CDj!z@IPe|V6xcV*O<$AOIhZj#5T%)jw+2yRy z;*0a53uaADTg*T6fRDDK==b%T%JpXkJc@IgKjHIB2D4AuE?fNUuD;$hRpsKh7r{z} zx$n5$_D983#s6zKmKv?yn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyae#JY5_^D(2MoJMuLdh`7AuU9zj-^>Xn8 z^BSJbu44Scc0{+$Am^o%%{JZKtF47$pFiDx;v4wKH*(tS^5tIFJ6SU4TQ%{_UG-H( zYi++viHATHOJx?Xp>b>ZZSJV22iFv^%50Wp3h?OuxJ-znbzQN|x&V)-2lZ-A3RVRR z&wBFs#U7r>(*HFJ&fl_TD2{uWxXWGsf2ZN5%uhCKzs}!S|8V~&CLSSG*2VJN@j%Bi Nc)I$ztaD0e0s!p+cO(D+ diff --git a/graphics/items/icons/shiny_charm.png b/graphics/items/icons/shiny_charm.png index 3829154cd5a3e2702d4039e89e8e4b59d205cdd4..fd2c97ac8361d12210aef41fb4167bdd51143d96 100644 GIT binary patch delta 199 zcmaFDG>K_~1SbbG0|UeLm1j>)thTQgC<*cl{*MOEDsGwrRMY6`;uxYav3HW85UV1G zbF1hqkvspl$^V!-Y3@xCu}U_P*w>Q-lJ-4O65e`0qal2f5Zk{135Rf%eT$V?Bn0@m zXFQ(CV14HM4*3Uyo_~}gkLj#=vP1Z&+oBWSUKvI`xBRPj`M2@sIhFmFS3kUJ{eZ_I s)OE}AlCX(eruJFoKGXll9QTDeWd+OaiTvDKfv#cjboFyt=akR{0D6U8@&Et; delta 281 zcmbQl^n_`GL^2CA0|SFlq{3++#a`m+>&pIwiJL)2G(BtHW1x_DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e{(o-U3d6?0P0>k1z-;9+}EZnbQ#YvWv(M~1>Hj`=J&@aBAK zLAdb2{zn&*n^g8HFS`ExQjN$D{vckR7co;B{CFy@%cceSHuh>NM66*m32uH_`YC+s ze7;>DUL?QzwevRH))?=^jc3+YuvI;~`1=0T+AcZm(oglNOMkW>-X|Wh`VRlbKgkms b%)YDbvkg%JLlmz(&GyF#d2LigCfoi6Dx;TbtOx!xrk*V2$ zgC$k5;s5^v@zrK4Y`+BLo#V)vl={=(^Qv&$s$0ICIU$<61Y7&ro$ERbGVi>x)pA-| zsHev_za`@1nMa!i8k973wsJ03*j{?~$V4v#3$3X&!WOPeH@eS#zPxdwmhV}m`BHud z_f&Gees|D5@|~6Z?E8X_Z!eVjw+UTcGJW>aM{Mi%+D<+({rc~ParHY`v}WFyxejz8 NgQu&X%Q~loCIIeTWxfCa delta 315 zcmZ3+)W$qPBAJDmfq_9NQsFd^VlVOZb!C6d%EW78No1X< zXkX8mEHo!Mhtb$l*VfZh z^Q^!liLGBgZ81q*aeB_B)2FBKB+e@|G7DFVdQ I&MBb@0CJLOc>n+a diff --git a/graphics/items/icons/shock_drive.png b/graphics/items/icons/shock_drive.png index 2ac62f6cee29bb4137e30a8f4e05f5332049b938..99f8e512c412fae4d2aa5e2df0b4aa29586074ca 100644 GIT binary patch delta 183 zcmcb{)WkGFf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfocjpT^vI+CZ3%TDAb_9 z;lg@t@BfL;7iOHYo1MA;i>>39t@B-6wngxM3+b~B*t_b;vWY>$>8-DB2K-qO`Tkr@ z>qFh13D*v0Y|)xtU~_1mgzAG;AA}NeEZ#AB{pdDjIoX+=;901Ac(c~gXTiq=^zZLD ce*Y=M)iS1e?Ems718ryUboFyt=akR{0Pfvc=>Px# delta 267 zcmZo-y2dm?BAJDmfq_9NQsFd^VlVOZb!C6dBqPpi6?P!&AW%rW#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mN2q-XQlQD6bfbEn7SgY@c->#-TqQ_L)mwnsryPk9pA|qd{p$yxqF#$K${sn MUHx3vIVCg!0P96yWB>pF diff --git a/graphics/items/icons/shuca_berry.png b/graphics/items/icons/shuca_berry.png index cc99671876d928848bea243aef7f464857717cd4..f26a80f7ac0131e67f9c41972c0a8567c9a7101f 100755 GIT binary patch delta 200 zcmey!G?{6F1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JyKnx;TbtOk6rKkngYp zk8`$H!KL5w6^^T&7KF?)ssAO&ex~q`HbeFPInSppm=-kuNO9J6uYj&Cx6&T8E6!6^ zl4J;3TKdR3iebj9Qp-uHth?k@cnumnvo9Yo_ww}Ce=nUk(Z?kGt*3s&;dq9_+j)AN tgMB6To&Br$#(n*^t?!Gz*Z&pI^m5J9xD{P4_D^N(h#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m+=6D^#MF>&;DOj4es ztMTX&)8wQOuHxn*30Bv+Ax5tnzQ)thTQgC<*clX84Z^4g_>N1J#`Jba4#Pm^gQ$r`TZw z4(ILzY&HLx!yl;BzTB{K&t>z^k3a5T^7Ux*Dyck=V=d0d6#`G3?f)eGLfb>_!8Jx! zoj!%Y9qrrJ$nhy%ZvXX7dvauj@WT8=>jjOg%_WY#xS}k1w28N->C=HsX&a}qk3mav z6`6Ot_4zn0zwp0tu2%6B`K!#6#Vi|}H%qgZJWH8u_+4SynIP{>f$MK3?J|nI)aHLC z;q&orDx4MtAGWVMYIR-8bV|Nwv@Ls SixvUB#o+1c=d#Wzp$PzhwT6!X delta 376 zcmV-;0f+wE0>T537-Iwj0000ISs=>*000McNliru;{^f@G$Fxu^o;-j02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchC@ z5C-t<8)W6YLpwKtO`X{gurnDj{i@fe(e|Q}v__HD&O&hW2Io`W82?m)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQW=F8*`4xo^DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1J!Kuba4#PnAm%%o3B}c zhxNi&NAK1D{=Z+hHepWkNspchVry2bLxn_i@ByIU+N&irwLLFxB1 z(UXP0MNQB2O_N)cCB<)?JT*rAnvk`DMqc$+mYM^a+ru2+iWCSucISV5T36fY$;CSg rU!7Uz7nF&&>`&BK|M2_%f?o4a``C)hw?+m5ozLLu>gTe~DWM4f5X^Mh delta 352 zcmX@iw3>N>L^2CA0|SFlq{3++#a`m+>&pI^NrqQWI7MgbOrVf>iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagHJY5_^D&{079AJ}RooM0IZRCI$u^xv45}#85avB!B)QDJ_Pu2^#kT14X1v1&?@!-M@J8o?Y=%p9Lb1 z4ZCH5Ak;XWlc_T4s)OI}Q!`J;ILvvvyL@}m`Y20nQ=StOBQ1-su8K5HZ&hpZ(U>1+ zchoienbC%uPp3XD4vh(GiaonS=ETk?k5n1Trl(Xsy|Y_QOMq|jk1spR^_O!v%+-l2 u)#W_KxGTzl^&BIUqqquRvw{&j3qwzw+1x`edZ&QiVeoYIb6Mw<&;$UYntap% diff --git a/graphics/items/icons/snowball.png b/graphics/items/icons/snowball.png index 3ba834ae342a54ae3e9d55fe99740372fdff4a79..516b1cbd86e9e96a34c08d4a5e5a6cd944a8fd21 100755 GIT binary patch delta 167 zcmX@h^oenT1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvYx;TbtOg!5cDAb_9 z;c}F<>s|c=j;)d_{zs+%sW{IX{k!tTDdBP^37@@12RlTZZCF2TS=a3xoO(FphuGc8 z5tAh*9X;!PSY<)HR@k;;o9n+~tz8}m=~Zk22WQ% Jmvv4FO#qH?OmzSN delta 258 zcmeywc$R5`L^2CA0|SFlq{3++#a`m+>&pI^m5J9x@@0vSFi=Rm#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8me}W_Rf_RU68XZ zAvyW6f=2sA$rFYxMOPYfl8smFN?OpfIhwg8m}!cEVQW!W@5Gd4Qr6b9m-sbE%}q+0 z#AZCJI5R72mC6}b)thTQgC<*clX84Z^4g_>N1JxvXx;TbtOx!xjk?(*4 z2TN)ApZ}Ay`PVGkVq3b$P;s(^SLO1&48ComyH=X?Jio9??3oG2rKW}!*NerD;>v=p zJ1vBSs+Gj|tACgv5x-Mq+RMF$!n%uCsu+Gb=G1gO7AWDg6c&pI^NrqRBbEaR;W1x_DiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahQo-U3d6?0NA9OP|K;9(88$xzD7$;0r7 z$%v8VT}8rw!7TwB57xi3o+5AM>zu}O#%IT@$;@k}eC%Y^u{zdw)$B!=+3{uth8Yej z4UQTN@7kRbjIJo;EHj;Xt>(iPx2`XC&-Uh)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQh_GQfn1)z|4iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1Jz`Cx;TbtOguZmo9}=E zhfC^@JO588NvxihJNeuvTjPece-*YA6*edzNbFEg7h5*hdd5fbEyXX^2-Wd)7GITl z=r%1Oke9jT=B`UB)0212wEQ?D=C_snp@R4oiyxo89AdLhzw(Vt*r$(&P5gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?iKAlq)w6QGcIiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_)thTQgC<*clX84Z^4g_>N1J!Kuba4#Pn7DM}ZK1;o z94^h=F0WPp|KHArhmBB_V} zV8bhsFCBLcZdab&c|jzPML=TR){9TlRD?v2nFVdQ&MBb@0IzX&x&QzG delta 344 zcmX@iw3vB&pI^m5Gmo;m<1NQlOA{iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag*JY5_^D&{079N?E=Wo3PkqbMBg$|zxd zX73&s!9x=-uoTUid?2XD*TJu|P-=$q)rBTkk6Pw_cQini-NW7iHwUE zo+Mn}`~BT}#^OUhUg_`la$h^7Fp;Ok``g|73D%Onr%umZtGG%+!kjtvjGugqMO516 o-Jjnz8@xa9rfqYeZ7(q3VwN~n%>Ap-3-ktqr>mdKI;Vst0QBmHT>t<8 diff --git a/graphics/items/icons/sticky_barb.png b/graphics/items/icons/sticky_barb.png index 735d3a051f3575e680187ad33835449a4ce6944c..8147e8de74d12bde693981b3535185ebc5af3ed7 100644 GIT binary patch delta 172 zcmX@Z^qp~n1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H?x;TbtOx!!cn~y<} z$BFgT-}N?Y=liVLHAk_H_57s_&Hr56=dd&RG)#43kXUBI#+g#_Zj#F_MwW?ZPH#B2 zBqDR+^a^X~6`v~RGW=PkoMWByg5lW7N^Nd$efQ delta 257 zcmey)c!p_$L^2CA0|SFlq{3++#a`m+>&pI^NrqQhVx}0&dZ3VaiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag}o-U3d6?5kHUF1EWz~NHJ93Z~pC6kl5 zLSm!Y%YUo4EED_tt@bXrWf8;bmPnrweDbUd_yx-?xkG z<9{oD>e%w~H>nmdKI;Vst0CB%q A4FCWD diff --git a/graphics/items/icons/stone_plate.png b/graphics/items/icons/stone_plate.png index 8af90a8a655d0a479dd16e4e9f414bf371dd5834..4aa9ba284898638a9231576d2bd67d1a85e2272f 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqQhWWoZE7NC%LiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cN)thTQgC<*clX84Z^4g_>N1Jy)%x;TbtOgwwRk*~pk z!zD09&pI^m5JAc^UL9wa-fiSiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyahco-U3d6?2jk7MLZ7h$I9AH5IkQ&Y98E zD|#SDO;}t!H91*X;`mL8&g7m4Gpv*ggPI)YsB~mzt#jBWdBlXRbV7*Ll*1uuNjYIG v#Z6T+BX=_O99|N~SIpbdeqbP0l+XkKkC;-G diff --git a/graphics/items/icons/tanga_berry.png b/graphics/items/icons/tanga_berry.png index 37f8e2465647f01a9a0419795c50ebef6ef45551..1c552fb6d6f578cfe702c276222c14cb925667c0 100755 GIT binary patch delta 235 zcmZ3$yp3ss1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|`ba4#Pn7DM}X}-e> zJS-oXeg6EHzhf#;u*l1{L_aVsf~ipRe|yKh_l_MiW*Uiwu4Ojfo~!1jqme7PC+zLs z)r@M4>u#-o-Q>yC`oOv5s9*Gos1Ct72mBdpIM*1~i!3{M_(=G-<+^^=$6F>@EITEb zw9QJXY3{kbbEUnM%eVx3Yo$zr7YbN!_MKBX&pI^m5JAcDOs@fKTt@##5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mJLlmz(&GyF#d2LigCfoh68T^vI+ChnbJDRjVq zgE_aQ=E;A4zO*2gV|v0 zK(|D}>7|Sn<6bG5>}ERR{%gldp!E!%u6{1-oD!M<7`au5 delta 272 zcmZo>y3I5}BAJDmfq_9NQsFd^VlVOZb!C6dB*UxBFLksr11Kb3;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+Tbqr;B4q#hl~>1z`g&F0KPNoxHrd4CYPP zR2(r$Da2{-U5lJ30hg}8#fL3*cuxr$<(r%FnzpSFX4=%#>$_mihRlQK&Kb-+G4-I@ zv4tK+%Vu)esx8~BAmf(0pzgBD3R^8T2g?<)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRMTXuzOAy7!X#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mzopr0Eob0j{pDw diff --git a/graphics/items/icons/wacan_berry.png b/graphics/items/icons/wacan_berry.png index af113c9b58ae3c126b0d02334e893ebd40b4659b..61e94c642749a4138325b56438b3f1de0fd55b42 100755 GIT binary patch delta 208 zcmZo-p3O8tf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfoi%uT^vI+CN7;A$k(92 z_P?(pfWH_P^oxj1P0Wx$QpFhj-hr#d|ijy09GE*mHnGnomyIpxBsatpdx* zxuOR|=Skk3ETS+mMBq~BWC=#w&OqTKwL9x3_-NPN$Q3xHnPl_pciaJ)4Av8;-QN0n z1)SKiD84RN_HU4l+xdTf*0)-(9edx>|Ni%K=Gr=Dl_!kJeL!b1c)I$ztaD0e0suT7 BUT6RS delta 311 zcmbQu)WkeNBAJDmfq_9NQsFd^VlVOZb!C6d%EW7I#MP-h1t=t5;u=vBoS#-wo>-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|QPZ!6KiaD(lZ26iEcv>e*A6a5w9kHwF zDC2}l%nB~X;fqT8t{kiOzxQCt7U_BSmOoFwDVDU|;qMlcv-Sxamjp4rVrpL~?)2O) z^SN9C^XN7u0Ngk@XxGyc~wssj|=WCJ>tob+k5v7)A8u!4c&DSj`8<+?t~g% z=zToZP}6y$>|B#y3~w@Aax|t)og5~x&wQQxp?~_@eleU2k}kD;VOb4yC4;A{pUXO@ GgeCx1rgeS* diff --git a/graphics/items/icons/water_gem.png b/graphics/items/icons/water_gem.png index 79e0ca07f310c44b903e9bb08ac672581602f733..555d92ccca9b26a03b5981747b136c2fc568091d 100644 GIT binary patch delta 177 zcmaFJ^oMbR1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jz`Ex;TbtOguZmo9}=E zhfAu&i@*6XF3DGS8>DW8|U+qb9g#~J(6yt5uN V>DI^n$OhWW;OXk;vd$@?2>?cgRgC}u delta 278 zcmeyv_>gIWL^2CA0|SFlq{3++#a`m+>&pI^nN?g!r{4a-YM_vKiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaegRB@%N(oqKzyhWH$inS9|wg0iY=hg#zG3jwOC zqV64;X_mdKI;Vst04I-DX#fBK diff --git a/graphics/items/icons/water_memory.png b/graphics/items/icons/water_memory.png index d7096f57cc1b3a5e23ca67229f934183d5a0bbc5..054c05d116189f0484d7a34c52fd61361052e9db 100755 GIT binary patch delta 245 zcmZ3;e1K_!1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$heba4#Pn7DM}X}-e> zJS>|Hj|Is6{J;OL6O(JEUTCe8@uBRSx4-!>yv}^@sO494)(T;9r;MzpzwM4@3A8JS z&tzJEqc^$D!%H&QBze`cBTGYk{E`Jv@ZM*!jGtP{qV# z@ArIU+5D9copHJCldE8MN?!3*Q{{bkDbBT`zrUn531ONa4 delta 342 zcmV-c0jd7L0-*zt7-Iwj0000ISs=>*000McNliru;{^f^2Q@8$`OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCpQo4()@$Q3Q&dN!p;laD_ zJ_M;+wQBlAnca6`oJs-4xA(vt$(b_^85r-ryT1`+u##FJXoKwCyZ=B2h^3W>2;RMW z|24>H@p9AB@V)o$?*Vg)L)z2!-UVx65Gw_`#rp1Vu$_z{9Y7956$9f|piJ=TgAhl{ oY;|$neGujyncZ+Us;6-P0M*w-nHc$%DF6Tf07*qoM6N<$f;4f7Qvd(} diff --git a/graphics/items/icons/wave_incense.png b/graphics/items/icons/wave_incense.png index aec3fd05efd0cb8fd4a25429af26f80b1100e4f2..5fc560eb86b7eb4d93217076c0aa10a90958206f 100755 GIT binary patch delta 229 zcmbQhyn$(g1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J%s;ba4#Pn7DOfAm3pH z9_RGqoO}OwrfbONUiJKab8<(>ZbQbn_4^rYPPuT@Oc0)QdM)?WsNCrF;_a+k7z@f? zuzbJqg}>veg3#5iakhtUHB8(oEqKshVzH;;#HbG!E?@RginR$0_hXj~ysGwe%bm>& zdLEXpaeHMj#Vh*vr{gA7n>Lz+rN8658^NwP-D}>vBkqq`rvE-Fz&5?@^W)meWAYWu Yh8@h8tkoN)0Nu*q>FVdQ&MBb@0Ap}#s{jB1 delta 325 zcmdnMG=X`7L^2CA0|SFlq{3++#a`m+>&pI^m5J9_;io~+9iWhSiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyah0JzX3_D&|b>x8*xzz|(qr9>eARqF#yZ z8V2e`d;+Sk?uEIm5pB*tu+#HWkQ&>*gH`_Lt2Rx3!hh*(c>2y8Yj^3i{7VtFjk}`n z7%%L5RYrEmdKI;Vst0HZT}LI3~& diff --git a/graphics/items/icons/weakness_policy.png b/graphics/items/icons/weakness_policy.png index d8f0b45531de71a01ce8ead3c4921103ed38dbda..76d26e7e493c3990d69acdca886529b5c9782739 100755 GIT binary patch delta 153 zcmdnP^n`JO1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jwk3x;TbtOx!!sk?Vi~ z2a9m|*Z=-`Oi8?E7o0C2oZQTno&Em;_r2*(<%|ImtaqA>mRvVb+@beKdtu2rzn1!0 v28OGhN>}M@xaV+AYvQI`OLqS~9v+jT#?0lYp=$v&p25@AkJV+JQ$iB}r=mm( delta 241 zcmaFDxQA(iL^2CA0|SFlq{3++#a`m+>&pI^m5J9_+_CrjWuTCFiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyag>o-U3d6?2jk6xa>8oEjM>C@*1Q?NaF5 zIJuikK(g6V&Fk1Hw_{%C68eN)rgDk(t>PA#ptHCsD=J88&SI%0EKemIzi2q$dB(&h juw8Mt)KPmEMurPtC1)xZRg?pbXYh3Ob6Lmil+XkK>8MJB diff --git a/graphics/items/icons/whipped_dream.png b/graphics/items/icons/whipped_dream.png index 9cf9c959a708a05977703674671c5d0f84d567f8..0d3b4249844d480db9239bb8c1ed446ff9157d0d 100755 GIT binary patch delta 217 zcmeBRUcxj%f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfodjux;TbtOq@C)P^ejf z$K`Iy*;9Y@@33rj?KaM}bGSd7w=wnS!Upy{GjoG_fnq+1+#;?!tM)l9Seq?*&&O{| z_w58pi`PPq7x>@x9CVQ0JH^^O@j;em)y9{(0$GaFl$7nyr@5*w$x!Lu=J=$4%i&v( zFKaKf3UO_}tQ~LU8*|L}*6*)>s}8HM7Vq54d4V^LzhCn2;<)P%Su|L*l{10vWAJqK Kb6Mw<&;$S-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X|=PZ!6KiaE&%2N-&oJY*DIQ~DHz+$B6` zF6dI4b39|o5|(iFMN&(aFijR>Dw?uD#!X#Sp`fMU$ehNURP&B072O*rZSu69aX7;6 z=#3jUQmPaqLQ{8jZ|uCi#fZ^hxy|LH#qv_hElzBG7JVym!-{O?z^bj=Xp| z^X1damlfQ)eZ6PLnem=VJmWKa+O(M*pBp36W+@!vZ)%$Hu!)HwpIu3#@QIZx(5(!f Lu6{1-oD!M<_nmQ= diff --git a/graphics/items/icons/white_apricorn.png b/graphics/items/icons/white_apricorn.png index c2ea5617423746fbfb79a815b4c5e97dea5af256..976779af701941c3796abf24d07df566b74c503c 100755 GIT binary patch delta 190 zcmaFQ)X6kKf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfodu|T^vI+Ca%30$k(92 z!yMoyIrVpZgxU+WPnp8?zb?5bES;~MG(YuavDlNCkk{Q+{#==hq+Gld9X~bo+XTca ze6aI*$EapAnNRhLonT4hcRtYr3#~W2Ss?l2$p3O5HQ9$U$y!Crk1lqvxVs_$R@LX` iTfdYt{|Eek!cy~zWnb!cy$wJ|FnGH9xvXyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyaf?o-U3d6?2jk6vPa;47j+s94wu>+_V;U z3dk)E+F3C%J42!6aZp~|J1Hryi9&_??1e%HWt=~Mnsgzc!)n2%Pe}^uJ`86H_03s} z4$PA9jp=cII49+C7>l~DuIRy;)20b>88F^%uZn&X5lZ{PS@m*uVf_KwgJQ$WX j?CCV%H&m$XlVD)*{;LtU@2JLlmz(&GyF#d2LigCfoh69T^vI+CN7=m$ag@2 zgQa^>(*OStxP-c0{q8>YG0S_h>mQ541I^|m#X3S3A5Puu`Q+wuR_ZBp@Iqf5Ij(1Z zFSwURO}w@&Xt!vRiu8W>4d*1zWg9D%bUqDYD2QLm`hV@_2NkL@4>Xr6Gxon%|0w%& d)?wSnHe&Nw?Bbm7yn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagdo-U3d6?2jk4)9B`POxxlYicsETf8Yd zBSXRGkcx?}ZYYDAVA#b#F^qIBEHnRjN&v4h*F|8@caXbkObN*w3)_fMrr diff --git a/graphics/items/icons/wise_glasses.png b/graphics/items/icons/wise_glasses.png index a3982f18162821a55af23532574fcbdf4086c633..5500baa320f30db93b7bee3ec28f6bd19e1ac5f3 100644 GIT binary patch delta 173 zcmX@h^n-DN1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J$H^x;TbtOguZmo9}=E zhl^}L)qm;f_uX1kC+{-)tma?PV=p6MTFCm~CF_Kz!V9KEOq{uHRr5|WrX-dL#~q}U z{S>Og7iwwVW}H@G6gqQ~jKH^DOu_Gxf0XI0TJ!8!7DHoW+GWXS?E9?seeW{5th;M< Q6=)}er>mdKI;Vst0A#^UJpcdz delta 258 zcmeytc$R5`L^2CA0|SFlq{3++#a`m+>&pI^NrqRMEm_j?3{XhC#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mDkl-4t>i%!DUQPFsqzpN0y4z!TL)78&qol`;+01U-X A4FCWD diff --git a/graphics/items/icons/x_special_defense.png b/graphics/items/icons/x_special_defense.png index 54a3e00fdfc4a7552ac0baeed26766786478932d..18dd6d5cc8ae220c01f04c905c25c17af36c8d02 100755 GIT binary patch delta 233 zcmbQmyoG6k1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1Jx|{ba4#Pn7DMpX`yBV z9_HkkNBaN&e{gE4iOS)n!FO+nN)=@PcV)0C)cCw$L3@_`F6pAp_jc#C-I;smjh@P( z;BM=qCXc3R8djYzIk}$Wo34A(52Z(MrW=YITiP+zXq+FVdQ&MBb@07r3cZU6uP delta 335 zcmdnOG>dtHL^2CA0|SFlq{3++#a`m+>&pI^m5JBLOyvKyGe9Bn64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR>atbvx(BR_o3u>us3-+8G cu)+WsTwMA#0>>3Xfv#upboFyt=akR{0OHYatpET3 diff --git a/graphics/items/icons/yache_berry.png b/graphics/items/icons/yache_berry.png index 08bb40fcfbdf1599583ddc61db2e86a91e2ddcc3..1d53ed6338493c494e6f77d6b67fb95294275149 100755 GIT binary patch delta 223 zcmeBXUd1#)f|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfof)Yx;TbtOk6s#m+OcE zPjmQI`+fhp<1ZZw$!l)r<}tiKORPHfzvq*q`LS}62N-?}a=7mAxAk>7>vKH8H``pW zzo0yL0pH2D)n_;tU3jtSx1D1^yn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyagLJY5_^D(19aIL&*=fQRitS~Hu=LoT0y zt=s`>D?*;1Q?!q4u!>#qmF+_ALeG{eheO-_>rRwS`^!0X{RYjiTwg8!v##ClTiSVv zEjD<5U*e?sH_EQBirMhp*nWlfbfcq}|7v^lldb`d)IBI?Tgh#w*R_p49gTe~DWM4fgCuyw diff --git a/graphics/items/icons/yellow_apricorn.png b/graphics/items/icons/yellow_apricorn.png index 4dd12c5eb664d66cb2d48b1261561bb0cc5ae3f5..293b4054f216ddc444c2933a50c98efc2096fd31 100755 GIT binary patch delta 196 zcmeys)Xy|Qf|G-pfq~)r%Cn~?R@>JLlmz(&GyF#d2LigCfokeJT^vI+Ca#@$k?)8C z2g^~`jbH!&-!AlyYpY$EaD17O+lDFq&MC(?ec39Ml{)d8!{%_+Q02YqPG?pHgifoI z(JyKiV_|v!R!cC7wc~l1+Jh_YPBU08vS%>(-DEt?$HTnvNVP%i&xOWkAD*&T?w@xs p`S8P@($9UzekrH^54`_`>D&vJKOe0WE9Z*QT#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m_b7?W~xX?V{ZBI4Cdf-7QOICDli9e2-L`EZd$vRb42!wlN^}>CuG?7bY?#^i}WF zoFL5gY{m|W_CuB@k9iBu*|H^sB|SPSOydlLIon1P0e!Bd{t_vPoR%HzhZ=W9ODQr= kVftit$mU4H6U!u^V~e!n7N5!A19TIEr>mdKI;Vst0Q~u4DF6Tf diff --git a/graphics/items/icons/yellow_nectar.png b/graphics/items/icons/yellow_nectar.png index fff8ae6977c5533c2c9cce09d1d608990bf6a6f6..c097f4092645398c6ecb3763af1efe9d7b286c61 100755 GIT binary patch delta 211 zcmey(G>>V51SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1J(3;x;TbtOx!#1B;R2L z9@c}>0@MEgzhk#pCZcMMRgj*sg0gyxy->WKzsgTe~DWM4f DGZkAN delta 304 zcmbQo^qXmdL^2CA0|SFlq{3++#a`m+>&pI^m5J9#=Ddr%6i`UK#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8m1Nw?LY%E;CIc0K+lvEbWa|z3tt7bS_BzdYmU6+;B zDd4xu&3$u}REu)ty^9y$Of?fcGtuty#fz6ror;x@H0)Nd@+;ZbJZszcb2qI&$2rTY x*FJx@w^BNB-L$&zdCF(5^7J${6_^P!FzEbLJtmmdxCZDv22WQ%mvv4FO#nRWY#IOn diff --git a/graphics/items/icons/zap_plate.png b/graphics/items/icons/zap_plate.png index 80fed9a1e587e1b1dd7e13c78c74229019756f4c..3e355ca99592f43a5ae1f681ca22b359ab3ee3ad 100644 GIT binary patch delta 169 zcmaFN^o4PP1SbbG0|UeLm1j>)thTQgC<*clX84Z^4g_>N1JxvZx;TbtOx!xjk?(*4 z2g_8^KmYr)`PVGkVq3b$P;s(^SLO1&0=*3Fg5ZTl^O)Dh%($$;zR delta 280 zcmeyu_?T&eL^2CA0|SFlq{3++#a`m+>&pI^NrqRMDW&A^RiKb~iEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}8B|(0{3=Yq3qyafqo-U3d6?0NAoaJp$;9*U;abUh62cNJLlmz(&GyF#d2LigCfoj@4T^vI+CT^W*$kd|1 z!_t|f^y@$SZWfnCBG>PTi5NRLdA#JGIFJ9{j598eZ&ZpjGfz+r-@3Bv$-GlL9pw&6 zv)wP0{!}DlGSU2rr_555-L1 z;O^rR;ODMTmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6?zK#qG8~eHcB(hFa zw6AAO@^*Lmzm)ycQJ^eiNswPKgTu2MX+X{lPZ!6KiaE&%3UUTqKycuOlh>(ZZ2^4~ zCQUNzIlO{pNHuaM-Z4>DaNRpwkOv*c=_% zE{3jDG$=PVSm#yhR^SqoP{*({CX(SGYe1kx#A?2I7xo6R(H-vVak4Z0(*e-b#dbEMiYO9 zREUlnOGy}6h%5nhNSSaxrP~6AOGzjnxoDN^tB4wP%ghNrsOukx06}1I#Z_R)apm$X z;+8`(3FkGfCRrR41^I*pDfP3E6{rSOwY7k`n}81aKw74MRZI zey{PAtb^ZpqVHV~gazkItJ6COvLs&bAk-6R$q;N_ZMTGqTG-OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G@eL_t(|ob8fJYU4ltZanoEe< z82Ua+Al^$LFc^a@kk2A08e&0dJp__7uyMgIV=~MS#@1ppB{_d3X^+Rv- zkCS4)R-SM2cmK+)xG7nfGH){zPq#v*Sk(fbWd(sc4^PG%f0rgFC3JNiOeu^fE}&YF zMB=4+%KXwC?S)pXS;v;FR6_3&a-pz5AP{t!Umnx!p`%xmBFEV;e(iL&eCU00Zu`ua z);y!QSV5pETJDLXuDfGQT+<4nu?jn1)T)OELUCmkm5{q|p!JmrR?fR4Y&}uPY}RUl zhk7on8XsCne@(KLK&5DPcHx86QaNVP=L+8zN&k&+W>pC75 zie^GstUGwb|KD$1BVsXKoQLK)bD@;3AM68LUx@-DpATw-*)&aWJT&d32OqH{^H7wS zur*;pp(wuG#vm?u?48?wJcKOpkmzTMHuA(|-9pzwe?q3kr5z{Zams8vLN+*ID9ysL zEsLhwA1veY@R@x8E(mCcrKb4u$+PBd{mMldF5To8C-EG|Nk_YYST^IGfB zHFq^2vNjT10;- zzEU6Y`wlEH7{T1X#50$m(M^?l&OMM_b9V7y06k`+-!lnt>W2nA1d~ZS0v>z@^HDKT z%`v_+5bBr_pVG|03IGHCPN8-%kOs(L5kU?M7|fTrV1ceD(O?oR2Oai}b{r2M5w*yO zv0T+R@KjVV06R2jm3+*r`tFG-!VyFp0I@I$vur zaH1PQIc#1p4Fk;QW!`D|_{}lh@>kX=~AtfOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00F^CL_t(|oVAoYa)U4shSg~%_d}e(QmbaQ zi3@7m7f8lcs@UOTbezHa5;0)oDr){+vEM!H2G}UJ@{CGSTaliJ>-j<`F0Oj>S@Ic0W;qP^@#!~r$A{XN{4iaoS}qn zKn~i44v~FLe@uOACFxa%qKWAs2pEe5jNL$Y7xLT1fL?)UKp=n)A|eV96Ltg58TZ#u z1^R;~rip=jq=^dy+L9}2L}2j!)CWm$?0@(r48?#%6Vp(o8>BJ=68LdFUc^5i&J0ju zIW3?{MKW_ItT>|R^-zJ6Tml_VD;o-~fnTf8f1TyFW|9KFYD6w1)2r@#^ZRcDKsT~a z`XJ=Ts(%0ql#Dch3`-g8MR}qQ&G5;C!kN;E=Pi|S?-gQ9TgqQ?zE}EEHudj^ iSruOBYWWxX&+7)>RvE$&yoz`L0000&+!1 zFE@7fEk7~Ki;bQAjRZszRq12d*xNVkqVB|^A0uPod1GS_mM7Y(p3R?&VBXl-Q?q|H zLv0|ymlE*2WNS~BlFUW)jS+xinBX81m^SvcDJfZqSQ^{UL1&{OgVCWD@nl!Nu&;bP zZE$Tgq1GxwzQzKyGZ-OHjB>pmZl9YnNhYg?jg--TBLR^^Brw9V1Hs}inPNf!)WcmIwtobYRVoT_dnhn}$CN6T)bY4`pooTSTNlwULm z7!kMOp9G)bAJ>vkBSiiC1Aessg14)WhpS}eE0000< KMNUMnLSTaQOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G%aL_t(|ob8i8YAZ1i#?=`_nn#Y1Be?TD zMh~`drwPmfY)Ij=YzUgbKzs(*!MQ-N%V2P!GrVuKHayl&AYF>6@VDQ3{`^MLhVZ+7 z>au>&XxIIC#U#T+;r^PxOrXwdSzoC4;$wdSR4A3yN0LlJe{$iyfHNLt z>>Hb$;Tr(^>SGg@v2O{DF+Ti1ixf07M>Vg{Yg%->@MG;+oWVlYl>U99S{k9Bch>w_SWA8)Z4rh;5)C-01y zp)|(zL05F>!?Qhq%oRhcKHfsr40PC~k|aw@P~Rs6@~R&EpwIzB7vraCaWB&uJWhcd zo3Q}ZJn_CRdNk(MkvsSJqj}8I`GNW7NKhR#TBfDXex~$y;hO=U1`qYSfCd7#=nb4P zD)}7=F`us5$m0OASBR(c2(Q?`4c@=nNk`s$whHJeNW6KU-pzKOYrEFNw}&f$-<$o@ z-OKKC{r^)NzNfc$+iy?0xuO?qyWj6NU+9&L?dD7U-uegd0&ZT|;#j=^0000r@S3KxJED>RmnnUnDP}d96b_Fq{SZ7ph4g~*Ex+}O{A+>g;Uz>k{ zf;EGrr_mj$;4PzpTYqULC|Q=%$$o>J??r$gU9Th#^{D z>bE5d>IzcOv}|~#uOi6LBCKH?Zq1Vp+FYVMwA(0L4Q6_*9;*muhEeasgRT$yDgya# z7()WgQM>Cpfpr92PaBRAF7#CdG=2#Wd9p;;rn^Wx#XO=A3ZnYluN^N zmODfJa-VX3=H&|R5Abn002ovPDHLkV1g>( B+;ac` delta 533 zcmV+w0_y#g1l|OY7-Iwj0000V?qFvC000McNliru;{yZ%1vtQQ2OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DwYL_t(|oXt})Zo@DP)E0#Qa{}Z81u|tZ zf_5)J>jSkl1X_ZK9Q?2P6_rTEb!<7!ST2VP@5~En8?!9-0>Fh{so;AM>@WUBM^@gA zFHP|3195In!p+%0d1ilMtH$6GulFwTP4%w4FrjUH@)0K7e_oHmVW)giq3;96NAWOV zT2x?e6L(BFE-o9l>49k75H|~!`qbaria7DlgB$gdG4_Is4MdmxEt2%X?zrAZem&l* zlRg$&%|?jP(5Wz>l^>yFuHPitZ6}6cA2YJvfn29|;QA03Yv`-uvkXA&BqKICBgpcA zhrGnihj4%Uf6(@rxe@)AAqy4fe3Dsw5xMm$6#V6iF{3)kk^V`fphCqtA4h^G9qEXy z3I!K@9wD773$2}VDvgY%a(AQ|M_(8@6^dZOxflT&R$;^Z$h|2?2%a;V5?@5OVe^_f6-;M0d7`W^F6Ex!oCz=t!$!oZV%Yr;{4VUHrz<*Xh XYt}d-?>x4w00000NkvXXu0mjfj78;t diff --git a/graphics/object_events/pics/berry_trees/kebia.png b/graphics/object_events/pics/berry_trees/kebia.png index 03efc73c1f5c69caac24335cac1abb1958e730fe..413ef9b4b43dc1db32a518b5b872d86358eb7469 100644 GIT binary patch delta 448 zcmV;x0YCoO1c?NY7zqdi0002m9*t&^dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004aNkl6A^{i+8kwrxM z{W*UrkAS3~UGdxewE=<&EQO(%8drR~sA%J?8UVC5O5_3G^CQChib@hQ1E(Om123nn`c41Eblu#27%RD0@=30al= zS=9zOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DeSL_t(|ob8gaj)O1^hBI9x-p>Tx9tSb8 z#0l($lqWcK>QavODKAbqskGHe47Z#vi}Q)t|8E;1{?A`I(#iHGetJ)(HR(6WLo$>ip81%e7SThV|xa)G%CmzCMH z1ck)btVtDU2!oDRB*I{HRFm^AOaQiq#?w5I) z*c&3IUI@@&e=FQbH4UvO!Z_$~;0kj$M=M2`mT*bq$_kvB=8j?Ho|aD>c)r)8OB@rf z$2l#;>Z9k<-wmT*6yUfC_31p2NYkcJHwqDdWO0#|V$U>@iSLAhY}c7iQ?-lP#8MO;F6L!>+pcx3YrVV7 zUR%!e)A&U8%5tWk#)rENu+;#Q>MMPF($F;c29wqV|6t~oed+D4i>^BK=M7DR2{V5; z)yBkPVUR}-UGH~&)RD0BuLPsT&Iss>Yrpps-1oaqsFh(^8v zBXNIEYD`8u^NxJcLFn%PpnHah-z)GQy~>f%g1sWfenxNv5H#TtTHA?s2jAyKg|F)> zh=UC2&8b(9RY7ma5lJ{&Zi)kdwFSQL4ijN>L?5d>l$^bq)J9;>kYrsy8_Ev5i~8n2Gcm z9XZdW;uW{H@V?$#J474}MDzk7WZbY!t^4@0rHawee2R^zdFl#G(6$ zf_Ze1cXpN(Y>4}g9@kRxn-TF`Y5L=t3U4d-g3k1f^HmIw0|(OQ92UuY@Ra#W?k2bW o!Q3Clhn%(rkIY~4wf=Se0P5^1ZOV1ZP1_ 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 KMNUMnLSTZ!<=mG5 diff --git a/graphics/object_events/pics/berry_trees/shuca.png b/graphics/object_events/pics/berry_trees/shuca.png index 4e95bb4f6acfee44d6fb020108d23815aede5d6f..dec160ae674056aefcdf22b5c9d5a346d65d86f6 100644 GIT binary patch delta 479 zcmV<50U-YV1gHd%7zqdi0002m9*t&^dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004(NklD=M3JeUv~ef|e{{e`E)>Ll|2Fi9>6V9TX=FPNQs0(g?aw zo6UGAkdYw9wnd5KGdsxQ)>s0)N$NnhDQ`y5FOAO{`)-7hVhqCg%noKkN+=_eFL@|( zM~7xNN4U<^QUQM!75%OW>+4mYvvde=7%J3#?>7-xD{{TcRIzr4J6$~^>?up(5_rN~ zF{Pv>7e=fJJ9@_AsZ#;Rg!}%O$4KfjBF9WiLpNC8YIw(7aM~re_=4Ts_Xqx>{Q-7m VH+u8^tZ@JU002ovPDHLkV1naL;!*$r delta 565 zcmV-50?PfU1pWk&7-Iwj0000V?qFvC000McNliru;{yW~FgcUI$OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E*&L_t(|ob6LRPs1<}^^nPPCkB2?kh-vR zgN<&C`3dZ{X9mXuGMjx;@^4zCN*<8tK!*MX?%9Qwrp?U2Mat{beZ0%vRfvE4nuX72y`Qkh?pf=8QfWY31KA2zzQC)$* z*5U?y#>3eMe~O^8WWR)CJIL)2UBC2;0lfdHb`%}$YD_arVv~U-x>Pz##5I=2S4#m{l!|FWm00000NkvXXu0mjf DOo8|4 diff --git a/graphics/object_events/pics/berry_trees/tanga.png b/graphics/object_events/pics/berry_trees/tanga.png index 28e86f6f4d98a5248ce093f7745594e8ee66deb6..0bba806bc4667b0b24b790f14ce81be9e76906ae 100644 GIT binary patch delta 526 zcmV+p0`dL11=j?S7zqdi0002m9*t&^dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005TNkl#(ChZ@VHaK5$j?Zb?woiQG6E6lc zKTWLorG6#iCy5pRLV;S@PbD8yV$CnqS(aB~`BO1s8WRiNRUTyX^rY)41;)gR56^$* z3YowL3lX3(c*%!KT4p9%qHn-qsA2)LXf?beLX+-h$+6#ZOLh_+#JMN(lI6Z_Xgb!d*1|$l(nt*+ec3hB z3*jDbo13lwq9Ca?Z2cOfnmlF@yz~WLkLY&>Q;&Ou9)%an^0@(|IZHzTM$_{ujKA)_2@e|84wIi8d{N7yn~?18?Fcg4>v! Q_W%F@07*qoM6N<$f)ZB%;{X5v delta 625 zcmV-%0*?LH1i1x}7-Iwj0000V?qFvC000McNliru;{yW~IS3P@a-jeK02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G@eL_t(|ob8i6P9s4Og*!lM32_R@NfwC% z?52d>lWo>jlA{i`yCi~%;Rtq)&CV$t5PCC0J0Y<|FlX3THMWGt28oP-4*cd>_48H# zIQPB2>XJODm*alCeB|MyP(J1l6GEf4B$tr2_}Cu+l@LqJe?D*u9QeR%$$gqweF`yY z0403#*c%(~;SGRvWp6?}_Lg9bUc54TLcIi5QEf(EXTUJZ=t`^ub1b2W>??i&e^L;g4Wrp+z{kNu^)8?RgUxFL zWjv`t?}+nhchyE72avRa-<^khx)xdD|0j_@rX#OCtpa*763?E0TwJZ+SG(53+rt&W z@7d<(#m)MCef!jg_w?`i*JicT6>+ zZ}r=-w+y0`I)X`FIuQs}<=+rg(^~@KkRUb!zabE_KOJA`g$qR5S_gpe*ac#3dRl)< zIp;+wW+L@^HT=(|>}v$fEIBJ*5Y(FK_qww+#Nrv7-xWjVNg;ZppiOfqx-#y{Ph^?*wNONXiIgb#IrL6S?Md_e!jwA?&D;Qh> zFk9JO^hSW(2A8T)48Z~bA0Hcok*t4YfmB5BEJih2HTeZVALV-j_2pVMo0jc@t1rPq zx~PYaiv^Q<9%5ry0JKOKf>>H{Ndcstgn1k>HS`7$2Y@3T&=vr`g{p@f{o?>B(zk@x zwyoX(>^Lwz64^@;9O-3d6fE&tbDwd$4NH@$j}22%@ft5QU{^V0lrEyJt1qY_3*=y1d$M02Zo$!>@DV?+;_BfvN=F~YoNijHeEZOFwY;)o`tSl6?dbt z{@z0A>B;DgbI9%IGXk|s0|$NT;R3$vAHN{brsK_EIB?g;-wh?boetRVc?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K!#L_t(|ob8l7Z`wc@$MIlg?SZ+0Og&2s z-r!nCVzYdv9ovetDmHTGN0C?>RSHO5TLS6_2p%D2xiu24#Fy)HmNL{Ybg%lX|DXQP z>s_n$KPur6jB`MnVUQPR96CcJqIYKqf5`ffoJ+zPg!+s{f7=g1>1GQ@00Lnn;LsBS zz(rFIZw@xp)uK*a+>%0u8Ch;VRrQPY{asW5mp|9}Z4I#9+&@v&b-3Ja?yBRwSg#)n zV8EB_ycWp6@DwYg>MGAaXH_77;9&}iQ;6RzR286$G3YU-uxY}Yeb5keVw=duz(Y|5 zy!e$!i#8{me~X$~x?Y^58pawDPl#@{3n!CeLNuMxD3MY`)fyDngc2Rih~{DpWedkv zM&E*_*apW+D!?%Wk$ztRe5FT)J1-A{K7khLw-wy{N)b3#fOa2&XoJ83ECrqi|zygS=EtvKZb}%$YiZ-d$kqdo>bG*q{l)B^|}GLEcT2p4S+K* zE(L*xZ!gB_Lt&tJP!G7wx4^YOEDz}!*!%XMWISj9NY5^b`6IKd{cat$>);9uH>Ahv zep{EZUC%u7kuj{kO1Wp&!R*To!(R P00000NkvXXu0mjf)0R0h diff --git a/graphics/pokemon/alcremie/lemon_cream/front.png b/graphics/pokemon/alcremie/lemon_cream/front.png index b913e40be83ce0205be8e477426443efeb12128f..4fff85bc541af0d638890a80a876e4a600ff9295 100644 GIT binary patch delta 657 zcmV;C0&e}K2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl6>+ zZ}r=-w+y0`I)X`FIuQs}<=+rg(^~@KkRUb!zabE_KOJA`g$qR5S_gpe*ac#3dRl)< zIp;+wW+L@^HT=(|>}v$fEIBJ*5Y(FK_qww+#Nrv7-xWjVNg;ZppiOfqx-#y{Ph^?*wNONXiIgb#IrL6S?Md_e!jwA?&D;Qh> zFk9JO^hSW(2A8T)48Z~bA0Hcok*t4YfmB5BEJih2HTeZVALV-j_2pVMo0jc@t1rPq zx~PYaiv^Q<9%5ry0JKOKf>>H{Ndcstgn1k>HS`7$2Y@3T&=vr`g{p@f{o?>B(zk@x zwyoX(>^Lwz64^@;9O-3d6fE&tbDwd$4NH@$j}22%@ft5QU{^V0lrEyJt1qY_3*=y1d$M02Zo$!>@DV?+;_BfvN=F~YoNijHeEZOFwY;)o`tSl6?dbt z{@z0A>B;DgbI9%IGXk|s0|$NT;R3$vAHN{brsK_EIB?g;-wh?boetRVc?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K!#L_t(|ob8l7Z`wc@$MIlg?SZ+0Og&2s z-r!nCVzYdv9ovetDmHTGN0C?>RSHO5TLS6_2p%D2xiu24#Fy)HmNL{Ybg%lX|DXQP z>s_n$KPur6jB`MnVUQPR96CcJqIYKqf5`ffoJ+zPg!+s{f7=g1>1GQ@00Lnn;LsBS zz(rFIZw@xp)uK*a+>%0u8Ch;VRrQPY{asW5mp|9}Z4I#9+&@v&b-3Ja?yBRwSg#)n zV8EB_ycWp6@DwYg>MGAaXH_77;9&}iQ;6RzR286$G3YU-uxY}Yeb5keVw=duz(Y|5 zy!e$!i#8{me~X$~x?Y^58pawDPl#@{3n!CeLNuMxD3MY`)fyDngc2Rih~{DpWedkv zM&E*_*apW+D!?%Wk$ztRe5FT)J1-A{K7khLw-wy{N)b3#fOa2&XoJ83ECrqi|zygS=EtvKZb}%$YiZ-d$kqdo>bG*q{l)B^|}GLEcT2p4S+K* zE(L*xZ!gB_Lt&tJP!G7wx4^YOEDz}!*!%XMWISj9NY5^b`6IKd{cat$>);9uH>Ahv zep{EZUC%u7kuj{kO1Wp&!R*To!(R P00000NkvXXu0mjf)`B_i diff --git a/graphics/pokemon/alcremie/matcha_cream/back.png b/graphics/pokemon/alcremie/matcha_cream/back.png index 8f93ef92ef5658067c721151d77c9f08554ee387..2ef7e2d3bdf0c7c38a5c600a65984c71c7499975 100644 GIT binary patch delta 585 zcmV-P0=E6@1(5}i7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00062Nkl#rG5RAkOTl}3t)eG zCnVEL;06F7wPjX+eAf~+BL%o3p(0o=2fq`Yh+<>pi5@BM%Gq8sEa|VU5U?IxD z3F&?!%rj^N$ajbUkZTU=;?P(EVE1AO*%fj*&+9xR0*(5Y&@m+hiJ-MR07d{ITuXq7 zUN*LsLb3<|&sCfnC;)^jtYRY!di#ICXBFmnMAjSz1Aebx8z9n$fO1Rz-KVaGX$H6s zpgAD*0DTi0$S?u4gb2z_1dv7{m;joA3=WIhK-vsx0JI9|Xn`95q7hzJp;gezClTpM z4WN~(2bA}sQ-JR2Xev-HKPKo2*qX@Z^M?^lPq)+qssV3-4+QFpCy2p7J0gD~0x=^q zR|1t4H2_d`Q;+Q#09XT+VPc>b6@cyBo~;B`0P`?jyB^p7P3dO}fC`}Z0|MJVP0aqM zZCXYpAdUvGIw%H(FmEO&2;ew+IhLYu7g09~LM)JsenA|1L0bo{qCfqH@bIc%I=V>@ zfVzy;+%3Q<$8}xDDHkeoNrE*?fffLi6ky?oe1|vz?*aNab#PP%r4=dxZ!`GDH}>Nf Xzs(>#8w|Fp00000NkvXXu0mjf1eO7m delta 675 zcmV;U0$lx(1?vTn7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Iw5L_t(|ob8mqj?+L8#*-rbS!^O9rMcAC zpmkEEz<9h8(iMqVUx8>GE&Ci46y|y)eEmt_w;;jYJ`^+S*xvOY=n*5uk@EfY?Kk7u z%x3>y%>$~NNj*4ksBWi-tB%CDe$@J8_2pqyUkGi9y9s?Je>K(V?&pMV4Y165%Af`y zswNBoNEg5+00|(pQVL)@s?Ql<2>}rAMl&p+DK19m7_>mBvxx|G#i7wpBTRPp265C~hJm3~_k zhdvOyfO;AMe_9=w)-Ru2fYl>#fmh$%40AUEI^lZlmi%TS?|xA+k< zLJnqc&Kn0ni+z<}Usl4v*m7r?u6b4DkbjOjMDl)b0q@@m)0ahBe5E#z6uA%JF^}b! z@)>oRH5kK30Qp#!<#U=!NU$kB02c7R%*lZk3N5%F@_+rUegg>V6*utjDO>;m002ov JPDHLkV1hzCAZY*q diff --git a/graphics/pokemon/alcremie/matcha_cream/front.png b/graphics/pokemon/alcremie/matcha_cream/front.png index 39c3ab855a7ebbc1c07ab2a63f8df455198fff58..7dfe1b3073b5a6509fb70c9bd8295f78c3117996 100644 GIT binary patch delta 657 zcmV;C0&e}K2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl%6WuvEM=`HC`t!)b0k4HT*2T9 zfZ59KqBjEMHn>!cVh9!h`1sfujAVZ$3#1}~XECbLs>v?^`Y7KMs4v&5*|cmITzv@^ z(nURVTrHT?^AH=u0w71a5X73RODZ7wB+TQ8si8N3H~<{!fV=?kEmS?^=pP42mA)n9 zylw3UV8?;!k;q<(;7Bh++-q&V#rtv6ngPh3TO%Iq0Nj9n>O$AIhNPh$ybFIoLRBFG zaY*6zgg{;2QuBO5VCCbrJWjePK!zTGXr8DZl{N@%4)9fy=?PiOxrZN)Bqun276cGP zqjqWR2hcP7LEmomAc%y}Ixyr+V{b7B<-Vh>lg$C@TLTTIwdvaNgn9mW_AGSes<<1C z_4gJ^Pftc~oI`FupAjfu8aRDW4;S!V|M&%gHXUyU!-2a#{%$Dg?R3C?&s*SsK!fOb zQ4IYPfK~0;e$YpYEWdA}sjZn>H`5yu+rjDrylta*>`ZgacDo&33DQREwp0D6l*JWe r4|?1P?u6J^$RBEdaDF5I*k7@KdD|I|5I*Ww00000NkvXXu0mjf$<#eX delta 733 zcmV<30wVp{1*Ha%7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K!#L_t(|ob8mmj@m#JhH+tO%M6&=h9+Z) z$_-3nZ9!vsjFK*i7)z08*cl(R^-7R*Sw-4FpOA$oSo{{Sp__-w8B1Hl7t%*L?f>aN z*O^x9e^kOD80UaC!yqrtICO?cMDNZJ{*d({IhTYp2=y6@f3_cj(#;l*00hEDz@bY7 zfQzOa-W+VGt5u!4x+8@QGqT=&sp=Qohx@1iEd$^^j>u|l_-B-tXvE4ov zz<{r}c`cBC<0)21)m5H<&8k5D$ioyArx3qcsVYEMW6)zvVbg>)`=BA{#5R$Qfrp|B zc=0Qd7Hv*Ae-|~gbiFu9HHIC2_-t35zWOI$`+2T zjJ^d;u?>!uRDeYYBK^4m_)ZrJcU~R@y#+1O9~-#&oFcHO0PQ{k(GG!+*eqYNQwbof zFXBW1-0V{Yngxf_B-$+a6-Oy-Kui=|8`Jv}a2PX&e@7Vw-IXe2FG+AJ0f8|iss==g zEVl2f1h{DMH0p#xU>Q@6fGGjS5Ps;)mv}LQE*~OaYGZl=LL++*+=~b?#+15nC5nlM zdW1<}YGkV%60}DI7u^X0vZ^ETehd+jkjYxv_G&A@J*lRrNf(6<>U9HfS?n2I8USZr zTnYjWZ(oelhr&SdpdN6UZ-HxnSRT?daP;jz$#~EJke*!<^GD`T``tS1(7_cLZb*;S z{kAS+hn{)jBV$;7mGa1}gE_KO!>B(5(w>r(O`~>YOQPPOKIi$1{;$Sw5$DxPj%KPQ P00000NkvXXu0mjfpawPD diff --git a/graphics/pokemon/alcremie/mint_cream/front.png b/graphics/pokemon/alcremie/mint_cream/front.png index 68d3b5a4c0287c9dc69a4bb1580b216ad44ca860..e019cb098ac39083c6be6f3cc7bfc8b35a87db71 100644 GIT binary patch delta 657 zcmV;C0&e}L2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl!cVh9!h`1sfujAVZ$3#1}~XECbLs>v?^`Y7KMs4v&5*|cmITzv@^ z(nURVTr8N>^AH=u0-!~@5X91oO9~+EB+TQ8si8N3H~<{!fVKeeEmS?^=pP42k-jCg zwr%wWV8?;!k;q<(;7Bh++^coI#rttms{zQKTOuCp0Nj9n>O$Aoilm_)ybFIoLRBFG zaY*6zgg{+iQ}uj8VCCbrJWjePK!zTGXr8DZl{yG@4)9fy=?PhDt%o0uBqun276cGP zqjqWR2hcP7L0@n6Ac%y}Ixyr+V{b7B<-Vh>lg$C@TLTTIwdvaNgn9mW_AGSes<<1C z_4gJ^Pftc~oI`FupAo2C8aRDW4;S!V|M&%gHXUyU!-2a#{%$Dg?R3C?&s*SsK!xad zQ4IYPfK~0;e$YpYEWdA}sjZo6H`5yu+rjDrylta*>`ZgacDo&32~tPv)>Hkcl*JWe r4|?1P?u6J^$RBEdaDF5I*k7@Kpl}%2_jc6000000NkvXXu0mjf?EXKu delta 734 zcmV<40wMj`1*Qg&7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K%$L_t(|ob8l7Z`wc@$MIlg?SZ)gW$9UB z@CMg95}V~S?bueFRk4vfKgz(+s8V3)*b;I?! z^Lp26{f|mG1mhggW*Fqf8HdggiRj%K!XL6eB@Fb|?Xa z^+lWrfSYZqK(k<1nnargKjJ8b6^My~Yh!wU0uE!wfAA=ypu19q>?H{fB_J?nMAd*u zk;V3Xl>iqF9!H%}2rOgD5iljd7{Yg*`3Wy((B(tqOKnUKKxky|fqM}l#+XtUu0%2M zP>(PPOpR=nLxT2*;G#Q0Kvs1m-j5+75;9pU+g@!2xF^;0H0iO>LA`DOE{i>*O9SA{ zi%UVEaN&z_`cN1s9@GOa^DS`g56eS(2KK)FCm9bK0MfHdV*beNYQI~D?K-#u!wu=N zy5H7iY}Yf7d}Iu(uTt)rbufE&Xc+Z}K-yE1vT4+=Y)RA`)aN{Z(f`%>4UNRm5$PC7 Q-~a#s07*qoM6N<$g5r=x1poj5 diff --git a/graphics/pokemon/alcremie/rainbow_swirl/back.png b/graphics/pokemon/alcremie/rainbow_swirl/back.png index e7f558454d9320a913d5757a44a270badd02f476..06abc68128d00a8a6f38ca5c9fe5b4a160f84f8e 100644 GIT binary patch delta 588 zcmV-S0<-<|1(XGl7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00065Nkl`g!r@l25;}jqeqpl;qdy``4xIsemY)^i>0Lm6B>U}MSHmy^ zoCnYt5L$rTxCSB&05u_k{NMq&Q3wWrY9NBayf)xAL+Svv0y0|Q27su9msO}0)beq7 zdJ+SurD_5Bo^=9{J?%{eiuun3Edgs2>3n`OqUq_DT0k*iE%1gwP4O7f8K{3pgh!y1 zFr`!olvh*%K*dctwnqR+5-1E61Jx)1tmpPc(r+y#Xu^vOy+{o5=_a*tS-VxhSa#uNxV`7KlebBR099u7gz3-hM-PSk(_1 z-6RJoL02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I|DL_t(|ob8jbj?+L8hLa-wS!^O9orK^8 zPH3G}DX=`Ygt#IW>njkAPs=vE1O4vySaudksC}mtsqq zPyhZio}JD9JH6aPMBNym zem$BpXaIcDFN2r`kVnOO#$MKH^Ty2@zguVpaVixOhjlDhe~-Y zng|BKW;_;sgc!#mpZzH#jbnUi>dU7w z5OzK*^}MQfe?uU)0eR~Ix;ikW9^TpjYerxLPe0ok=5_>h!u8rLhm-6g;9G#&oJ|1~ zMd04JpN#bxxfc*U5Hj3;E>4VS#<|-B~KoMT1#Sq}@whMeF zm@r`WAg?3`(E#)e;*DB4D{+N?CyciMvMO~}SJ3%6e?Mi67;q(>%`^byVUsbT>!qCS ze|^y3u#jg4ST?sq$sWkGK4_dyl#>Vu>8kgAEC|r;<|d}uxBC|saE`#Sy?$%TdU?P9 zy0gzXY>(}}kb~ap`@IFA#r9a9K32j&8`-nW&-t+`p?n{6h{WaA07v_KV*0wutB=%X zMv;dAJsxvYf2i-UE)uP|2M{-PUEk%ofCQW3BVYlq>XIC2q0oZ6A^+=d`VBQ!7~-Yp RNG|{Y002ovPDHLkV1jaVCn^8{ diff --git a/graphics/pokemon/alcremie/ruby_cream/front.png b/graphics/pokemon/alcremie/ruby_cream/front.png index 7196c7054bf2a69d073957e04cb1f239c94b7f90..3f59ec810787d6d577f0a389118594b5c63cf7fe 100644 GIT binary patch delta 658 zcmV;D0&V@N2HFLX7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006>Nkl@9;RrH){dmreviRrxmr)%2EtI3$RTz;6h|>`%v6df@_*=G*}wJa&Otvz~vJ zQYmFoikV2gUJd_Ct@|1QGixcz7X;;O`n@bwRM|1NmYfa(CoR=Ri>?sN1I#@E2_<7&aAo`={N763WYg&@{kT~YzbCt)5(ObxvO!~x()2jm5SZ=vcTNB=lLs`M=( z=WS~@06Pv$k3{xT1V?%q;$Ca>E#8ll)(k-Q+#2y<2jB+uQy03vH6#u7;9Y+J5~>Oj zh(ijuCj{#HmYU}i0xKV{<#EzY0W$OeMDs-TsI)<7bAYdsOi##K&OQ8aBsszHvmk&V z8nsJfKY*Uu5Bhei2SFr+)`1~s8heX5DEA$0ooo(J-x_EztxeaCC(QH5vuB|zSH<0E ztiQKVdU`T?;~aAP`HVpM(!hR!dboh^`o}K_wCQ*=7!KU^@pnT>Z>IzHd)@;70~$of zi(=@X0IX`y_JclJWchs)O>NE8x|!aP*bY_~;B6bdV`rLUw%hISN{}{Mx1H)or7W%( sd(h)Xa3{pRLjF+ugYz5t$Nq}_0|Wpgcs`nPfB*mh07*qoM6N<$f{-{j@&Et; delta 737 zcmV<70v`R^1*ry*7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K=(L_t(|ob8mmirYXGhOI(uo3Z6>%oG`w z!i7BvTNo8WBa%jt1P=s^ss$&FAxj{3vt5$43)gEuhP`n$PvM=B+2*`U&Iq=ME>0hE z+W+G}*O^x9e^kOD80UaC!yqrtICO?cMDNZJ{*d({IhTYpe+bPPi?$zvHq91}00hED zz@bwFfQzOa-U)2zt9hL|zafPTN3vLbsp=QYyW6M$EN-t#a6%_+oh=DG^dc?u@Q6gEv*vkw}ANo*5& z3Op25z>8mrf2?S8%(W*{|?ctUimT{yWEV`Au$Mv0Uns@9;nA(WWtNDLP# zlr0=v8GQ?eVjCPQsQ|MOMD}wH@SV;y?z}t*dJRToKi2T{IYVGp0or{8q7?!ku~|N4 zhY~W)gBWXgRI2wUf8a2t6pwNWrYm*GUXtKY0s^H* zR1b(0d2HWT32@QiVblqQz%nKr0aXH&B7E05P4Qv|T|Pv<)W+lhghuurxEB$klqz-M zN)!_h^$3%|M9Ee;Bp8nfF1lj`WK~DveF_ngkjq-x_G&A@J?W;WNoR!)`gH?vS?n2I z8UW{1b6g4n4PT7Yhr&SfpdN6UZ-GaDSRT?du=njh$#~EJke*!<^G9k|``tQh*TEGi zu1Js7{kAS+yPkUBBc)hB(5(w>r(O`~>YOQPPOKIi$1{;$Sw4wof_ Tk!PFg00000NkvXXu0mjfDy%lc diff --git a/graphics/pokemon/alcremie/salted_cream/front.png b/graphics/pokemon/alcremie/salted_cream/front.png index 08a75d2e8eb33146d4343a1a43edd6fea7a301e0..13cc028c444ad4c694e404c78b52bbebbc3f1ead 100644 GIT binary patch delta 657 zcmV;C0&e}J2H6FW7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006=Nkl6>+ zZ}r=-w+y0`I)X`FIuQs}<=+rg(^~@KkRUb!zabE_KOJA`g$qR5S_gpe*ac#3dRl)< zIp;+wW+L@^HT=(|>}v$fEIBJ*5Y(FK_qww+#Nrv7-xWjVNg;ZppiOfqx-#y{Ph^?*wNONXiIgb#IrL6S?Md_e!jwA?&D;Qh> zFk9JO^hSW(2A8T)48Z~bA0Hcok*t4YfmB5BEJih2HTeZVALV-j_2pVMo0jc@t1rPq zx~PYaiv^Q<9%5ry0JKOKf>>H{Ndcstgn1k>HS`7$2Y@3T&=vr`g{p@f{o?>B(zk@x zwyoX(>^Lwz64^@;9O-3d6fE&tbDwd$4NH@$j}22%@ft5QU{^V0lrEyJt1qY_3*=y1d$M02Zo$!>@DV?+;_BfvN=F~YoNijHeEZOFwY;)o`tSl6?dbt z{@z0A>B;DgbI9%IGXk|s0|$NT;R3$vAHN{brsK_EIB?g;-wh?boetRVc?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Kx!L_t(|ob8moZ`wc@#_>Sr9+-j4)bnIE zxHb~rET3D+Q(JMW@YJXhNa@-JMEBqoQidDJofYY2jMPf-&-Fb^8R`$ZSAEy#r|12= zYqkDIB^-ir4(Kop^5Tp`cZ5Xv?hN6L*Z|^lNjQVRoU!P5e*tLIY~ct%AZP>}dO`rW zXv*Opz=pn>)v2>HdVdettRT#5-XbWg)rN)c9T(A*G8Ot>e8iv-FRj;)No z1w*k7j+In^V*n!kz5@74j~aJg9t3>?Bhqgxc>I+jaI65G0RrI?fsfcMKe1g2AZ#F_ zSO7e(Qw@gso6;mY%>NOEDXc(DG(0HP{}XT+Q;LTP)}LLwoTwX*HiR)BlbO;3{^3mx?92H>*TGrBYY&Y`#z z1RA~=Zf5|6f#!Za&}N#$81SD?5eeOC9| zwi(;>)jc08#pJ931p1cYq94ySB-h~>R-uaUH%Vo zatPqumUYQM=MWVI#9ZB30OtfTBnXI#7i-R#(+Cy>^2*hg%G+)t zm=Hqw82$4A#GOwgTiR@MNdW8W~x&t89DIS8T z1oeD}`99qO)L6n5K>Je`eM|Yx<+Izf>fr#;gc?O5rFUmSc=-{^>7*C0Uj3(^b07*qoM6N<$f)vR8*8l(j delta 631 zcmV--0*L+F1iuB47-Iwj00013M{Ml?000McNliru02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HAkL_t(|ob8l7Z^AGTh7&3Vm)9r0KA9?Y;gte5?~^;ZZ4%m5~K z5Bp+4yIVqFzlO3B-Rum#`?3Ja*ZQ*Gg%I`FugQr(A;cWoYM}!XV7ZH|AAr+St7|!z zn=yG!#}DEJe=#tymMI{ZgOiLx0gko&J*GHcPs;*#to;8gpX>EQ+LRr}fqfx#JHmv`BeS$)!NsoKFWo)aX52*|h`V=3&e_?EYq@0=4OcNS}3Y(A@M#%GF zv-y%;Oa%xzk0c;I_J{9&ZcNdh^8-=mAY{eWRd{3xu-?k&PDHLkV1lrs4IBUf diff --git a/graphics/pokemon/ampharos/back.png b/graphics/pokemon/ampharos/back.png index 80fdc1f23d26a47ed0157ca797782ec58d7b8626..7cba18fe4780a7f8b8598a3e2ce2a690c67274bc 100644 GIT binary patch delta 490 zcmVt!QbYKU_mR?Y zO#p~Uz15qP?$eZl0I=%gI1*VqS=o9CRV97ES<6ojI8Ib2s2L2kG1i z=9Um}L=badJ+yF1-dMQM)msY=aRGmb%Xw?TtzQ6M{l@_2R(t@+<&XAO+yF|LXY%I( z^K>D15$3(DL)vLU4M-V?ZUFjw0_Er&dBhVs{>-PXbUm1Zl zz(K(CoI@T9>tj+b<7L98CtDXHX&eGX%6VJl_8>CXJyIPERNcV_((`Nczv@4d4mcO=>N`kV+K7EBz|4Gw^l5E`>@M@;Vsxn=)n# gCCmo=L-+5+FWc%9&=?erX8-^I07*qoM6N<$f~LOZ@&Et; delta 567 zcmV-70?7Td1b_vQ7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E>)L_t(|oXwQKPQx$|#_NHlQ?DdaDHEYD z5FCk>;LDDMz3>1Ps>B8l&;?mMMW?FDEASp{c^91KPhE0xD#XAIS?=fDcfR{P8vVl< zZ+j9f)b^{NcEv^l1x!DA1d1my=qQ>H04zita4y8uf+T>Ef6ZeOM;vG%1Hln7jULmG z0$2)V9#aSq$u4A&lmG&#l zMgi&o$hQF?ODL6rQ{$Er;R1pJLI*%sW?}2)5bF<2~W*u|^XhbfTOEc*Lek1=~d;=DisCRqlXuJRb002ovPDHLk FV1fzrcIpY5*Phi~&TFH;)n1)>$T0fLjGun2#y zc(vg!z>J{h*{~@L7Xm^%SWpS57ZAMnjx2(X2lL(~15F4L&H_LcAl{=+PvR<NW)G z7l?(Gv^~^qOak{r>zbN)7Vujl4^V#z;MN@BNkENnf)Gc5^tf=6@kuC8S=T|}+IQ!6 z7L0h*m+%yzR^$hQinmX2;=?{{0C{I^9Us3W4t{)?~k9fX3>L>k@SMQ)Gxa7Th58ebQZA?oAAlrF* z7ZBxdfTtyJ(*d>re!fIk0V=P3iS7kz18#VWATPa>K>M7c?ahuiL=dZYO7N?1)gRj3 VAd3|+ypsR`002ovPDHLkV1mzj*iirg delta 573 zcmV-D0>b^M1cn8W7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00F8=L_t(|oZXbaZi6ro#u1X=BcciHUAj}s z9MKwfEBFCW&|0a{YkNbM@8`Sk{*Wm8pAjd?W>w!7MZQAB z+fpCa2-Go(Jfv4v#~gtaBC)y-`m9r@>qEjP(5chW1)HK)f26ChO$Vewo5DU;;Xa%N z=aa2b{|aywutw?ESO6ud(>>F~1=ztc#cg1b5yRpw^cu1^_%*E$x(h<_>HM zDcuku07Py{;S95mZL)-D7GPxmJFW@%Q;Mz$_-hnDPXXpsA~9>7ZPvFr16_u@${1kw zn9*}@QCE*0{cs=54Zv7jfGi9QW?BHQ23^_YD)1%*o#C_s{Pp+-F;x}~U=+3k00000 LNkvXXu0mjfCwT0q diff --git a/graphics/pokemon/basculin/blue_striped/back.png b/graphics/pokemon/basculin/blue_striped/back.png index fbe338ab816e7ad8dae30d92c4c7c87f7bdff413..9578c6665f90c7c46e20147d7119da6fc039b652 100644 GIT binary patch delta 557 zcmV+|0@D5E1@#1w7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005xNklg|?o)UXLFAB{_H3 z2~hn0HbAY;d$P@7~u#2af>0I`;|}v;NB+nGlBh47-=Ak03qZV5JCrtGXMrZ z6B@uy!TvnJvbSb80B>x!i#6LBD4@FeSNRGsC}O(=v8!2bWc{kT%PRnO*Uel3hRB_N v2E>@pHQl%bV7}1ck9Ys+dGs0R(LdEMnztjjHrpGb00000NkvXXu0mjfG9vy) delta 669 zcmV;O0%HC31my*g7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Id~L_t(|obA#-Z__{&0Pu4p1~xm6MSz7| zs07`T%NJ-kb~0QNDGMEPuree*m8k>Rf`txMMKWcoe4eTbRmuBu+&jm?F*qAr-e609 zKfQl4A;k-mE2u!x!IS4p{n)~l8HK6OT4ry0_e+DIO)?%#Qs~CfF>az}G zl~XvJ`wXKJyyV=1e$@^Q&fg%Yn30e==lsO;8kNA|Z-tcd-1{p*DYfsDp|s(>D*@9P ziDU8~R2)e;EeX3FC4rP-j1kFcsf69GHIyoj!_bQT5>DIRM}CaM3$3*wQK>`&_ixEK z)EG&s;(4irf4L#0uOht#OqELDm3`Kw8AwysiRZiIqk(I$e1@B3VsjrhzwUYr<+)3| zdSBqO^c2D3UR_4-^8#~;q85ltT&0U*k*X(ZmV*e-PaHA&=I3IQ#?9uJ9N5#kff!$` z*jA)k#h-F;gU6o^giw$H*42r=jXG*O<-!~;nuPU+uuN)l;3={9}7tc$kd<#J~d1`>SMSKL02H z2q!t<79=@vYzKe`1QXxpJ#V40v+d!4%>x*4z4XlhXWsMmrU|!-h*_;G00000NkvXXu0mjf D?E)(7 diff --git a/graphics/pokemon/basculin/blue_striped/icon.png b/graphics/pokemon/basculin/blue_striped/icon.png index f0450849a15c7b66345cd0a3f6fd08fda6801e8d..d84ec283fc60f82e19fd59f8faf4f0ba5222b797 100644 GIT binary patch delta 288 zcmX@d{EBIU1SbbG0|SFkK@2~-f zi|@<{4Zr{I*R{x8WFoNDc`2Xe>9}_r9H-rr*#0l1!}M8RO`qwrb+rb?atu>BH!N3j z2x6b(^p1Z$^McTa*@6+Zf(w-xbiQ}bSS9gBxKQ7*x`uz9`&dnd0O%u!N zTH;yw{#YOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008nyL_t(|ob8gaP6IIvhVurN#gu{e4Op@# z&scSe)IJO&lF1WXbUM0T-9(v?=!Ik8;!H3j{>`7P*p5D>{$5g2N!H*TI1r#3S6mi7 zh56#N01F~N2>`feIyI0HwZ{!Wolu|YeBXdYJkHN!8(UEyf3M*t)|%WYTugg&3Bw$W zYaJiNA&f}^iZ^*1+~e5Yx^B|f|M@Wh3OZ0qD%~#^Q%w>*V3|!42El~8x2iioaF_iC zz6A0Iy$MrS!~F1apl?uCfh;}ln?V`99axOb5AVd%k7Xv30;z>9U8~&F&MayLM6Y9a idyKIcrq-%{7N1YKpo9Un4Dv<*0000lr;kr2?UomsCs>+ z%B#p0n|Y29dLXX?=P6`!2>{pvDbc({cAx-6-YtR(EVN|B1&}tMg%TrJ;1{Sxf&s2W zIG(6zfD_pFZ1|R_1z>;)&%7F-0{a>caP817$N&$3PJja#3%vkYSX}`1ft`gd7C-`7 znCF2&Ca|p|pbgLn+cXl|0PQ)fS+IWqx+iF!ge(|;IfQ}6H^UOL!&>M*F=wxjWtps1e_(OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EduL_t(|oXyp-PQx%11<+cu)U|Odp^Uk% z*j*!Luqyrl#Lf?N>A=P>bU>q{it?fgC6F2XS3f@I2m+BkH22XcE970D6?!257CPz`1D?&FoIsub+Hj98J0`k&IWF__t5Ksls6u2e>h+i2J zLS-emloA}sb_fclH5{rO3}3ReL**?QAPWFh?2srxJ(;qa0pkt_a!!bmbq+|&l+uhD tIgmm~l%N^D$eRIF6vUKz`QPtfT|W^tqL8^*nw$Ut002ovPDHLkV1go$;En(Q diff --git a/graphics/pokemon/bidoof/anim_frontf.png b/graphics/pokemon/bidoof/anim_frontf.png index 9585a6015c3b703883e8ed77a6a9ea81c569483a..a62f24b7d2473b079e0d4f535456498c7b3b5790 100644 GIT binary patch delta 710 zcmV;%0y+KE28{-g7zqdi0001tU!Pc!dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007fNklTaf-`qAI|bW&kVy z-U4|4U=ie9Cm}8{W-z{L)EA)e8%=*8_A2z(>t!mi89;0cfb$plDlT*pA*Vx2K#Y>{ zN)e(|P z*W0 z69G3%oY`H0rqKRDRah)8QV~$8$o_%zH7=SJ=CRlm-9OkQ1{z8bm+UfGo=K2@ti`iu sxP=EJUQ1E?EJxSNo})WDI{qd80Itj%s+Wh2GjOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MYPL_t(|ob8seZrd;rhABYWO*tNncBm*Q zo#l(;wTRu_rb8DViz3P#1hx7C1=_6{jDTa;zD0*@et-^rnBGZo9Pua*?b1R2A|Utc z?kBC_J0UuC`d3MLydI>`J62En0LhVh3@Jd~K151v0R6Thf8h*Zl)?yL?5|H@FK(E< z5d!P8X^SC*Tm%4Tkhd7{#U93+Qb53i%v}Ti`D8YuDj9Oa^T8RWA1q-+2HrqKkKsm( z>X9=82D~mmP^tE@i;BzhvfNB=Vcho{UKb^5b6tl7<%YPJd?mxDdw{qyIKO8I6GMiN z?=S=Ynj@9De-Y2i8*A^&O&!x?fSaL3-O?@N1lJ%m4DFBa*4|YggJOmt&8>YwJ^C=f zdg2-)7~|VCV+o1!8Pc(>r9o+>V&z_xR%>f<#1N}m6`EaC5KFW8Y0O*fuZt_i43SD+ z?shvFWBvpi@P7=gvfb|os_TIX*fro~Uu0i?ea3hhf8|?mnE_iEgRPCm?$LV9KdDQl zdNCc5#+%6V&DlE<$dKpX%hYXs)AtT)>z&SRojP^;k3?KNJh;LdL!pO8wTO#{hetIR z>CwjZCoc8^?{aY9BCZfV$AOE|2fYRt`#$nM=OXSGlC@}ZF=w~oa4}_vb-4)eik;y( z7jtHCf4B%sHlo2roZ=#AT7X7tz43vcW~ZKQy_h_UVVQ?wZH)u<>i=E}1_kk)oCR%ply&;CFi%=Vkm zr&o66+aD^&d`^hpZjEn$*qiKjZiH`tcoY)6ABuB~;G!dVr@z-9MXKp?ZCSVs00000 LNkvXXu0mjfBnx2c diff --git a/graphics/pokemon/bidoof/backf.png b/graphics/pokemon/bidoof/backf.png index 5f6bc7e8bc22d9ec4ea62fb4854f23dc90db43c8..a76560fe473c67e036868c20719a5b93a3de6802 100644 GIT binary patch delta 414 zcmV;P0b%~S1m^>g7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00042Nkl+QFASCyqp(kfmAwFEiKTzDxuNGLau)X zoLqn*5`3m==1}C(Kxda;za{@2UwxMa2-*C#X&iD<^+_wVo)3k}PuK9`bBJ}2Dxw@6 z5PQdY6sRr5ZCpl8M`x-vh#hndxcb1mRzV$4vGq7R1!=P_1<91+EN~4#bP8B%NiC^0 zaFt_on*#wG8o$miOe?woM68Vf*b9G6u*MFprHUg5SKV2#3ZAisOrOl%jd6VIXtJZw2Hh7M;N^Y7r>p1N<=} zi5>&>9byAYSBZN8T0ZQw@&kqbPlNUNwu=b?U%!Kcga5)CmsJjm)dAh_000UA07*qo IM6N<$g6TK7+5i9m delta 497 zcmV1G)r|7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CY}L_t(|ob8i4Zo@DPhULL~B*WcFK?kUa z+#^=N19Zv#k5KCEhuW?kLLdP`ex!c>Qj~hfJCxG5Kk5X(c1=Y7G3ffN$;lF~7hoa3 zs!40DltDyyuFn<`cp(D5g&`1=Pm;iO2uzX;Xr(Si`CK&^e`dxWmn|li?vB72m_s~X z7AXK9%gjk$B+O`lYzL9>-V@{r2aWR*XA5Ahtr`wnZgF{+Ck#X~8?hc?Vczy@*1OYm zFQ+aZLI-&H%)qk(TQs=?fwEV#A(u0_0c7b`t|BWNJ2t=QpvxUggF9S-+lb~5rMBA nAjh;Pxs3of_~*Uj-^VwICVL&|Hp2h_0000 diff --git a/graphics/pokemon/breloom/back.png b/graphics/pokemon/breloom/back.png index e8a71c9139e039411b464de33de11a78a73b752f..9616b079568c0069d0816b70faff015f73a06761 100644 GIT binary patch delta 633 zcmV-<0*3vo2Ehf87zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006oNklAo_vL!~l)&E88u=VbS%6ZN-0C z03P)}YD$;@G!7*FEC7#LOUt7YuB*@hR@Ea!z(f^WKs441;C=+}0Y;eA4*~1?7~l{! z2!5g`dO@Hzf%ne<#@V(@7tR0}-T^R#@CFd|ZvdhX;j)e+K+-=2faxCsFzShB^gV(t zA29;}A7U^9WbY{+v;(;uTG%0Q2h)F9@Uk$tbb@69qN(FgB~S+-D>K8%(OquU>PA2# z2fz+o-lQ8h`CzltFoF!=J@y2EE&)LFegLo>wghzP_y#d@y?YR4eQ0)3s+QhkoaPcL z1d$JgHFZz|~q4eZ(?P6lW(KagmklLFA{HPrLfD3=iE*#_> z5mU=Zq<`!-fr(?UIxfVNRs`CL#!orX*XXr54urU|JQn&5Vc&I%u{S+E6UszNqOj)x zwd?y%JH=&qN`MMc|7rjdKVbpr?CSK@$97)Pi7^9AE&!CLGE{)kjEXF9I{8fQ`++lz>49;K22aqu?vsQUC_S z*42Rh$Fi;mK+grVwrcbaBVj3$*mdCqAor!J4ET{1y8JxyvUD T^77P%00000NkvXXu0mjf2!$#w delta 739 zcmV<90v!Fp1*-;-7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K`*L_t(|oXwQIZrd;r$E`)EH`4+XbhHFy zmk6+Hx4uAxtajMasXYdkULk0g0s(?r-VKY{gCu;p-s$u~N3z_h=nVv<`|<97;%Dr+QQx}PU+%cK`i=!X&eWfe=MB!1qj314>suwz%A>F za40?JpR&7tpz@1NaxMFSn=1CVBuUafVA=xLeSll}1^87ayHzy6CP~$Wj5-+_Aj{Il zh3uZB{9Ax8vuu&}6k!9|ARv}mD#fo;8j(g zFbG7eGl0@Xf3D~6f%YVQ*sqQN#%uun#mF8#7KEzFAyf{4wVh3zI0(wSgB##5_+tn# zw|381e5vSi>0ub#72vcAu`>@=|KuHDZB7FcfXJ8^3xEukND1Q}G4@e3uhJNc&`mpm z?g*-6Uf>h4{ek|r45&SVDnodgeE9ruZ!}r4Z2)|he?nMLMQ&<9KW!<9;;54g&<0002ovPDHLkV1kcYJO=;( diff --git a/graphics/pokemon/budew/back.png b/graphics/pokemon/budew/back.png index 4c8478e2a8ffd18c4080c86107da1069bcf65bd2..33a92ba75c2ecc5578e9a233923fb5030300f61c 100644 GIT binary patch delta 411 zcmV;M0c8Hf1mpvd7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003~Nkl6MTBBU26=0zCX1TwIh!DE2gZUI~%16zC)a7urH z3v5UN905)XSmGoJ!I#0wSSjB4k2e zU`o5dc!4OC{7``@?;_@TFSqh?lYn{F<@ZNm(_M5}R0O|7C10*HEla-u3B>;Pcp+Hm zJx)*pkdQ+33rH){@f<{;?sG`_N|1k(ke3pj6_5|UE>VQJL)cI4RD^+7C-6~t*|w1H z;9Efh>;%;V>wP!yc6?}7XaQ@h!Zoml&;)Ri_aWTd!#9An4P5NOufZ#B!g;W^cW_z3 zcC3FTbpM6_B=mnGj_*o+0GdyXwWk(#@Za8Np7|T|1NOcP265yp0000007(Z$PDHLk FV1k)T!e;;g delta 507 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C%8L_t(|obA&wPlPZO2XGAi06u7AOkA#E zbdbQ}c16fJur&I1C%=G+=f^N{baXO|PR8xR$cM6p+$qr4i-VKCwZHt|pN0m(-y3!4 zKWEXxE0~gUvGjmQMN%g8`GG7_KrC;Gb7sFGMZ^^$Dq9iEW$X2gGXOR4tOS90bms!f z00lfZLa$wye^DVq{~3V7)qm)Q)M zYZPA*ZqN%DcAP)Dz_)pxm6(FpJ)n7?f_!v-{P8vg;ZMQK45$%ko}3r48{W+CdekzW x2aI<(Ur)Xdgyrs>csFRY7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005ZNklvriZvdJAAX4cdJ|uR*ZZ*loZ^L*Mr;V9{_h8DO^o#Wpun0CzHwmGZjqp$2dEcQe%B#+VF{+5oU`v3(Z+&GtROtICE9J6%L*gkM;2 z&Rtme4IrfnQ7pt5Q7+dG(u_csh2scF7cOEfyNJ&DGXhzCgrVXJ0LD7ci0-#|O!^Rx zumI4693$MNo=wH21#5dk)=vP$6#;*2Ayh!n0wBI)xUxWmVnH>)fP?`r0mXu9AVhro z6t4hG;QOc=$W5S{x9tFM6)@{*44wcIE02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HnxL_t(|obA-HZlgdD08kK$qSG}-hW{{G zp+uL;%F?@FM3JAcCbz>5O+Iol0@{^cagt$J9m)&<+E6gCIZ zg!8@804{VuB1N`e=>Q8=ZN(phw6V!klZBXy1m_>RL*#JuBOL2I^9C?@2~-f zOYiQ6mWTiUZxc}WVw0ac`-#f3YPK^4Yi&c7f^H}C_;jq8_V342<6=e*e?_I5t6dh1 zaZJY;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj(8d%8G=RLn_EkVr5nW|I2<&Nt-W%-tGV7Vqb{h8k>NEbiK{ zdGX@K;*qC&<_XKnnqOqK3M^gl;-L+rn4?g|#lmMST?b~$9X39}#8Z6k#C%7yDT!{KbLh*2~7ag>25^; diff --git a/graphics/pokemon/castform/snowy/icon.png b/graphics/pokemon/castform/snowy/icon.png index 6ab5a1549150e1309d4ac2235e4dc175b7c34920..e8651ef4172f5295f0bfa2f858c6da06490c6f7c 100644 GIT binary patch delta 246 zcmeBXKFBmdf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;H5)u#978-h-%dHmb=ZK% zIlHXWvG3pi{Pf+6Wv`q(#@D>@Ma13}hdA$T`!9TQC-04x1-o~v?VI79rNXfJUC}Zn ziTj#*ZYLT}h^3{5&q`yyogGuVaT&kM7QTjgT0%a%vzRY1X(V|CFdp@t;F!v(uHfUa zj-jzopr0O0j?1^@s6 delta 320 zcmV-G0l)si0*eEX7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L006H^L_t(|ob8e^3d1lAMSTO~0~DR1$L#2> zf{y~xUQ9}_dg8t^o6 zm6}Y7Z=Qjrj00jVJ%^b4?nNF928 z143@=L}@x^^iGSVcdrUqcYQEa5hDU_{b^}4mqo_x0~5F4clE!Z4_wgB!8`${&coAk Sy3Ex80000;-)D;HOoC+978-h-%j!6V^!p6 zX6M{7``-U;>n)zGUBzxN>BO@64fZcT-w|MZ6Z&PJ;)TuCC2Lk4;B+x~sl{O0wMMD) zR(z2v>x0#{ogxP=wAl%`rtqwtHizkF+T5gVK@Ki$(wprvzD9N!_|48bQ79PSJ%#rl z$Bz1+av!R6H*Y;>U>q;_;hC{X&^bW_SNP$^>=$GKe9Tb$>+>GlW()} ggrXVDyieGF&g7F@e&Xp$pqm*yUHx3vIVCg!0HG9dq5uE@ delta 311 zcmdnN)WkeNBAJDmfq|iOLB?Dl#a`m+>&pIwgI$P;bz?+gJWxoy#5JNMI6tkVJh3R1 z!QICtz|UQwEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4&eH|GXHuiJ>No1X< zXkX8mY1;3DH-c3dVe|9)+Z({pJ1gd-2utOC@G4 zkUe=^qFS}4=F3HcZMUz@?pV;!`zEP)DcjP`j@t|t{>)6|o4BR)Q$2gR706?ru6{1- HoD!M=H^1%U;S7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005-Nklym>Y429KHgB14tA9oWjk&A`2`)g;KPIbo4`8WxYbXmUfjbR+e z@umWx2JHJIBUCWh8UkDhC}6JvD{jy{0%H)gmf0PttSY9TzGSWp3oKnT1jq9Y5V93aV8PGs9QhcOnA zg~t|B4VXZ8w3M+sDX1t}1`|NE5WWla5f3S z&H*`rXrm!a0Tsd4u>u3SRxbl%4dZ{sc7ZbkIR_^6a<(urAUV7u08I3f!)mKdxa947 z_R<1p+_-=c6a5l9S&}YGN$P#7=Y1mkcli_G`A`5t?zbf*z@Y%}R@=K0ssWK;`$qEc ze5wG6&>=h+uhI*lx1cj11n;{lXaRxXjj0K=$QIH&gyXr`6Ab($2fRM6lfhaOej-6~K$-{cEkZ=VRYu^Eq6Z`dcW==~ zS+Cqsu3hNH{ARi}?gI{|TZPDLr}Kfzz!OX6oLW!EIbcRO8c~zsASvYaxebJ26-RRd zU@Bdn?Et!iSqvaVdH>H(Y2YP_zXCqemxK=iLikkwjsFzCtaBjpKP?Gt00000NkvXX Hu0mjf>EZzt delta 660 zcmV;F0&D$&1>6OY7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IC>L_t(|ob8jbYTQ5&h6P)w-ndv$>Ab)> z!yzH^7!GOOB(>Hm1{-&VpcJZ77?noF!J_LznpDBXafb@SHO7$s9wW2T>Wt17P5wD8?P%v41qaNLZ4`_Xf4p`B0!vN|O(Hh4+_0LxUpd`LI zT_K{dz(5^mkXqt(*Edc1o;2YDN=YT9G~K#skO72JWFTc?%)03*t=RYgb)Xi;)`mo3 z0>E}48v?qne+>aL&^E(Z_cO6L24bzPg_)|z+v9VfeM+hKx;e>9AE575vIpAKn`VRr zBzVxl2W-m3pz{C#Pp6bagZnWj%zXnIUvhoO2;V~h&Ek*|euRK9244iC+?f4AZGSQV zS?q~z9qNO{RLfwO&SLpIh2Q|Pc&bNz!9=hY`BODofB2Ic>-VF`MxbO3L{&d#RXyl& z!2(siC7`82UU5K_Rn_gTwg%e&b)Chos)i6{-`}w*VOQM_DWOkUfQUL9wgI*Uw^xAW z^TPfas)*tT1{mg%(!J<^;mwLkYA4#B0Nt&=-{j13fi-{#QhQw7z(@e3aDuKicibY) u0g<27CJ3OdR{{PmxD2lW;^hwia{U3@)Evl$gw_850000`+Oz`m3brC-7wJ9)d?gEjN+rKU=8!i7G zI=%Dd-L=;5^q(Hvyn+3MoWg#!`!6@jDDcnam;b6Ge%gAIRTR)C44$rjF6*2UngC49 Bbb9~* delta 330 zcmV-Q0k!_l0+j=h7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L006m3L_t(|ob6IE4#F@D%n$rrv(T)b+V3D) z&>0bl7gQNKbfKkNB2j9ngc6sT0U>Vl**=}EGv>Y5zCp# zYNGW-qk$v?y~k1@rY*2D4wpb>8krA6>mz01$lUvS(Rty{TwLF3%AynRn9td3u+5&G z@(#9f?ikbrigSY7qzR!DDG;-JKA_WAwPVN31L2ME9atwNn;$yoZfL*7ApnfhR8vK7R z38@ue^hy*ApOk?|(-S~`a#9J4N)ns_OQ90jT=?QGA*5VB#JSYFvxI;Pe89S{3*S2f z%KCghSGog_hIbHX4uGbQJBQ5E;U0g*3hqJKJN# z(-){eCF}7l=Z6fS3V^L({|v5NZd`um?n7;GY$!yWks@+NI?!RB5zSsUBkx4aBG4y_ zuw~TOY3fmDfELu=WQm}6wR>puzyqjl^kWF%cgZoe03LgdKtq6xH4pZ&5Oja?xOsK% zr@D-?a~sq`a<2A0U|qcdO|%O_SfBj?nRmj|7jW@QfO8;T0(`$$UIYB|&=Pn@bWI~< zL|IhGyTR!$rR3JJ)KZGezm;vf1WF`_ev(dM}cU1Ux`1gdj@a>@Qcku0@@3-*n;l2Ui z1HPvpg72(I&b|WcrMQTo3rhM!yDsC0Bvh9lrMlJGstR z_->JAa;>DX!}lS>7#y`6@ZF~ieBbfk4jAzLGw@B!R&K$!6Fjd8NLxa}37&gGg>Q}W z!E>zuPQ|$S{cQ4XL&pEDqtlb0@x9}}9%ugzd(S5i4gC-L0&=M(*~=eIx&QzG07*qo IM6N<$f}NgqxBvhE delta 852 zcmV-a1FQU<2AcOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00O^BL_t(|ob8ssZ__{&fPEf1WXkorAThWX zE6}t8C0DxVhhSnt-Kz?@$!eh(Gl0|~9BWi5y-pPyMautyRQ>~4x*%m>Weo4m5sB>g zOc_8z%2Ohp@;<+J&rb54=dI%}1q*%yh%$gx9l(L%)m)A{f1p`qD&Ptjl`mAY1XE3T zsTSmmfU-4(;!3C%Qvl_{S4~%<3qT->1pt5&Y^&GZ@1g~4k0uj`&y-Satbi*a9vwm+ zcBv$G6KYM>=A3USw1F)l4qj@V#x>PJ8rTqnbN$wsxYxr0c92fAF=i5yz=e5dE{q9# z9UOS_@q;n&e;!l7V0Z7@?Cz8Rjn7{{HFhSa1mF$Eu{7gUlfWJ0;{24D!rL$dV_(#m z9yentQ@9VEPX7Cr<<-EohQtxXW9U*!6T-RZSxDJa^k?4=KKDJ|weIWXyeb0T81i;7bX&(gCpE zL#N1qgm_Xm?xm2oz%>OVHah(7mr~$G_>=(rWC2i*`xk)z@KyjSpY36o#AM!+!(%B= zVqyng|uEFng)C;cc8B53V~}x?9r=aDM=kLD$}yFg=dckH&pGcz^pt^ eokG{~@8Tz)TRn9cLIiaH0000Z)n0e6BFpmud_MS-rg2#=t34SiM!U<5x4h7d+k z4+6>e%~lcA8C1bj;u45Z1!w&Cf}jaZFQ6kqSp<*x?qz42BOt*dPG>k2q_WVE1pZ8b zw;~A`tsxJoHG?V`BluVhrdS9>1gd|B71&L_mtYh;5$HbshL$Sec48A}u7 zff7OR!wC7ocK{$r5xmm`g=a4Wz|isF_s(qvVT5R)H6I1?gLm*Ynbpg9mE#pb3M?T_OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GiTL_t(|oZXeXYQr!Xg&j=s+IA@!D-R`` zL51Qu3SI+^34MzcD+s-YO%VUvR`;9Zq-(1ov2;G4|45OPqWIelH+OWhT_j43o01T+ zUC>w02-Q>qq_KRauaRtZ01hN2)}R3N?rN0s2^ZLBUV#B>e+N9shi;Gq*cli=Sva8M zqZ-jf2@a@j2rPBb0D6+$$^&l}I1ui~BoR8Qh6Xx0WG&F625d(z#m)nE@U?%| z#5vV716756#=02tYqrEK#0GME-jG3XRWaz93>UTfBWk^#${_T*Ahc-~bp7k8lT+W& z&GA(hWu`N`XyzW1Ko+0z3uE9fnLB?=|EB!_fVMXy(FDQA00000NkvXXu0mjf_2ByD diff --git a/graphics/pokemon/cinderace/back.png b/graphics/pokemon/cinderace/back.png index 701208e6729dd25a6ce2ade047ebe744f8a2ff7d..6af38da2b409fe38bd8c115a964c3cc5a5508755 100644 GIT binary patch delta 577 zcmV-H0>1tE1&IZa7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005_NkllWHl&bV*MFNg0H9w1 zNJL%)U=$2-3_24+IL?D3#(NV2ou$D6wcmX|f)L?^(0MDsXB5JFA<{iS0XjhmdP{#o zduM@x??P}3cO%e&V4ba40fazkg_kPIx@k8PKKGLXou)uG<5~E4gl5@*CIFqLU~@iA z;Sew)3(Y)w1a61`?i8BQ^gAQHaP%-e@zMZV0CUIXud8-$qFMoSc$HQ{KN|x8VI5zD z4ruOBhYvIbz;-~}Psfl#Ed0mw@d`OyCIQ zBHrRzm@Pt1B41j^`n4uKGHM8{y!TL_=U+#QOnNk(@#r1+8?%4e;dXLR(}V-x~V1?cSG%O7iBIV2i*%U?q6 P00000NkvXXu0mjfMjHiq delta 689 zcmV;i0#5yj1^ES#7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JFJL_t(|oXwT7j+`(QMS&*ON@Jjjw2{Wd zV*?5xVzZxky zy$@ufjUmL`m;fXQu$`3SxPmAc}%0w4izDhr?o<-&CU33iK*qlBN>lT{xo7tl!vU-zNf0L3~b5LA>-y@i%K z)s(;}+1kThuk1FiA)iP?{2buvwf9`;{D>Z^fZ~ z)4&q~c@RkG69BdUmUoF-z9A5+*9idNl1J)E{c@11Q`JkPp48V#s)IVjfq9a0lG8hY zq@Sdm)k7@gJPI+%tD2$!tkFh5K_47^_F)kZOwb?P5}Jq1d!)ZB&v)Bm@pugo7(sZI6xR6TZr z=RH!44F*h~0Z?^x7*GPH#|m1`&D1_Q4sOECxv74fs6gb2qQ)R=YxNm;SnzEGimV3O zTA$D-MYtS*z=%SuPXJWwTfneTE9QS)ncaD0CxjbIe~LVO`!PFS;v=+44^4=p5kK+dwn7{AiNtYy^Ad1LaHKhLW!zqA2#*_HU+xPIF z0Zzg}Id=gL2kSlKN5Dl3rIf=f1&aM83q=#rAAnNMJs^qU_?Bb6vd;iW$3@Tn_aD$J o{G9ODwHWCUaQBt@ll}GMKPtKy9ENbve*gdg07*qoM6N<$g06c$zyJUM delta 769 zcmV+c1OEKh1;_@F7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L}DL_t(|oQ0InYZ^fm$7h#vm&)3*hg^d9(u;fOC4tcA4|2#QdTlGD{ueQU<}gAcJ!%huKncXZ zp|hsdVCN<8u)@5L-}h$beTT7?&|*>fjjt{*BE}t4QaLgYe^8crP5~N#6wo+O0MA2- zu|%E%G^jy2qP?g=lmPNo#|(JA3MNsZUUeGCy=@Zkwi~!3E08_b8i+gjYPeNp*zdZC zydG{<8OhYky(8pOAQn>#B!U6r0GtG5)j%P5k1Zcu$g0mlFC6(T?;B8g7Ju#geV>C9 zw}?$7JkM`Ge|7XZPR82%0%a=nJigzk#e!2rR{*#DwyPp>&GC%Ne z70`oVck!=G(CvO$B`j;Hs;7gGiZ<`+E$Khj6D!J=)(c>e00000NkvXXu0mjfw47H` diff --git a/graphics/pokemon/corsola/galarian/front.png b/graphics/pokemon/corsola/galarian/front.png index e9b4a7ded55f4b98d796ba362e5091133775c112..19d22f3b89ed6dbefa7dae171dc7245e9d9d6d1a 100644 GIT binary patch delta 509 zcmV(4m?<(&v(j6n5h`+%dw zAFIF9!jcz$126*i)@jLX0Ny1@sQ`NM3*e>|nU8?z^5=Y4!0o9K12`_j8a&>2qyk`bveR#+3S>sq z@LuBvAYobMJG>*I)pSj+ALb*%=>c52^hfmtZWI{iFaa1d00000NkvXXu0mjfiRa~! delta 611 zcmV-p0-XKE1gr&+7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GcRL_t(|ob8dlPQx%1g>7Z&R5c+L6GKcM zpe3!KW2ouY0a3G4L3Tu?@UM=kL}#!>AAv_;Vq!#8N;{a9iFe>Sp$OTg9S}^MAyITb zpL=|R(7*m%_5vT1(vJb}>z84mGmF6Rc0AR__U8;~8UW%Df3GADgIO{ZvK&H)=Qi^; zdH_N}6#)7HkX6GqAi}3I89UztVI}K8NMHbibPJ2SC=Q?1*i+j#Dub zHJ>iY^B@BNJ6fYO3^KsfvA$ih+_rey%zdn_vfc^p6(Pp0ZdTFpY-Nna82Cc8qHYG* zT8}D|31S>Yf6{VDr~)qAZOe!#>Po;@{o+$O5}8_im)Q10wd9*PZ0EpuId1UbE zFTMd%$%G>1BNKpK@%kcv#LARkr~F(CDDT7Zi*ab0A^;`*1;D?4P4Cg6(r5sOL>d49002ovPDHLkV1jXe1w{Y= diff --git a/graphics/pokemon/cranidos/back.png b/graphics/pokemon/cranidos/back.png index 54947660c0ce521ffb068b928aa62dc2b6183604..39aacf0bad4e2bf263285a7f16daa87b332d7224 100644 GIT binary patch delta 659 zcmV;E0&M-j2HORY7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006?Nkl_IAvb^M? z|K}EVMxf{rV`_xmkX`O1O>_f;zHN);{v#mrPcw2*=p00RrStRGll0Ih!{kO>#o zm%hM&z-m5x(Z9%1AJUHu7_u%eW2sXw9u8RNG9;ZGywE#mHAvhx4V(uAixIqQr{A|7 z=2JQx__haB!Z>q;=Cr9hz>I+L#|qQ*X?{!y*e?#}(`A5wPQ)Xu5YExJKo}6Dv4;fc zuHP{r=$uLO_EX$dFy0c5n0J4NGXbGogmR;<>yRIfvitNDEGva{@l8L~X9v=;B?Fni z^$Kk|oQ|=D0%-LU0=08>Uzk`B15o!lP!Acv0}OT0U80Zt%CIn t*7pl>pl<{Q)K#tk`uA`3HTsL+jQ^8mHSNyoZ&LsO002ovPDHLkV1hTvH5dQ@ delta 761 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lx5L_t(|oYj;uYuiu|$2C~cRfIsjsu)^I z7G)}Q$ngBKXpqyspqe*yke|LlTMb#-A>afp#Tb&0(Bi2>J81O-VeTumLqAFHo~%@Q zPsyGGd%2(g_kZWR^SnnKO1*z5&G<$2lRc1EMfKxlk=>uqe~YTBisEEAKjH{nRKJSi z!(jfBE2RpIPx&C=mk4AW^N86s0{oP~RTgg*MQ%OBj{@%rAP~bI_-FxFVNfE#fPf53 zS%5c-!X*Ia37|4X(g)I2GyxC@0M7`@Ex;ciPe30?0*nvG<(Jz-&|_4A#z(%eO#~9s zAVi6nR1~*?e-wdPKt_xY<^Vn#{0}g20B=sf>KWM-_;n9(@CtJ}L>-_V%f8;*nx(8f3K*t0~sGUajOvu`; zK#OxHKkx=4(WGlp$^i$SCwSbxKnw{8T)cgw1`K*5L8~2WA=2fL{PZoR8H@YoN9}S< z#VKtpS?H;sD|TYIQ*#r@g6;t*n=uS?RQ3|03&{55U=Zs_NOLUmqAkF1EqCh<-~(5k zXxem}e{_MZ1!#b8>n=cRyic1xBCzX9%we0gA`3=9*>`~>LieZvggK&feTxkP`lc zRRC@nz`x!g=qUm~$_;^ky93ZuWH08t2i!3r04#rEfDuUcZX@9OuYuH)NH^EL^1y$; z6S#$62(rf=!Nx5BxEBZj+5te#x)%o|)F7l4K)m-(Y)sI~K(9<}Dh$*w{m?mpRsaqWEeP{XwNSl8 z(Ob^R(J27PFF8iFO(HwyF;x=~%>aKdfkn^8@%bw!0Gz+BF_ACiQ~{{Y?P6&NHQ3)_ zat~HZw0Ya&3&J*$I{891y8z@=$`Rn8o~#G?ShNI`QY1f6a;bWZ8ME(5eib%Amd6af z7*n(ZvZcWFEkLFpg~z5Z^IU=;He|?6=36~UUbDwR0J)U+EK49o!a#YEgady7tLC%x z1fb0CKhZNqLXnzAasy!19T?s*g2V#`{1g4(TaCymGy$MmT-#(|Ho*KIMy9;S;$zHb zTFqC@`WaxD$AMkg1H5ikepFLflfa*O)F7A(VSqL!H{^EgSAqsfVpnF*g!ijjVZPJx z=}VNgj*9EEX|ztSj1Rr~XoP=K9oY2Mxw?*jw?XyP$}eVf)4*9Nty%x2M>0de68DC;&C;7>{^)OJfUI zSN!sbm$hI3*B_73%Y`ezWz~Hn!2X|7AK{t(4dLV-xdYG=dKQ2n&~tzL6(E=RZ-B>y zX&CH(Kz`=K#Itl7{4OR`T(^GW+fwAy#9!yB3&9GOkt|iq8hZ%C$82Ez9Bb?$44;pR z_;`PM2$)&#k7E~r346fQp?~qUTmj)gUnYk!5TWn#KnT+)s~+DM0y9AwUPR9TuYnf> mMA}=-i()Xq59|Bc{{a;F-W@xw;nD5@0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00QnwL_t(|oQ0IlZrVT;g~##|Rbqypy)T9} z@xZbR8?)?!;OU-7VVmdZkCaE~BQ$%`<^kd;m6}}}XP z4w8U`-v=NlJU9a0xZ{ADrX5XTg!TX^x@rpd5sn$r5S(0BmE-VEv>&z9@p0zd3f%ZZJ{_)O!oArbPShk?-!>6Ec zjvWyye>pb}>nM&L7sweB5QwsMzcAQN_Hx3{&Gf8e_i6y}?KX3zP=Sccy~`!z(C&(j zxjczFcD{CRxI8fecHqp&;~~Y~cLx7GT)r&(pl?f40D=t2%J168UM0*#3mW%XMYtB& zt6w4D!KqQbZY0Q`9s!I*_b4#H1*%NZdc@U7f5?C&`46DRqw3XH3w#rjBRM|3{J^D7 zUN5Qy^xgNdN*t^nAVG`+|ABCP_hZ-1sJQ|$;)Tioa?R#j_O!_Jzn+MdV3 a7WRLptN9|#%mbqU0000~ diff --git a/graphics/pokemon/darmanitan/zen_mode/icon.png b/graphics/pokemon/darmanitan/zen_mode/icon.png index f9e8674785abe52d7588315cc2598e5e5c709762..b563d4f2ad130b8e70444e4333d01f3275c11c70 100644 GIT binary patch delta 248 zcmbQoe3)s11SbbG0|SFkKK3WkWTC0HbgsOMZTH5Cw2nzJl0v7JpYU`tcIt1Q z*B9dea|MBI ziwancj_aNlt5Lky#&M;u?0WUP=qvs!WE1Zx&g-|{BK7{wotsQQ`y6)3A7k42*Fe>_LL^2CA0|P_nf{eL9ioL|s*OmPVBO`}_^!&HNZa^XN64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj&FOM?7@862M7NCR@Vdb&7)+R0+0EEfJANC4TcPQ1voCu(#>?w?(FT zqBd=p^-Od>TFmHO=`dGU;>U#ZE1KD3d3W+GN#$;7xGA#Xd81q~W0O-gTe~DWM4fA`pQw diff --git a/graphics/pokemon/deerling/autumn/icon.png b/graphics/pokemon/deerling/autumn/icon.png index 7c14c05cb299a9dd6822788dc768658c2e244a00..4181194e1da1ea9c926c5e0cc99066168de2f24a 100644 GIT binary patch delta 305 zcmeyw{F`Zl1SbbG0|SFkKG|IEHw1zMXQB>yQDD z>-A-x_a^=SADzFu^QxM#W5B@;?HlK8+nzWl_xJVer{{mYdcHuLWBvgKgLL^ACJyP% z8Q$k79Lu?NW3ob@8N)M`j_#RK=RWE(hD=?de)qmOll;okL;dyI_TM^BtenKPEb$^| zF2mOETZ6S5ZC7=E2`uzraE$-{s3NLwtAxwZ$qb9bSB7ko(CF|CnV^1q(SvP!pGyX; zy)a{|YD408#uWS3<=N@a;^o)f|Lo4;^RHvmy`RdbtbQwt9C_2f!T!(1Hv3%;Vo9Hl z>rF6y@~~gH@yx%9c88=#YO)jV@P{|nOqbWI))$bC|G0h^(BBN6u6{1-oD!M<-GP?+ delta 424 zcmV;Z0ayO}0`dcp7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0096f zfDY7Y3wUps#?kYn9n zX2EtAmCOkPIy|06lC@STn8o3JXOy&|hCi%*Va#FkH(`hlgD}SPqZj7i{P+eqLxnF* Szd^bH0000J}IEHw1zMXQBtJ#3Z zRad)FP4(yh{daRqb!K-a8{A-HlRr{@>zGD*!svYLv7P-O9Y*H8Z0x9tkTjvw^5a`!y~0+*S+@~HhZ=>*5CMc>io`*8%w!EeVi8y z-(vZ7A~T?xsk&rsX-}6k6Gu^0_v1{-Ye@pK;Y?@Nc)wg^7{Ibo;J<(+$g9 zpRF-v6xr>s@LN+S_Vvuo`(pk-?-wZe*HKmb!TrkW@9r8L@B0nP|4A_26g(%t+TojT w-aiY0j_=3SS%m!m=uMEh!*AaBXPW%F>8`?RAt&EC0=>=P>FVdQ&MBb@0AAyZivR!s delta 433 zcmV;i0Z#t<0{a7y7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AFKL_t(|oYj)CYQr!PhV=&b02%Teg^VGP z4An!_9K;3teUhO|ClPGA7=j93IyI)xkU;Q|p;k#SBnGRt6Qq-;4jtOt^hx|W=|0B( za;e@L!X5-vs)H63ap?dr5|bwya#}?5n1KbCDDq=gnq0WgfAg8503VY;0frXbNo;^Q zQOV=RQ?*I83Gw>3xbPA2h0x7bH}l%$QKR}hg>Kk;^{N+ z;+vh<43t>3LzfxwuuMW`g#nq463%L)6fD!xTVoVAp;~^7U19Wo@-tzG4xKRC@uL;y b*ZlYf`QDzXE_dPE00000NkvXXu0mjf{^YRa diff --git a/graphics/pokemon/deerling/winter/icon.png b/graphics/pokemon/deerling/winter/icon.png index a7259c67e0c4a94168748f4aac414febcf3cc039..6528ea9711756c567f28352f32ca89afbb17a238 100644 GIT binary patch delta 303 zcmey){F7;d1SbbG0|SFkKD{IEHw1zMXQB>yQDD z>vgtS&s2Z@-~V;nY>8YWK^9S-YKhaC)zZgqZmZuL_HE7iGCrwh19rBCSvQ^tE$Hkr zdG}IsZMR1GMwO0*ybdayNxoA>pWm3qaK^`E(!2NEjr~{H6YGypmH+LM64EKXY~e-D zTBg!3l>yp~wyU<8xv45Lvee%5ev~PBElEJspXp58(jd>|1qy0`j`MQ5n{M~bOLe&F zRD5j~L)TsP34cYVt^0arzg^7!=luc&|2j6^`>A~D)n7rbL%)^ZSl9D3>a=`5t~bH- w$-{o(#)|qq&I*Qw!XEFW+gCg6JIybC>Wsi|f5z%hKwmR>y85}Sb4q9e0KUPF@c;k- delta 429 zcmV;e0aE_?0`~)u7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A3GL_t(|oYj)CPQx$|hW!RN@Bm1ugv0_O z9>SKlY3WiAm2%CJ44pbv>VV`Wc{NxXb!iNi8oI?=gd# zfYx+?ewy*NhuHB)|I>mo=x6A`CI>Ru9%N^O9+)3qSDs@pvf6k+9xADbh^J$gl)rZV zWFW`7zs!Q=KRU{p69#x3MuN3gDOkthU1yZAp@u(9ePPUgc9}3lhd~(Q`Oyn=H9x)q XcPWe|#$w+p00000NkvXXu0mjfyknG``7t38aF#1RWpzbPYXyz3_ix z*zyM4aamj500n|09{ZL0)21lZ3rgmRUkub6rBXO1#%9;ljNKN5y&qi zu=uveH>*EH&IK?96nDTAWbn>gk79p}y8&`9Ci^y<2(Tj1-v@bt7ocTcu3msl1UEoN z;0K6n2m*u=puN#21TpW|5b-65pz`IqyDI>x`{Pq))j&pmy8N$p1n6H>Spl)~L3dX0 zDgncA6FB&BhhLH$f{!M!ho1rr!7Tzad3Ym?-On26Dj2vOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CS{L_t(|oYj=EQiDJch67I^@rF8?x$p+2 z$6T;AGlI4t{JoAdynuy|?ST?*+2yWP3Y!08_uJ)Qv-#Io63An7;|FvAh)wGUo(eCp zJtS!J)i_Fw0owc3Tn#yH&#QUg4}jUO05<<9Fc3SrfH7kSe=G4W7npLO7fYyXj)yn7 z!<5TCB2&zOq^TSLX93W22jDpbygYIRQA5&Ywge<;AGpb7#&6;SW|3fxi!fXL7eY>Z`r4cO1CUQ+l$x$+KRjPsiLATk?uMGm leh}y~`!^Sk?ccn<0l*3xpeBI(=l}o!07*qoM6N<$0fM!?%z*#^ diff --git a/graphics/pokemon/ditto/back.png b/graphics/pokemon/ditto/back.png index 9768f89a15b16edb29e1fa21d8e5fc6d57569087..5bea88a4aee69edcc02c04297dfa46dedb7ea2c1 100644 GIT binary patch delta 286 zcmdnQ{DNtM1SbbG0|Ud{?Tv3HR@>JLlmz(&|3?F76*o-*s=4mz;usRq`gY1ep~DIs zF3OWt|NlSk>M^;@jd6B#d-U&j)^e?0~Z5>r>mdKI;Vst0QupGB>(^b delta 359 zcmV-t0hs>i0OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007oWL_t(|ob8f93d0}}MWvwok)~bGfVoE@ z2S@^D-3mECbN@w6AVg;jS$5;!{^$44s8Ur`f78wPN@?#;eSEoIA=tj`>+#;%b_O6< z_B}vniNKx!(T|5Cun?8*@CfjXK7DBgJZDVw7uw~fp<#sCdEyU3G!4o5RU%aVj33;BnY*X7b0Z{IiEtH595Co z@54*J5RKPDgnSAzca~S&;tJ5VZ9^gD>;TC}7Lw@-#F1b?X3JyNF|AKv8}4ZGfUH_1 zedPoI%)eoqM3@s%9 z2vdDlpMxuvIBK=~FGAZ`4z7EtG5}aZI<%GvXdoQx*QPhfS63z&0Kw%44P5d@h>#w@ zUH5qcBlF2T^Fv@C m@erOZ)VKVsS+i#SN&Nt%5*?gSGkwqi0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00F#7L_t(|obA)UPQpMO2k@GBojp@t;0&9K zX&D&|hl^csS6)oZBxzH`V ze!6BioQHCM-)a%3VuP0p*3ZR^EAY6xY5}3aH5;U2Zopj!hzT|rjXoN%wOhC~2!bFM z83JBCZf9MPIUXh_uz%TYt$evSfd{csAl&b4@UebIK)42G5_}h0AkT1`5yci!tO2hi zFI(Gy6){G~f61l>p_JwCX1Y3;lKF%5vj!YGAj4dihe0k3;P7o7$Gdp_V(hkrLu@7q z__NPz<@-MV4*+nzQ_Ly}P}yJxScu?=8|C2|)PPn_0BSK*;67BjEG+N_CjpDq2^?*J z-Tk2w!`_^m5v(DIPbpP1fP=3Nj#u4_$oAzZ|eX6002ovPDHLkV1m%#|HS|R diff --git a/graphics/pokemon/eevee/backf.png b/graphics/pokemon/eevee/backf.png index 7689d995b607d6faed2de20b80c8932cb78726dd..6c265361f5fb1e4d927f0c42fba9561239eaca1a 100644 GIT binary patch delta 543 zcmV+)0^t3)1?L2i7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005jNkl9#K2|Mdrv?(=!$jsH3j z@egW1NQomftk5P;5CK@OO%X*7F~F|J2rP04YhZwsqRUw1v4Iay373Ad2n0`pBm{pj z>SF^27zuEq9Co&&*BlDL?ka0`o+yXb6`OwEMQQ<>1vueMNg0CJGEglT0%c9kR0Gpx zfTsFtq1-8TaaCZYzX^3kZ^Wj)5t!|^_0YW-DAxYVZDi z9z)Pd-_M!4nh(N4p7RZG49o#I>V1E}q=qEw++Y4BK=gUg2Y@IEweJF$AH@s+YT(G@ zE+v&4w?hPtz-r()j)w)4Yv7InB@7n$(whm(C8}WqbQTbg+=qIMM>&=sfp}6yF)`k~n^Z{-Teb;|h0*3_8 z!r1m@0@B?E+yn4%dWjLn5CSu?N##U8@uIm!_|of0l|q!QWNmocS>{l?-uB|Xi)toj zYMsLz_IWEumLy#e4H6hUtdYOD0(z_PmxCn6tMVbGXv;1 h+I=v-@y5T7AIFsuxh25ziU11$002ovPDHLkV1j}N{J8)C delta 624 zcmV-$0+0RY1h@r|7-Iwj00013M{Ml?000McNliruE98ZQOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G=dL_t(|ob8m)Zlf>|#+?Z69SrJ9T!3gr zrJh`C?~AmnTtgen`xpfk4d-gB&GYoyms=Y{{3ocFNzzCqCdm#t7@fyTBd?5&~|IZS4R;Tmlh}eKC(I5Djs3fO{NIre&0& zQVGFP?GaCAIbx}Sp%tz7q&4s|g}K2=JSWP5%5l17q(3 z9im#;DjqG+JzoHveIL>4+ra_gx&ysuvbMmrjcJxZe=noxEzrFLfFfurbV-^~|JpIj z`Fz-qqm(H2QX36}O*x+-rO;%9fGpES10F&^se$RFvOxpZ;{FUQJ9$(Yp6uS*T~3!D z5^Lu;qcQ|qiPAmqHUyfqk6fS$fUHTKA>9z^@|6ZJk1u^({{gizmCF(Zu%Q3|002ov KPDHLk0$_sQe*?4t diff --git a/graphics/pokemon/elekid/back.png b/graphics/pokemon/elekid/back.png index 09028a7d9ffd3129fc0814b11fb2488c56c29e4e..c0b5f8cb79f573e2dd7ea1c7049b0b84e6d079ef 100644 GIT binary patch delta 580 zcmV-K0=xa?1&jrd7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005|NklyCsV423PUQQ`gHciTd_C^)*4P4=WqIR`zYKsc z<=%fm5V`kA=@-#sJ*xv^0uXusl)wOl1Q2=kavu;_DgbJ|JON+@0R0jG2m&xKkHUX> zlp070ikD{wB<%`-=KyQ~z2S_!%36Qnx93+DCO$PS> zfU@4aQxD*O0SG=3U^zA+Cv(d{CX^Zi!O#Hl_M~o$5{6wu_E7Z=o^S-9bzSva@5H$0 zPylD(xcebY02@zF+jao3e+EQafE<78lZPmolyM(CDX@9y}m>Nkd!)}?#3t+f#|~! zP%H>QW`YC2hD{8Vv3f>AO1A~rsF{HVpaT?v^}$1=({tNq1}q1gN~_lNCM|z@n(OT$ zW7#XA+YN#MYtJPhBOso)7+&ZTz`Cs#PJ5i@>I~3Ql@>e$5S0{fo=A-Z^D zqGtRtZatol@=er#Xh}bY{FUod7IK<5tjApmq>H8qE?H)2&cW=D$zv2fhq#V97 So{GW%0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Id~L_t(|obA-HZrd;r08qOChin!sAwWDC z?H8Er;*HK}u@@O4fdu}JAajNQ&6Xks0>Y~@bPQk*Eq|_eBqg!3)Sy7d++Yjh)A4wu zG#Y)x|3~uHIG?;R&U5_JL*rw<1O%EFgFqtCK20xJj#SQkf0}+E9LW9!(u`4>0q{vk zD3}-q(+V6&2LU*cK-L{Odo+(VC!Smhug9oxGs~+%ux|m~%&wvXop$DX#FCMUw zgW!U5KF3A|AiH3EiC{4qV|jU&LeofHXiwSNm?tq|2;^620K2`py>VB&U&fdp6IQK~ z^-Bcq_0@dux>1|eL>i3G)h}e4@lddJ?eHF zN%(I{BoK>@R&_%gfE6{f%Oq{QqAb#U}<$GIw!j(ex&5Qb$k_KcBDtX9NCG9~uDo z6{`avAq0Rg

    =RioHRIih2l@AbhwmqE3tSZ%H)5SeYAnob<{_qiKwY;l>G-r|Ex1 zmXOIj29dm?dq(v&+vTG~K&Hg7XPop($SxFw%cy!Uf(G~~p)q9nVA6X4AdOO*B}VfT zYF!_Ey>+1?G&hRpEW20cH-KIY3K%XZf^32n2)KOFDQgzdqB@$wYKq0%Ne zw@z?>a$$|ml_wWArOHcqJ1=5%5nT1yuceE?S|Q>9^5Oyoadlui*`cZL5K6)E8n2B& z<*p0D$hyW0V2&W^qk3yAvjFycfQgkBi78lgj67R}a>H5lenUODaF9O&q~m5%=ieKE5~j@?dOQSdk8wWQ1x=+*OFW+? j6JTdk}# delta 604 zcmV-i0;B!u1f>O#7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GHKL_t(|ob8lLa^xTkhD~vS#wG`7#opTu z*$>U{1EkCMKTE{JHaMhaHH)c=R!!^U*8|C2_y3!?{RQX)Ak@!T1T@`;AN+~}&=XOc za1;T-z&JP3aZf`0*RX~c_lAFS>8I2amY1si;z=WXK1hoNe^gh)vVhx95(8Gc7b2Y5 z2%J}}*Gv>5Ebs*80uTURbpMkjSzs&y-8vuFnf2SIxNmT~iHUxIl;V5#0|pd;0B$6 zs!yp17L@r-{iTtj9N!F7OQMVE%s{z24dJ8}J_@#lfEHAX%F&SwAA1|%MpzXAAH%wXHv0QVr?!Nujs7{po!oaoFzxDh4tV+^(> z?!S(&>xxazzP6XZOK{ZqgOvTEK!VdWq*9A~ShuvC;ig+g37pf@w|7trZs|UQzJMkKOKg*lfhO|VqRu;BR{QYgft17c+IYq=nd=(9&WGvd zc&GPf6}H!V1FUpmw{?f(=SF^X1G0ZSIO(b5kgJb-X)I~5v z1u?6F<2)NjYe>HYs|Gqet)qA}73vgVXe39dJ{x?EzK|tDwzRhuj+*`9b~x%M2gb+RmJU00000NkvXXu0mjfGj8CL delta 569 zcmV-90>=H01cC*S7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E{+L_t(|ob8jnZo)7Wg^kR_M6z^_7uHCo zu@DOqE>F<(1qj|DgCC?*Hlz-f(r%3D6VNy$7=&N(FITr%am0OA6Gr`(EaUvwo9rd){P z;=dHyUpoPrS}1nb*S4Um01%oG7i~kp(@hUIKo$T9=8}ocH9Yf6n3Sw54~g3p`NB?h zchFw1J>fw_f8S=?YB0h+V!ayn$GJCRUyo|igDpb922QH@rAPA@n_+;PlL&z8Wy+}f z3mR;M%Va)iRneX^7!gvMuSEsK;xziUQ^o?nPL^2CA0|P_nf{eL9ioL|s*OmPV2d999xZrfpi9jLo64!{5;QX|b^2DN4 z26rEq06%wyveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj(8dAc};RLn_Eka+aKUTXgRABXEhHlF`>aGCssPzhUJ-d^{x z&;FJsS58WJ^6sCzapOkYP4kYH9qXSEYETmvwWdGk7<*l~tw{7E`yD5aD(`;mKL2yH zi0FH(N5AeVYrm+F`n8DJ^W^@0eSQ1vQp*3^o?nPL^2CA0|P_nf{eL9ioL|s*OmPV2d982+qq70J)n?yiEBhjaDG}zd16s2 zgS(GQfSyn2+B^)IMe(pdSV<4Nst3gv9NU@|l`Z_W&Z0zU$lgK(z z(Y~HB$=luK|5El(M}e}lJY5_^D&{07NIZIAFE#)EkHhsL8_$0`xJ-URsDv#qZ?AjU zXManRD<>s9dH2uVxN)QHrg=xpj`dFnHK+-TTGO9%jJ+=0RwVk7{f-kym3Kd`p8Gjk zMD+cs$FJ@wYira?{n{hrd2;`*PoH*KrIi1zkNd}Gd$qh?|DO9p;}8G;9%xW&(le+z ukkDDn_Rn2oI%$dP))$^7!$TOa?Ca(|w>u)>1y`Xp_dg?*-{5=OA{&4C0xBiT8tSP7N2Bny*)=Hue^-t~AlMGnS zWBO*F`wRE8Q}%3`kYPQAH>T?vbHC-HyG`$o=D6%v7g%O^yUL&CL1RYRhw8W~lNs_j zFvk<^Q!dl VDCLRGxBzr1gQu&X%Q~loCIBvFaf<)| delta 300 zcmV+{0n`4j0`~%t7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L005gwL_t(|oMT`Z;^03TpWpbye^jy0_KU4P zAgeHXwR`t^WHtYkSFM_4jHHI&&e+)49$8PZo$(`N6%3!1iuIAr_`p9)55<=CA7=Wk zM|Q_2y~)o|RJ>DKr}rLNfzqp0kCc#<{L@oX(nB_t|NkSUK6j|T`<9ZA!e`+B_JILS y1YKbGfWZ>`4E&E!VxQpy!z@4al0-+9xmMeR5r)QCcrz;yW~T?OU^5$iAz}5N~k5tDz_xAZzy z-(1amg57uejwKoyqNmv653OyF$?7TVD)C>%{CCc~fP*=&{Tp^4y!hqB=e|9yDL-|U zKdlij%2!e9nkXxF-t>8fZC&WK(p&#$HK#vV^832m{C8dUD|>VQJnyu(HTjpHc#-$m U)0$3Gpi3D%UHx3vIVCg!00fb4KmY&$ delta 302 zcmV+}0nz@h0{H@v7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L005myL_t(|oMT`Z;^03TpWpbye^jy0_KU4P zAgeHXwR`t^WHtYkSFM_4jHHI&&e+)49$8PZo$(`N6%3!1iuIAr_`p9)55<=CA7=Wk zM|Q`bbCaK;sCai~-MRP33eLP*_2vwcl7HvUoH=(6*bq|#`6zq_{%;=` z&_vJ$h7TAlvCqK&2qpFzJ}}JkLr)HF!!S7j02ZlsnT__4tN;K207*qoM6N<$f}+lR AYXATM diff --git a/graphics/pokemon/flareon/icon.png b/graphics/pokemon/flareon/icon.png index 96092e7eef01f9d6d04a8a5d863fc28a283b2f86..92f4dad5324497142193bd7794e9238098e7703f 100644 GIT binary patch delta 330 zcmeysJcW6J1SbbG0|SFkK*=~jLnwhreE8vP0qy^I8}@NEcj zN^4rln4-C)L*;tw&b5Y>tzinMH?+Uiyff{v*@VFOTjpYGf7Rb=w8>duuy+gFnVVk( zJy;E7S=TgNy>T$i*>~!%-D?_J#vbZ^*f z%=9Wed;RTFSN`S;8-5yaO?hlCYP)!MT~Pei`jX=6-{#tC?lGI~Cs!P}X~KcCna|G$Z~80Gg}?njZ^hpGtS;N@cb~FQxTRSjA#nWXhvN+u Z49(l6x&lQ$x&i}@!PC{xWt~$(698=OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009(9L_t(|oYj-fN&_(vfb$0PFg-5XYacBl z?H)WW1@|F5$w2ot_7Zaq2(qv}q=a-#-AodLRgXHi`IyPi>9l;q~Sf_p!t^11V||F;+Mne_r%4fae8(L9g`Yw8t)j z8>!T`J#}3l*Ys*P(m{4TZ=%Na=!~RvE_>PHAX5&vMj}4SbVFE$6ChnmDCj@}3IopOvOxYF!q$F(-&RvCKGV QF8}}l07*qoM6N<$f^WU48~^|S diff --git a/graphics/pokemon/floette/blue_flower/icon.png b/graphics/pokemon/floette/blue_flower/icon.png index 734c6eb4aa8c2822c9c902a76d85901c725c82fa..aa2227c430a1c7dcd0a2ddc87c9cd40de76555db 100644 GIT binary patch delta 278 zcmZ3_{D5hK1SbbG0|SFkK|U`%VX44(J382_FJ$I2^cl8l7xlf1Udf{F!hK=kmIepU2L%E$Tem&h zFk$%>_n1HH%4>JMV>rp{$CTnf!_Fa2Xc^Ch?JX<6)_Y3$#HjG-38npxI%LE6yGK~t VCuiCppx+ogUHx3vIWZ+P0RR9(d`|!X delta 356 zcmV-q0h|8d0OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007fTL_t(|oYj)Q4uUWc#`^|+2zE`Vj>2F_ z*jQi`UdG`jd=Tcm2NR$Jj?}?EO10D_^mQl{YY? zX+~POs`Ff(oG`$#C;(iGg=>)`5jaAvK$ABb00nNxc#w#Vc79FpZ6tQGa~n()ibkx7 zt0)$d3TzBSu*sW#z diff --git a/graphics/pokemon/floette/eternal_flower/back.png b/graphics/pokemon/floette/eternal_flower/back.png index edcf0ef2cc59d01e86d3dddf00ac2d794a3ef3e7..450120721173f75eafbfe064afe7f0ac7d75e33a 100644 GIT binary patch delta 596 zcmV-a0;~Ox2Al z0q{|Nf|+;9PcZYd@@%m3W8}Nm&x>vOK0z9LZ1}zoL_-W<;gbOyzFRP{0rmjVpc8Br zsG$n_cxcJ+nF8?P;c|{0Sj^6Mrcwx}RBOQNtZNs+&`hh|2ygWLQ7hjy7hCn_o$XB^PR3Tef zrmq>{Fr+0$+W)25g!4WlmHfPXzwbA4TMRBmU@7B*LR5q|{Hw>^ zg&+7f^Jo4T;kJc7$c1)c(Cam=djGcJGfd%9px3LzOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00J{fL_t(|oRyTnZrd;r#&tsxz<>eKHZxS{ zAgO%-MSTG?M27+$1c)61c#AZ*kCRNzDyxImFpJlSgNJtM)AT4=wnd8sa+B=)@w>Z^ ze>~3;;Dc|=b+HH+P5|;{;uN5axCK6~o$Ike=mscrkKoZ;e>b2jIEi;G0q2x7@^cqJ z@|fN`N|1tu-yK~-nMcXJqr$adapDpvc$B8ZA&^ILnobMoBLW3O0UHo%6SaT^@bC~} z1GS?2F zfZ%Ad36O9>^!Y-9bL}Arqlw|6Aj`D#=%)!BpCZ6QzIXL7IcFbN4?i?;ImQWitg7nC z0X%MBm1@i;&Vaf`U?)E8Ex=6G?Tcz@wy_YklB(8#f7sZ7R|K#LD*jc~R0RZ-Zek@i zs=Y*Jst>Heze%a2No)^*qGGiUB*yp=nAZc)h}9lCV&uqQ4Yd02oyhhc=&!~EWFOsj zm=bewH{>PNZo?(e4nVgZu$52ecVM1>l_#LDG3xO*=i4JdGh7R!DJ%Ks1o%`0#zQ!h z2&|6)S!8NwxQMp#-ab7&0x!NH(0Ig$g8%}Ci^1VH3Hluf$k;?&`TVQ@B0=*W0b|7K t%=JJ%`_Kf9Sz*|F-9`hAbli?N#(#>v2xHa>hJ^qC002ovPDHLkV1jLBF=7A! diff --git a/graphics/pokemon/floette/eternal_flower/front.png b/graphics/pokemon/floette/eternal_flower/front.png index 56d9a71669ec351c8832a2ef1d21b6012be3673b..5d0a8c7df71be00da6213d0ebc7b3212012bcae9 100644 GIT binary patch delta 638 zcmV-^0)hRf2F3-D7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006tNkl+jfK?3`L28DB%D9ZgT;YaV$X}x|)Y+r{(N9xe!}pZUQjwe%B8$ zFiq3^oB%MPf%z4|p#BZPP!jJ50J06~YN%!E*F5*-S=M02P%&$+!@TUKj%aNkf{#V(pGPWuH5fCxpKlBfxTQ zrwo;bky`+GD?R{(P>cnSwfDv@U@m_IvC&8PbtMDF`zry*wU6){0zx28E0%gr-4*3G z2q7loK+~5}r4GSw8>E;J05Kd@Jw$xPe@P?*_)7|TSu`j33g6rCn->EFKo4Jnvbfdn zzGjdTTlhx!E)N*HYXLWe?`k@K0qna{o+NggK$HU5ozoDCJObF1-!NyV+pK?>UerX^ zV0{uq&YeM8fTSP~(*$fGM4}P^tD{Ro^Z=2QhX66g-8#Z)5Yk$-AE49#0W^iuO%xw+JO)Nx(QW2MzE02Q6*Zgj)0qtk5L0Y08s<5xXI`o>CXTnsG7;E6p!L9 zz5@F40-#TeEkOCV9%aCzv~6nZ2S68OfC85hF4S>-1K1uJI04=m;Jy4ne*oyw@)v+w z0s)Nw-*gzDXA6wi;go?#3oiipTwl?{FrfjgejIRAjR_BjDHHrl0NGjJ0r*zG(*KM2 Y0T5*vLdh!0^Z)<=07*qoM6N<$f@~lfpa1{> delta 735 zcmV<50wDdy1*Zm(7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K)%L_t(|oVC?4Z`x200O0o|BqSyu4pag! z81)C3NA@5AQx;2cD|JJv7&^5RVa!yjPD~9OTP1J@*1*CP)f`fXMxFX!dhZ!G0iT_r z>P?pKd-v`hwh`h<0EoPh(rsF~pbWN`TLPp~xg~^jRelKqe{Cuu*)nGaG?gzznFZA@ zWe9YHbR~_%I9_f080kG0X_Q^fB@Hh=|jbDH3^)b z{vgtZ1}NnQzONJqgrxHYovPRdq+8HSwD1gQpLM$z%n&;1Y2XDxaMeu%sgqh&0v%~# z0Br(5=??d3f0+h6>V*!)_81YD7^paUzzjqAY64WxXT*#5ealWnn-SMHLu-@()oP@~ z_~zZ$$)SV?&}yVWZFzqS@i?>^S|=rnGiP%@y^|#38EotL`PE=N#kovgLFtu`b}4?@ zA%VNcJN9v(zorBnj2`bi-J!Jj_BsYQPt8xU2yvf)f8Sgl5%-sX_}#&M@FSHkQGN%P zA>!7-hrnmR20=J=#4uz5ZLt-?sUa@I-9xZQw^>3g%6xFiHzLyLvF zUKt@IMsgFa*F*_MED*5NdAj6ItKiToSea|KL}3t7uL;a$4uI{oW*XL z0A>mTakyB=Krru3VQ5L1eO{$Ae|yx=+->%!I0mz9&^KV3nWr8#$obf7AjbayXi5Vz z|F!fG1U_VTVL)*-%?H<$@i=SH1NfK;%v)HTO!AJ3V)Psk@aY*Kn9t*Xk3U}=&GoUZ R+NJ;i002ovPDHLkV1obDIgbCA_%wbH_um0Iu&}XSwaXR=1VmL#6U;%_J@dU7d+Z&kfp-3QfKD z!mGGjVL_U!aEI^qfPI&qaD4os^Ul9V?YQ5=)!OC98Ft=y-B7RHGo7oJbFMe|E3o6Dvu`SsL(SVgf0cxp^zPnN zT-MOKULstt^UCp>17Y3_$@S}Q-170y55OkZU~4(I2DE`~}qpDB!+yk{6W ulyM5P7EEn<*ly=3F-Jwp=Xb=RJB%HNMARQ?MK1z+n!(f6&t;ucLK6VsL5-6D delta 375 zcmV--0f_$i0>J~27-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008AlL_t(|oZXVK3c@fHMe_$4+`DvFFi>={ zA0rs2X7g=v?o_ZKPCEEwPAM)i7*M)27HyknS3$uy1l~!)y~82o$K#B9-$7jPPI&>s z-xB9!ureK}97rATbw_9cx=QprEKU^-7ID~8{yg^3nPI5xrUZYg8)4;KF7fBhL=H%KsnwRi^2Vz5zG7^Di4NO zi$Iyx2gOBj!avRrgsJqqFttHiAz_{d?U67qgS1a=3_AH<-!X{FzCl&bAo7_(4-rtV VZs&k7JOBUy2>?k&PDHLkV1g$xkoo`s diff --git a/graphics/pokemon/floette/orange_flower/icon.png b/graphics/pokemon/floette/orange_flower/icon.png index 3c839277cd875207825aff982a98ac50b9086e88..07b6d9a09a4f32651032eaf3b46cd951803620c2 100644 GIT binary patch delta 278 zcmZ3_{D5hK1SbbG0|SFkK|U`%VX44(J382_FJ$I2^cl8l7xlf1Udf{F!hK=kmIepU2L%E$Tem&h zFk$%>_n1HH%4>JMV>rp{$CTnf!_Fa2Xc^Ch?JX<6)_Y3$#HjG-38npxI%LCmu}J9U VlOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007fTL_t(|oYj)Q3WG2Z#`6Yw2=^9DJ64Ax zjxIV@U!riEeVD$NLQ}}(MVi5>u@<4ZxEA{7hCn{_b5 zW~7CyI?vU~2?HF90>HIcxE47Qfg{ukGoMq(#Bx4}fAXvCVh ziee$Dz{WrXn~XZY1tuwJIDQt%o(iU0X&KY-;iWfJxMRzVAW@z!jUj?{D5hK1SbbG0|SFkK#zfd zi+F6%mj{3T-!Hopl;LQ;UF?>G2h-=I5}~x7`8o{McMq3yD4n)$dVBO!MwNogp|ic$ zyBao}iL4A3SnbFp7TYcIq;S>OnX_E}vK>gz(5rM2iFSx}t`8NqTE#eZlTPgGpAHFu zyc0T>tjM}1rF%%tWYL{MLGy15F5hC1Nxr03(DyD{)7L5Q3PVXo(%KlI3M-DjsOXLJ z&hNfxx$%GO`d=lnjFY5un4U~DsBPGz;v=b$&l&vs|0Dy80wDIB@o{U*PUhzILShpx TJy{6!8-u5-pUXNYri3N{x=es6 delta 354 zcmV-o0iFKf0<8m(7-Iwj0001qplF={000McNliruwJ^02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007ZRL_t(|oYj&&4uUWgfO~`9;W4>jLS1x# z8^BF;@Fuviu(-egcWRA^%PXOYV=IQlzOtJ5)1gVfyx-B#dQQ zlMpWBrjct8Mp(5ifDf^7Ya1khBg7Ik>5&6S@HO07A@21nbc63wu~AoF!K8`E1!?Ni zOehMNi$t`o>EvT%s*WzlkD@wJU@oy%8C^b+gQ4J#1v7%I@|@Bb0&Fo|oDQ=1;XgmW zAq#zYw zi!+a`*N1!mbIX_Um|ggCpY68Jme$`{U!&G-U9ZDXefLfohs`Oirnk$F1%7Eb|8m)~ zJ!vdz-o2vcoExQB7Q}7kNSwDkMt-61`TGnv3OZH!zo&3_bk=u!IJlcF2zci`ecnEK z7O_x<#xDY{A>NCt(}krbzT43uU40=_lcCShD*TDe)$Nns%@I&_XlJ{2O0%)O`N4{v zqOX7M$et?v`~KJX_v`8#jOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007uYL_t(|oYj&|3c@fDg>!=(qI-qLjV{_7 zv^UX(M{!pQ-MDEN?Ky;@-oc0;wlJ*qyp0@(LQLJXN0>$+{*s>d4O0G|K=r3(AETjZ<|AIE=r zi)ecWFyak>DAiv@2>|dZAluh01>n9H0t^VnuT_hk0fs>Gvj~pM`{U>dNlMafs0c@W;40;R@5!H_laNnXweWP(sd;5{ynXC?yP zbFl!Xx>x`_E58U(Er&9trU6QTvMMI0vMyi)n2CUKbLB^bS(o^6h5}g3s-Q;%Z%4lM z54J{WX=5Y(@D~ePKnm{-0UJLhH|y>)nFRjjM-eF7GvMF|IzmDl0ADtO68L{2Dnj=A z^YGrwzX-<9fF=U3O_Zlk@q3X1gzyHiq=3A`Xt~HqfXGXm_&tMP4Iyt)!op?AgE>R` zf(Ygj-2=?@j2xygKna*P;e6WrcYsJ?fTH>f`Us}L4LGsBpaGc6?GP)#kuR{Xj6*=@ z4?ctgs|wXRzy>ht0fsBEj^jlE@U90K!sUY^27r#x0oWfdjc}e4qJ3?~%Z#D(A4dqh nqP$lEhu|)L{o?-9PXqk}OyeAvmRD4<00000NkvXXu0mjfgO>{f delta 696 zcmV;p0!RI!1%L*S7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JaQL_t(|ob8moZrd;vg;@^;(N2VyfRiDx zi?_mCCxf_y;IXK8PimKTOfo8gQWGlt5Ge{n;FP^+Um)??#nqa2sh**iKl%l&C&-0i zLpq<%Jti+j$Wx6}G#ghVkR$p8qyU&f|EBYN#_)qGR~i0Hk4nHxW`D1PbYAK@l2uxVFG66D8P#XJ)M@ z>+}@BGFb!R77m~pISrWor12Pl7Qz58PAoOZr31nt&v08wahUCmWC&oML#mYDCcL^huYvlNK_4vI0GIBz=m1}cJ(9BlP`B89 zJf?QsO5ILuFNYa+|H|WC2N-6c&n`d! diff --git a/graphics/pokemon/florges/blue_flower/icon.png b/graphics/pokemon/florges/blue_flower/icon.png index d0dc98cb1f2f446f57492d90c7c43d35e6aff372..8a4743f4f56d416c7997d4a9ea6d3b8634445232 100644 GIT binary patch delta 407 zcmV;I0cie<1>gga7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003`NklZ6ctt8IW^^0iI?iYS({L zN>_lYP|x|Pqhw4eG-ahuEGbJ}Lx9oMej=nSL{&^cgfUr>6aNvTBFr^J24w|_=LCso z{Bfa-XO&TI4z%7FIRGwr8~U(jlsE&_c@Xr$gzN?+IGAzO4G;@siF_W`0gr#d+Z0FNbPrOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FN_L_t(|oVAj{irX*{hW!RZZ!MGt;(G$t z-F~*E7ahX-EC}}N#85WSJ4(D^Z(c0Dl_Ue-S5G9b3k#CF{)+sP~LW z|DB&V04nWL^?PWTDQ}?5yPRhQV?zKdNAk;toPOxAUThm*W33<>N-pDjt>Bjek4i*EEJxvl<*~uf zh?aA{kQRjFfA}D^wU5e!u=){bE0W}?=L!7d-sczSC*Tc2y`XrY=rt}Q0s308Ju|y9 zf?Y4C{aZ~VFsf>Clq2rKjQj5Mk^49V^AljQ%hpR!Ns{J1K&A*IA9IcSBChp{RK27D5TogBZrhg_ia$3irrd_I=aesVtk0&h-7kz00( Q7XSbN07*qoM6N<$g6eGiEC2ui diff --git a/graphics/pokemon/florges/orange_flower/icon.png b/graphics/pokemon/florges/orange_flower/icon.png index 5bcb76de35a1b90fe80377ac2fbcf9fb2121277d..a8239748c4d6ad5aac802b374c42de93bb4e1f5c 100644 GIT binary patch delta 406 zcmV;H0crk-1>XaZ7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003_NklEJ7d zZUA?qUh6}LR!k{es#7N>&QjM9V04e48L0@-h+Tn#V5*}E|51wLm}@8u$_j+%1c^ud z(NM;V$|!3B(g$NFz>OS3Uoi|VGeDgOL0?SBY4E{D8Qc_Zu?g8?Fo3c1^E~*1Srm{F zsoOeHI|*J6W?c0EEW$*hd_LBNjKP0yTB0v{28s7AkFsA;=)2nun-0GLkY{;A9M}H7 z3G>D4oBYE+$UpE$|2R8#;~(RG?)_r`d;ho?#PAPyfBMJOAi94zCjVFr0{LxscL@LR z7lT0m=t)Ez-xx%9jo}~Ldu3rghI@nfxBl=0L|-GhP5kN_00000NkvXXu0jG}f-_#d A?*IS* delta 575 zcmV-F0>J&>1BeBX7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FE?L_t(|oVAj{YU3~vhW!S^7D{g$hzY&f zVBPI!Xo|?KeuqNQ&3eb}Sr%I#e3Gm<2%n^>;#k4SUbk})=woJV{r{gN|Eciq4%7gy zD2%k87}6`TwC~w7r#llt*2u%Qw{!vU)~f*<$!)%Xzt5^8e_k>kTc)NZ+iVT=XF*i> z&g%t$PPBbU0PJI&o(J zJ7l4_rJDuR{tFS!k>)7p9cIkE%oBKVZG4S$k{GCkitlw&oGQ$B>O92WBvV5%#&YtSf?mLWj4T1LLgqEwl^M#>XS)Mq+{ zmJ2vyM~0%SehqNZ4W4*fASdUYv$9Y##1Br!bArxbQ4Glsh4jVX?2bj9qaNUKk7Ahr z1Ge6cCb1jQF6N+K+P-DjX}(qz?I5OZ&t5_y$iUFGCqLJcR%N N002ovPDHLkV1hv={7wJ> diff --git a/graphics/pokemon/florges/white_flower/icon.png b/graphics/pokemon/florges/white_flower/icon.png index 06cccec6c513add045bfdadd1f765822ac69fb07..11b04c54e01956833135e209d72082540ef3f205 100644 GIT binary patch delta 396 zcmV;70dxNA1l9wP7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003+NklJkzBsOA@Y0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EClL_t(|oVAj%Zo?oDhW!So#CxpbwKB4A zhj-5-v@=GvXE27fa3zk3oOEq(K;qNg+5G=sRex0UatCxk2MQ}n&j=qR;54x_$J!Ne z>Gbt91>6CM$t=`q9-19|oz09%GhSMJHzMnfzY_+gq?3-SG~^jQDy0t6f=-H_q>k}fdC<{40~d8wz4W|* zU+(>XfqMbje;{%PN;Oi}SQY{(I`+mwFAL}=^Zj<=SU|AdNZxqr_nCCc`4Bk{yZIF` zGY{+tI)kmq0SbH{nZzJW_x*@eLW}0J^||E^R+@1cW_eoRt{a?rI}pd)&P`d6jOd-? zdP~p^tU39)2zy7HJAo`GyFlHOTDJcHmZEo6Xwh($ diff --git a/graphics/pokemon/florges/yellow_flower/icon.png b/graphics/pokemon/florges/yellow_flower/icon.png index c3a5716077b795d49389b0734484f9afcd7216af..8fab7804fce094ed707c41cafa7b6eda3523df16 100644 GIT binary patch delta 407 zcmV;I0cie;1>gga7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003`NklWg?)l7?5*@0iI?iTGxM5 zN>_lYP|x|Pqh?GgG-ahuEGbJ}Lx9oMej=nSL{m&agfUr>6aNvTBFr^J24w|_=LCso z{Bfa-XO&Sd4wT*)IRGwr8~U(j)Hnmwc@Xr$gzN?+IGAzO4G;@siF_W`0gr#d+Z0FNbPr1s=1BwNZ7-Iwj0001qplF={000McNliru>K`Eqed}02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FK^L_t(|oVAj{irX*{hW!RZuWe}{z9(Sa z?RV&+tMz`3*|78$!TKJA^$cC3n~{|ST`Z%i;#k2+uiZHa^f5EG{{K&s|5W&N2W|it z6b4?80{NXd-gTmqd}ktfZCLfIb9@Hy-l-lNCf$Ape=5}yf6s)BEn`!X^=1k5OGZ@q z&hHxlowlj|*;m5VH_+y7PP0OYeg-Q~^2>&tewca3Nu0@cycA(4OvsHA$Ldn->cn0F z>`;V~j<04=`wv7kC%#8E?J(!9XWIncY#Co;Eh7eMs^WVsqn85rnngt{Mdq2Mu_4T` zl2W>m7MQ2_e;~EBkIDnH<`EdnlH{r93H;;U=NFhK5DY@Ipt$20G_E57{@#eAaECgA zL#Kx0tK<{~GdXtt(TxtB+WyBTrrP)wLm;dGF%gMQw2jvekkN`1}AqM>MiOXz8#SE z(|^F)+p|gBik7oEXjzDdvpNO_LK27_JiWVzl%Wd8LNumBK9VZ2)^FMqsZq6&7Boy8yRTueI+g(R$P|=X|or z^ty3qcep-A>5wtOhh7@2I}!0!4;xEA9BVC{=dySO$54yvgtLb*^L3c??waN&(>X5D*(3zh zP+o~TG%DBZlUm3!o!u};(ZUVP7*hifnv|CiuwJNsR1?~B@~FULzyc_O^zaBBntoz%sT_((BYS)%h4+zHd7$ho@;a5Bg2-|5bmF9}y3k9}y1~KjOPc{K$BS{KyY$ z=SRXrOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DYQL_t(|oW+u{Zi6rohIxXXNcSMYUR18> z2n*@hC{oM_Qqy=$9=1=A&@dVkVz%NM0tUKAy^Wvy&*$HtVce~xoPI-!Qw0!_j}0}V z=Z^k68KONBN+gkIHx_yG6}TYbyP67btD9wpFJY`&fF5q1f5LRyAru9@`e6>u1{rk4QFQ^Nc+Xg@fVp zW9{fo^@zfZkjjFl({K0q>dLB*9`zmQ3c zE*tS-kytS{@NpGnj{yvPTt&2Z)Z1!4;DKVcoA8m@ALnGkM{Kd`o_zcQW)Re?K}7Eh P00000NkvXXu0mjfs~_LP diff --git a/graphics/pokemon/furfrou/debutante_trim/icon.png b/graphics/pokemon/furfrou/debutante_trim/icon.png index 05d1c448a521ea20739779db636f7c4f47582867..04860b16d25e3e42f5910582a57e8ca2e129cf61 100644 GIT binary patch delta 384 zcmV-`0e}9|1j+-D7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003wNklj(i`A=V-3mP^POz+WB9OLX>)gHPiOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DMML_t(|oXwK4PQx$|hW!RNu!EFHj6}*w zh%U_=z&n71$O3N>IZHDjp?YZto~-SXE*H0{ki+1^sEOmUgSgF~e0RUCPl&%O;2-Bb zGK64{n07hZaf26x3Xc3W!A{L#}{f)>~ zBS0O2n{oKe&a?x|ev2h+FaxWqe#x;pV=8+LB_H~shmy|D6bJ(vd)00000 LNkvXXu0mjffv@CK diff --git a/graphics/pokemon/furfrou/diamond_trim/icon.png b/graphics/pokemon/furfrou/diamond_trim/icon.png index 50934adad7d499bde34256b70b77f7f3dd870617..f5ce645e4ee9c73436ee0e12601bf5d582a8ccb0 100644 GIT binary patch delta 419 zcmeys@`ibW1SbbG0|SFkK%!2P2i1gs$sVs4`_Mh_^Xk?rzn^6h`m-8K*Dg+& z9(<3-;`C071xCD@iDnwv+yU2@y?%4?%T>o_G1)4iFPy1!83XJ8UAygYeCNExHvt!2 zY9+p0IeQ`f(n9C_=x@i@T*+Rml-ZNeZL68F(!zN9dObBkcU)!(G|Cy-Y^RS)$ z$T@yyj^jXl9!zs{9Pd9IV|AV%%wRb5`7pzQ&xe@~eNcXI_*8!bzqWmnUCtklpBp|Y zKLH9%;5WB_(g-Bx{Q!zQJN)FhwEPa~^)&~!e|pHiut097D*rl8OJHm;c)I$ztaD0e F0syTc&Nl!6 delta 551 zcmV+?0@(fR1Mmcp7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ERqL_t(|oVAm`PQx$|#{CATwmVhL-l*K( zJPcCV+N~A~yaNmB0?*b&YPPdUq*N?t&e-|WvLT2n<^0Qcw(st%Qonrs)f(`MG&pnN z?K(k&n1}asT7O^!?LJC)Az&i$*+fv!N?eNsjEOn*%@dY5e|7L+b`ezjG62YwR* z{xi#k!t0KfdA_2{_XOPC5Vd57)eON%`LHPQS=@8pEMvO8QO6mzfGg0KjB&Rf}5HQ5*0@uKi~9dvgz$?ZbR|L zz4o^!aqp76vOIUI`P$g&ob`7!ubB3y$~`vU`hTiwU5bNBod^(zIJf|@N?i|6$C>_# zjDbH4g%q^x-I!dSx-&UEb!T&V2bKjz2Gc2>iJCQSrm#$A^#gOWVc# v+40!bP0l+XkK$5Xwz delta 529 zcmV+s0`C3Y1KI?T7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DkUL_t(|oW+wpZo@DPg>?fW$pH-5dkmX< zeVE>;Tb35+Xafy8CK_^&O(qi z8#4Kvfg%{5yW$Yj+5$}iBzY`8y5rQdI=&fs!ez>Mi`l4-CZR2jyu;0B@Tcu63vMw6 z2;G~dxqh@_f7Sno^QOTD^A5AYS9b|G$f$QkKhnx~1UwD>jJ3GQHxY)t5F~vX zcz|rT@d9{YpenT-oA$-N2LjtGX8k&hztyKhd{5N`3{)?VT&D{@=;MK}3qHPyh|Piz zaCBwE3qIH-OuXQO4Hi-~^TCY>OFrZW%H4{O8sj)!Bk>XM_iH|Gsax|wzstuD=++d4 Ti_>C~00000NkvXXu0mjfUY^~Y diff --git a/graphics/pokemon/furfrou/kabuki_trim/icon.png b/graphics/pokemon/furfrou/kabuki_trim/icon.png index da2a254b630f8bbf82f31e90812ee45dcab4081a..bc81044fb0343c887fc9863bdfdd097060b5ad60 100644 GIT binary patch delta 377 zcmV-<0fzp)1j7T67zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003pNkl2+O0-M-{%?!jf>?jHGXk;`i|eND__poK3aYzyQC&(9 z@sh0j1>te6U_k8yap*K_nOalIn)0qJ06SXKv2||*$g=c@} zakRb`YJ>A08`y_)5+s_XcYO(TlA4Ahb@%=h2e$xMXSTd@Oq7dK8akw+u$-de8j~nW zF5|?$!*)89Y!;(JQ|?^Ib{4y`;A_s8!1CHTgQ?wag2$W{?)mh_5W{PV^sFnD{N$kU zTv58B%v>3$#XG1oEIuo}tlz}Vm%U}xySV9Jc>k-b59CJ&keMGnKxTdn0GatQ0%YRH z1dxdzBR~dzh!5RAr{{-NKJ;;%`C-erMt)3u==rhW!e)HOkMiLG X>Z%>ix&A&y00000NkvXXu0mjfGOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ci1L_t(|oXwIwZo@DPg>?g>=mCNzdkloT zeV79A77qc;QO78{w0BE@1X(D>0z`BX>%@O?573qyA08=^`i%L#Q1$a1v3OK~ZpwoY zqzs6Y1u)hcZWic7D2U1mmmb94g+`QWYL;H4drYf}h?=z*f0DZZJANm-R3nzUCg~Cj z>kP!Q>tT{ZB?aA9{VN}=j%`3UjG~DhCB*eOnQId7kJI$<)GR1J;$|oTzG6BaSJOJz z1%}*(=>*WM@`Hz1jSI(J+Yz=pI{0*|OytoKx0TdhdF+u+K9(NF3IhsM&+iUw%{+d5 z%s&ZGo#!nKe=|kw438Fv+Rg|HMOo?H(gPEO>N;#P(*pyU6)NpAGd(a6qfpC-GXpS@ zFK^Ujegp>i^Hq{JIsgM43b9_%^}u|wOX;jDT>D`YX0eBd*^*{_&T-=7x_FU2`3w0v>m1Kx^Ld`Gybj(+)^g}!281F1fCu11b%FPz9+9<*WPiAU6-B~D>lX%g=sibU5rIF6_8a@6g;X={#Y6J{c zOc7gq)bdQy?N32Fndcwzm}IZr$`N<3u=Xg=M2lpJf^%vQ`0gBPcWv1ut#E0vg5JiO z>c{8b3USZ=x9bP0l+XkKryZ}H delta 507 zcmVR02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C%8L_t(|oXwK4PQx$|hVuqDup+89dn0-i z5^5fXH-V)CQU@j$9tKvo9atEWRy0c&&c>EdkQyIO<2p$n0J!ab-~B$HzbN{>09O6n zVA4|zA|`Fh>~c)odLe27T@N=xp2aSos0gygXfIx!Fj7$^e^yP&tnSzYc0SD?qv5%Nu_xE&U0R8bJh+1#LF3LbW+%(VjUEFHw+ zWbd?!`f>6xfBz+zPjZ~}6lgv_q-;DMaHQeI6I3-XuJUI*Fb0`8l(^m09!bqs(^K9# zVOk4*YZ~zpr;d+%zjcVy8{<67++Pi3QZrN>`1mGiZNYKi1DMEMZaXkrPUwBv8Nb>L x_kytH!^*Ri)=A3;%yg1dmk-us`eQzR0C`L4%g3KK4S)au002ovPDHLkV1hv~(^UWf diff --git a/graphics/pokemon/furfrou/matron_trim/icon.png b/graphics/pokemon/furfrou/matron_trim/icon.png index b579007510fd7d197da2ad5bdd52714a7b19a1f3..6d379a8cae667df9e6b41cbc93c711be13c77e40 100644 GIT binary patch delta 381 zcmV-@0fPR;1jhrA7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003tNkl5ki&UiX{P2_ZE3p6RaXwQ*_lX(vt$1b7Ft2 zO`D1c$4-i=U!<=UOu$i~fR%^ZkUju9b7-LxE8NWGD6*mU{Su)2Am^fHrmi(~eH2#s zX@m> z$Ped3W>nzEdYN(0z>kU#fgh;&5cqM&hc`b;K78_{ReT8iXeA#4KWaW){J71)3f delta 508 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C)9L_t(|oXwK4Zi6rohIxY%Sz85_>_O$m zMzCZ~AF@vnbvy*BG6p5jkdTe&Frrh5?3xxE=-#T{{OSI?ll?i)-yKk5dT%h8pf*7~ z2cvo-#HDXbBy}K~Sy0c3lIS#wxJ*<$`a&rK+%iRcQ1@?rf2!v7W)UjL_dS5iN35qp zPCbx}RaAkz+kOMsFjp8iSoKXEB|C6JI~csSEl^@?H>umC1EH`Ld0t?%z)Fn4v3V+w zrt5Wg$TLWi%CmGngenhZ&gE*N2M=9q& zo}X(e3?~R^e}~bahof40#c(hPO40zeAAJm5O?EsJV05VGC8anEtPZt1rvgLI>Hzc0 z`iy~q{nq&L{33k;(ld^65j8BdAN|~SW^Paoet_zL_R9KEt1QKs$9~X3J2v=H>wm`> y20y;QN{sxF`Rcl#_;L2j%o+QUdR+acAD_|U3O}Oo4ki@<0000VPi-*q<6Ru0}Z(&);?}9f$NTl$d}G$f+Ow-n8#!w&HzLZSq3ZyldGiblo5Zk z;cy)-e6f;UJ4?whJlI1l16DmZT=bish8v3Px~iI~sd9`|Hv=9D3-hT_Rm&_1!R|VT zwyy-IO3XqtVt3$KXL*>VghmIfeksli#I(~F` z_<|oD9~OQTKCJwph7U78s2%yvkHUwQ9}OR7eo)7Ug&!>+@MA*NALYXno--X~^pO>| P00000NkvXXu0mjf>87hN delta 506 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C!7L_t(|oW+tcZo@DPMRfzNomwPWI@PGT zq)T*|-lSQSB?junTCB4*p0db-1r*|9R&gBJ&R&F*_#u8#SXG3$B=fA$MJF8P9>NC94GNQFU}frhyKYhfsi+DD{7sX+iq1}{i~x^5pfktl`h zNYE%`RW!}l6Aq*bt#_H23!h$QV&bFn(ytsRKFGFx-|!~!0c>0Uewwx4G4(%3ocJK4 wgR(gBL6IO^XA>W+NoqUe102=%!F>Dyl#BdHc&>@U3;+NC07*qoM6N<$fia*_JQ+fxS^Tgw1Gg%&Ldd?AOXw%MUH$yvf24vwOx= zriO+Z@fpD%R64gk>T&T@sJ}kLh^0Ga-K;BuF*{GoC%jD#t?~c-;{WIJzs%j{J?E`H zC^IU3P-am2oXqa>#GT3I$#Fr3i9f-ZapI3c7KfBN8AgVg@{9r#O^WHeg=M4 z{J8kXzeah@qo?}2_@(W=?C$*eaio2!y!?*`e<~g{e|kKV|I6B%AFQ^*CzUo%Se~Q` Pj1dM;S3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E;(L_t(|oV}92Zo)7S#`6XiuovMhorvOF zIyDc|M`2+=>d=X$eI1aDvUUhWr8BnWNL4E(cF)c~ml@Sd@WKE2st88-68GyJ#3>5A zZmTx@u!1zfM`SBtu^qs~Mpm}35YD$RDa8=k`8e#qGPzKZ>7AMrNP!u>KwgEALRr-M z-i(+Fi|W{|&O|AM7`i=HP;(OqB|vk)#9>SpAhF66gFs?NT`%QORnxOX$N3O(qDDrw z7=-31v2!~Xe>E3Xb43QH5wWD5-gwBE-&?ub-G7|kBkAuIv@Yt-Oa<)DuYL3E?>MiC zV~XICT`pMwLqe2WsUHzRe3(ZHBV4AAA66`73D(U04D@=lVlZ`r@y{Sh?*LQ$NsRY{ z#W@l*N2ObT&G%cFQZ)cm7jI8S&jUU#pN~cceEc8?NJa*H5Gy{6G$9{0HkVLnO2~LF zM?RVgvZ4(5zyUF$Y~CqgtPfYjsTEg%uHJp)c<(hxvQv7&bC>=0n)05XJ4 z?dp%8pwv!-VN;R;)E^0o&`Jk@_cs7T1Y0Rp8i2D6Lid;mj1iz_K%!Ycj6fj*m`?y- z6)FMF`5S;l(5uZ|gb*;yFs``DP_};|ni2xFUw?=z-gkdZqHJTNH&#ZQKv%6>+Es7~ z!R43gojf180-TFFjsWm7i4ddd!p(Dnsy`6IHguY8QyGY<6@p(0$itMNbzgsMSv->9 zi*?qPmjGMdhkA@t09OI>eV88Fh`9(Lf4KfCJPMEi4Pa?$Y3V=c2Z$*S;6M-D?qvV~ N002ovPDHLkV1k~!w-*2a delta 502 zcmV1HS~27-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Co3L_t(|obAv(YQr!T2XLc?LPyy?fFppp1etvqMcg=qeItSwD zuK}VLf^QtrbhOUTfoxhLz8LtE(ZzJ!C4if5gPa05>L*hWfB8-gK#T4p92NGbw^A0A zycmGuRSRa=&kT?UAqq+ffE2}a1awV(u7OSpeGCAe(|b7Qya#jwg7EIZb~_>RfVPPS z0OQq~G0vIT;!doa0SIu(OrBujK(%oK&0#ZH^uQIV#HO1RBxLzg1Fdb5N{D6v{4(>k zFbf<6G=)oVe+B@T8P>usk|bHdrEA&rU;!_mbQOY-@w$H9H?B!IG)Ke&s1Y(%*Ka~f zI|oQMctV!X>a(r{-+S#AG0%AmN~IJ4Xq4o3C&Z&X0yut{tImD~+|I&vIR-g^wVOqT sPlYH|0@!-pKc;y&9vrylnqSNp^fP~r7x*3(000002uVdwM6N<$g3DjZ-~a#s diff --git a/graphics/pokemon/gastrodon/east_sea/icon.png b/graphics/pokemon/gastrodon/east_sea/icon.png index 4eec76873c861cf6d13517ce86a7d3a44bddafa8..33ba3c5c51be388b68d91e5ec3fa81e0d16f3a06 100644 GIT binary patch delta 329 zcmdnWGMRaT1SbbG0|SFkKa zU;G)td!_%wIulVV-VZyz9J)}jMB$cs)$GZ#wbvIo?r4*jlb&1OXUNuUaPs=9Zp9Y? zsq#zK?6TU_?!z4762`8Zc4$VifbP{zYNw{mnKtdz0SUdGE4{wHHqx+Oac+Zad(TY1 zIj83V(N!PC{xWt~$(69A?)n>_#k delta 491 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CJ^L_t(|oZXYLYQr!PhV=wJ1nKDbNm4K< zV_gFAnD%8dXtJNF&}_;O+Kgupb-_cd*t7u;ajtQxCD~6ywF&shb$I*GYSfoAPxsKtY=yI$d8s~thD?r|U3&KI@XM+bUnnETz^mmZk`ilu472bA6K4XtKoqM~vP9BojJKZ3FT`s!e0pN%7C0hV#w7`Gw z03x!hKhOa74K#WL4|@jM5d;&*!Tx0L>cbp0O-Asj?;A*ZOO$WL0=Do1l!u~~$E#%@ zrh2K*-ZT6F#d~H=q$}xmvusAaqy$K8Nk>RwLr}UTLjtPjlU?G$NQ^MdM(jHp$od{) z21WouF%SUuQSxNH^8I%Cl3w&uO@M#GNFpnOx!W^6A&np#D4Fud0Uae%LueyaMNp3q zT_&0BEVB4wA2<7K z8l>)fX2F}_2uOMD7&+0`?c7wjdc#CVhQx!L6EIzuP=o?vtj6rTizhR^z4@DVp36-gW;_6tI{8}*V}N}8$&tLB#tyDY?8=|BUOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FQ`L_t(|ob8jrZi6rkh8fa0*AZkp5>&Fj z230P*m5S^PNX>if9rnPp34tV9y3=;5RaHp-uz&wHS@wwkj;8~_-F(@pb8{zuRH{36 zbrNV51xuF5+hHM8szk1V(j6p$9$-)az)})m4W0ldn{Ivqf4G4$0SF6-6p-5vf}2Ev z!fBi{-QUrOQwnuHWSPGF*n!4Cx6CuBF3gj}hOK$r8U7u7Kw1ZcG&em!SuT`sDJtM( z!icSO4`m0)bakMh!Jl)30)gF;9J^zYkw~!tYzGQ~(-DAWW*Sw!f8pX`(`gn7kQHn( zo3+~B&NeE(e@!WCCo@9p(h?WnW@+lxPK|?5dT?Ik_7JpOfvP8sC_aBLNs9zPk~N6Z=nzAufvf^fe%C1!s{ns} zTwRes*0eB$rc5n-9>Pz760r#A6)K?uUI~Rz0S8P3bRrf(vznGB20;yJ?uoexBAO9G z#7jk>%p*msLC-I|F4c96!gc|`EXQ@iT|Hm-CrTRy`qUApaa={v131sK0!gzXwg3w$ zp&D570TLBHZy+EG>iiB!{LQ)m%wKvU6WA%9&FMwf45M}w6FZv@76aO>=N2Bh@{W}0000< KMNUMnLSTXjyv#5F delta 574 zcmV-E0>S;A1cwEX7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FB>L_t(|oYmCLZi6rk0AMDi_p&#r0jcM@ zNIjyGwj8H+Eqj2CCm3UAHmTWL&k27Wm~g8!U-Mx*A+h7!GsM#bh{FjHV{o>Yz!jWr zNi=}KCSnA;h;d^VF@~j82*ej7Y(SM3plc{CqW;2zJMVyEf50OwT(_w~Df~XzQfJ`0 z^9raT5MW~A)-?v8Nha%^}v2K;XM`QzjkzF`2 zg9c>TGv7iTf5ARuD|FyhvfJ#y+s_nG{6TG7u$%%APJuNGnrjhc$KlQGfrtfdjms#Y zr%8hb_WaLuoTLQL^XPYu0HGiEiiVjL=m{|fk_tr5VdPF$z#j!dj}OqVdjurPTv-B1 z@y@L4N2SLt0l@*Yu2WDCq9~$%eOWdD4CtkhiTb()P}jdeNSaL^);$oQZQRzN&nd74 zvIpcwwFwZKeO}ud5|=dEuuEXJ@u{wL3L2m7=T!pJCFT6)4)b5eFJA7T;x)mswg3PC M07*qoM6N<$g1EBo+5i9m diff --git a/graphics/pokemon/golett/back.png b/graphics/pokemon/golett/back.png index d3b7ad67e39258e22b1fccbc4a6a023bc9e8582c..5a2ae220887b83ad8691c3801703188ef8a9a8f6 100644 GIT binary patch delta 717 zcmV;;0y6!j2b2bo7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007mNklb`#3`Jwvj$9}C|KF`PuY}gnm(H|efWUB%t{ur@+y3J>M+o6( z^633f5FrvE`S%IIr<6RIfVTl;fK2%PJp%85kIC;8@D3s*;62ziUM2vh1hfaR7s7u_ z2tW}hj(vaKgvd=_Ev%bh_YKflSTun}XzzmsT+pX90-6Q-;(GuB%zCxJpZ7%r0MG-H zCa3qf0NBdP0os*f;*x%woLhEM$3?(qZXk~E zE1{D992W6};2Z;F$W1?_Pkf+V*9U*abpe@h zlK}w~LViroO-XXf&k%IpJ2x1p0G#xeo&hA+lNGhgTyKB?h0y6+dQs|y$$hK@2Dl37 z^)0=gOrqz%4Wh3e1Q3ic>JhuqHURh~7(oDK4Wk~qxuju=HYlC~oZQBK z35}o(nN+e8U4v|5w}x^P#y!9~Xw>pw4k|`U?r1`iAVHT9!hFE~#~+PPv@<*~$Rktj00000NkvXXu0mjf|8Y$L delta 862 zcmV-k1EKts2Bim(7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00PNLL_t(|ob8jbYui8+#@!GIWNM&ZG8MIU z)S-hpn`A7chSJgY5%4I;MPnT*B+^a}$d8O!iU&i}smR(3It|?f&P`cL{+qt{&T;C< zare>_czHj6-*@l5t5p8Ev-$Qf^|n|~Y)WzdW-V|4qWOFse;^LJ!dnBhMeAHC=W*a& zO~gv6M@{y?g*pP>BgCGI04O3>*0)?30t^XQ8Dk>?0w88$g~=&cpw1q9WdoQ49Ks!y z1u!3Fq!7Lve<%SFID83I@Bog>zy_8ahklScK3Z`JmJnFOw%jbAs}7U^^g1dlYV9b1~5QQ#RN}& z?@?s{Eigci{#k+{P55&mAX5Z7HUQOAQ-oodoGkCCYVS!x&SbzfXRw)&9h3K+GAfHWhov;7} zxCdIIf7xK5iojgpG`0Yo$gb#F2?Dg{HNvP2-~$>-DGu>NiGi&4Es&WA;y6}50o4Vt zC9Cg~WNHP#_kG1rFt7l6Y+*<{VCpw2(DPdYs=L}+qy=r2?>kPcU?96aj7cd6*r<7i z5NJ+q>D2v^>^4PHaEMR2&Suny6itS0d_k{naO#+{Nea}7Db0c!L6dqZ2^dctd`NA1 zXaW3h#KXi^*DNp|F9BHrcA7Y>JK&3yJ=tSmn*qBIsrgt2Dv3tGZWP8qqJzN1dNl0Q oB*5+@#%MDz{>2iF%KyXXH$^!C9^qHB8vpC*2u0Nx7@GM1zdNYaN^3{Om(B7zxhDtcBxuaPE^oOu^45nC zHV8JPQWMTR6LtZCRCx-XXba%I1KI+Bb9(^C0IvsF%K&Tj07Kk@rwu?PB!D(=3?P3O zZ&MwI4;O0lInD*3%ezl0ROVeQH33~M6`;vS#QGd1z~QO`fCRWzg`2>#LL)#bg+_pI z7eI<0+6j&_*1+fA;a9QC7SXPkV00UMP9)O}S36OcjV^yI7pa`rfTmlW?RG1oL z1)#eCc0oY`a{jRM3iW>o&;rb~Lbrbd223k-J7B=H0`>$VU{axuKnO&@q=FDgU*TP0 zK)|kmQ25;h_VWoaqfkbGw|oN3DBxQ@0VWhKfXE+|ubi<0zUA|sG*&nPB=f%BibI9G z{t%9bKqd?o;_m=f=B>SM_K`vw|3lyjcvXnwGdBSW_1!R5z-OKt=m6dnh)g?Yf_V%1 z@l*isi+D5;gYyb^f&5&!USDGcDR6GEeSHkF${A#@2+!TA6H002ovPDHLk FV1fOV1ZP1_ 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 Eg6DqaasU7T diff --git a/graphics/pokemon/gourgeist/super/back.png b/graphics/pokemon/gourgeist/super/back.png index f669c4987f5bbbdfe7224049daa066ea52343dcb..3d6a97ef5fc37f03fb13d1e600a300e4b48aa80e 100644 GIT binary patch delta 487 zcmVNkl58z^1~ag8|kf0DAAf0*SCtc&?A`^3Qwu-h6&5L;ygaca&Eb+5uD0pn+=n z`u!&p$FF*UKrGACN&yG?IDi6JDG;gQ38Z683I#AZ$w332q3{uSR;G7@Tq$${OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GTOL_t(|oR!tVO2aT1!0`^m(u1(dPQorZ zw99LV2p;why2G}k^kA6}Fng>+6bCyL1Zm!8(2GLe#pKJ^b!+pbm}`FI`=?{A=lyG) zg(Ei@$tra152Td)p#zK+kiFoC-VdtJ9&i)w+~Ah=fNS>Fe+NP*7+kVDC-C0;KrmAv zcK~mZK2$W8Yt9S+>5X!93IJkv?Do;KgwOV-puhm|j^%UE_QPfK5^=f#Kp* zLJeZ#9!U)t5dnbHz%+8r?3JdGZ^%jnA7rIzJkdrBH*WtnE`<%0vc=JTOt6= zp-~i`CBknmp@1b~Zh)SkfF&X^38@BRXo*0uHNX;)G!r!FM8IQ6@Bjrm5k5@71B#*7 zi7)^UDAjAO9ic&j2Z)_|&$S~oSm6O*Q}w27M<@_Way+0^Uxd6Jp+I_tK)tPH*pBd7 z^nm-~6}~AQzz-Al@L_BHeSDVJ6LuQNyjAJ*0qz%L0AX74%Jjg062bBhY3=S uZ4np0c)-*EnQu-b>ID4|8bH17PS+nZElV5uDV>}E0000Oo2I|E{5M_T z@b29T>EmwU`Kcaiu-v-Y3t9 zUuI#7gVEF|hGRA_3x-b7;&~RQj(vao!D5~%{3v)FJj?X~;tyUi1HWvThW6Nre|l+$ zJ^$;S>r?r0H2aDlm#a7Oqrd0ZtC#sPBkFqf27VBy*EsXz;R@XOF(4@OLleX@KVZ=0 zxbp*iP|a0>AAIs5<01GEe?IeJ*R6A6dg6m8VC5lYevC7EGe5on=jk0Zp`8v!vj6}9 M07*qoM6N<$f{aMe>;M1& delta 608 zcmV-m0-ycs1E~d&7-Iwj0001qplF={000McNliruZ02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GTOL_t(|oYj-hi_<_9$LE^UBY02$11~A1 zfnr$|{{s(tlfsaLuz!OKE>jSvP=$^JbDu(UTUZNw5f%zz`!`fUx)HKd10`w8j`=au zP5Tdsj~w#8^YVRDtxv^De+yEe%)@VQOl1T-K-o3^ zu*d~ACtmLf1@r7wQcg`$8(w3f~m$}-!X~6@l`5QD)JqqKB=0f??>ekh`l3iA1--+ z^gjk13t6#l5OrZK(5f!Xv4lMz`SRE`4i_4r4Hw{H_r`1>gH=KxT}(cj!Whm9W7tf7 z<~R^57>0g%m9Tn*vCX~)U71!_3BNFQl9T99n^sr3a{7(Qu=m1BsM6Bm5T}PD|Y##H;l61Y9Hj!s%1s@sHrul1)j{+d5 u^C1;#8Ui4%`iFQ(lF-8yOE~^Z58^L%O86X?t-x3S0000nCtp5LlFNhi<*`4XNeKhwhD7I~%K7IQ1Qi=4+9%Fn# zNFlOdxd{c?nj$ni&0e!2R;0atud z_So+VN5XW6PWNR=&7vt`efSc86>yvr0RM=;3OLTg{t@9hUNztW@G-vpkI2ma8Bj}b z?!GP6KP`EEKq0jFkgUD=$$K6?U<2>&!{{&Nvpm4ueJAqqwg1&|Mu|W&av5b)SZK1K>*>{PXE`yTluSEnq6&RBr*cfcyB+ h?E?X(6a4h)y?zKDBLk2}hqnL#002ovPDHLkV1hXA@k{^! delta 610 zcmV-o0-gP|1giy*7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GZQL_t(|ob8mcZo)7ShRFakK@<=h7Jd-W z!Avc((tY`hRlH?B^R+~q9 zcMj0Me$-1teG9O>26}rH5CQ;R12s)|nNsD>H$$BVA)`Wle<-Y@)iV_jx!?^jR&{;G zrX4mr=7I&lL@6l^g1LIdaj#T1V5}K)QcA3XdY~V^Uz9QrfOIdVB@pPwN@kJ(moie) zl`8u<;h2sHh>c57I-rnw0@r(`wK8J-JGSqR!D?v|Q@Kgg)767>7 zrC=lK;6KJVe{jG6kT6CbLx8wFgV8xdfX0N`&5#suB@kd3B46~|Gf+Sh#YR9oPr`+Gv|?wmtVyA;4zk6cy9v?FVl99KaUlgxex60ME|}d7T7E8q|Oc%$U$hA{og)&o3K-iG>Eh zgq@W=71qQ-OP{4x2IDkBJ;%5RVW{~XTabj2KjUIhEQ2r_11@=F6l)xTW-mnD@w{E`){Zg z(esqqQ`^aYW*`T|C1+3j`U-IArT?U-lRne{a9ym&3BdLiKy(}{7_dA66g7XWUF`_5 zLUzUa_U?B8fk093BVeL0yGXLIN)8vl*y)X0wV_b9>l$~F9n1i?Hb$|Ft9}{QK%Ibd z8NkCLYWL9^H#R_7v;lT-4ye32I*_h~Qk|L(YDfprl&cY74xsi`o)9zvpgVm+-1S*U z8c(mOy_&&Cg|zMG)jZNudYe0l1n_AL$C37Z!(6W!2=6mlLt+9O*c33)>q}ipU?c;! d2>8W6h(BPtEfvj%g%1D#002ovPDHLkV1oZ@5v~9L delta 668 zcmV;N0%QG`1>^;g7-Iwj00013M{Ml?000McNliru

    1~AQgPDqE7$-02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ia}L_t(|ob8n{j@vL0MI{K^n^Y5Ju?5MB zoyfrk2?8A=#g;DPPF0E&xqz{qrAno@TI2#Qd*+@uSTUl@k}^Kkfw zl%nXr{!VNaMKMFI?)Xg|v8+MW`I4WY!@S+>Ou9s%nW9@&f0aRUfv~#fQa4(wOhGoU zk;t3U3IKNX98g!l)(CJ-w~|O30$H}BB|wIN=4RI900;n6rIxHQHpz4fx-xJVP!iJ+ zoK_fCkX^S*>Kz4ypHo+YOJ$`J1Q1US#kh|O41SPp*v@zE#QR1#kP3-&A(7gYO@Wsi z;J$ePxFF*ye+J;(wIStQ!1Y}aAQ^pkS^|n0phBCaE)=H#tDY~L%@j~UPDvv+UXHPG z4cL#sm*&a)CDYZFU=m(~VOrrF0w)}^>;peT9ORft(fw+ruB7U|K2IaK{;fL^J&-Q} zt@j1@fwc564S-00dEoOsKs+A47Udl1=YYWD@p$;Oe>u1NXbHe35%_UIfZn?G4G_nJ za^?5g#a<5q|CEKhoGI{dn-QLQaIP#VFdhYfg_xp;wId=x!a4=O%fye_^-hmSJMsB& zXTdB0fsaYU42XkE?+HTzBc~F@Z5RECN~ShG9lG<9qxs>@4`jN44-%txZTou_eSFVp z0f8+@F58tb`}lR6(*hiyepdMs?quTacJY<)59$x_m4HZd69#?&0000lc<3)%St&^C$y%b+6c9*%9_(DjSK zDq{6n1#<#>_gM>^l`$$nCD5NHHWQV+3C3T9le1VDM))|u5C%ylKo4Ja52|6E7my1S zQA?nT9`B-}Dd+`=TYuFliUvO@2y=f}BD4gXte!v=pbBSx+xGqSdhJceo$#`XCh8Kw zH;Vl5&|6kg5b2bb;z;1uLgm(eu zyb7S3@Hk4|b|H!q*buXufe(VR+ktYp$lrwzNZs}@0pXHmRIa@ecW6QDPf z3LbD3sNqsD@8dmfbw2U_5&&&6gpdCt=*{qmFaCWZ^2v}+diQQ(Ch=;pCt{G-!gIwH z*fKl{vP}^CnEgGWb2oaQ23fY7^9MY)Uk9Nt1@BJL1&;z}9}o6H{*3%>q?~d$42Jk$ bf49B>AburL+Gsv%00000NkvXXu0mjfHJmfG delta 759 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lr3L_t(|oYj-DirYXChP5bQuJcOUgphzY zdI0NIU<^6PN&|VFfD2WZX9&1joF{Oe;LcYZq)KU2T(#Gvww@s~E3ItHlKUIZ#qodo z|Jm8uAb5kt`E{L1sjmZ&%jq?JDj@$luD^?B0$?@{2$?Vhf7n8Xv%QR;52Vh$+S`e3Mkl61b&<1oHYK5 zXy6>wfS?3D0tA92a9A-oiOd5U^dP{R1P8zn5JHr+8RFucj1!Pc4-|bpN|4CpC?Il) zLC;D*zI4egtle=>w2|7G5uIHjmqfpQk-geJjfr;G92h zPl@J|KGn4&xR6rv?eE<&#VrczNN6WxeR$YBodLS857zDlot5L>Xk&KI9!Q;m#d2Y& zr@Sy`r*4HSivo920g=)WoyDs;o&MKqC;ROS4-e zFz@cN1@3LfK(xQb@REdThmVQL=SsRaQk>M0kogr!kuYZaD? zTq-{vEY39-$$~nJnfPy0tG#Eh_hK+<%*8ZGAOgo{u1y)Q1-j{0j!^M{Vy~{r?k&PDHLkV1oCGKfM3| diff --git a/graphics/pokemon/hoopa/back.png b/graphics/pokemon/hoopa/back.png index a3d76883c79d83054641860b7c511bf785cb5d8a..64912b3236171b5067403cac4e0ec022fced7c3f 100644 GIT binary patch delta 646 zcmV;10(t%12F?YL7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006#NklF940M7gl$aLTR9RQ%)z=_`h>k$BL z`o^yx16TvVf{p0tZvboPubg$IXW)NV31D4c0eIF$K-`RY88A5xc+xe%>_pQ^5dk^? z@APK?C2*p+Ax;1o5lSA}ZL>}QOHfFA2+OIzjLk#Hd?4gJ2RPxR7*%usVvB^iWCGGF zzY$~();p!1^dS3ZhgvK<_{rBm++4{KFWx)IZOe4oUo{~Y}iwH<2g2J;)iHv)`p zgu|P`M(lAU%fm*yD!^t5VFdVyXPXJ67m&*sd@U8gV+43)GRXj~-5D|lTMYpYehbq8 z;?Gr%P(UGc0O6L3GXk~#!sv1cJ)qimfHebI<2nL7K?>-;K%7#!m0-PKyI&cVpjqkw zsE3pVA^`1J-ZfKYJmtQTRpNe9zx9x|Bh^lpRTaSmi!*+lnbk#&-(ohx6BnES1|iga gJrJ(=fBJ9w1IidG9bJB1fB*mh07*qoM6N<$f)gty2mk;8 delta 789 zcmV+w1M2+F1>6RZ7-Iwj00013M{Ml?000McNliru1702g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MwXL_t(|oaL20kJ>;GhP?#^9cxP<+_6+C z&5DBj3NFY}4y8udx>|`I$?1ZkJH;ovuudn${EHMZx!RbcNMUO7+oW{z#3f%5MwDP;EmE|2>C8`o|GC})1}9~P TnNh0`00000NkvXXu0mjfM@mWy diff --git a/graphics/pokemon/hoopa/footprint.png b/graphics/pokemon/hoopa/footprint.png index b7c5cea6a78372d9d46a5f262fb1781a88fa4cff..90b2344967656ce2128ad6ff82d7ac0c743b7fba 100644 GIT binary patch delta 84 zcmdnTm^MMekAs;2$2dVEnUR@+fkD+aR|!b5mw5WRvOnbz=hVNStlxr x>MmrcF;OXk;vd$@?2>{duC?Eg; diff --git a/graphics/pokemon/hoopa/unbound/icon.png b/graphics/pokemon/hoopa/unbound/icon.png index ca3bd77644fb3c3a98e1712d97c1b70961206563..4c77ca1e2cc946804dd08876602e745a567f7d81 100644 GIT binary patch delta 448 zcmV;x0YCol1c?NY7zqdi0000?P=%b4dp~~=bW%=J0RR90|NsC0|NsC0|NsC0z)*`r z0004aNklzS#HBH3`8whECiY0-2b*6vPx|&_D9j8tqcT7X2dPT%eMW>0neje zkE4#3&(GL!_^Gvbz|d~#Bbx z9MDt~Rd?A{PY45znlwq|vo3>DMe?t;3SXtuqr@$A>!1TFr^8zZuk*55s%}70l`e!=s?|!dN=FuUrk4l?+jVa`Kb6AXuK|2MJ|Url z^>QX!x>m!%_UT{<_{g*~@RmiT(n5dfFpKyFBvOP!rdh!)BA&`@UYN*I<3V(>&{HvQ zK;5z0Y8nd1#|EdBJ{|C_*4j_tT4pn*8^g<&)1%()^FKa+6Cij7NbutUAdMe#2auB= zcK~VpcmPPu?Mnc;5@ZFCjvy<5^aL3JQU`)e02v7~0;Em^82~a9WCVyz1X(NqWLl~p q2T1VY5g;Fb3yz07fV_O)%!hZs{VPaclLkEi00000@?kE1n&fp7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?_*Pxg9(J0004WQchCe?#jaqHrXfur(0m4~RFE z7NoI|GSK%D@QxDQ2r6}RkvxN>S~P~Fa&yII6Vx2dp$zw$XG^{mh3!e^{E#o}&Ru9N zo(@NpUR^YyHS?8>CS{?#W|u^~#^`NRVz4zyXpY%#4c@KGj6=M?M*ar~e-)Y@6ad{d zS1h#$gN(3Te}kIMtiUzJQUXB*~3nf!Sbg2hai2 oM!Nu*nvW4M^)EuM(o6aH0{BF5J}9phQ~&?~07*qoM6N<$g0P9_B>(^b diff --git a/graphics/pokemon/jellicent/backf.png b/graphics/pokemon/jellicent/backf.png index 6471d3bacb0148bfa7e456bff33a6e36be0622e5..f6f0b060582a1863caca2cc7eb6bffa942df6ca4 100644 GIT binary patch delta 448 zcmV;x0YCof1c?NY7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004aNklbEpdqQt7j2_?;JbTPC zL<Dw$via{YgeX9!4p0r&~T#P!+*z?E>5fLrz$;8(FDoc*i> zCLO~_r_nh8R=_a96=!bYmf$2~c&)>qiy#DzFr_ZRR0JdB8n6LoBdE$#6)+j0@k1Bh zJHp^n8(@WCoyW?5Lx5AF(FFhy|u@?$x$Qy{wZoJ&{{9Rs#N+8>Mb=tnFvH@B-~ qZO3tEyF`<%{Bl{Eo&D3N|I-i9!8GX)m&)4!0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E6jL_t(|ob8mcZi6rohP~kD>OiE93^kN3 z1Duryuutrb#0w;r-?nEPjO_xI+BGKyMY%8E{Wv)od(|JRVw^Q6edrrGK2HdFd*V%= z09-#2)X4~r66G1dBqE-L{2kzkrxQ3JYB=r#P3RCo?6)iEe^7}FU1qVDqZ;aq_^9df zInVbUf_h8MRQIwi0ANUfIagGI?w|4x8;~ig4nt{hzC+bwI9AGDAI(E80|`!@mj=q8(s)GcFlDu})ELGJ)NbMuDWSwbykyI5~0000zio9lY4*Rg5a^+E=*2HaV`sMQudifp%J#4& zVgy%1uY}2d(#Gx2v9q2x}vE?_3Xmq89Fu#H$q5Lr# zB4(Ai1kzOLa1G$wrh6f^^K$(P_G9?1LX?Eg}({MRq&<^ZuHKxW9T0g{Zh z2#~P$I0IrJ9NZMRIxXuT2gDP_O%+3+gr8af0000$p`8E#02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009k2L_t(|oYj&sj>8}jML7W+W*QfWJBIV^9&Ad{YTI2ufZD2$Iri#1^jBSA7;A>zA8(>IM4GgCY%>8Je+XRe@?TZ9V zZeMKsmV31iG0PK}qJ62)-WTl$9PB7faog~`R>q!UjcjW~Jpeoaw{xWP1&#m!002ov JPDHLkV1mTbtKt9v diff --git a/graphics/pokemon/jellicent/iconf.png b/graphics/pokemon/jellicent/iconf.png index a6abfa5ce5b425db7a686c8e11cb37bb858bb490..f9caf9f13f12b73915c21475a7ce9a3e5df51c10 100644 GIT binary patch delta 356 zcmV-q0h|8w1Fi#*7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003UNkl@o3b_d0QocHBW$-uL%0P|Js#Epx@Hd3u|*P5UmWiN+UKk1I>R1 zz4yw{gta~sfqbCSx-eR@*%1gk0X~&8TJv7<UR9TJd00maGKMGy(ShgzkN zhyjTMq09`;YMn7Qe-qGJJ5LT{CL(*ZmgNKoOaBP44hzkeI02R%(<}0|L7--|{Ih~r zV)KW%U~}%T{fYf=0f`p^lIy<}klav}y?}5JwgSSP+6qWbX%>*n_Fxc@g**hMqXa~; zkOzjOP=SZ|LLRu)_w9GVN*=iUkL{1OJUqA$Z~qUqf)d%T+6rU<0000v delta 425 zcmV;a0apI51M>rr7-Iwj0001qplF={000McNliru

    4?H7A-o{RjX602g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?_*Pxg9(J009?CL_t(|oZXVKPQx$|hW!L*(F|m(NCq~l z`XA~kd8STuK^Y>%ElHmai3Q2jy9s2kNlDx^nHVc>yH9sI`|cCs%0tfc);Ck2qAB=Z ztaCG_^jQMB7(u%$HTdP+BsUeGq8Py|R~;)t$=7|w&u`38e;!7t_`R#x0(}X!xOJ%!0YRC=59FxQ+x3xw1kM#c0`yH3r z06uu5Ytb?WKqwEkY$USK;z+LyC3k$ zx7=5Ac-FcjyCe4WNp;5eUllUHZ2YWsV6EJe5;?8<_3cfeajf+p-a9{aKAini$sy{C z(gx)x8|4p_zHHmB%j$clf;F+A>>>c-edY%1d#!XMobIiXzfwknr%?q+CwkH6s|0R5KGjqEG z+a9hO#*`xE9oijjz6Twx5`Vs2dQUVVxWVBg=P~_KoB1)D!x~B^l(Bqybhvm0o0aV6 z`n36pVhY+ej2RL#f(iDQPID-n{hlf6SZUpq+409KK~iX)ZPXuNC}i(tm?147b9(v9 RQ^4?L@O1TaS?83{1OWNzu#*4) delta 444 zcmV;t0Ym=31BL{U7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AmVL_t(|ob8lBl7k==M6u)m8n^)8Ilw@B zfFyALGYyzT;X`nhs#)Y)uKL;CAS%RnJ~zYE*GFah00>=+kqBK2M`YK&0j)iUfoNIP zyApu7B*0(a=#FdxtZzFY#+!Hpw`Pf$PITFTxw(v_rCAWCe~~e`O?3}|wH)y)=IwFB zjZRaRi0zlzJoM+-NgOe${SvQC2ecyd@~78iI!tt(vUXrP=)S*o87oA-)In-5DpRND z@-x6--z^U)ZUASFrAFY+4N}In0JsjCcR<3r8d$VAfVEC2UWY#e43I(f7a?TrVGCe8G^|1>fht3@ug~*@z&!F5TG$Zc&*nS-Z2kZxiiveCszF@<0000=Mq3`8?_SORhK|9@Kvu^7h)r%yen%0nBsa~TOCe7pVESQhoq zb`H2}1gL#K8A z1K<*r_Rak}EdCx~^A;L0z!m_zk6C{XBu{#m9Uzq-mk~C}S#RnItO-`PJ~;}+b(zyL4^AUJn!U`hxSR@18h z634i%0Zs!b1R6#XaABm^Eg-T3iV%i+y$DQT1~hpmn2J#PV+v{!ZTlIe!AX%CAf%Mx(2A)I0?s7#3h@4k^Gl2BZ5uuIf zeGwBNMFOyX3=naaqbG0|qAH?7_KOa|LDF6!q002ovPDHLk FV1oX?FT(%; delta 786 zcmV+t1MU3g1=$9W7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MnUL_t(|oW+zeYa1~X$EAQXWIEw+xz-en z<9>idTRH?6e}N9h>xshSXamKAxvpM>=4{^Tsl{1Zyj4TKK%is|T*l6wx&`_qU1CY+ z>s06)Y@grn{{Q!$-W?(TH3rdj9s|REa7ja8uTO@rgMYFRf1sxgK;p+f0Mr2Q568X- zRR}<#lmaWY7Xw169Fz@dMUGF$BOgc$B@0!DA-X5y(WPHPVQzgS@*RLwUPuc(TY4Uu zDtsc}0{gBp>Xl$6x`#DDl@jJF^GYxh-NVsx*`HW(#S)S-Q~g#%9wTtsnGqZv{<~l* z3ds#HotgUsfAgmhrUV42>AwwlS-v5J?Yv(p<3Oj088Q|R(7;l3=*$tIECm~JmCFH{ zmIhFa?IPrWOv<@EN8@0k2y7tfl;zA0nSpRNQf~W^kkE+(u#tq&TH{FsK#-$J;w_A` zk**)}Qyi3K6YxSjH)Gl^ZIoWG#pij_3cOouzA8f?fAA0-<7h?v2#e@x&d)ym1rSEP0#O?bB_bdyg2h1SAvUkB&T`T&(c|a0A_6>#LUs}ODIIB)jIIv9}`_rE`cKw2*f0s;qBRmH`xpa+u|4tUSl zbydlme;>X9zN0{-HJ~*D7a;&{w^Q4N-keueb&~`ZETKgR+(vC;nIMGo;QXOV^BBM} zqz;f9{*V?)l*jj&s67;H@IaaXFbCjafP1%vKqm0W>rr4n7O>A~-6#@_HS+a1R)!F4 zhk$EU=x=5(+VX_1wbl%$){-X#9|*0#x2DO#Bo#go(IXRtap3%GJMi!04;Vzo7Gkmc QZ~y=R07*qoM6N<$g6nEdOaK4? diff --git a/graphics/pokemon/keldeo/resolute/icon.png b/graphics/pokemon/keldeo/resolute/icon.png index 71709729027a31c7c4338ed387306cfe72f5758d..8da8ea26c8743a7733db62374d9a8f0a6d5a106a 100644 GIT binary patch delta 409 zcmV;K0cQTL1mXjb7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003|Nkl!)t%Jyq7-lXAw_50t8{b0zeD^Zvb-e;Vv)&BzOFn z0VMVH2Y?KGhyWS+&;z9MprSm8<{&02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B}-L_t(|oYm5?YQr!P24KCxZCU#a#bgWk z4Z3(YcoE(F2&F?q22&3K<1We2NAcoQKk9%l4e}er_t-Tz+S7tL>Kw5=47Mx7z3( z{K{X_mYdtBf;QMqMJATXarlsK_EMSxl=c|7J{24pf@m5OoPzZ-Wgt`~D0q%%DJoGd zDtj>CeXCj*=?n&c2=rdDb}5C?{xEGz(73P_QVrU z{H-V&U&;5^Yrl`6eFtFQ?-BseB<>RwQ0(g_fEg+5bQ8c_YbCNF&`mi4!?^VE^;my$ z=!xqj(CZZ>TzUi4I*dSA)7WShfE(>ae-0zql!gf8@+Q4^DmsJ#!mNrop!IHm;~)hv zSyhx!3I<^5PB@HEu%J;uv+3&-aB83)N+BOb0AMxLg)j<%-qf@OtGWppppj*vO3`m$ z2#U;M>tu64a~?GdX`_bgSyf_VXe572FEWcMrth8tKAfjuE=0l^c-A^+1%z`Pr_x${ z2%a_eZ~@^&5$Gfe4~`|^tFPO}HW6DD=?s(+oPt?BeiB(d)2T~PMiMZGU==-D8)5wd zbgjE$d%ED^8Ngim-nlA(3mbr`#q@6i9?vxPp;N&mVf}_FpZcomp#c0T4lsX$v;*fD z0E~km2e1boI&kQB1?YNY^hE(pkAMjnD2ezKZgz4Q;B>tMG6~@5F@Oc@;XZVln|HJ?hw#J`PdxF&6aQM=F)uzfC2wAo z&!(#2ZqD7#`pDP&mC764%o~4}>Oakb<$r`z(3H*ZxCFHS{QI8)?sr%M%VI|%|qR?%uJVCv&d zuX!gR9ETYO)D|I}f_qP=I|kapHP?p$&<}xULEd~x%VofBy$D@>fAfC~qLW~qA}y`J zH)xrz6M(kN7hQx45MBjBv%TD(Y7HQz07@8g4y>XyYI(h-0MEfZ1I^zD&~pUT0lnp_ zPXe^p*2b?bxm!s&0_;EEM5`dO0J6EmW|&Ko=$+xi5ln*$^KKa$@f5UiR(aj4mVw?2 z3lQ#J@zk>d!1R$py#02yr#e875xVqo0G>Jlwf3~$4rUn(Ak)apHSi=bfLJLN-T`Ix zAh>zKdMv?FqpX3T8)3Q+(}+&D&u>DB8qvSTbU?(s;5@;ugc;^0C-v@IthbE3ek(uS g>5l{P#QzXK0N0fy$${^HfdBvi07*qoM6N<$f*UffaR2}S delta 978 zcmV;@11OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00TTpL_t(|ob8ssZxcxr$0yQSX(*UwiB3>? zSh;YA{SWM}hRxcfxJb?d5#{*wSeEO1$Gh<)&V|e5#2KpfhbBy41saEm@0CUEYZs-8+BpYBNmI$H}5B(!O3vx5J;~;?t zTFn#NceU2H&-!m-p90nadI)S)=P?fwvE1l-4!!Y#eo@6-Mm}+5qZE4k zJw20SIcJ_+f9~=ig}dniCQ*k4F$A`*pFy!d)%sXHpHskrp21M-YC0YrQ4!X)ei>}s zd;QPXbVR1ewB~{jU!R>ywfiRl;0TgV2!pdz^%M_d$vmtczb1hFFOzF708;=A|2i~O z6Bc+WuL5vmXaEPGUkzb<+nB*a0Iv+%+q=OZ z4j@xcOj(w@J||0HaW<*GAutyq33xo1R8_m(Mu5)1gUt%<<48Jgzl@kf;IkUj{spx4 zSdF6^0KY_8>t}fPgIYj}PTlijiJzoc*~(V-TZ}uk!`j6TTkAF*#M)ws`5l)wxYE6N zyKp0me~1jw<^KYlRxtie;ai8-T>LHrLL?Du>=AIdZ_KJP!1s zd21-30ejP}b6ji_M}!9Io3UMd6O0g%z&0-Lf8)`yIy4U85dyQo0%R8+SnV+@l$x@55A*vP!r5BBLNTRkXgU!xqzYEe2jjnwIc_BJt#SK14ZAw2}U?9 zdUrp9eh9p2VxbBhOFrx!7cK!nO1zvB*)ne>YhQNDDaQ|1uR#lBT zr!|iC$AOd*CAAAc@ex@yu$p!3afNK}RstPS&O7|Zp zzynS^g3tu<$0!`Z4&dY+R6)8TKLrlu2&(W12m=srYi<5RpyyYh?;r}|ZLzPn-V?$A zHg*u#`xx+(;KvS5NKbmG%fOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EUrL_t(|obA-HYQr!P24ENb068OQSBpM~ z73A7@HW@M}9=a6@4VeR0_ADI>X$C)Kb+T3UP9~vap*I=y`ShQRl_dZ5`?}MM=?NCI zKuIyJ%Y06xQp&=0vJd$TSms#{9*mSV006hg57f>0c!UH3e=!X^M(u?(we+191oDkxG-8-#Tf z8$LnuGz>&&KH_?yV#`KM2UcB6LBj!W5rLtjGpr+UA$v>_TKgqR4>l3_)Ofr?PlAMS zK#yMtbQ6a_e{cq0qKQHv_<$hxJOlz20K8%glCq(|wIC@u=y}TWM@9t3wz$wS80a}z z6Hpo3f`FtUppHSQ80Z;DZ-InNxih%O6<`pYlL)9Q0RKkeL4}}iV{ix=Ehr*T-30x( z$2|^VPQZcajS3mfNiJgW7QpdDZ%X@ay)%a}#5LeDIv(Gb-oB0000(c7 zi2xt#f%P#ia|8fO$@+N$z(OGi41oyriqQ`M76?N0AprZBumGYG4+5ai;)!@JhU$Nb zKq|EBz@y-KcnF6`vf>LsFJB`}1FTsP3?_^iJSE^OC-omuVe}_DC!tA?PB6l*BN_4l z)Ix1v4IZQufM)|WqPGMlz-T}K&Kk@F^neATdtYAwXo%?E)v|i~J}e1Sa9Y4?z>3}` zTvVVIyjyYr=;BIibk;CT(YAzpkUf83-RzKv&OzcS?HLfJ0IxZ$+g2?&#{dlg39#v= z^a8LcK>&)FSO`rIHJ)_)BY+W}PjH?HJ>Uyhmah{}*%q*&hF9GKzSjB2JGKU<^$)lS zXt(0s3cRELQ-JO`yW4{Mfcc+zJz&-Xx1i}l1(ckf2D(FC#1wl<9>Vxo!BT&6N?0-x z%5((<%g&LgfV}U&1G-g2X(fv4>HR>IH!N)Bnih|%or+Ne)aYUFr3u weJ3w?WuRv6N6^RK5%4hZv+S(zJ^bhR2B?uCw(+4L=>Px#07*qoM6N<$f~El+LI3~& delta 714 zcmV;*0yX`r1(F7k7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K5iL_t(|oVC<3Z`wc<0AS-a3nrHxTc^ko z6ESqR@1dyaQ~`e=Lpr2WHnxf(Itee$<{?XeLBwRqObk&Z-_kDqJAG&SY$`v84(XFP z3BB*$duI+?*1Lx19m$KS^H$zw!E)ZGb3F$Wt`O7Zn9iRDf8)NzVFJ_7Bw!E(V;dlJ z1>J)I1mgh!3r~Z-OLPDL;auVhJn%%j1{Me0%QcwrB@G5bxX4%}7VQ>xv2_x07(lor z&S5hM^#BppfW;+o3JwueA?5=Dc)$#pQ7tUnoA<=e(h=L=EtfeOVAw+GamCI-|~Mz}0u`v7|w00Ca%j7^?)=DFN`( z72qOyWH6%uFI!wBC3;5?tTY*&2K# zs~5qJfL;l%IzjbgQFrORfO8D+e+1!CFzm?pSXc@Te@p6OAZTVN!m+Ug~LKyiN1sK<1NNas_DtCC-z?fAAS zVHYF#RbIv_f609rHxI?e*UP7oTzj&LSnY9bfD$bEjH_y7O^07*qoM6N<$f~2@G1poj5 diff --git a/graphics/pokemon/larvitar/back.png b/graphics/pokemon/larvitar/back.png index 1a05a964ad688d1bcbe6a00842e267b4b7c5d2c0..2facd5cb5e2f791bad917ea1622d177705749ea0 100644 GIT binary patch delta 454 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 VGMBsl-E{x}002ovPDHLkV1nVQC;k8c delta 712 zcmV;(0yq7`1&{`i7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00J~gL_t(|oW+!}j@vK{hCL`nAFBhc2AOWK zeL$xS7KL_pEOhG_WX^E%bc1m?>nTgpK1Y_FW+;jZ2yBF(`IFQyW!XPl>LKv-*MNBd z=tsbF{^$74>g^&vUtZ-|wFE#|mv-?T6QA4(pTPUq6xfHsfB&MVC7|%$cPVfP!M~7z za}|CIYd{47O6wdNeor+R7&`5oYXunf;vV=+4xkd?{0R7x0(uFo6e6JBOt4!5 zuu2dCxDT+he@mt#pa!uMA2gJuzO+XVES0qVGk z9M~glTG$Dot15PaB7@YGxJV>u+Hd-%Kqe|^YqbEZ!6(0uO3-M?17`F)1H4~-RD#ND u_Okgn^dQ&iq6B?A4K?2h3`9--|MeT@d9QOiFdsYs00008^yeAh30Sa~P%wcCbuJ-@PjfC6n|1G=>xJrO@ z5y60Ti2!(!0ECGWT?6p?od9%^Pym+*3ivsa4)~S8fWH$^*8m{+dRKkjAOa|auK|BI z08~T*UKOw)^e2YvM-gf`d|`qJsQrS_eMdYuK~5dp8UaC<3Ty%3Gso|XtP-da^4j+W zfs$>RqmLo{?!mTA2@njHz-jb50_$I|ZAu7H6IVun>K6c%Ot>D+hd>|$yyi}jDfEvG zDF3$xoC9nj1F$6+;C^2uA^@O9p_G3Bss8y~)j|irNXQ1P01cr~EG7kTe>_%zp5Rd+ z_23JD6S%D0g#69M>-7-8vcG~M_$j3rEczCZ2~w7|o*l3;0OlPY%P~UIc0lVMrub`(A(T2!5r&W4#>Ch%b{U>}LpQ#$(VA2Ij#V4bD?h zNo@>qtiK+R38=-0*d?LAfna~Vz*Q5hhd>@m7!%naAn~(Ye(F!5HyvPvM zJ3x~|cMisM*U81dLQP$6qZW-*06IZBxT=%ha<;8EU?3n;Y+MA;X&gk`8Y9)wen?WD^XaWBKbQv%TrYBz400000NkvXXu0mjf D2X;Vq delta 819 zcmV-31I+xG2Kok&7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00N##L_t(|oSl`ws@pIW#tph}Q0UYtlsg9` zqYNDkmhsXp7VgmP4qXe9IO$e;p(r%V?UvF9D1C)4fi8uYk_K}6SG2V~>kF95o~4p^^FR6~e$hC2^xv zH2~((vsznKF`yXRN7Z?w?UqXd^g7c{5t(hY(?+^Ez-${oNK1Q&&0~}egyu<5B;UC? zAiAc9Pyx_sT5nHTjJ9iZhZVG;Mp~Og1_WhoumXttTYvm`PRJI2?0Xo2%{~W&MZ$p< z5M%TRe9vM4e?Z^&#z2(72$uk^+O$yufrl4ap)vrHlIRhT`{VPwyb}qaBwWaG24Dxm zGL#De533wV5)hJb+ubEV5=K!J!o2^wx|`i?-r{i%;z@uBFcvsZz^7H20eBsmGSGre zz~|c>sHIh{Z6PLM{&@c^w+}ON*u=+fy#L$e{*rV&e`H89ul(Ulle>ovT?kp!{`IeS zGkb*wq;?VU^LCvBq1mP#2>^uQQIiEIs0)jEh`M_cWp!g{ip9U8Bn^i+Muw0&+K#mFrZH3PS@KG_1BL)_Y zsfwGpe{a`wfQ(-WP^nHkY*#e%!aKp8T1v37&fzsNOCv3OyTJ`^QU&8QXHb*V)=`2R znIh;3pfhew1u{+-N?iaHaw|>2OAWjG*l0Jl7Xwq>b!#|Qp+10`bcuu_yq0b4244^fyZj!|8=VyGB~zlZ-2GS&g8P3k0T+0^LqVf1AP1( zfYrudFpz6!s3CkLHuJ~>0_r0Inrb7+hsw_gDut4O3iXMF@-qMBUFtCITM%J+znOmz z0e7-lM6c$BQg#5ilT2IQ^)vvOQRFvLAvztB0$Li40I=8ZfD$2yeqCtO%hxwkN$Xk) zGcD_y7FYwrS%2Cs0$53g0Gz6e)AgM_GhXvJ}2l?MA zLGl6Fsd%h!^^}07&%x01i7{UPj zPQXTx$y%f205HTMpjE&TkOZVm3Ala-h$PDTs;`;DjnJzrv+x0sBsS|H-35QkU(W=htLZgEtf(-#=%gSkDXro@Rei^G?t>9Kb_?9|5ofPyt#XQBn=PN4G6&M+D`-a3QGW90Jb%(%ab4#Yo*Hj zI-CKVVWRd)Q$P}4c;&tWF#0$EqXmEW1%SXtuxZ@_IncQPtO5mxA$KF`XDd^NFTrM0!r`3!A+s5bm1zA z`p8`6FQ$0#w9PLC;HsEKuMgef*d8*cOQ={h7XU1BguTPDxtZ=k(UT)iWAFcB delta 931 zcmV;U16=(62I&Wo7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Rw4L_t(|oW0b&PTNov0ANRU9>9jckcp^t zVWBeeVj&rELy)WvE^!mVgpyv6ygFP=iDD#)Be|?+qV5GFgWM-;cLQ2F*wwYHiT{403{r+e;S-|+nsFuuoH~3BSgqEJm4qpc* zmiUzZ_(&C=%&I;wzc!~2-w8ZfZ}@yFN{e&(7={mzBOZa(I*SPCHqP1-)W0R;^l=3I zXR8Z<6?E(*e=4k9J&{t1aR@N=fl@ovZy`fZ&JPrH*!s$()-je6NUw6?@Q4?N+n0&F zqbhPV2as`Ex@?hPEG54wrtl{OhKmG!nQ~r8!N7$AV75y`832gIHnu<1^Z_&V2oW3au72bGd_L>s(m6v)az zJ<^x4MrUT@#1-S34jBdNBGwG*&WDxHl@6U)e*xhsV61`66+YhU2~Tq==&u07bDv`Z z&jh@6plR;2hxdCJbSY+(2C0C$qhoLr$mYFZzbfQz0=oMb(98$83T&Q(pjipF@^{hA z8uKaE%T3nyc1!}e1YPxi%Pmi(Wtn^Uh>71?^Mb002ovPDHLk FV1jXppIiU{ diff --git a/graphics/pokemon/lycanroc/midnight/front.png b/graphics/pokemon/lycanroc/midnight/front.png index 1c4059d90327e505c82df2494ae9bfd2e5255fd2..2a792d2afbfcc47224428f54bdfa322315498bfc 100644 GIT binary patch delta 770 zcmV+d1O5D%2gwGI7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0008GNklAL>Ud^Udy zf@t5#$1|Oc!f%cT=6n4lVW6K&=NUj$7Mb56SxJPDAT*#}Wl zJ=Y#c3j*|GCsdVr)%@#8No&Vr;PHPT5<3F`^s>@w0O9g`0_f`uK)-(l0s22i3hM)5 z3|RGJR8!Ttr~p={$swI^4L~+3|Ng0-ew2mN5Ofhk*CU-#P7;8M$a*Lz44__)Kd`y( zh&m)Fz&~td1MlTXxIi=yG!5D0CX$ZO{OWtwo>zcuv4;lLY4se$yL3V44ByhIZv5sS-;219omEG z14hPs&>5hi>i}waziU7&hNYY$kT9We;S60M+cWV*d0NhFQWtLAUIT)q3J;{0 zyP1v5@l8)Y0dq?4mOEd@1_V{-60dnKlDekOWzmJdSAO27)WHDmxhX4Qo07*qoM6N<$f_V&J AEC2ui delta 849 zcmV-X1FrnZ2ABts7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00O*8L_t(|oUPT*YTGav0B{BC0Typ7yE?49 z^fE}$VZOM_7ti2aTG|IF^*#pbZLbi9pna7dHX9RAkD(Nz^PXp)lxB_PKf6q{P$$2B zf21!8WB+SSr~d!~XUQN45UXJ!NB|5}KtKxY6GF}?2VSG>e-Q!7IRO-?dkPU)2?u1= z2c&R0dO`%T{ci_4I|+nDtPyu*bO?bji#ll~3Gi@Hy+Z*yTYU!bNWUrl;pYgjh^fLt zZ4i_LUXGxc+YT~y2Wo{~Ah9`QrW6r?HrRDh(c469j1KUDUc9?}XJb$iI`*m*ziQM! z&m)%uJ3u_4e>pgv96i}GA(f@}a)gtwV9faXhAN<+TzglQmZBi32?jF zUvh1%FseCJ;d|yl1-YgW27D1x35#>AmIkyH3s`0|3MsA!icmQr&eJ&*wlfLC1GRx+Bszq|Ej7r>@vJmFhg zC>0^6`x@9GfXsrY6-|~m+^(}gtd*f0*-G8!x((sx8Ing%$- z4!}`re|)guR^^x_9(X=6>QPres7nvT7St$9IxK*CEzlbZv8Lx-ms11wY`+OiizcvL za~f!O(5Y+#_h^NUoMI1Pd&#U;jGid53&Hr?MHke3iQPcy|>W1qfUa2%Kis5*#_4u&MCvAGfO`8bRY zKDGAZYJ_0?l&*o7mr}es8ndQod=sQs<7o1V^{+IHCSf!H_#!%wh5+Mdi>UW|)Ggq{ b??10UpfPL&sY=}y00000NkvXXu0mjfa#?Ej diff --git a/graphics/pokemon/magearna/back.png b/graphics/pokemon/magearna/back.png index c66e5f3a8f33493fd99866ba35018b0c7434b240..e29c4ad6c5720e3d15eb45f184e8edb0f8f46b55 100644 GIT binary patch delta 589 zcmV-T0&vtjJtRzn zd(kjSB@DtG^hJXlov?4)-iMXDFd9Uc;I?gT{r;+5-Q|+toF)wYgjnYZnlSTM!Z3e9 z5iaxZ2{XX{R6qjYJfW7L;=oc#Knb`v@xFvrh1;X|C^cd;UcxSyPyy=B(D*X}`fvx( zmCHr-GXeT=p2N^jm!SNK0M{Gv9KsBM&^CJ-7y^zAxcHZgMucsRBf!YsA?^S(dxMw* z?(B>Z#smQPU@wfijupV`W^uEE)S-U>$&4``!RAk?F(MTLa)LaPbl7Sr=`jYbKGbU? zpb$cu1htc^2=hb0Y!^Qr-}wn3)&gKcus*~kT>UhQH-O+804?MTLP`a%{JD>efRMz? zR{*t>gQ=77IF1m@?%BMZKmgM1VsHxt82AYg57ILLhJeyeh6;K>nUNI`{9k_n^cHr2 zdb9vYAiIaKS^y6|`3ZoKb=E@<@%iQgsCHqTkH83M{e;K>qkl#)&tQ>_xhK3RfV!ba z;JX53TW$!!)B(z$k`dKv8hc2@9$^uKn+N$FDdYDA$cNEqgfA!gYvrF1SU!xDiSqjd zC-;$1|8-JodiI~Bbbj_D?Q%J{1gyJ=cli1IBqfAX|4{b;<@d;TMtD8$?OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00J^eL_t(|oaL0UZrd;rhUum97$Z+$_bkahq@Z?1%DxgI>73j-JARz415d45$Cw6K7mLd%PXn~_o(O>;?}z~CHiwH2>RBMg^ev`TB1E05*fAm{LaA6)co6eh-<{+ERDa_+` z+XHrI0H=Al2w<5-3|Rjg&{}#x#sNa4%(Y&5V6XdoM&@v0l@;REk6s#1hq8u;M3@+` zQl0>y-vGfA=&j)MC_r>0v4~ZGQPe~c?Gg8+Cq6}nKi~rXzMR0G+?r<*;41>pQQ$T01u20R&}n*aa+07*qoM6N<$g1G@N5dZ)H diff --git a/graphics/pokemon/magearna/front.png b/graphics/pokemon/magearna/front.png index 18e73e31a0e181ea333781fc91e3c7b1d320d831..20db67ab6ed5ad71c820303e1b0c44c686c436c4 100644 GIT binary patch delta 757 zcmVK_H?Cw z0B-k)x-!OoWe71sa#O^O9_mU|#PL~-m=3!p1lZRh?t~Dr(_a(b`ZwXM|1*I2Dg=L~ zGvTDamVZZ}xM2slmph^{P;$md>A?aS!Ey&lpAYm4lmLw56f_%z zrEtw)`m6+;&cdGo%mVAn61cur1yFyMxjr->V1*BLVRZ-Q%eV+>1lCEar};)S7qk&q zp9-WK;(iRN7{*IgLtS1t^Dou<58i@IUL5H=d7kO6-4DLtr*% z2oL;kVVm3aK&l%@q$W{k$$nBKTXB(3XP}3x!&tk=-ii-s&#J|8w=2!_8jvdwE9_l8 z+E49h!&0zWN)0`s_nh_zGY-_U>Y*M8Cp`=kC<4IlKs@w%%^Cw}05QHJsMj+)9wLmn z@J|M!U;FA`1AzU4a!$c;9xs0YV`(HvT@hlhA4&q%kW)}aupD;!p)|G{1pf(XuY#8$ z*=1n>VBc-aRTK6q)G~~02j6x_@x!SIv~9Nln;hnVZK3AETfJ?!7Y*JvA_rK+F|j2wfDmJ?X*!XAwtz774${4^1rNnl&$56_oeqp zU_nG?)hCZgFL@JsClm>sLa-C5YU{raqlY}(wQ?Wv%rfJDBiKqMc;E8j#q1@4>&9Vs nV`8ZP1bAluAF%MZ$8Yup;B_I`?|mC&00000NkvXXu0mjfSFUIR delta 867 zcmV-p1DyQ42C4^;7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00PcQL_t(|oUN3R6>N?D9P&Y-;ke(84>U(InkHnSugy z3NrYY*y9~|_|->D2DD)A^Yt&m4&-xC!Z5^{Wd6c?e`o;B0ZNF294fT2wD5toSQuse zIST+sod!`9VTgzYjg&tRsBOG%438+rB;%-^UP2hHC2FuGqTJ^PY=!qXJz)O$iK^}v2}ENPP$y|e6KJ< z%}Ifpe+jNps|aG8rBKri2WnSDHT=#oZB+g|MgT#UScHo}ZMXvMJP_ErQ-%wWRso_c zv52ZuwE(LC-GO=@04O=GQN}9t8$elZ&$R$>$?N4|l639IIMDX024!_C^ZSEAZizho ze%GK-w{Y6l27^H_cfHnMeanDBYP}@M0Z;fAbpo!HjZ7i{RG!%2xmJ>n6au+MsWC4( zU|-@%=FbCUop0TIG(FFG+!IAWiKD}d)iUiQ$zdG#L_^uxRB`y#P9hdSi6&{|xVKUb t*$Pqdh+54^JoSG7nfJc{1fA;GtDn(^AFPJo=HdVV002ovPDHLkV1l|_i|7CV diff --git a/graphics/pokemon/magearna/original_color/back.png b/graphics/pokemon/magearna/original_color/back.png index 7472bcbace6cdba176d4c6526324c88131e3e339..cf9c0e3236ea05912ee45e60ff7f9cc91cf92960 100644 GIT binary patch delta 595 zcmV-Z0<8U=2Ac(t7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0006CNklvDu3423tkOAwsC|Km0Z7XyOE>Cf$%PF0fg5g_aMdj0Fm1VuLq z)8JY(Oi~GhumnFvgB+c(F3Z}7mAfz+M3?Yh7HIvSvsN|BDdGLrgrT1iFi+5gnZJJ$ zh6##rT7OTN0oJ<$2!Qj1T7rr@kxFu$fNK-)O8^yaub&U58nGEK;dd^f0@Tc|@n?eT z!yQ0Zo*t@S2(Az3H4Ody=#-xb?mU64!OsBb+GeMLAz;gZlmB(nh_FBy0Y>%?aRr#! z8^j!NWfw$ZOaKmV?1fR!u>$1WEN*|1Pjx5&nK6XT+x(Oo0&*cP-Jpz+Hd_rPJp> z_^1Hxh8}^>3P`WzhTu&dp!}4Ks7}+^LrKRcw=kr6P<|s9U+Ss=IrlwgL@YNlzL)Vk zf6hcXK$$jkZwXKumr`l(xoAJSKl+j1a+d_GZ;`mu`hQ4-*x`7)TmzIpqSyry^?1Bm hL<9J#0yE$%^$VMgF9Sz3*j4}l002ovPDHLkV1kLA5rY5# delta 725 zcmV;`0xJER1)TOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KctL_t(|oaL0UlG-p3hDBvcYp&o1Rm{CW zE(|Yl<2ML)+B7yZsi4Sd0yCLQ6=JGXIZ7%xrE=n2*c(e!fro(sZsNEm zoWS@&zt9=QXCib0(ZEdrcJBmCis2=IDK3FmZUq3QP5^5dKg%*5NeBrrkQhI@vk5c% zi>FZY1L&#oBWMDFM86Hex7c-{m-;cbKx)#P1dt-BeCQHeNNh{##7r*8tRIh~!RHHL z^3LwXBs~M)e@0b>IGNVF`B>G62AdkV&@JHtj&2ACXy}CS)Bz?<9lqr;t$-xqEg7r} zNi>k~`OA|Bn2RmX-V4s>LWu8P0Bj{?F0KFp>Z(*nB-%ad6f1R9N*#sR`gAh?p){a= zim$#VyP{N30igXAV5bZqi+uO&0rE|$D@e)u9-zC-e^(L#DGRw5ZQ$cNXQ)Yh6ykZg zY<%fl>;Pa0FaTcG>lUy%131myRRGKMeZcDP0O!mC%nuO4Sda6W1-86>W>^oeHl0Z3 zUs^IDTBo#!;}AYzMlAtAy8*Dk0(2qwUV!jAMc-EeMo|$9Z;yB;Eph7^0@2$w<=ANt z&bKc`X9w@|fK$!`v2pKuQ-R5{fIkU0BWF?-O#p^m9>ZWEixAi97`l1~C#((&O638E zS*k;$0v;9li=Ixjq_`{_z(NDF6BsjV8G3+E2>kW}|I+>dwQG%q)ENmq00000NkvXX Hu0mjfc(*VD diff --git a/graphics/pokemon/magearna/original_color/front.png b/graphics/pokemon/magearna/original_color/front.png index 4cc57d909e9b409770f39b82c95aa7bfe8750a97..afeb78daed2f647ad839d3932ae25c437377dd76 100644 GIT binary patch delta 763 zcmVYXb3Wo%b&SIe*e$6At}Bc-Q|K5afR< z1PSkiH~qEzJHkgZe*)ag4bd4srj+stFedMA#4{k8dR(p+Qw$vtJ#MDd(5Dn*Dy0xb zyP4A)fvId87vcm*COud<6;}Pmn_fTAFPuA|D1)Z;F}m#7X$tUSZbkDECu@)#KNuc7 z^ipUx2&C|l82Y4yGM$A#14JTxFNl8tS4weiAHoOC!L#K+9hfiU5=kS#PEtM1Z$!AD z8}XrafIiOyG>w^x8GW*o@%|)1H;{HSPiU=$iZtAG5=o<{rFW>oj&?TL5(v-dvrvak z0*dK32Ekw>G0@Rf1r?y}i8|t3*~&dYrJEVS>7oQtfO5nRHj$h54s~e+eYAg=wGc$$ z43!=KTi9^h^rgKxF}5V?S)zaI>~fh;V-yQF1nfoJWjmlPtBB?9t%T>$Yg>VGw=A}+ zNB2{2Z62Ry>)O#1`qlT((X9sw0Yd`+(DN`MIL4sV0B+aom^B8_0GvA_Xyci-2mLnY z!jB9%8~fU~0l;fOc~8M`9xs0YV`&V$o{Hek`k^F*7V-*50&;lL52dl!AlN6YuPRs> z)FmDP;MuIxp=!db3at#fr*DTP@lE4vt<0yf(-IqMy#*j}b)e$q=`I}VT5kspsWk)x z=))Aytu~AKw!=t{iZ}puHxWri=kV$U0$F5EPK}q<&`+Or~(5R>#4V zhkOK}SwIj@MD?3Rq(k0>-UwNz>n#Lyq^52EI*c}X!C3h^;zi<&|DAx9O0Z*Gb}wd! t1Zf>r%#Ddd{a=93?EeE6`F8ouz5pwWCtV2=PecF!002ovPDHLkV1l{BX{rDK delta 896 zcmV-`1AqL&2F3@F7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00QbsL_t(|oUN44PZL2D$9Flfdt~8+ZA{p$ z8Ur<9E%jnzLTBq8y6Vk@l%k0VEk?Fd6Eyx{+lvVY=l~v!2Vps_7lP9ZJ?Nn$hhCMx zK;nS|9M`v7LAyJX7~}M^neV6H_ukCBCkTwCC`xowRFuBce=k*4BZSzmYNG)m4(JFW zwJ!wpClHz(^}hzjkiUjP2B0Hj68IHX^Bj7%0cebz;~B`$-)ZE7dVSYk;-#RsY4c#j<;9S3a+xOIw8=jM zQaRafBoEqdopX?ayxcx)9t`ht%M_lCw5Uo3pK^g}>7EFT5^kBZ^<;yd|KS4011fayfAGrp_y&#UAO`JRBJTb-8l$ZU zAS#qnMQp`(_P>$}QLJ$L$7zGoR@|~I2w{DBYrrq)^4lzf1WM#k zr}q;kf5W0zS3%CD{NbV-3?QFL`9LOt#Du^crp$Hkg%hBi$`h4e^LNM4ob4|)D2I+kDWk|0>T1bx%TklXN>I{D*{+-ZO(jp z&?-C5rft_)kFvZZ!Q+?84%+}Mib4sVd&T$QjSy)Edc0_{U;S@@r~Vf}08t8U{R9C? W5>7P+eHhjN0000dPHC>(09Sxoz)_h!=UY zQ4ub(6wy@*cZpS~s}zo4Uhb6&i=oQAXZ%)#Xh0PLc%+$!*8ZJjzqD|2uGDANZ}BWILDo zalL{+MVq+;^POieZ=VAc_f_LN Qv;Y7A07*qoM6N<$g4Vdbh5!Hn delta 445 zcmV;u0Yd(~1BV2V7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ApWL_t(|oXwIkPQ)+}MSTKB)+&_Y42!jG zQf)&KDO$OqFiJBLP4+xAbX#&0E`c0dRK_SIWy~%}>#-{ekeJS2U*F%J$Jh@Cd?rkH znV~B@3)D4t9wc=^?kBAe_6{?R3u`t@U%N5!iU)%bcp9LH8<*oWXk5%nI;O;*4;l3Di(*ut{xtTH*yJfqLP+` zAY#9zf-SmU^|YxnmzHF(Q5olIBEWSkM6!vn5`iTXc(y9YHpN)J%U_tR#PQFvOJ;to z0mKGadNvUoPt0QtEst$aI4l>*Y=%Ss&vEz!&`P+i3#COX00000NkvXXu0mjf-`}nO diff --git a/graphics/pokemon/marshtomp/back.png b/graphics/pokemon/marshtomp/back.png index b04c6cc5cb6d34a3c5d5a6b430eca289d64ccb06..baa4e481b4c8145615246d5c8c23fe59bce9d0df 100644 GIT binary patch delta 569 zcmV-90>=I91%U;S7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005-Nkl)#XsAfhki z2iG2fSWVFZcJxV3+W;i_HUJ{u1*kp(HucyyfRf%GfRg`x05txs2xCOwFF#j_42`euv@No_^`L_tGUVYg0Cdc2^dS?tev;N|Q$BWlDd5OT% zCcuZTLd_6MMsHu$5rN_)sS%4r^x-dAAG(Sg0a6=;%CrACW`Wb-#?%dh4xN7`%L^bJ zI*0)d@6_3PtxYC*LAcfc_{#$55a{5gD?;J$l#?u+BLW@b-Vg*JV-f@0IU>-Z!?Y08 z0MAK@`5qC-L?{Ha0|lsshEMlGyI~#x00000NkvXX Hu0mjfeRv5w delta 676 zcmV;V0$cro1?&Zo7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?|Pl2sV-c00Iz6L_t(|oW+!}Zrd;rh9k}ya+Dt+qLjg- z!xyN8bAX^-3Zw!u1}HT3X$&t!`x5QS46Qc-eyAQ#luX$aJryNj*zo`9zyD4oZ*Km} z%2WYqU2A=p&`Z53;C>k(9a4ZGJqeVgrvRbB0Wx7A0VFH}e`Jsb^34^XgaKH}nCWW( ztBEdi8ZybtU6ybakVzoZ1Aw@&9|XUr0ui_I{UG@HiuCR+0gyr4bx{jJvRo1H(ti6B z0}c*A7h(JTXGFi8w>b%o6Vlx5epf1`J zdmPvES^W#(lQHN1ZdDV2aX_4a=SYRQMa+OKsUmNhNs+cQBA-QVzdyzga?2D4l!B`fWJD(NV#!wh_Ayq zg(?P%HW8pN`4rYDhEeg!R*Jd1hp1SbbG0|Ud{?Tv3HR@>JLlmz(&|3?F76*o;`U|^K+ba4!cXni~7Vc!u2 zj+W^gS!(}_#|5rF)|LML{?j>2W^a34!|Gx;e=!LBSKjqC+I+W;+Jn7+%fydKvs_Gg zzQp%XhTc2drn*~}hxa*3oNfN=?)3HZl|M`l#`)J4DMx+tsaFy^z}J{{jpbvV*9EC) zmaMX`(k(2J3>Mqh{CH41L)he?BvbgiFkXXShr1r6O+9jSoruP)=9Vwn43Erw8Lo$( zn#?3%$Z4Z$!mx))=#bKiV`m+B87vuHUu@-Hkv~CLqjJIR1FQ>K1>P(2UKGC8@Qp{T zr7MHQ;C4%0%u6Sam5$!ZHheQKUfy`~Yy837{hY}RY>lrX#TM`<79E=3U~_(#=+XX6 s27ZT`?01`D+$AJ){9gjSx__bm`N=|-5}PkB2Zkhrr>mdKI;Vst0GSD-ApigX delta 431 zcmV;g0Z{&_1Nj4x7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A9IL_t(|ob8fLZi6rog~6L{<3{W&s}{;K z8gYR(J%EWuxksf6I6+{WjWf6H*lDm`oC~zP1wy=!H_tysv1--7mt<`o+oe1LfKdGe`fdsri+23glo{4di)7}gCmAZ4)9U>lN{kAbUNd9 z!8F#~f#@;^L8J#FHJ)lBAJJwGy@U$!q;4~+B_OxpzwCH~o+|`E-tTHhq(aC1?OyeV Z^$m{ln)|UL@$3Kq002ovPDHLkV1kNgv5f!# diff --git a/graphics/pokemon/mimikyu/busted/front.png b/graphics/pokemon/mimikyu/busted/front.png index c9c36c1f4eda069a6acc380acd062b7c52739582..09e78fac909396e7acd4d1b81f23d284b3fb5f7f 100644 GIT binary patch delta 415 zcmV;Q0bu^B1n2{h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00043Nkl$CX02NWT zMufS?0pC3!lg3g+5Kz}13SwP-uG~Yz9R50TutVg3`G^5V{Hoiu05&Ma&cke=DgoNz zKMvL*MC==#1JHF<48H<`VVVcQ39f&3#P0)IcEH#40^)$hZ(XbXXdJ$fXg$SBV7Q@7 z0mW0`O=$ntN65}>57}}V*bWAZS3o_>KaWE&J(KV?L$4v2ANQ9Z0M0|EgAwByWs7s} zMbYTe97JU&q(;E@hOzsLP9!sd$?ya1sN9S8i@9lj_3GdB0sC4B%1QM$7XS+Y002ov JPDHLkV1gh`!h!$* delta 480 zcmV<60U!S81F8g&7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B-(L_t(|ob8jba)U4ohA~T55+9j419xQv z**rk(7XV849u0G^OPV*x%+lj+E76RyGj?eHRiE@rvK&PZ{d0-kow$T72uOe?6yHG* z5ESpU*Fzj8=gi(6eZXOQciJX}^OO+NtijqOE<7dVY{9vqe~x110l)$&@wEt;e+K{q zfjtmF9xeo6k6PP|2jZcZZG z*k-`gxLSE&a*LyRwSE_zgMh7s$*NDq0(4Gv4eF9b+{GygIj$K!RxTaaNCpj=?0F!T zaMQ>G#SJiKVdJ!DS~cLu^Yk$8M+9={JfB7>r*MR$G<<=GzFQ7RDIf65gu)N~t$qNe WQc{p8o+l#!0000;}i$wYh&c&x!h(wRf>!3;zsH%cmR;E>|xd`QR*d zYMFt;GKU$4kF^Emm(D&SQlFX{6Y1#sAZU(5uj&rxSBIwvx@Xk!pW9mKkl)R6{IK$L zcDwS1CHE^itnYl#RIpvDS`MI_i&I`Bv|K6qWMcpwf=-5{!k6rdZ4LB$LYUcND v;;{>1+4&OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007QOL_t(|ob8gq4uUWYhIxa=vkLEjXQ*U3qg3HyWoM#oAxIDo-^l`HN+UmG}mLohhZgf x2z)4;^D#<8Q}jvc>;%)yvgH- z#|xt6UBa)h=PP04eI6+#SD@rpSo0^LtvPp~Yy+uSwyP1)N`O8OzUIc5^0&ab zpaOg~15$u7k9J*_fx2L8=~jZs6U~5mldS|D7zC}x4v+@SB`5&VAv^)<=zuy|w?G77 zK?iDOHvsKj{0b;_JO((M^)?6rK;D1HGvJ7uK)C{Hx5o<*CERcC12`(MCyQ=DTozgvH3WKmRQNJH8VR08Wb+ zzcg$>zSP$M<*QhY=Q~&s0QD-Bjv&$E oB#$xLhS-wgHKBgqe#gHVzm<0sRa!{givR!s07*qoM6N<$f{I$t*Z=?k delta 528 zcmV+r0`L8Y1la_T7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DhTL_t(|oYmAzQo}F|2H==Q)`_94Yk{+e zzy;cHfM!tFX$E}%BM>`LBfruaR-m2xe^ONUQ51i*?qI(S?%UT*A=)+&0Kot&_#@la z6AzsgY{YZx3DI?(Kf-lr4|E*N9q;?qPjzI^5c9dG^H=9af4q5M8u3EsZwHPaCqDA< z)M7OsOVC{ppBgzh0H6b+nt&^f)KN&A!`!hu5da33jtL0e@5c;qF9?klf$I{2bqK(7 z7HFKVTjCk02$Z}-Y6g}iO5P!11v&y?muT_;92nOlsu&cK0cb)nb&NNFF`J+M(CSpzNmuK3KjmhCo;Z=C>hZU~Ykdz!+zI z$Lrh3J%P5&56C=Y9pFYpJDP!k(u6>HxfLEzkC!4WZw-Blavxvs&;g$ybrs&{a)Wp^~wv*B^eJ&KufNBB!pQ2KsAJpi?*fzv~BV9jdQj SsY?<70000JLlmz(&|3?F76*o;`U|{6-ba4!cXni~NAYY3D z4{Pm~2`~QFe+au08+^N~=vIrR^<<{5%O(;$vly)YPFZn$`IMmZJQEmqxka$Q(0o%@ z{~)(<#?D`V%qIMNP|3)Uy6}~yJx_;j9`75QD)CioHLuJvDCMjd*`j;++EMW+u8H@9 zI{t2G@S5jruW@DiG(+jeqGPsxxBhxB&{!n6jxpDrb&|f@pPf@2`os%aY8nby+;(!V z;bhq@uv_}fhwBUG#rn+un;pd}X1yV{Fs*5dJnNb0NmK5NM!aLX7C7P4UtgaTIaSU3 z`~i7ZZo)esbXv@0{lvXL)9%T_U%NMQJ0^Iqk!L>eGxWg>C$95J+5OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009w6L_t(|obA#vZo)ti1yEML0F%f_DKkJ% z>?KmlI7?5#(p!)zd>=>R0x5jTED^yovv^4vDNOsH{$E)hjc)g653b|}7imyny29My zGzl`q^hWU;klM&xh4_{N8y9YH!@$x9;fDa^e(8@l@Fl?if86#do%?NlVZ`*gC)&jz zX9YwQRmcKeVF2=06sU>||-HLOB{Ab?<%0LKoya%`hi;FD@Q-|$C7kG!we9Ng}o+!qWy%X9TFgNXnD N002ovPDHLkV1kVwr}h8< diff --git a/graphics/pokemon/minior/core/blue/icon.png b/graphics/pokemon/minior/core/blue/icon.png index bda398288b55a912dd1e252310dbc5e3b3704a18..0dbb8fe0e71defefe344c7374e6e101dea9b67d3 100644 GIT binary patch delta 282 zcmdnb{Df(O1SbbG0|SFkK#zZb zYxh14kN5xozrB)@ym(gcA-Q8&iu&JGT)fY1i!EK%U~YMN5`$s3H$#B(CO(GlsE~4& zl=Bh3UP{GNE8Q9!N^|%Z?Z~`iZ*+3%PG*-$5B_pwFg)U}tTzu;zPGeKj;|y)f@z+4 z!*;=zEsL2}{>sZ=Bx|<8I_bDv{EVyr_ZXl4v+DoK_pg#?|H|m(|NHR${Uz6$pD*n9 zwe#6rAvVW<=hs8`g a8HE!0zMW~W_yzPIgQqK-pUXO@geCxSMTxHf delta 373 zcmV-*0gC?Q0>1;07-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0084jL_t(|ob8f5YQsPfMs5P{Im)5u8EZU z$Ib$h0XSQ51Y$Cg+a>D~sbn7VpcvOC>IF$KzE}{vj$bQyf0x9s63q^2{v(*4(35BoxkFXyJ=0Aw4vT@Z1oU#4T$1k^F)^57M` zf{8T+!QKKdz1BT<4$OV1fJB%jRX<4KS&cB{kV2#K6c@FvFjT%z8)4{oh4}$C0DVht T&YBMZ0000<2SrXqu0mjfp0=9u diff --git a/graphics/pokemon/minior/core/front.png b/graphics/pokemon/minior/core/front.png index e9dba883a1ea69f5a43138b327e1b604d7a7202d..ab7e8961565a3b26418ef1106f30530a2c94d93c 100644 GIT binary patch delta 381 zcmbQja-4aB1SbbG0|Ud{?Tv3HR@>JLlmz(&|3?F76*o;`U|=-!ba4!cXni~NcHdzI z9v4G1y`TT(w_qr-BBPL}rO{qL(zdRrxVm4@oAe_j7x>GOSt$o;G{>X-v= z#Xs1kS2}Bcl77#GFXrF3+cjA?1qCmy&AYz$|Fl@nIUkra-uk@N&T#Z#IPm$}j+8I= zIJi6n0<@SN53i4ZtII6FRJm91*awRR=?txV{%|j_XOH0j#nfQOxL9?ioJiNayR&x~ zus1K*{r+L5Uy@z}6J1cVmq=MR&l${$TL)W#u@cW?)ndDafbWc_cz!xoZPh-2;zS+ YHgI$Ey82E?0fsY!r>mdKI;Vst00CsMWdHyG delta 458 zcmV;*0X6=|1C#`i7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B5jL_t(|ob8iAPQx$|MIE^Zz=%|0JDu)J zeFEGuVhi%5bY0{dR6RkZT!00)Wt<>^$TV3ad{(E6>Ie`4D*pF2S5re@;y!g~RN zIAbp(ge9fe@T4~W+8)!;vdQ+vkJ%< z0`_mABuIvMT+2e7WSWiocP!+%Y)b*&N!xAvl%;kSAgix!EagIQle4}r79W?nlfME0 z?H;6j^v0_zX<@ao-uqJWI`HeG*8s2N&YJZ{Ux^1?yT9UOp8x;=07*qoM6N<$f(U)O ArT_o{ diff --git a/graphics/pokemon/minior/core/green/icon.png b/graphics/pokemon/minior/core/green/icon.png index 529e6052025d649b51f16f09966532dba9fa8379..dc36402deb0af8d08658cb0974b10bafd0528bd4 100644 GIT binary patch delta 281 zcmdnN{FrHi1SbbG0|SFkK^f9I8t6M{B}d*T|w(_KMt+=_k3>Tv+%$Ewc+x&uef{Hyx_0@zig|V4S#J( z)rofTUl!}xt1da0p8s;(ncutqh~rdw10J(aLLA(;E;!q+zHnS3Rb9ZRUWc_wUi1X- Zf_K~;U)|Sf0KLcH>FUSovd$@?2>@5pg7E+V delta 365 zcmV-z0h0dX0=NT^7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007)cL_t(|ob8gkZo@DPMg0f-2m@UMl;YY9 zRlNqNB8~|VOZUr*tPSjBt?J35ymcthp&Sn`A0STG{qdsP2F$xnpm$BA+%HcSkPN`V zf)n7gi9D`Jmq;b^kOsxLHc>Cgf^ly_3_5&-)z?=7v5<15L{V47#% zuwAfa>tZJ1pLzL z{69Z9$v^*kz`tt6yP5wgUL?Nkw^;Fsx$U4^98;pBY}JZ%(O(ja->@{j>|g5eVKLKA a#>_gNBx`%_$w2=xc)GIrxvX@Vz02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007@fL_t(|ob8gUa>FnXMg0dmnh+NSn1pqd zMN8UmQ%$a5DzYN!x0Qu8u~A4>BWq<=(3yfPJahLkJE!aZdC_$P=I2dd@J*!L-VPR! z^uXSNGvK0$+%G|wNF{S0dd0Xl(IAL|@zsKybo^SuP9ndHe={>u;-h?+wVIf-1wOJg zmrX7!n%m1~9@__$*>65VrF+y`zxIU|U-nJI2?#cFzrf*Czf9+#5vXIxhdwEI1ruw` zf)@*t3|jZxI5Q8q0uo`CSp6VHVl~2$N6d}NlUvlb!ch5s+6Y5`E6fjp^JtA)LN4F{ P0000#zZb z>*}U`U;q8T@8@e~w(6$Fo5VF@pNjmQwmiwX9lD&WVluZr=LU|gEDT0zuNgWfxt6*+ zeD68AMa4*cZn_9Z%du|?U9*q26~Ud)76jFWt~$(69DTmhj{=1 delta 369 zcmV-%0gnFT0=ol{7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007@fL_t(|ob8f5Yr`-QhW!r?5s1eO9x@j7 z;Kug1qypWRq8jx6-cA{t*pRWRC+p;`Lm@+Ne0cAJ5P{Im%SzKN9E$I$|k z9ynNV23$6g`z7fTsbua`uNc=R8U$G|zFH82j$bR-N#-|ke`ZDq{4DQgtp?_3fzK?> zWs{4F=JxU#$Mykb_M4AT>Hcf2U;9FfFNdb#1SA`|U*K@6U#4@?4Ae2?Qy&z(f{8Up z!HWe!2CaK;9GQn$0f{h6u6~druo_{=BgaPN$t`MIVW@oXH^R{03iAUqx?SfX4?xlY P0000#zZb z>uNi#z5oAj51!oHn`OpTEwQ?F&z;Evx|X-guC8Rd_vDZ_la7-vV?)nPD~3fWfp-Nj z*d`n4cAoKkF3HNYaHDOI zaL-NPRv(wolihne%WfQa*CAV7lNk2@^EsW*tN$(Ex4J*~)nZkOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007=eL_t(|ob8f5Yr`-QhW!r?kuio0UIRtF z@u2<9sYV?ssz<$lqI;l;JqD_JvQFMQ6f*S2hxa}>p00cFqU#3CPn*Etn@G8R94#Q} zfrABSz-1G;Uy?47O6ETGig9hCL68OGs|7LW__czaWPTH8e`bWh&+=~8YG95Q_{`E= zHo2&1ZZDs4Y#&f&zxfE2?!VUhwJ)^za%dV(K(dkh1rDeBWjZI#KpjIq^+CZam{@ZZ zyjT!q(7NZwk$H#}kO;Hn>IW$Ts}Y7ga%@zd+@iJ>hRXMTBMkkmFh8O&dJ!?0ed+)J O002ovPDHLk0$_p-3YC`t diff --git a/graphics/pokemon/minior/core/yellow/icon.png b/graphics/pokemon/minior/core/yellow/icon.png index 270115f6807b85284596a9f7fb53c775eebbbba1..b0cfaa1c3985f5d6014157fceda8787e255a6898 100644 GIT binary patch delta 281 zcmdnS{FrHi1SbbG0|SFkK- aIs887-L8dMYk=Nk@O1TKby??>&;$Ua_lKeY delta 363 zcmV-x0hIpZ0=5H?7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L007!aL_t(|ob8gkZo@DPMg0eaka*5uWG+;4 zZjnk{Q>fPce{{&)#LisRlSO&!P#{A&9$Y>^oUVKDqU#3CPn*Etn@G8R94#Q}frABS zz-1G;Uy?47O6ETGig9hCL68OGs|7LW__czaWPTH8W`w}cee!PBYG95Q_{`E=Ho2&1 zZZDs4Y#&f&zxfE2?!VUhwJ)^za%dV(K(dkh1rDeBWjZI#KpjIq^+CZam{@ZZyjT!q z(7NZwk$H#}kO;Hn>IW$Ts}Y7ga%@zd+@iJ>hRXMTBMkkmFh4rGQlqdCqmlps002ov JPDHLkV1lZemK*>8 diff --git a/graphics/pokemon/minun/back.png b/graphics/pokemon/minun/back.png index 1e9d01ea3cd8039a67e104c792fa50e555301df2..f8b11aba90b7755feb790c7471b60c8af16b0802 100644 GIT binary patch delta 501 zcmV;Sri1~4Mvlz_0b&;SzQxfbg=JP3aQz>I*)op2{~vT(h^5nxWJFUNp8VPpX& zfGGjj1{y*L;Q_$Y1jvM_5B>>I0xkdtVg-;!`kTmyu*yIofB=ZtYa|5u2nfpw6a;&xV-vi8q z{{pNFX$~+{;sxj}qotH*7C4otp%jM}q{i)A@td&hhAV=l7u5hjeB^<5^r`*P1F=(! z(tzWb*vtcW^xD&^n0ZqkkC2#yrli^22rfX%d6NK7dkB;@Zvo!#+_dFzy02lPpI?)E z1^})F)NN!ZBmUc{p7Ziv9W}O7@>VGUg2!$N_F#QC;00000NkvXXu0mjfx4G_A delta 600 zcmV-e0;m1H1fd0x7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G5GL_t(|oW+#8Zo)7Wh8mEBZ%}wHA6KpaYICA zNqhyUc4h%Lgqf)qcxlGF^(zH15!|+prSe!Si zLxcpeh#lbB2eicu3VHr;Tpd+OuL@xIA2ufK5AisqWlB^cc=%9)G zB#fj0XmrpTe+jVwIEXnY0I8FeTB&q60qigXYU@g;B~~XLD0TS6fOQ4H90Oi&0ni?| z0DJ5pU7&fFS|i5*1!xI;&HhjzFFVY3*fy&kjR#q`Xg(*SAk5AgGSpy@EDHj^OfulG zF)?e0*Y5=b*U~Esi?Iuz_T}xFz mwsasg4c9-a$EKxzKm7ycI`&+>>(0pl0000vHQL41_HZV;h9u|8b8bh`AW3JN)s1W*9*V|;(*ch3M!;CY4Mes+%os6u#2SOMP5;7R@4%D?kG8$xPe!Vr+EA`+{40&)ifgiy9#?`MLk0A(6?fEan( zoVN@x1Fst&t_#(wIn14cg4ESt+t1T`&$}=bd<-aFqj0Wg0LGB)v9X_C2&jJpr?QA6 z7)$|t0c63`@9$y(oIDO7kN;T%?EK>Mr@s?C0I93&EUHVs(;QHJ40H$R?Q?)EaJvXN zva_i1H`DYUst7Rlmk21Yz!x_kQ=e6E$N|Rwo4|Y2vA-@<-(rV2^K&C5Ki{);SJ}z> z4T7m(vQqk*IX<}MZ5tr@R{(!6myR5l{Aihr-pM}5jOTmm$}JyzqFhni=(hM1QuA9&r*lQf-00zRxi_Zn*4 zZKNrHNDrG2VRl3ERvw2Zxl{B!T3#%?-G_kePX`*U2w(l*`UeiyJlPQU0H(|U0000< KMNUMnLSTZSc02a~ delta 797 zcmV+&1LFMa1>^>h7-Iwj00013M{Ml?000McNliruZQTc1r*N02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00M|fL_t(|ob8mqj}k!?#}{r(ieshWDj3#8 zu7p@%#o-wDPB56<#*2T4W@$0EVG^zAb~_OZCf8aa#^O3SlQY}hjsE~<{|4Xu0A|2= ze}H}~-ur&$y|=q>u&n?3i?Ssn%;dNH%)OdHF}hNj&6!5WoXS z0F^f*2;!;m-zdL)gj@x*+!oKcL5~au1BD}OJF5zVaff7`|Az5(nP%y*A%(E(NdOYF zWCK8$rr#RFHIRdN#=N)u4L*PZ+)sa11%MQ=WX!2Xf1sg5o^$>tJ&sC^VOG?br^^}p zA^a$&e@!F^KN&>Pe{UCc3H$LSfB^`Dk ziej<)f2WC7K=km!YZ-{oYKNHWYO{od1@UuKlB>`+fN>kXT(?Ex*jTM=-TA=N&FUGJux0an~_2<(mV_O%eqXF$H2X1$- b-oLKj0rUjKAuBXB00000NkvXXu0mjfPwr;0 diff --git a/graphics/pokemon/necrozma/dawn_wings/back.png b/graphics/pokemon/necrozma/dawn_wings/back.png index 2c3fcb4002651f85f863294d6eabf37649089e4e..be258fb089c24503b54d36857cb82b0b9016054a 100644 GIT binary patch delta 776 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 Ef`MOZrT_o{ diff --git a/graphics/pokemon/necrozma/dawn_wings/icon.png b/graphics/pokemon/necrozma/dawn_wings/icon.png index 558ff60884d57e48f890db1701dce135b4e0cced..c5fde92c441b1124f506bf155fb9d0880ec434cc 100644 GIT binary patch delta 522 zcmV+l0`>jH1=9qO7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005PNklu$p^2u4F9O(Dwo-v4dK#g4(A+WnZesA?l|3dS~P+kW%_Z{p|q zf&euBiU5(E%oRW`YQ!4TL~|V8McGUv?i&&J1Y;wdK(x>jus)DNXz(KYh{rXVwl|&nMb||l zwgBybkxv|L$1DNc|Mf7RCa`()`l5d+bVoIMTL({E``f)VVwe0XY<~6wa6%l>94AX& z9Ck!`tFHOcO*AND)jM-Xajxx$?m)0?C32#Y_Upf{B5d1X6bW(G-&f zG6AbVCc(7nuL8+}Sp_l+W);XRm{lNEFfmC*AiA~O1T*w71QG`6<2Ll*0s*=~wgGfK z#4^zg((5NZNE3wD9~bV?gRRsBQ4R9wAqiqJ$T-*##A1-VU%xGgFBDlQ_-rr^SpWb4 M07*qoM6N<$f~}P7hyVZp delta 637 zcmV-@0)qY11jPlA7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HSqL_t(|oTZdOs@pIShJAx!vTGI+$pyR! z6ujv>OK&4Xd0up5fvNEcdW{zdQ9EG&F^720LefYH0j~x(`BA&jNmk0(lpN`Qqu7^skTVU4Zheub(xt8|*Q*=36BE zj^u`eeF$5^3m+^;0ZP&*QkoA1p)^m(sPtg%6gvwe*`DJMrYhF3N+W+@j*MlW68GEy2id5MyS^>ODichI% z^#)9lgaph`v_3r|0do+N-+{4hWIeos1(=in7T5+r7GUftK9^{xn7fXDzno)DqCNIK zF=`WrFjvS!yqjph3l-uODi1|~HaOOT5UX$ixz>3_?%@;QeF_}?We^juegW(KWBmcX X<6sN754r6E00000NkvXXu0mjfvepr> diff --git a/graphics/pokemon/necrozma/dusk_mane/back.png b/graphics/pokemon/necrozma/dusk_mane/back.png index 1a1b9e07e124b9f9077afe0a3b117fc426458bf2..96621697c5d444e83d7512bd070ee4db9eb0669f 100644 GIT binary patch delta 964 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 diff --git a/graphics/pokemon/necrozma/dusk_mane/icon.png b/graphics/pokemon/necrozma/dusk_mane/icon.png index 90c74736eacfe8ba6c8e61a6fe7f6d8a00397b69..e0e4ef479e9e6ed81b8be8ff08ca391991ffd1c7 100644 GIT binary patch delta 412 zcmV;N0b~BJ1my#e7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00040NklOCkrsO$~qY z-~fk4w$^~l(8vIRxEpZfayJl|V&uav+i)jU1Pa>`0#q9~&q*8+TfzL5<~ifB?H>fG zstlnPXc=M`_|gyVzxT6q93v<)Dr_$lmdTN$K^=i^wH@`VvRT9qyPp|lTkP3hKiS)nbki{ z#}|y>&xEXVVXholTAUU5ioIbucwXH7?C;RlY0PV+n8j1vWjWndqJNFIfxHdm&kW@7 z@4he)`N2RIe>fY+>JJA4x%7vFfn55-WFU|HAz#)Xz5xs#A!)N_;@SWJ000O{MNUMn GLSTaZYRSw1 delta 485 zcmV%ss402g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C1;L_t(|ob8f3Zo@DPhIIo$2r||}nj3^l zS0jp^EYQ zboXXh&?f!Zw7@@oC!Ag$6B2-g+&wF@OfTiohJ=-agCyv`Q~&2vYS#Nqum zh;e{sb3Ede-Q;w?-x`Kjzm9)kegw>X{Rc3+FTmXSSb%x(F#&@QK5znN#m5ND>zWVu bw|sm8pe-Q7dAjRq00000NkvXXu0mjf=Ag{O diff --git a/graphics/pokemon/necrozma/ultra/back.png b/graphics/pokemon/necrozma/ultra/back.png index 798e1290f4be040a6e2a3513d472a72a761a1f92..1dcdc3835c094fcf1a5c78700af88858cfda9a80 100644 GIT binary patch delta 689 zcmV;i0#5zk2KWV#7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007KNklyGUp2!)G+miYefJD}BCwQ4h&oE-k`ZrA4m@p2r09q_LK#*PWF z3w{B>3wH#-U+HD&008z2pdZ_P1C4zE`0g9Xw=u+^ZF2yRg9H>|2ap~h`Vl~fBKCg} z1w4kU-jDND!VSse(f5G2CAbI)av=bl96iOv6bsHX zWI=G3h4kAPvj(V!55^|}qI^<boXph^N(s*8w_Y{uDu7y$e^)1w$sr=50!Rd2 z8>m5n-4k#M;KMCp#K03Eglz){%L=#%xC$9Q0)kV$V`dj>3m*WIfYU6(qYB#qA)GpA z(aQpY5gfi^E(F*HFr5*gWw;5WgMS#HdY^Kr)-oO0ONbiPzB^+E8u)*R1evI< z_0qKsCCLF8y0`N=|*ji?8bqq~oD7%j_kB_o6T z{N=M_+2JdFV(_Ddl0M2^*a1i*HT9DUQ0(kYy>w!`03@+3*YluBK;*nBkB!Q$fv`Kf z^pcl8Yb&^IUF15tzUK?TZ0vtSeF5oUgCoHDOa>h5Ghp?=)r&`mwh71$p9s@yIRa9e zoq=m=v4Equd!;|d`urkTSTIGehmLOvc)h9TWl()Qvs#3=7~f3O2U5%fY>9?ofygW` z_)0$@oL-uNXjd#3q|x>pOR7MPfIWA7OlSV))lw!R&;5COaA!haJ# X)uXjc7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00M(aL_t(|oVCFDHs-)bEij^YC+yD;x?;fZHhX}4%zT~+w`LWUI2((DI2K?wc7{qE zAhz656bnc19A5Uq1EPZ*+2;jC}YKNU9w+7T(7?KVsE0CZI4CU+t=$lmq z!tOsKAWDTUs49qy;hj{6j33 zOo3nB4x=Wp3(%J-PB-WwtH)mi1&}oYZ*#SaDxTUEFfJ#JDcx%-luZx@bnnFfS-$}U WRN~?VhO2V`0000=y#Kz2Y1s&_NwJY8H>mkZtq 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 e{x<}^ga0pL5hYQAt-(bA0000Hlc} delta 553 zcmV+^0@nSp1o8xs7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EXsL_t(|oTZXMYQr!PMRkKY%s`gWJ-QVL zys2+dnhS`i8y_wZ@Wu!R4BBKm(#TP5N(s~}`!gDU{r`-4@kxhou)D8x6s#d@xSs;z z8#4BxOtU*V>=WxW`@!`A4r3Ss$^_^J^wTwZWCOV_CWmYMe~P2*8itYOgrzyYg)(ui z2Tg)GdRJbvLod6*Ji_&cqin}IL2Q-<&xxZ$%U1p}a4}}1x0K}CB0ORkTv{nrBZQ|p zUM`~nFx46%o)GM(Tl)ur z(jJF=#6jBM;UMid9D4hTLvMdn9D4f=ho9|N9JcnKI6!M(T2LIawlB7m;t;fbL#Ih` zaN52I4F^_d(oe&o#R44%s3`#QhC`-&ut$(fI|K(paqgf4#*`NRr1OG}eG8_3J1W|I2=9e{Y%(jDPyA^-5? zRX-uytj*9>LBBr_UN%%A%>BSwPfz?TEey@nbp+?eNB~?cwAM^>R7%%Op!*(<19KVM zcCL0Y>RTd8cwPXy>ryGeZE%=!0MGq%6Eh&)IdA7HL|=%xiiHq-c@Ho;A@6@BD?qG% z44G!Dm2wj=^sgLg#lh&sn;F2X1}wSNf;Qmy*I5a;nZzT@J-r-4D-+PW+xEpkx@u(t zX&MekzSG5~nwfe7cCduG5wZ?1ml4;U);NyP?%^6wFH!#;V?n4Vk*VJ!m^09Z1!0}3 z%j!>q_T%P?Fq^WE6rXS%vG-ncm(T_nveP;TLRkWrDwfI3@9ZARLa^p>JW~8q9ogYE z2OhxgGrzwM(D&%#$;br^TSR>Xzh>YAXaG2mCO4bmki*_T4WHPKKUnb)A2mNqXaE2J M07*qoM6N<$g1?R)M*si- delta 713 zcmV;)0yh1+1(61j7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00K2hL_t(|oXwTLj?^#^#)F&(xUntzOjd~U z94|t28zn$->@iQ5;-oVVaKJPzir3)rWAHfPqIh-d08o>m7s+ERzdyP|opRVo(43<3Ccv6LnC!3JI&26*)lyW}me07kdw z0G?MrMSz@iRVGAu;nGe|6Mjke+|oS$$?FX9x~wN!#MN_5Ofy6 z*Lj|Q!)}u@o59XujfvFz0&q^P7_up;#QBe~(#j%t^EoX*QbiwPjW6Tp%<8O(51Y#_ zv>>A1d%HdCz-LZ*Qq6C#$`BJy(cZ_`r|+`7O$d5Iu}+5D6Gb-lbBa zSS&d;TOx&x7wN(6bHI!Pq{nJZGKZZPe!Xy_hfT`$)EEKmw-Z4q!#e%eQKHL5R{44o vbB_FpX_L~+Wl&7~%y;b4LtFSxd9Ld(#f^!yKw>+b00000NkvXXu0mjfs3$l% diff --git a/graphics/pokemon/nidorino/back.png b/graphics/pokemon/nidorino/back.png index e5868c58e183f48a2175b7c85c90852bed76745c..a7078074e43c63e1853f424b2481b43c890494e9 100644 GIT binary patch delta 669 zcmV;O0%HA|2IK{h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00070Nklj}G=f^PsN{t-dXzzKIr02KiQqYM+^ zCWPWZcfSyzqcENTC42;kH(c2^jg?El#}usmC5VoY0nZ2}2q%cuV+4HO2X6uMy?GZh zZ-e&2Z70-I5C-jH?k8cH!g+*s+A;*|bN!1G!7AyiEwyD1 zL{#sE31BV78o!P`2JKfc5u{4dDg-0MUo65<%#TVc!)z4>e+YsLgQM7IF)nZ6AWm5I z5`;ma1_Ba5qAA-e3c$1-RlhI>;0UyAjKFbyi7!dPoXs#bNsD#ty!48IQJjC6!s}O# z1GhKY7DAJ`^1W&cn}73&p7z#Szm|<13P;(N?(n4lm(7SFi{o9UxNN~xudN>J&}d0J ziKA%?CqNr-j%e4b-V*8NzzWbOV1#_xuz#u@bZrTsWD5aRGa`gFKwsC>v!xz}XTbMS zm(ccc*}L_P+TcEIPdr$6o)>>Ykmr~H_O%f+g3yBnpl^iM<wQ#YEJUa-e%YttBt?w-B%~-d-*s@3k;O4A%=2()-I`Kh@sUHBbbwtEtX5IBNd;;R zIRKa|Ssv?kqxaXOL@m`Gkn~he!BD{6ch;Z%M*9a`_aL3zX;?M@000R9NkvXXu0mjf Ds#7{v delta 722 zcmV;@0xkXI1)2ts7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KTqL_t(|oaK~DisLX8MQu#YqX-pL&n)A) z74aH+7bS_;&^;>x-cT)}N4?9s`r2^5QQLSw+eq}q-QIA zmSA32rKh6>th3J&zt{EZk3eTDLHxR|>*Z)eL_)y-*(HGVa%(}Wj+{n>91?K#2f)v# zA?T4d;9!FE_)ZrsE3ncbSA*9M60>c- zft-d(2wke$?8kCI!o7arqeo6MNuurx%p7rw*rPVJvrOK13E)6%<5w%$BF*XmvKz1x zC8io`Pf)F9fYoX18pE5L$&*6X_8*d9SyUw!jKAj?e`IgF{qZJ`@#9yBdCnf+43k&h ztjkFX;`Xd59{>5LmU1JS?>f%#aWSF%mRgr8z$tra2iGH{zo!i-7WABVrt$&M>YRp8 zfZ&Nu?2z#m5G-gm(TGIn{g2v9*Sp<*EEGjA9Z~qiLjhoD`yu}(fF)tVD(r!hV2T~X z!Qh4jWNVR!W`feSL7EiGHDfDoYJj5(q&R4afsNpivR!s07*qoM6N<$ Ef_Dx}zvjLFV?kLyiYPGEh zHy6ghX{4kt2GG~x48We}HQ${!g|u}OT>waHWOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00G}gL_t(|oZXX4lB*yThP{*v=veJMO<(~^ zm?vIbK#;Tlt=w~zr;r}>tS^;PB>-^#g;&dkSwVf2fG}nxkqElOe>PPGh=n9i$SMS-F@$iB zY;&b!j=`%0s7I|AOY;(tCmm*2%z~YDkR^a8fURa>9Jr#)aWHt0A{Da2-yC3{UH6BN zsSO8kD*){2D=WY*I8B!UJ^sMNBCH&!h_cV8=)%0kb8n;QqU%48TqeeOmZR*$U&eha zrwnPW;WVy4e+2q?p0y)RK;?)s13IFaBRkfH>%6@K(8`f?3ETa<1g<@*6o4#lPP_4| z6M?V~Je5bG^P8HlaR_B}`e2#DHLp#8<5qSfK*bvJ259em=xS~Oq|Jw}CRqb}a_Ipb zfVmw&p_l!buQ9-u0s3{hj3+bf8GMP#;)A7D$7BYXe*vT`El^+G)F?q8rRo*r;$jgA z&~`gOX`OY!vJB!*2$kHi*Cl-0eD?-!)er)xJH6uvz^HHEyM@pTP0Q543P%VH)TlXX zkTM5$Lhn!3nbYH{xJ@AtBLexOCD>!_7biZf)1I3g6MNs;^kN^Mx N07*qo1w^hwV1ker6VF|LfLNcE!RFD;gr*I$w02`83%r%Z(grCFJ{KS+ZZaXYP+Y7VC;-YkrXRD2i%&xh z(Joj6P5qz%o;oPbq0S%FBS;%<8fAa_HYOBB)nc002ovPDHLkV1mcI-sb=S delta 583 zcmV-N0=WIC1ds)g7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L000hjQchF<|NsC0|NsC0|NsC007byu$N&HV znn^@KRCt{2l)p~HFc8MwN?9^-jHDpmdc`rX~e0|#3N*;VR1qMRxg@Z6ZbV$X$2A}y zPC&FrK5S9n@erSJ0Eyj@1pX=xh}RPl4|{(C;{QU~QJ=Yt>}c^G)rELVcevF*>lcI# Ve73Zmd!GOR002ovPDHLkV1gLr_YeR8 diff --git a/graphics/pokemon/oricorio/pau/back.png b/graphics/pokemon/oricorio/pau/back.png index f2771b8b5147fe9efd7aa66266cd6b6c50dd01ff..7969b5019f8d571f2185f597bc8e101aa9d14ea9 100644 GIT binary patch delta 690 zcmV;j0!{t&2Kfb$7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007LNkl0C$FrAa%k#0aSeW;G4EXC_E*^1!yLGKGPJUR{E}P@8mClV(=->ES z>kHBWK!?P4gg_BPmUmQ}XrBPbF(iLrW9@T~_L}VRK-kE@tz~hLh9E-wLB!9DKw1Mp zG`_t3fuSFC_RArN@2H3<%AJF~AvSjwC50~zQ|JTO9(_2By~1%HD`!s=d*@KL^tUm9 ziq5f?L%c&=BNB&WlL=Q1qUBRc@(eHuwqv1pX1#CQrFV7#5R#BBw|=AF(8YfTW-I+t z1st{!z65N43+R0~)V<4_NK{I?9}Xjcb(VCwN|MZAO=4pJf=soBIFF#$0!U{ICCIGD zFB!k3-j$CSK=JJE;dxGKpzxLlfR-7w2RH`|Yr`0eW64)A0(2oKw?QJcFjioS2Vvcr zMFlvyjQbJHDi{(Nkr-D3?*M;+At6m^^>cu$ZlW>uM15P`DDF$i*@G8zq{zd=0(6vf0W1Zwz zhhyvH!(b6W7#2i*?~GuKAP~t>Gx-#9!nhdwbusPy8fn6U$JfRP(rF$=?1sOmh1w(h Y0^FWAceyU8>P-Lu02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NjvL_t(|ob8h_Yui8+$0e{K&?P5>Gj!64 zkhRvO5a^PWbM4d}T(BhQ7V4bV1}uqo%8(SN_RzIU_jo8BR1nBZXKU;S=-MTpq3@)N zeHWdV&V7Ty_y7Ihd-qPyF#bm^%v}?iyIWOe`D-o>^#u|-0a{ov^C7q zyd5yn20+KU0#$Yb(Q)g5@RKqSt^=jtsq~IbY5=mpFLcs!YJgc@Uie!UIjrB%sp=n1 zr!Wl-AQBwqXyxJ-X}{C72>P>m3nRxRq#Zs4$^@OqKV59|HsXf>0RXiu8##nmYRByT zXSD|#b#SNUf7;bOV#Ypv`=SufF(S}hr9%StX0iAq11H2Lu9$PeSjd5eT%~a$rik`H zW#{Lg0JxP?G%t8^vhA8UYVE`<)*`9}b4E-C|;&0(dOn?;s^Ec3;JzQ%`I zAVuzhH-uL{!%v605?A;jU}M7w&agigzpO~uX(FFpek6b zdXxL9=PDrnW>@Q1nLhyXvSaDf6M#G|_1R@$ww}0A1IqJM5LZ%yM@zYdlz*HVm2{(_ zwvfX5DSKlyyjO)s3r~Fa^~LG3vBwzv&b+=3KNv9d$K9Jm(PF2P{@Xp9gK3@V{Y(%NhT*^c+ZKXd z->O55c74SVr4If0?(s>7T<#c5eOmIy5MpbITmagid!!JP7m!rVjG=Sj1t14Vc^rRb zFhlR1MM{uPqZmB90~nZ1ZN}`@>w|^C5(7_@lVGWf&ooZt2Ox!cSr+EJu0$*O0fXq5 z8EWVS@{OLT6#9V&z^eyfgB&K55WWGJzAzVTj2qx_d(MgezLDp3*G~Y@*Z>;l8+pM3I0Ao2vX)BDRexjNqhGTb7ElT_ksrhUQE{! z5!F9{!3Xn00;jy(>|p*bM=g--*G&4UqO1IqvJ&AfJ`l5dzo8UIC86xR-zOmlUvo zyWeAwXgLaDGAFMfb+l z@jTk3#!Cn~5g!pm^>A|q=r;k-a~|#SDmH|tO}U>7TWvgYc^ziwsW)H{j6w3jb331HHHz Um$T?V{r~^~07*qoM6N<$g41s?r2qf` delta 757 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ll1L_t(|oaL0ij@m#F#%&3t(1nFOfM?AE zV4EKBhLZw0Mcl1H3MH&xfIn@DNU@X@DXuvprMf0AuA+#-+J|j2Vw*{fAM-<1b-X0gsnvfH**aIA(uB!2{1Re_7b5s-Pwd8?vBnJy1eP zr2yXqcpl}gq34(Yi?q0iX1vxkbrD9f5V5!lOaNaB72K4eES9mDiFh3^(=jMx)(UiFF zjwRbrDCPh_e=t?w%c29Xb9(Y1cVZ5`4CvC{xkd80MW7qRg9PuQxa*2D;Ke>kl27yI z1(P!QU`12fJAYzWfRr1?n7TeDqp&`27l6$`X0b;y*F<0LKlYV$)bkzU#NprYpu|MV zpBfz-8*fkUg(q~-Bfi~DB$vDKwNA&z#rtTs6O(ARf6_VNz~Q`!NS#)?ktqu`(MaKG zrL!o<;yFgz99;eU7}tg(;?Xfh9BLoKtJR{hL}oFX`?{CUrhG_8i`MF@(eeG_4zYcBGq;QOpl#%Y5cmy{o{e5be{ zPqK$qe+Grui%@c?l4d})ov*S9=;0`UfQu>e4p^l_pos|7zzsEP%7%bI9UKqpo?FT% zP!_aJC_{=~hHg>DU{*IkDs;c=XBOk;@|Ibp_S&T1rs@4xb-B~)mGnuy5S1VIsotV= nOkHAkZ%jEdu&rzIpT-{`W7yY!<>MLv0000<2SrXqu0mjfFbrJO diff --git a/graphics/pokemon/oricorio/pau/icon.png b/graphics/pokemon/oricorio/pau/icon.png index a4ba46d2bafda8fd3f158f422d0100a0cb5a651b..c3353a92493b2fe4c14e911702fb41cca20510fe 100644 GIT binary patch delta 266 zcmX@Ye3fZ}1SbbG0|SFkK8f*;|(2~puW?0oV%|3(e zz?%HaqT3!XW)n${PTC+|aASt@fg7Gv6ZGzh&U>TvaW-dqaG5A`{NxL5+bwMbc{V?q zSj=`ZE9Tg=M-CCCo}ISGKZ>t*Te|N8SIWh!4Bm>K-rp7X7=D%8@;AtP)8gPw%k%$m zY_GTRZmBQn+FozMR`jX=mcye*x7iL&Zu~J>l=DlbLj6mA{-rj&{T`J)2|y1qc)I$z JtaD0e0suq*d-DJQ delta 378 zcmV-=0fqk60>lH57-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008JoL_t(|oYj)C5`r)chIs;WkpU*XE4#h6 zyFL?Bo#dFzr0=K$n^$0vt%3t>*qqdC|9?rEzxO4{FBJfA-F2Ohjs7OY-9<*LwN|kK zXw;VNAk439>pX3CI`DLUp_62(|F@i5WR+4f8umi$ z;{SoPC1R#xf^`?-@Apg!$gWqEK`rr&jFvW;!!U4{B4G4cV z1jvP%z#1{WBw!Gc?1J*XAi}OU1YI?b0FtBWBPf(yj>t^6+wFe9s051K^acm z6u|T$sQ#xCZZ8NJy=bY39Y88zO~49Bi6=lxL4J^~`n(k|TB!#xrXOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L-9L_t(|obA&+Zrd;v0ALw*(baNMXb#gr zt6f@A+9_>FCtV5zBI&I_5sPz7%ix+ZKrc`uV=mCKK(1iq5?zCwp^v0~D948PqHmF5 ze||sIV-Wn0e=s`zJz#LK51>6MG}@D*gLb9pgpql?R_K6`e{CQ_ad;gBy$Bsi$xdG; zPza&<^{dI11|ahn0%{vUrA(E`xtMK&Zmc24JNWZ=EjZ`m;`XKuGz6L$5Eqy=!8OKgwOak&0q7LrkI5GhHybsMxqv1eSQ_xtPk{}9001S@`wM*1P7&aU z8W2Jc>JZo#9Tq>C0{up+J98EH)&2*05Z#5zOL;+ z&Fd6CV4rJI-z5()&fhnn8f20;g7UPS0yTrcQhR`y3Ca}18q{RQGlgQMe9#jH$h-pP zs>CfIU05I~JJ(C1cY_&EmsF-|7Z5p3sLUNWbUpGGkPNOm+!A}(-Vhcr1BmGtZX_JT zumxa>e+*KXd&;3vh&RC|V6aj)l^sm>TdT7R+sl9-%GZ7Tf}Do9v35jA?n0 zq4T=C~WFunUL^((k86Y>1C9&^b^-9(ijwkLV^?PWfD00000NkvXXu0mjfY$ipk diff --git a/graphics/pokemon/oricorio/pom_pom/front.png b/graphics/pokemon/oricorio/pom_pom/front.png index 44deb56e8ed026a4dfccd54503b04ea825b5d22f..5ed6c71b5611f10070cd21cdd26a648510b8d109 100644 GIT binary patch delta 545 zcmV++0^a@I1?dEk7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005lNkleK*#QL}^$AaXXG)hq3717nr|T3c`OZl?7cM0qd<&?KPH`wS*ihyX-OWEX#m zpsjOG^oWX9QqXSScW3d30ViPwAo{-mM9Iaush3L*DOh$Kn_* zJLv-fJ~ddcO^=`+5b~K|l$R-R9|6 z-gc_M?`}Y-*&PD5A)M)0-_&6Mkp6$MbPG`DFM0+jB2qm-Q-mHtQt-jcdmt17S?JNr z9J+b|NEy2N8qmbZ(iEnt1q5daAeA~H>{|?tAE(@z2$fy{QtuE*!MI^D0h05?LwgFz zE&|7(xd_R9Ix7N{0WpRLlCwz84Bw7ZzRVSZ#>lJGLr*UN$kb_K5g+`yLic~hSwce` zmI>nX`FK?Hp8VVfZq))pzyZCNMd!y~9MW%@JG{oNXaiu!j5BTgJj9$ct*1Ep3zs}E zOAim2zu+VQ2;c-w8(&foBbc%c@~@tR3N jtu;c1T5aX8eXOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IF?L_t(|ob8moZrd;r$0g8%MoUKRS(gA@ zS+liTpe;H$M%Sis_QW+ciw1mar@}@@FEKjy5i$iC^BV2D^himR?3C)54m}tac=zM~ z?)Vi1|Ltik?AuS=_W?<2q3s#>f8r>*xxLEjJfhwx%~?e?ROI;uT6?aMcUPmzE7yie7*b_ zAIC$x`q8dzQziU(w-Nx-h+dTOD}drqBPKwTM(@%BF#w0QhS@%{e$bm&0&uugNeRUL zsZ}V4scZx)e*lUyK{e#A)r407AG!p_>Mdo?14EafT}2x}mHz?IwI>~F)D7THP3Bx_ zPL(!-b(Lf1;SqkrlpbwmV>w#+BmRpAR^~b_G=uAxlN}>%nMbczEzxqxViwv^PM6-WSLKDTu`T0+B@OTF$|Nkg%2;GeVK+bFXTu3N-700000NkvXXu0mjf5St-C diff --git a/graphics/pokemon/oricorio/pom_pom/icon.png b/graphics/pokemon/oricorio/pom_pom/icon.png index ead80b6a2385a6d3d1d6e543100faf5b733cddc6..9f83917ba16f8f41264ac54e3a4d235a7345b60a 100644 GIT binary patch delta 287 zcmX@d{E}&c1SbbG0|SFkKBaE-+ z_N(bOy!sa;rDt7GlRZ^<65ECh-D}PtB&J*OKKy4mXY!>4!TP(q`c-_Ywye>uGH5<= zBC%<)qvOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008nyL_t(|oaK@|io#G7h2IV?*6G~CEW{#> zf?0-w3(!hPsR6-a3SSWsNg=1mS}eqf5HrP~Brw-lINtke1;N|BkMn-cdB>Qy9&*8N zVW?1mi*hN!57NY!k_r*p0?-*>5DMbapi0CUWj6KzA+XsIe>LC-h!2YuQu|NJcowZZ zwCDF-rJn;0-+tc#wYt?NwDxf^GfhI<3Z&hiN%HYNQ7Pta)|C_xgfCZTV0000(xZiX#ePs z5MqoWel19TN=c9}1-W!mASDx~m5`GyWFJDB6*7Q`Cd>n1m&Ro=B0x-&f&!Aeh_HX) zmw;Zr0wf^J1B(@b35dNw?K~5ZCC~tN77*mrF$;1AY=N53&IJe%36b?96o6qSUmA~y zq;4&uRN&7yK>j@wSOoOv??4GL${M`+QgsfjMu9Y@W&@rbT@=MQ*Nt@nd!&hW#$z^O zuEh(;Qc;hgBwO`_LO20yrIHSi(=&ge0D6G^B(-q*g#4ZYjfEXRcp)A0OGWsWa0r0s zeA>5!ab4G~XD9&Ddq{lA*B=GUcoYDvb&tTIFRQTj7xJL1`+YJ3lcrjHef5fotDB$U{C1+@9r%65yf-D&R)x+UBIQBPNaJRaoJB#?hfFV*=n z3)H9s3Ob|81@z)_2#0Xol3l@<-&uomM*j>vufe&5P6>aw31zOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I(8L_t(|oSoD$YvV8!2XJ|@>DJWHJr3ON z6C`90^lRiec!_&UAi=VG;|-CwLLjoXn+x{^YPxpre9-T5l47@(^_0N9AD=OqT>ME61Um7wXy1yuJ--RBjgdlcl6>2p2l;pz8a2Rc7)iVlcU zG%rsBFkME~DM39iA)2Q7YYAAA6R6AsEq^L8NFi%koBlyfFyPq%r#ehl@cIDv&WN%D z$rpGP@9+1`o7E3xS9A&>0RH@V_JD~5Q1>PTADGKyf2J>1=mWaU&4Ww8uE+wy1s}&W z<^JG=WPPyw9}r!Nu#SN(X#wmF`~>;x0+3=QkR|#NB14W*RG*;UV?bZ%4sax*INkXc zxbIF>ceh>_uO1!1yZ6QbH^T-<#zi0pz{w~qfGp91>H`cj2B3BhT38A05?8eioQ%*; za1R>xI0gvp9AVuXkhK~8HN*D*#T0AT6pww-zp^dh!UMVt&YAB01Am+3X@9jlD*ylh M07*qoM6N<$g34_w)&Kwi diff --git a/graphics/pokemon/oricorio/sensu/front.png b/graphics/pokemon/oricorio/sensu/front.png index 470f684713af6c76e0985709bd731c2071a42529..5abc5e547ef17bbc42fd13e25574c2ccc40d1a89 100644 GIT binary patch delta 713 zcmV;)0yh2g29O4j7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007iNklXwcJ6cQJOhxrYzsdE%jH>ThWD*sVL!cLt9EyL% z^tDz93gK4~j060wAp)zlYKUsqSp3H=5QI?#5En{Uhm?bfv~Hq22@7rcTF{U>qS*`Wu)@)}*zJ>gps;eO`vM9`!z%K|;#In~=W z1YlX$b%6tLJwE}c9svHw{Kx~XVBXit!twwx zTN~_;jkMc@Ip>7-u>;yofIS2wV34-}!2O3cBgiQSE#QJSa`aDaM5?cH)_(+;1I79% z2xoooiJt)=Y~5!7crfx2kTdomI#e>s5y1yQkDzT1J7dSdfhd44OYjaLk@bI^w*U?R zykm(x18j{@YJCQnj+-+*0?4tKmiK@k2t&E_y7vIB!&?Nz)DF1@c00000NkvXXu0mjfAjU|M delta 812 zcmV+{1JnGF2J;4x7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NguL_t(|oXylRZ`wc<0ARD&5>qghqKe?QrX!a2WV~+l^TGvS1d{ZUI$>W5ZLur&}(&of9Y?p?38>z2>f0{)~dN3 zUR`_-JR-~r9mo|@f*QtQ4=4Uf7~wcyh{<_^afCQKL!5KYHC6DlBu2c(8P``yD-^UY zd8iFmD!U;HA_-#nRolgDoP~%n)qz4^koWLTygr{`lmDACp|A24e}7q_Xg<#{o%W#_-5 zLQsPG5q*s^peds2`0pf03IL5$22^~O2R3-#@r7Y!HO%rw*!AEPFN`PyNe)nnK^J2y zR&n~A=K%O}jufE5jdQ?lc``=xt_FMhH?YA!m6_?qe~<=8Ixs!M_0oVkXVw!K=0JlR zR=5Sw1X@wN1<)%M;j~)}RQmb*Cm`7Kuxw3ig3)|Kgx}@2~-f zOKv%1&yN59Z$H{H(dx;Gpsk^zPkJ9SvFyF}Pk%z-v%|J4l(HYjX*_7?d3a9O$tk75 zlxez$qn)LhqgBT;?+<#LDl9`PeO))0EnH+?nt1xq9L3YESL<(YF?Hmc;h6JtUcb-E zk0&gTe~DWM4fH}Zq{ delta 407 zcmV;I0cif-0^tLY7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009L_L_t(|oYj)CPQy?PMc*G--C$v0VyMK- z=QY!fRJ{ycS_$O?T8Zu;b?y+6->^{h$e5NWCS~C|D+q}<`d!=C_6gw+pIGYyL-p?d z+rD~biPYU~<#L9IdoxlT6BIQC29zQVuDP-719us{?Iv3m z3;*=l#JMyMk8$|Q6VzKauU&>}W_;T|YQ&NkIG!cBA{`<;KsgdumG$bea5x+aFk-TM zf&)el>VXl{Dc=CbCcwznJTMnNJTMnN{9b>;$0r*mvoRcuN8bPd002ovPDHLkV1nh2 Bq(T4y diff --git a/graphics/pokemon/persian/back.png b/graphics/pokemon/persian/back.png index ad7a9d4a65570554df47847bd50aa43238807490..1ec5e999399fa298052aa875930cf58b8de380ba 100644 GIT binary patch delta 593 zcmV-X0atDDqr8teH64#@QL`K{l2u>b(~ z9cF~D^st?0E=365A^?d<7DAPa?!6^6y$Fsh+T-axpz13?!0F!tfQ$gF3vuf4D*%5n zOX8o(DR&`_5pfwxuYCJv0;`qyP-q`5?R7?9|zQ=UNULJJ^n#oA+~IK&QMZUJ18 zUY$0x*49U&BLui20BeS&es%(oCoti4NvQXP>c|1Gf_SSwD06AG8h~p9hI*ocxO-)K ztxx~f2({V?pdDIEW-@&!;{@n-2B?3XpckW%3!sCw-_YukMo=4J=_g$DLaN8UnMN@0 z_Z9${i&|;3;Ov7t1Uwudpf0Cnie@1+A1A^x7>94Yj^8W+%e-0}AP6A@@C10m z8A1$@3~+`J0r&wBzq~v^GCwjN=OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I9=L_t(|ob8moj+;Ob$6*Un@AO}$Rf1+Ci69#(L&X4Xj6MMGH)!9OA4ygdGrdcC)rIqyTM!5JO!Pz?}orpFnW{+@ya4kO6>OTxx#jPdze`5uha-{GmPo zYA>S>farOK?Jft5L5zz2cLsE!@oZJ>`yq~aE2BFChj9)*6|;c>qW%j&uV;HDdJc4a ti*onSB^)$D#YDPJG{+23voik)`vnKo`|KT}G&KMK002ovPDHLkV1l_}4(2Y9G)kz;y&<44~UV{s0E=`T`Z_B~(hjeque=H@;c}J~RIo8uz;% z%MWN4;BJD$knSxjU<&U1G4-@OVlZd~_X!+=ynX3W9P8kGfI@!P4b1}b`adb5T>ua8 zsi4hMRl#Tnr$Gd;)>!EvcL9@L8V_QnkXKV+@rUIlKfJ{k@^1v485)WQ1w_HmOTo;{ af6p&YZ3_Nu7+s+N0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A*cL_t(|obA%lO~XJ82H+FY4dBvyCqWqi zxeJ`SK%MFckFWtR(J=vG4L0SRRFQ2$!XrYpR7KJMC3c;2?ppu0>bhRf5plPXuL;g0 z?0*zDw}`-XY?eXA&rj9l*9CAt=KxQ`vvXiN;KQ6l_;`1Ke|HKr2oeklG05DX4-&i$ zFL+RZ&QSp9a(|2x_^_W68eag9xi1$5Vw|Fh1qN~-)J|`>fG~oS1O%(V1Bns%n#hb$ z833?5DF7Oj`=qweegi6Zi3~8gOQ1j?^%uE?23>D}uja2bKHgmL7`$L|uTIAxXe9K+=nBC4iJuvU?;gz%E*~7~AOF t(*`g({Q{W7pj+_aGc)?n4REc$QD0B2UT%>xK>Ppz002ovPDHLkV1gGcu}A;_ diff --git a/graphics/pokemon/pichu/spiky_eared/icon.png b/graphics/pokemon/pichu/spiky_eared/icon.png index 93107b1d3a267fd815290910b14b5837dd9285c9..3a407bc6cb2d65825bb03b833d36d51ace2b4d4a 100644 GIT binary patch delta 237 zcmey)w1a7a1SbbG0|SFkK#zZj zGq!WXbFJNE2bB%!;i{;Bi^|A}wbZesz@MH)x3 zy9$rX`cGE(lqC!mulLIN{aDHP=9=mfhBjZfZ+)+{X?v5-QJfU?7jXFsRt epIH01$M3-{f%~yJxl4d;u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zqJ2GMlDE6d|E27ojsj(8d%8G=RLprg$(oPJkjJH#@d+5cQbsde&C8gjkAv)eZHdOCulHxV^9nC-$>Oe*SO7U`3_AS z``9NeJv>|aw7~6D8H1eNjmI4yNUATkIE~c9fMk`k42OLjZdkLxbRq{vQ>LHj>?3Q%dGpf_&rY>gTe~DWM4f)qHSH diff --git a/graphics/pokemon/pikachu/alola_cap/back.png b/graphics/pokemon/pikachu/alola_cap/back.png index eb78995e333aaf29168c6e84ba0a5b0ead838c23..110eab45bfba7dfd36fd9921fe9535d41d4239c0 100644 GIT binary patch delta 561 zcmV-10?z&I1^EP!7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005#Nkli*z^-75f0r`@po(XvgF{Mht)!u(A zcM)O~BCjCKWe9|W5Tg*ZK?nddq5+~v)C7pJ5Cma|9obL_D1fil5kRpL4Dgolf3N~_ z{~%D!zAgN4XCdQjUo)Yqt15IEePytwh==AFiL83Ou3}E@_ z_iw}OPoNqnAOUFA-$GFB7b63*#Pgley*YFOsQvP%7SsUpk zpW-0gw&ws8^)6h%O?m;iyluR{egQn;LH}BK0s!xl3wS4B0P=-A!97C?AaH@Z$4R{t zjh9Ukmd~>*f?E#~SZ}(n?gJex1)>Mr@M-lAiY7kKPY;rM00000NkvXXu0mjfNM{9- delta 677 zcmV;W0$Tm~1nmWo7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I$7L_t(|ob8jpik(0d#wS=TSj8l;b!4kl zH;f^mP24Nw4e|^rFKjWaHv1Y2DFllPW2!YEco{)GZj;kEbHAV8`Ob`& zkpK09RVGRD?qB+Cnx;3&m%r(+q>fdF1Y`R7CN))V^{dB6f7VI^2c)kzK*a8UT#$&; zo2sf*oA+UhSs)QfUDgix%m4|JRJLwikNBi}01|C>{OAY^@JXg46p*-NZ?CC!IT+xl zP(;*ABD=0(*aEQ-3zv%y0mx{v1D4qkvdNH@lxp3cRJ;I)HO4@zQUgaD0Rbe`n#vs3 z;rL(x*%}sQe?e-s(a5LoJ}_&GMr~lCvc5g&Az-z*>h-3F0)7*Euo<023@ad7bB*RD z0Q|wMCqQ66nJID$Oabu0ehG!Mh+PB(p1zWh7}p30{Bpob)DD<>A8^E|9|MB{;E9nv z(HNjX08YdwbiA7P3Sb=V$fooFHRoIbg*ui^$>TV4e_8#&?g|)N!h9yicP5M=iH_Z= zh48z`4ri4^0y6U~M7sqhd)J(*r+~oW3}N|$V#ZM=^z<$~h*}Nd^kF-wwQxjt*yz%N zfgV#26X^K0jg1*o=9ogAC!%MJpFiBxNYQ00000 LNkvXXu0mjfUtKF< diff --git a/graphics/pokemon/pikachu/alola_cap/front.png b/graphics/pokemon/pikachu/alola_cap/front.png index 658157930e7862a5bc44dc0fa02ba4a61456dc40..2de876f500765d70c1a0dabcaa27b0b7256fbe20 100644 GIT binary patch delta 552 zcmV+@0@wY`1@Hur7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005sNkl1z0DGM4#Lw zj~%%dte9Q$!WRmd|HyX?D={rnGT)8@<2xxZZ@L1Ox`h3GE_-riVBt_-)EGzIgcE-y zP~Ki)$^1A8o%kz*3P#a6d79u597ul?wEW+KAi|Rfo@&s)Rgg343briJL`DeIAP}VS zFX!rAun`{w2pY<;gM-(eBQsQ9tFVu+dn%-!B{@Z`DfC)0q@JgE;$z-~en;CIXr%)m ztqjs@z6oM2je7;W^LUoS;kp;Cg{uJDAY^|h!?l7T zUF3X702hO}Ka%z(Amm+m90B&_pSFM_lSw46LZ^2d(zN+n=EA28Zfs#25^V$7`Dr4N zGao%|)C%^i10&=8HE3GD4R0R}zuX2l6F^VryMu^7;q@xxS~3*R+X98xV;z0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HqyL_t(|ob8mqj?+L8#uvE=+KLNLz$!<< zHI`f;+3r|f!Ig*?K#GM#c|{b_5ed;-0=ctDfw0|$h8TqMUC)7~S}S5! zI^I-ORdT@7Vy*PqXqw95%NT3^;- z7ng-|Ctq|!06Z*qWF9g!&X*VhA9oo6pP%E=-FApUj@|wp0m&B+NSp!kdp`6w#V`d3 zbF|+&SE3qge;*(Kq@jOW#9!(v_5p$%(p-#UK@bwvh zhFAhvKe<)Iwro8B5YsOR{Y6zq0LEHSyU*J`0dWMAj&kmcMJb}u`~6Y0Ghalph|m)> zYYBA-SOy(|_Apw*01|0_gBx)K9FYG3FwTI>kz2R3e^*KkGh3N?VC=^X3|C}Iz+jV% z39wHvJrMb^qZn{V_iUHlo)B6KI7AH-g4UR}exM>K0taM%2XGw0G_y%tp!Y!E&riw& zZc9d>2z(O~{)(G3b@2~4uz*O&Nm93StS{TfHkUTQO^MWXCh@g!2W4wWYX6;gcfU&~ f^0a?17hb;sJ9;-)D;HSaxL978-h-%h#6b=ZKz z^>EL#r7!;ff7`>GE4J}%F`}NWrzw!%~R)5?p^!GN` zqLwKg7s~erX9?7~te-_or_l1t>F58<3^gM&7tDnm{r-UW| D6k(C` delta 425 zcmV;a0apHi1M>rr7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009?CL_t(|oZXVKZi6rohW!Tj7I}a$Fm|X} zlZC${3{_#v5(#h3!*xY{3cOw-#grw&HEC?Xd!?#gto!ua@|`~+{`9h!sBTUxLQ2)A zY4>zURIOam?>$gy;{fII5xFWgfnIv>l{jFnl#e5{t?K5zf8fpsZXd~pb;&*;sQu&& zdn3bJMx8&Qq>vCM!w6hV00g|ep`4GHZUVay5M(7Z&@CD?JLvqp=+|WIZe0#Q0>uj0 z9_4yyq@yVc7XNgSjq0IZli~jPvoLgYdQ1j+VMrbCN(Esk{c$V^L$9d=3t_ICO4XV< z1lnYKV2oYRJK@%HhuqG>5aYRrorR$srFK6#3)2G?B4G}QgwaJTjK)fs-}d7hz+9le T5&`gl00000NkvXXu0mjfR)nxa diff --git a/graphics/pokemon/pikachu/belle/back.png b/graphics/pokemon/pikachu/belle/back.png index d90d9ba3b450eafd9a388a0d14d59114b769c7dd..b9b18756583ab813959c8d11798dfcf9324ea7f0 100644 GIT binary patch delta 766 zcmV;#uP)||8chyKvDdevv*s2`a(y?{zyVVr|DO}`ZpCB zia)Z*CR}g~P~@Mub52zv9Ks5P@Fl_AyFaBYYx%K$M-caR00dFbUjgJ`JrdSH@BV*1 z^6tl90a_jXgxjjf;T5p^Q&y{GmQqk55j_JGy3fD?M0G}pM}S(JoDe+#Zt@v5f&-2< zPzM|dlskXM73C^o)>9F+wkm56$eY~&AZSMj2LQEZ584Ad*%hj%nc4gZ_TZ;Rh$0HiGitd(t@iJSqR5>|gB6a0y~@pUI`E0r>x{S^QLW-*bk?izq@h}Z}K z$Q57(fz?}@j)1~I4uwE5?gU(f0)a7LJWg|RA;C>tt?IplMxc0Xal6Ni5 z^L)jaZG(N81hOv~12|&{fZnH(V)Gl~;9uzJ#frVo2)6n+|NQ9)XsHMLq|L8M5NolU zZ6E&0K4H!H1Yicq2!kG@cfeB0hr(SEUdFcoJ`MoEV>s1c-#$y!ny+dQ%!-$~bPQXK z-vE$j1$=Dzrt;|kA-s8cA=LJ#3NXa}VL>)6F9d3}>XN4_??JT0GoTokc)f^>@K^@S wL2I`=0RDOaEUo44{GQTl1zz<2jr*VJ4@lcamV~%Jp#T5?07*qoM6N<$f_E}xvH$=8 delta 883 zcmV-(1C0E|2Dt~27-Iwj00013M{Ml?000McNliruz02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00P}fL_t(|ob8l9Yui8=#x>N0ECw&h&`ctb zDg6v3oDf}13cd;xTXbkNC6ERw!VofaX`qVYe_yM{Rkj8@GJp3B$W@(m)(T`X+;t24}cF{^clIipWQA1H&H^!d506f z-c5nBc+3Ml_++ zt$Nst0|YebU2H-`vl#)+2-s=OdY%MKA&EjY@qEswdE1r-i@1#gb;d0f5^tThLC|&r^;?m*W)qG6sV$i zmnag(NDCi6CqT(YiJro7%;*Sd)r-^hc7f1Bei@Dd0l-C}Zu`k8mud-7=UqOA81o6$ zP+b+I<$s<>K6l)uwl6F2fFt? z0VV}snb4u@p3oulq8UW70ss^PKr#2dt`NcCV*x0^YsQIeF8cFm4Azza`%(H3W89#F zjY32T%ul(4qLsoJ4LImg9@wzvfdkm@D1RB~aG`~Q=7E2z-<}j&yp_WIqW}N^07*qo J1w^hwV1hk+gP{Nb diff --git a/graphics/pokemon/pikachu/belle/front.png b/graphics/pokemon/pikachu/belle/front.png index 7f521f287375056bb43e69858025b58fad6bedef..27e11f42eb53f9ade86693d7cd8c40bf8044e4a7 100644 GIT binary patch delta 737 zcmV<70v`Q@2dD;+7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007)NklyGL$41{UwOGA?G`@ij(aY7f4R7m$XmVhF4zSxfK;VedDTI^4y?rv7fDnKm`ry4cPYEnJ zaiNTcfObt?4-oY70l=ogvSk2N^PYbOfW_#kdvKlwx*(phoXZiy@W7!T4xGDi(~SM! zk0ikEcj_ydX*fVTYYqg_)$TI%1XSgO*;D=mU=sW;N!-_!3|ZIJY9&CBkB=TO2fpHE z0bq6fc0B=%oaFZr902kAodD?$AUOeGX3-+2;~|ERzW}-(wV@9}dNW@7^wNJ$_|+32 z!oh@GzMoFY>BqH#!MLI7E_C}e+?3PP&=f)7REOMZRPltI1ij(?Qj(d)Fj2;^bb^1B z(<17|>M_hFtq;I7!Rmrc(1SP;lyyh|Q#%FF-g}rUQki)E#XuTcGYM!`WlLfhFri;8 zig_l9+yhQ!6V{xeHv+J*n$Ld=@I}9%ql&piNz#X|uan0cQs`O?{k+9cv4SjcCt8^! zU=vaI@Lu9j;7ro4FFF$f+y?+M3sdEvkRy~S0AEGB#OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00O8hmjCSTTmFJ64;36GZnVmqN(W{Okq&DToCr0LF@NGsO!CZTsW-<0P$%ZAmHI-i&8hr zUB*ExGKJtufJda>5=WjHa5d09CA)8_@8v-4Pk`bMb$$OmrA0|7fC5l4P!Ck^AcD@F zf4~uiGX)@Dzrvt?m8Q^{Y$1^?+81(#MHQ0fhd_1jPf87zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003rNkldBngCR9;!JL$R`E&xz#!bJDiVok-zTz2 zQRi9BgBTJ}F+mBlDuQN5&rhPrqJ;Wlr|#PSA`U|f<1ismPEbdL=ShF&@)!Zu0;D02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C}EL_t(|oXwKKO2a@9hWiF{@ByUt;wi=M zC4wY}MDWyJI)ayY6Z#l72wNx=Y=!1hAEp<54NYZxnTDh}^pZ7!W|NI)#l7v%{QvCE ze67}R9@)IJNV@}Lwk9M$gkEy0IXX5(^<3!Wkw9gxjAD|7e{d{;a6o?Ebx+3<=!aK) zZPx@M$K*D+G&p8tVaWJex^5W?=((mJx&ze|k#79$Lj5Mip)FS4L{+5MnBBd2{Izsg zh_|C13YFOt-d7;9k8Wv+r*ms=&JLxe1&0pxgufiCHXt5pe#!kxXt!Cg22AE=qF_+* zu_xzkS|=!@91lOLfC1_|=G3kMlVa#_D_B%GpcitBPb#9&$tD|7@iD~v%?brCUz%(X zA6BV1E_a(4Pc&jP3Y6vioqZZya>a*yHfZ~|e0&2q6aUMSr#{fy00000NkvXXu0mjf DO|sQH diff --git a/graphics/pokemon/pikachu/cosplay/back.png b/graphics/pokemon/pikachu/cosplay/back.png index d01bdd1f0825f70c5375ad5ede81b62c0ac9d173..524417f1cba32181e44b21388f398d2aaa143aa0 100644 GIT binary patch delta 562 zcmV-20?qy81^NV#7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005$NklgA%$9P90(x%NeXqcd&QF!WaoOlco(1xHqbkF3W%L(0#OL8nl(TLgh0qdo{&N+ z^+fPfXz_Wkvk*83Oo3t_7+m1!z&oCe048dD|6T=3I{sim`b=O)iaL<1sS-?<42bw`q3U)k3aDaO1$Q;Z9^nShxt?%st z)j}tQn;`q-B#?p6cwFd5vk>eKf+$n`@U z&wSYe9nS_z!EI#&g1>^ZrRaMa%=XEY+@%-=+XxR^K?@^6PvI=^u1<;|n%&ldh`*3C zetOx<36T09oxsASxfbs&<9z;d5qJ=mE~`(%3IGYf1(xo4sciyNSh*=e?Uf76juYOA z_ItSq3+rfyc3_^tOJ6I*aLyi~Wg*eRUH7kzZ=?Djo0qb;C;$Ke07*qoM6N<$g2Vj; AQvd(} delta 668 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 Q00000NkvXX1g=70g0sJn(f|Me diff --git a/graphics/pokemon/pikachu/hoenn_cap/back.png b/graphics/pokemon/pikachu/hoenn_cap/back.png index a00abae9209f668edfd9c283f8e15e894a2740e4..a257b1e99425a0b63dc42da7712aeff3b9739153 100644 GIT binary patch delta 559 zcmV+~0?_^D1@{Dy7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005zNklX8E|eVAP4w-Vx&S~x@4($LRvzIu@czYN9BJM zA%sk%75KRffj|f$WP&dA9&tuAKop3&fFTru(BF6i8wx=M@YMzaDO7?1-V*)~cR=bF z0@V!MhdIyz$U_@LR06s4W<&yd1hFjHoJ4NEw*g|CTId23)D4*cZwZ7}Lb!nXHzR^_ zA4fn65JVBS8il?BEsOzDf69@50cn4EXa^92?C(GvmpR@x{imz`2Y4d95!QesC7>nH zJb?l@uOe6km;o~2XTTu90&*%7m?axL6@)DnS#_;CQ39$C(Keez1$RGLq*bAu(pkaa)Xd{1)<(a<$ zNFQVthAn!|?=FGvw`z4Okk|m4&sm9tcE2H*25z>}5cH|Q<>k9j-j87>Xq|qTBaBlN z!m&LCprCi50f+P%;970t`T7M|2`~Eh!W#g2mzKcl1PCBqXeBJqkOByo!0B;P??mHe xQ-tmFtVLMXiv-r2Zm4sBtw0;}VjF&~{s1|5JN;t$euw}7002ovPDHLkV1i*H1P}lK delta 670 zcmV;P0%8641m*>h7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ih0L_t(|ob8i8kDM?N#eI<|=+=s^fGW32 zr1V#&J5gM^O(aXer%BMQM9CHu<|?E^3PY80@t4c^FSfa)y(ZIOct75}v4N2P^@i0P zkH^pd(w~Z=cs&02oBmGfSWQe&s;?glQ%$Jf+~3nq8aSZ%e-Ho(egEZ(L{dDqZL8Wm z#4Q$qL?U%rJK!4yB*?L~_2hb_2i*gZ=*shVM_7Q*G96)n#I^i%$E?fA0M9}Z$smdH zE`uoqQXy6@7d-+{vU&%siy>r_scab2y4|UC1rS?|iM5Re&Nc!9NT@ZFIjqCkOz|vR z!>TMurfxJ+e?IuYqAhZD12dDQHzF0VS=8AUbo5<|P1pVAeAr zupG=3l?CPq_-em|+F7J70s=2TNlc7e1O$FLU?VaI%!3a&V$_$3!UXU_$)3m!kRt#G z;uAVv#s>vZj&>v{JwV1eS3s?{B`CQa7cOg<=xq&Se@Cd#r1;K^5hT&mTeT2=7un&W za!5dCUWDjEV76z?nYs#y94-)-KPYA#RYFhinlL- z1MAKLFn6-rT7WpjKoTD0-XR$RV2pL|A5|O0_rROgAA@=Tk#Pz^G5`Po07*qoM6N<$ Ef{Zg7U;qFB diff --git a/graphics/pokemon/pikachu/hoenn_cap/front.png b/graphics/pokemon/pikachu/hoenn_cap/front.png index 19bbcdfe60c649eb8f3e02c886c769eca1d5cd44..2c9749ee2e350d6e398b99433d648843289b5a23 100644 GIT binary patch delta 566 zcmV-60?GZ;1^xt(7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005)Nkll(+U1Bdg7m(V zj`D>onh>N3MNI(2PwbMHj+_I$>`tZdH#pgU)K3UJHh5FbJd6ORsWf5kXk8&z8uUrWKr#0w8?=QX7rA0^EP~@~nr$ zbT6uf8$jAXpeMsr!ICd>91@U=fy^IC{StuWUG;JV(3XF00VV{6P^p5qHxu%<%^`_&r_0>|fOqtKm0=s1 z49{wTs^?=w{m9U4q7st%_&*{eZ~WXGk$=)Z@x(lS0Hb~+RoE-NQUCw|07*qoM6N<$ Ef`L8?q5uE@ delta 651 zcmV;60(AZU1k(kO7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H+&L_t(|ob8mqj?+L8#y3bVwlqE@M1_L= z0LRK#T@`H+s7&F)_5<7lAmJM6PBK^JbfmCdqDbtx1Q+(c0Z+y3ZUEhSaxKk`qA1Dt z(>H$|#-8FoL>Pw8Uq7Y`APHz}HtI4FHspU}xVS>Ih^39Ao55ovl(9%uXLh)-7}v zWGv8*z*%$fcWoJM32m0qDFWac=Qr6A2S5SUA3$d%e^5CpqxR-iV8g^!mJXPQxdcTO zSs*Z(By$er6O0c;HTLKMhhk55+3yj-vw%a;5*B#Ic=Zz&fesWznDg5`8I{Uv>hE~|_@Ov4=X~FJ)fU@G z9=(Z*_j%Q>8U5*KTw!Xe6j#b9`Xu>-N>#PeUw$s$yUeRXj`Ul(C9IX4UnweCqqv78I#?D`fJ6^X(e!SIhz`wk%g>mB6 z{yGJo6FcQS9cJ};Fex^LPEb+EK5};TzdZT4o;4y>WmkGu1O3k6>FVdQ&MBb@0Po_9 A2mk;8 delta 423 zcmV;Y0a*V30`UWo7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009+AL_t(|oZXT=Zp0uEM!CV9AZJMt-0n91 zQrcD6ZnyJv$w^}=l98*-y0GPHAs`w5&_{|wgXZZQ1jAG6PcJ`YwcHPcMEZ}oC;DiG zITX`*0q&`ffJ(hY9^XBiK}~uA;RtSw_gXJ4b7Q!aAt$A~>x9MP9=K-R^P3RW6LhL73n6;|Er~y|9OW&qatWdZ(DA*o|Z4a7?W-L*0(;X!k#O< z*&dEu;T@y4XJbJiSJ!{&3j4JG#f3dYva_0@5XOJrmLr;&~PV?)HCH zSw)CZh_r$*mLU*!LX1Mt1|a~9hz5uvQ57J@Ob~<}c4R{#pa8yFLjc7>Fu+^F|G^AM z{hdH11NVUhS^zS%HbfzSJ9kEUK#$g*HIyPdR_mFEA|+>;Rq6_gCO-m)YJn^`~C{1zZuH2tII- z62KB@oInPSpdwfVngIj|BVZ6{0g}oDMxwt7erW`chOxJP{E zXZ{2reUMpbw&*&)vjn=|D(_aHZUbmMXE_qs{f1x~Fxg5&(5C|2%U2=4ALB@npT3zR zwo~kcWqS%hQSZVHEYb_W`rHF5sPj4oDaB1osRnfWQS-kCSpI z8ZVnHOrK|W1h*a}u-Mr@M-lAYXv}gv}P^^00000NkvXXu0mjfU%mLb delta 678 zcmV;X0$Kg}1nvcp7-Iwj00013M{Ml?000McNliru`XB%R02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I(8L_t(|ob8h_j-4EVm1^_eZ!rrbBB{#?fX@t&AW3EF&i05;x(6W9X2*|~FaV!qIzj=7OZN7f8kfTg z{1l3adP!v0H4J+o7GmLY(IEgCEdpSfS3))!vXWA*o0Ezc0I|gwXjN+9Xd)nhgj!RX z!#EsoS3tIge??i4T5UA)>D~oqZPBO=OjOpFTRjA97FWIA^iaTWLJuaRwTNK@M7zGm z^&tSfv92dTU_Px=claxdIAxEW47&e{trr`hh(ZFt&ubOpMP=7(o&p zdr%AEc99*WaJcl#*zFdfTwn<-@FerC1&C7+a{nSjhp68Hqpv&vs5&Sf0xwp70CoT+&b_fzG5`Po M07*qoM6N<$f@g{u^8f$< diff --git a/graphics/pokemon/pikachu/kalos_cap/front.png b/graphics/pokemon/pikachu/kalos_cap/front.png index e03175dc41a6511498424a048777c723fe0abd00..b8d995d8794c64466511dafb165051512aea1a5a 100644 GIT binary patch delta 560 zcmV-00?+-{1^5Jz7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005!Nkl1LNKW4(A6!jL|G`fiqx37Gwj{`@Tm@Hj+R_*^qe_WLm-~a3O!M zK7?)KIshWw;6+fU-gp%bFmc#<6=XPMK4~y+EXPYG7ua(^<s3Dm3V(n+%|EL97q-P{O^KDgd34O*}#9Bpky=^>_xzd ztRi3oi6D(dmZfs#6 zlyn2p_-O*7GoLJN)C-QQLq^KmYtXfRAJ#rvKHLU36Of)RcLxAI;rS}VRx&A`wFN5A y$B6opp}C1lNao}JtbFiub5tDuiT}no=J5mBV<$lHJ}ub*0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H_*L_t(|ob8mqZ__{&#}8RZ(M>e`1)NHe z%3{e2vb~Y2I|18ASrRdN0B;sq!1fjiiF=;#gnfTh-`xdJ&#zfo`jwT$ z`F`|%-Lo0H(|^zr>cJsjpdQ5s{KeS|A>Q2P-xDvDI`hD6e@z1Ci}RHbGG^;d`Ed%& zAFsr*5+^cVmt|QH!10w3N*+C|eTGrhUiGT|b0H5?FX!#Z# z&=9}|0r+|fAR*=e)=zHKuqhf30L1tULVs2k5rDQ9RPOVpk3by3UOk`sY*w&n^nTZ~ zX5zCbW|8p(&YD9N0+un3F!nGSO#s~B{02AT2q+-`e*>5}11d*u-PT?yHcV_~=7F&r zGtg9#DFTB{GA2Mi!T3PreTy+*mu|@}+btrv7O;zIA_T56ZvB8oU<3-t{0^9L1YJ)i zZGp}MT{k@`54bHE0VB{&aQG`~&e+92U`GNhK_^Mw&XGQEYTH~|12rX7+v>#ELLHQ? oA*uX#Al}~oF5Q!d{X5aR1|jcE3o^UYm;e9(07*qoM6N<$g1@*J*8l(j diff --git a/graphics/pokemon/pikachu/kalos_cap/icon.png b/graphics/pokemon/pikachu/kalos_cap/icon.png index 1d224061e13183d42b86ad989168ba6f0d0e692b..0e93d93b74cb348ffe9967003679bd8519f65f4d 100644 GIT binary patch delta 314 zcmeyx+`>FTf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HJ?3Q978-h-%dHm)ndTo z!kzob(c|C${Boh)NwXs&ZXDLLP%oTkxb%Zp<)_S$(pclqOc&1{nmzB&o$I^eIhL9U zMSZ{9!M7k^IkEnRHp8`Ydj_qX&l7pmFN*z&T0OO6f`Vs$Vtt5Z_MiT{q8534(reLs0`6})u)OtB2B za~@-g>4S!pyVI36y_^5XY2TavNQKSzO%7`HE{#3^I+$ku5oDS4Gx=S5y^nU^KaZ~k zAKkSC*3|xT4r+|~yHP-m<9A1^!xHHf#R+zgo`wCt&adAvRp?Ip^1t!G0ATQR^>bP0 Hl+XkK{BM>5 delta 432 zcmV;h0Z;yf1NsAy7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00ACJL_t(|oZXVKZi6rsMg0fwV=ScuQajYF z$-?ajQ_YqPmGDrh`KSyT@;kVriv*Mn7g}tC_exd0SnufC@_Rmv{pn?!sFtSza1e(qR0-l~xgd<%&gS`(hvH}{YR}FT1=< zi0`CQ+87sTLMLI424n4Xpq85&nGM2_!D9~_grN+Do_;b2(*qKbFh@kf=sXriV(DV9B{7g{LV162R=I5eeZAJPdNSL?F09K4e184+s&D=yQ-fQ3SwTf}!2k z#sfL;(VLUNb|?VE-b*z!gbke6addx#II5UyXf<>KBA_EAKxA+Y6(I;f>=hh10SH45 zst`iHQg9&wQxhkG7*?VNyt@kn6d)3uD;;UArviDuzIq?4g(rd3Q!mFV`5)a2YB6k@ z8d{qH9}TERun>j-Zp8^eBOpZwGF$=<0Sb}L?I28maenUwd?YgDd}HSMTjPIy1Zc+1 z#afn?{E9*0d^WknW|({#kvK3w0EOV88-J^F0aV(v1)wb0`#WC)ihk_Egx9>ky;RWD z-vCaFCx08sLKu|a0BCxYh0s{omB4*I%WnuLq>(^y*-4R*=Aidb2y^w7k5Iayr`+rw z1(0o~iYmx`{uWwIO>%-P f^08e2{IU23J_sIn7C%8000000NkvXXu0mjf)NmXB delta 766 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L=AL_t(|oYj-dZqq;%hR2E2HDfo3O{L_- zpil`Z#&Qr#5?7UAgA=CdGOH*RJE|yaE{Z1ViY}^JeF3DF2cQqY17yK2@4}gzZ-ej> z@vrQe&;R+)84n@(^MgP-EdjjRgXue;NRmZ~q230Mov`43Gnl zr{~swBaWeO0LE;<0sr`16A@!8y9O3sX`;p0A40gmkdTi}1d25p(AJfw%Grs^A^dnK z2+H(_>v^jLG<Nf6Zl&qoR{_J|W@oVxr&y?+pd8USt3T3>hCURn3RoXk%*N;UaOgQWlRs zed%f7DhB}K(NbDC3l7HNvIv0Brov*6XAV4_nUGT0AzCcfbJRitH|>%I0%$Q8(`2Uu zf!zNzeac0le$zaj4*130FH$9vCd)Lq_?`j8Y3Wrje+St60+102rPM%g?w$~v5P>!F z?*0KO5-P{RZYL1=@`{wC8bDyT1?YHcEG3DxU?+tp9!u~?FEUL`F>xUyXc&g8aRCq& z0x?nzbnzE2-5vxc2Wn612yYjwIH&|$1<1_p0)QElX9Yr*tPVnF-0BiZxlv)EGD@J! zg3=_Ve+8a|YeGU;*~crLh*40g_B+*m;!P5DV1Yzvb)R@)fF&Z0*airMZU`N9*nw?8 zoG=X7bMrqWHsDeO#xfwK;mer~biJ@O);->47q1A=960=OZCOx=JZ7fke@m@49GtE( wfY;o1a9o&V2Dkj9-3EnRhwHfw{4@Oq>U;u{5G^)R1ONa407*qoM6N<$f{ngGEC2ui diff --git a/graphics/pokemon/pikachu/libre/front.png b/graphics/pokemon/pikachu/libre/front.png index b83d135ace0c82412a3cc1568548a148a0003d1a..234ad40f955eabe6f1daa2cc6d1d7da6b38188a3 100644 GIT binary patch delta 585 zcmV-P0=E6{1(5}i7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00062NklsoSUO-Gg0C2|`eU(v6>4{)&l@E}f0LV>L*?dpPElSm~ zB?>8F=T9yG!Fj_A^A-cX-T_=j1qZW`Bc&*U@)J>N?UwKUH4tx0$P!re*O$^Tm&>ve z5C~oY?=q2_G+fF_R}cQBH=6zuU4VZ@N@DI^8PXvGSRj2BbkQvLMH9ILSVbTorg{Ky zrG6@*B^voQgfjSjs&h*_wU%%_&!eYUzYwJdF>L@K9Gi*)@9owi*E6m?NeBwBgNNB; z*=;v~l+c&O;x}e-ERBDQpa6t+ z^^X$RzXllV0buJmTD7yS5}S=^7NBm%+uN0?k`0VMEd>V{yaMMf06m$oV{Gt}6qag5 zPw^7$jzUyT^S|C;=x`J60ZnF*q|F;t&Fsu^9wQEdtadHNW!E``b`{hq_nmS4>PguA ze!wJDB}n~)9|W2!K$QRD$38XECkvV|`+m}|PgC@8;?#2=Di4pxC!TIzA}{$r`si5S X_q7!mcqgQ$00000NkvXXu0mjf27nfH delta 679 zcmV;Y0$BZ#1@8rr7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I+9L_t(|ob8mqYuiu|$DbnbtRGgLF;V;n z)F{HxE#`F*WH8DR=#a$+K~21108oGCSagLrztmL%-uxl)RNzQyjOHlF6{su->GrrfCl z`SeU(M=B}(_oeJqfVa_kaT(Q%3;kgptphJ7MKQ5EQ3 zs|_Il0)Q8bPnHRQI0#zRIzSmWu@!{{hj!zc>=H2PL7h8Jk(s%Un4`T+X(_uaQfqeoDf8YQIoAUM>B2AbF+!_w1hx0Z8 zzRPYxcuOF4c0Gu>Q|n@CyHr3MTEOYX5V4&eV`BhAx7r3BwQ(axY;M~IEHw1zMXQCui1dd z#js*$>c9W_+0&LS?5Tdu$T?qWZ=gcir)4i!+KUv#&aH5cH=Sm|zK(N6(tWvGQa72k zA_|qH4t!&sp?ba{?njcKN8ZU$&huRpy538#Xyb6$nej>Wf4#B6Miw6zk+Uiye-Auw znK`5SM3vW}t(j_fCRZ0bP0l+XkKFffu= delta 413 zcmV;O0b>6A0_Ove7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009e0L_t(|oZXVKPQx$|hW!SoNG;vy#>f&O zMigPSTcZr7TPqgWiXuhIMqjq=cs9gg%;C1+JF_#u4IX}dC;7KOrT*AZJkA65c%b_k zFyhOw;E@qORfHmd!GW_JMd8z9NMXK$h(P!wkitOWV6Y+}tNInOFhK`0YavXR-`0kNFx|45XO4w|QG4$v z#KJ(8mHUYnFT(U@{8VEiOciuUgqa0j5@C*hT*=@4Z9hH%c;cRE)N#;-00000NkvXX Hu0mjfN8GLQ diff --git a/graphics/pokemon/pikachu/original_cap/back.png b/graphics/pokemon/pikachu/original_cap/back.png index c60155b42dade6524f37b64930b8d43e6c5360c0..4f5d09e274c853c6f0bcf70281342ff953f1638e 100644 GIT binary patch delta 564 zcmV-40?YmQ1^fh%7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005&Nkl21r+Zl~qTFUI6Je)X$wD(`an z58M5j%YS0D_H1kjNCX|=J;02N08t=n0)&tW0`I^f8xncJ0Pxj10w@%M0p1e+ z4^}|z7XpEN3vSpiV6`feC7cOaM*-p_UL1 zr1njZfIpo9NCAT=f?B=MRxk>EfY^T@bHra@Tps8FgdqDHaP`aVZ=3d0tN#Y>2u}nX zIB5_-6KI}522MXj&r9b^C1tmcG$md62NLhaXbrUQ= z9r2Z)`3r!?gUmv=Mfdq#B^dj)vTg+u8$k0p%aK6uR|M67#a1f9cq+iWd=v8fG0X(n z>AN{%KSd#I+hYI<<1SQSlRg1l);8|1p8-pF(7zU*0KmIs0@eu-K)jG8m}h7J2uxu2 zI4O6c^0LXo@_AMxnDrom_NE}~Y9C-J5Ixw2Z>xU=bWbwF+A<0N0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JCIL_t(|ob8i8Zk<37##bpQEDm8IC5l`| zIYEvP2gyZ>rxYs`!5t!!_k?naSGm~02`oia6iGW!pf#c}J#)9fzu zk^6dizvXe}i*!j&sRnZEaRLyFjgA(% z1`gH&0!XMmf0aJ0!ohTLFH6IuBuJ?a8c9C7z^ElEb%24&*k9@a5&9`MsUQ;7D9T+bemi0LD>{tU@nqcy^fCB(k`BH7veeJv=Sj-lHn#!@@M;0NO`ZhY zm3Rb5La7Uk^#;fwb!v>~M}Wo!ri}znGF?i5IBra?FLJ98v@4+Z^Ugo22F16)v&BCd WkfWdPaL$wf0000K2HpW|i` z!l(Fs*0{$2pWsYBs$sco(Agi)V%P*JC8t37xx{@@1JmoeCQmk+z>^gv2N5VO;Szsn z0?)g_Ap}6A3%m+=a!!3&V&wTTbNG1`%nC>4vjyYMa@+(LI7s@H&l`?7G6>$Gdwk** z4GckW;|PHGiCyxtBj8~AS%l#GUg zwFo$oC;~Q+2z31BT)hfbz@0z>raBzp!gJ4o85+-3*v98Qm9%Gp4v||5qn1qC^NHn+xx2Chc?FPP1i6*Qy#m~LdDef!;kp;C zg_}UOfxu3NYXy^D;02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IR`L_t(|ob8gmZqz^!#}^70r)>`I0Z=6F z34(ZlTa-}HM6yHy(pD~z?TRK3kZ221frNMgiaXIE7r1f56=1tOA+h5QH`x0O%rMH73fvWskKUn$lIyZ8iz%=Wr>{{ySk~VWAWB_`w=1P$l^R1DAaJbW z`02SZ=4U||u*LCNd~&eN5$LVXtFVi+*r|J+wL<{hj+ZFzGNYZ&O$gjyW(a(IVS4x4 z8WZGLZl55Ke|+))Hxqz=&4dGasaC*mulD)jRycEK0&C@$|3^LR)Wg?Ue*zi z5$vPqQ=QEU7L8u-de%&I7D*NvPvERMR3Ts);|OC9f1}X^zzxoCa3hX@0`lL0kr_}q za;vuXO0i)%1u_qe-I#%G1cIlSvvfUzrYXQ5cCM diff --git a/graphics/pokemon/pikachu/original_cap/icon.png b/graphics/pokemon/pikachu/original_cap/icon.png index 68179437b49d024652ff17d2fcaac6b91a61ec6e..6a356991e95aeeb213f16f84791837cbc90729b8 100644 GIT binary patch delta 311 zcmeyw+{ipZf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;H6J`(978-h-%h#6by$JN zHFegHlz0FCzfF4OWxCSf#$mS8!7pun^R?$p`SB|AHNJB9EADnDFAqABoID=B(Y8 zqR}WKShYUgi}%p_7lMY;f=`cfNi3LtaN>>Y!Z)ooRMxah1gY3v+2`bTwxZAfqU!dB zb9o0DPulr=rp*8UT>9DJe-W&kejVma`PeRg;tjw4gro9)3KQ+8-T9fk(&D%BmBUBn z7dmYD_L85Iwdm_{H-#K+Gi9cUi4%Gqj&;or{u^s=!+7_Q(4nb3i#&k7XYh3Ob6Mw< G&;$UiQOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009p>RBL5ykvbiK$zJEzpLWokcUf6><5hk*9Qrr{6}PPbfQ zZ&kd@Y^o+N}fO-Sm zh-N!9GT9Ubi+@_=vVJ;l$?ZpvC=AKPpdbuAdV@TO!qB@1ok+sWm$TGe5{5KOsSR@o zOx~B4G50|SI+`^1s9X|;7|$bI5{4=?#{XmzW&|`cVOnIum^v56U?a?L`|%B&S)iRw SR#X@O0000;-)D;HD5ek978-h-%h#6by$JN z_2`T*C!hTPUuL)~$XAQ!+Xlz?!8dKY1s^W?^5k;IiGAlLn0GKZ*!4O4)xFF<%TOZJ z%}L84m*M2@`3w*5oL9KC+oRA{aI>sq&zg_5{qhtMP?r~2%8iW7<02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AFKL_t(|oZXVKPQx$|hW!Tj5FMBhQcuc; z7;x5h$D)KV7a_^_#l|A>JNe zhc(daiOZvJ+WiPF%!vn-$uV-}bMn%NR*rz)-!_SIPRemhe^-5QQst%&0p-i+!i0cu zsxm3|R!(>6b@qUQri8F5dZ4irAmHg4MciWR0qmxLASa=LdiFrOgU&u@@3pD%r_Ki; zfqVg6i()x6(yJ*7BmQZTTlHVtCAsj;pvNQ(`Op6`C$K6 bzwO62AIG2-S4|+E00000NkvXXu0mjf+)1%# diff --git a/graphics/pokemon/pikachu/ph_d/back.png b/graphics/pokemon/pikachu/ph_d/back.png index 568fbf91e726c61d36c3adf2dff04ab498a85e29..83ee2a559694773123d5b924f808cf058a935e90 100644 GIT binary patch delta 676 zcmV;V0$csn2I~co7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00077Nklu%&A428!Ayd-4${*PPR+yVqLyOH)sRZCT+DCgrGbIZJ5zxCe= z@tGcsc}4(yNC13DV8Ani03Hz%fSv)+Tl{TmB97$Y)(AHmwfxpOJ6RRYG6EGrACbD5C*G6G^@ zwLtE2eA5!hW<>F@Bw&h4nLyctg#-X}jw0aCNGQ$rwGj~k&Y@;-Qqhe0h) za7}5n(E?zOV947uq0@^QCQ!H3A+CSDl%W#DeGgz0LfA}a01Lua0ys#bQWOEcCDeI} z84>~5u;{50&~h`G;LQXe3>iQPtmd$!nWLPvsi5omDnqO|`y@~6a$=IA5`Zl;|pgkp4dV0pz6U1o@oeP<8tPMDjZ zPM;XtwhN%SIa&uW*OxRzyy>ok02`or09d7$;!g?UngX`Fogghxf|&uf z_2(uJy&xDN+yXe~6d(_m0Hb4QA9&+(T@aQ4l#m-AJQ>h2%+*(D15gQHa8UFO1NpOQ znIP+}Z2%d;_y6KR&3XlN`h?({Z)G6sc`=WAC7`8$|IP4Y>l@O1Dc2CwWVEsX0000< KMNUMnLSTX+MK@Fc delta 782 zcmV+p1M&Rp1=R+S7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MbQL_t(|oYj;;kJ3OC$EV%Ivr}jj4;pwN z2Tr)NAqywLXG5|VOVT|9cB_5>KY&U|&vGg^c9V_t6PSP=Jb2o(AHYxIOzV`H*4V55 z6B07-*WY{dNFn4ujoGLGYNr)|#VQn5t3qKxg~Eag1qb>Se*i3>{tYkyCbRM}z!7Lq zR;9Yh7^IIGRud4*fB~)Z)r?R+A!{Q>E5CAkep!P7Kk@n!n z(HsDpw5<=(VyA+j$ccB9QUKm#_2MXKajQ@Sf)I+d$CY|P))$I72arDxmLK5cRjx3^ z;O|M+WaKxgf93m^h|k|jfQrepYf-fQG+ux!2^b&@uif-J&FcP?qAOQV`RW)uUkZgi zm4IKzH$Ax^L7YWGVcUL&TykKw&H(_{Uvh;pwf)Xx0kka-Kd1n-aN-ifUv$vrLnFqA+6f17EPsn(0Wf#*dMfTk3|BSO9}KC)%TuAYgqf1!9hNNdBGt0`oRx*Od4Wwg3PC M07*qoM6N<$f>s$;0ssI2 diff --git a/graphics/pokemon/pikachu/ph_d/front.png b/graphics/pokemon/pikachu/ph_d/front.png index 0022376076b9fa7578ebf360ccc3fed39d19a4b3..75034ed9ded325a4cca2dedaaca6c605af0e1678 100644 GIT binary patch delta 687 zcmV;g0#Nym>Y424aAAc(&IUKxPcJ`l{U0XYx56BIM;jzd5$>>`> ze@SQnf_(}Afylu=LO{xQ96W$%zvHzR;5=2m64(f~8rSDta^8EQU{-%U zX=?LH7XW$*A;yUR0Evjdqc=c^4Sr@zo2(u&%Cp^NbLp%gHr;N{KPQx}xo_1HcJF8->rj2TU^76`Xk? z1jYgq!v{)w0YVt2GOY=5w1jDb2e^O9MkOSk=TY+#2moXS9OMLs#3-yA7eN9cV)HyN z9@QP=R7#<90ESE<$jppn);~mGf%!?zlHw9T7`S-T*GC2Dxec9|p9jTquee!{=eYN3qPiuNR`*srCx%{oWt1kTa`;FVpA@Un5{bP?^+Yb;Y V83TCM>DK@N002ovPDHLkV1jBVOAP=3 delta 775 zcmV+i1Ni**1OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00MGJL_t(|ob8moZ__{+#_gbHsf2t#>Mpl zR<$a;=dcLS>MF*#peYj8h$;X!OyoEYLJ}r~R0V)(Io(dzmf8&f1d+(*!wvx5ZAyh3 zNRs=UPxlVn6yH0UD$8%8NeWnuzHA@gwoI2kI-8D0M+jwr)uXBDnwAN`I4arH z+MR2NjO@wOOmt?hMkS|A586BbCQ-7ZC37YP)opWDf6%`>I5x`9{6^^30q)H=4B61{ zbJfBat*0BR#3L1paIUynKR(6>qCxrq(a^Jh_XLCuqw8T;1~>o*Qr+I?}F-EIH?002ovPDHLk FV1jy%P2m6l diff --git a/graphics/pokemon/pikachu/ph_d/icon.png b/graphics/pokemon/pikachu/ph_d/icon.png index b6bff421642c756eafe3bb33c0065ddc4b2a0ff7..50357beb5b1f2434835443e6a67a5b0c5b6dc80c 100644 GIT binary patch delta 331 zcmeywJe7HZ1SbbG0|SFkKRa$8sH*nYjVO3b5U?u?cLIk)%Q#S6aL^rYjnP?LfHYeYxKwWxc2 z9L&??B)4}O1UYQW?Vb5qCBb{%Vx>ECEwfKrKdWU=v16QJ{kVR@&clWVj2cRJ-Zeab z&=D-lAkwKi{BQ#`@m&_rT3bW`v=96&qU;<3-P$0 zc(3^UAa5f7%z3A;F7}?i{p0?9OJ3Q%dcTsxjdRHlXRal`oPRz%Du2shx&0D{E-+rl z`uW50R=F;FGslqn5>4|7%k6*22yOfIP;Y|rSBH8H`zNnouWbL~zW_E8q>}&u delta 424 zcmV;Z0ayN&1M&lq7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009|G*Fa)3ZGg+QP85gJ}m{H=juJvj&S z8UPJB;7gDYI4dqVQbNv3DJBsBsn7(Z{Z}PYm~2E$z!tF~f5Zg9)-(=d0*a~cdWRts zQ`7a9hL|hX9bbLOmFVs9rP}$B2*$Fj9!Tfkjpoo%t92@k_f(cz5OAtneJAz-JX4vs zaebPL@ALEikB7y%4qWyvgn@81C?Tvi0|;SY@ntgyAI z-dk_7FyLIZIs}jicv=G23SlPOzZr9j$&W>t_tMwd58%hXIvFkfsJn`O(~nQSl*3o~ SBMN8$0000!kE|NrgS1`;5*9z~j$89!91!d`5fi`&=hfBdyz zex}E1dPYEgNI-r_5Wq8n0v-_x0Gs#J@Ik*Iq2m4$!2 zVlr1h7MuaTvS8UR0|K49S zgzE`B=x03Gjs=hzl0!o{HsBUM0Vu<&RtckiCOA4$9if!_K)+_Nv(OP-L)ZbR0zP9M zhoPAO`wR-;^Rv6N_6R=6paOpOfM)NmgaLqf4cH?%=;jY$1wkG0IcwGfg7tsYke-}| zQt~^Ct`S)q7As3w4^0^&vyg!GJ^&jR0$O5PN^CUw6&zf?$x!AluSMzae@;xfwQugMtX*)O}OOe95k- z2yA~E;#RH(WVg*4R>YPhZRt)g26a9KB$-bdc}(-XGH&J%y7UGBPAQW2Ue`XUo6NYG zAEWeLUkIdq4AIjZlOdAuak?RR|5lX(Jiav)AtofErE^V~L~JT0ytQu8=og>Q0lg)o zl&rER+ek`hvoZ+5E>*!O!Rv1d?=joC*vPEaH|2V_aZbalyx5WIoF^f+$IIE$D7h)& z?QcpsHW^F9Vp5o*=IehByEc^(6PJwc^#5A?0g_rL(t*AR+W-In07*qoM6N<$f;wty A=>Px# delta 908 zcmV;719SYz2GR$R7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Q<&L_t(|oYj@FPuoBg#$8m&6-#;+QYF&L zu@xy53>grL$kf6~rCBS3I<+vk0|SrKh`<_w)CC@7oeO!J|9BLnV+2paJEJL3X|Hs|WNsu-UPsZWU~_?3@`c2;0OmgSw*vsi?Bz}< zk&za2#|WJc0xUpTO$<47m^te2ml^^vXKos0oZe{P00OTm@ftyTU@!4=V;X3JG?ME|RnuMf1ID(^ zXYM)4bzC)z?mpQjO_%G8B?RtcQZ>zAXRRqpf6m=q8$C*VuWr+lX%<_KQ#)y%yZiXX z+XPXYb{w-&atejdCLN8vFwqZSLI8L@xXeJbaq i9_ZG3o%ZMV&+0cwoKNLwmj+b;0000V%wGXnI_0Xz&L{P-O|_W}~}5ORJ`1L~AgUuKes2>NpT+tn6*05ZT^2F!nS zM-Kpppi#3hv&k!>Ump;X#iEp2$>mOvK7Gy^1g7Fq_c-L|)d(dA4ODl%{2{k$oMxa= zwrL3qso0Yvd2YLTN)Q#Hb>Ri)0`nhwx&j2-0V%XCJiY20fNRU(WEYSC(!{JxZ3*_` zUB5NNuPKBw0`THv_vu$LhXH_@@jd{a5y+Qa-2lYXWB?Gz06wlOgU`E~zX2>{*oHs)^0##~!mdXZj`6j8 z1013GNTKUYic+9vEB2x8E!-^!UQP=)$V4WyiMQV1di~wb0ND2+|#2I$a}z7ZEXNgxur+tG`wwD vP?*{s0%i{1zgr{U0Q?pCNdJjXT*nu%?i<9uNv3ZA0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lu4L_t(|ob8l9Xxl&(#t&oASe^(GjVZ($ z+`)woE_ki!6)W!Snv5N)U^+ySqnsT>vKXXz2$Yc8qEm1}gbM|mVi#U1v~!kp_twEv zC>`9)Z1goC}i!<%9Y#c#N$s0vctn zIl#6t1k&7Le?Ej}r0V?yDkk;=gC6h2T!{Fw@h}~Pz{}n`H|XmN?TjB=i2Wqur^_pY z#BdM+TGp4II#Lt&MjS|E#DN&GE09OuAOyIRoLXEE4#0!203$GB0Ej*H{z9{pGXTKg zcW~3tzl*Q897wPpo+Ekygtg}IAwY>PsC1g+-wdqye-0l_pcCo)BT6$n?_Gz)U_GjH zprbwM?q81`9#|Ft`wf>>-RkwY!Q+U4Dzc|}hDYOuVS;FkI%*r*GyL4lS$x8Rkmf+M zwcS@A-+>9TD5O4k48?S?0SJjAiU%Ns!UrWHqmnsd*kNmIMaG zE_=nz7UQRrk|ofIR6F6D+iNkqXeuIrNDRO(TA+yA#2b;LlrgeHAurTPp?el)i=VEE q9VGU6cHQeP`Q=KYN#54d`VEig?>n+Y+Nl5l3IG5}MNUMnLSTZH$62@l diff --git a/graphics/pokemon/pikachu/pop_star/icon.png b/graphics/pokemon/pikachu/pop_star/icon.png index 04a399165b4aed8944166b15305d5a7f802f1ef4..c22ef85a4c1ccb8cbf74e7af0e73a0770c8c4fa8 100644 GIT binary patch delta 337 zcmV-X0j~ax1e*hp7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003BNklH{i09Lk zdwf6nlK^I5C1A+F)jqQO*u$N9tw1#}X0!ruX9H_cl){`q9*^+C0eS=Gg*j^;f&G7& z043|ZO-7)_B}eRY>n9{dM1MQH9n=ZkqP$)l#AKcw9l&7*vF8-1+@!hLQR^v)Xj`b9 z!MQC{9ZqmlTq$Ffli=BC%eJgWXhfW65X(j9>H3T~%QnBMPyK@$E>hmayMFirkg^oYwYGDP00000NkvXXu0mjf&&Hx3 delta 450 zcmV;z0X_bk1B?Wa7-Iwj0001qplF={000McNliruG#xh%%M1Vj02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A&bL_t(|oaK_SPQx%1MLlPz2S)yY0ffTj zB?HdFK$g4?8JYRvxR>mc;U zWb82tH>X3j(>*9h!$#PK4~0&Rk;O+K`EG5LHMTV&vV?}Je`G9F{8$hT9i`_-7Y$@@ zaZYJshXTZqbkt7OkVcSWm(VfvkhPs(Sw8W|Rk|9MFBhb7n-m-Nc`L75XOMT;i^wIe zxKJXr0fY{OOZMm)`0M6ym-`=vTU@kgE`$D!@Xzkv!u`qcfZ=CjiUj0gjj#nqp+Xb{ z_swL~im^iIRF#>4S!5;Om5@7Nlm?!H@qiilfV6eM3^d$pFb)`;LS6y$fYAWYuWSy? sHoTNRFuYnxF$ZQZLI(^w@?YlT8?o1~wztV(e*gdg07*qoM6N<$f*G{A(EtDd diff --git a/graphics/pokemon/pikachu/rock_star/back.png b/graphics/pokemon/pikachu/rock_star/back.png index 982fd0ba3e70b4b66fec3316d062b580de33e36f..fd86f4d59ce7f92f0bb577c4d356fa1d678c4bee 100644 GIT binary patch delta 693 zcmV;m0!sbt2K)t(7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007ONklyE7;423N%L4&;i>rO9ptH4$!CiCZQCse;R<&YzC zfCKWnwrvUuI1w<$BWFa-XLCYca|a*`^dHbY$g{T^5x)YU0%$u5;Rx0Hx&7&y0N{l4 zOmT#(oxm0v0}wm~LiTwEV{Ae$V5@((xmRK zZ~~ARP$}#?DTb7_g)abMXw^{EuoIe;2N~s@2kMs8g;2AE9ZKQ*%f5pQg@jT-&Zv7i zLI;Rgs1!YR8IM6pw6=BZi;ZOv3?TMUWZo=K2pAD8B%2+U76H=)bI}5N1k`^jj9v8l z9s!)}uk>v#c#?N6=w83*>*E99wz>rd&+YgL6;t?fe~TOLLBSEgoA2ftPdd*`ufT7MLyBS be=dFiZdxdxND4Uu00000NkvXXu0mjfYF|1l delta 805 zcmV+=1KRxj1?&cp7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00NLnL_t(|oYj>*Yui8=$4~Z0k-$ z#|oia6rmxMLTsN2p*2)hZ}7KBOF@)u?NZ3p2oL%eeWAFZW(Z`ohk&6&qVLk@B%LHn zZZ($vjnA^4pa0Lx=`bPxsT#c+pgpPqR90i58Z{Ow)L5uce`A5bxCVgvi@yO1!0fPk z8z2YvXMQE#U9ej1~j0T zW}cz*&LvT7QA7?HY$OQE;~zG@TNdW|w z9BPvw+uT^_Y2HM)`jS4ZhRc<*!$}f32ptthL(@vQOC>e;P@xqvxx; z_DPv=qN23rjhv;@NeR6Opa&@v4tf`~M=FF)3-R0_uY>lb$8^I0)r<)hga-yA8cjC= z(h{Qr=!1TzBhsb%9u%MbCRX8gLk|(mL!++eeG6U|0Fl8AQHTumE)B!??>0`49UH`Y zGjPPmf6vFfg2%QC%Z;r$nyr~;_e zGF>VVd|fZjs{pjD&Jj?0>YaLT+ruq@X>~x#HyBmgq+qw)4A}CIpum71a`?a;dXn+JN_u> zDxWSI{)6C}0sM6Vzj%(vvw|$Y1fX-ybCppRSq;ns&pqY@zz4_+-&B?53?Bl3$j*PV zu$pNp>F!YXpQ1blW{xv0_4_PbEPXaEzf`d`uOeo(S5?y!*xU36ezXVQPwlITd@S}i( zHPLBi8NAgl;B`G63QREYT&p{zBE)|y?(;GwsN%Z`AmeYXx#s3OJSu|ufX^8%!eHhC z$t|~*TJq~M9K4g?+hH1{3q#Z&zIIPE z_`^Lp3{Qf{&r^8k{TCxixO5u%3H#vpQTakZ-u~Wez-A=e09VgEXFv@U3<-aKCaq8q zmITF7HziO4M4CQ>$3k|#>KMccg9hb-l+^sXs+TY~2QIL{U;uA^NfsrD>@C1=ypi+j z%O8gux?n>vd8(VI#94|d!2VI(cpVs*-5sz6IY8Jk(Pf+^76NpB-T(&Epy&X`-Yddw z@(Lye3GX1Pt>P#UFCCHmlYv+#UrlHo8~PEc$LyQU1ugxg&wR8{ORwU@M-N>U-1?xU z$MBuyRr}Bn8ErR{{MdX?5A<9Qo)gkI4=%*HF1+I%{}Nx6U>5({r9(sj0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KuzL_t(|ob8lBYZ^fqhG)BiS7$|35}`X0 za%qcp)x=9dJ6?(xStlSKL({Vf?HW9V&^q8rjL`W3{Q*lO3e%J9aXlpG-AnUFI%|j} zyVFYPH7_j8?)&i0_sx7P08jcyDcb-o@!x>Hr3ADU*xRh1e<2x=Hy@TLk0ohJgA@Qz z#e*=$H3>irVO9#(Sz7>-jucWUsK(I&J!jGYV129@N5?1qA!AoH*^%^zmCDKS`{6lb z-oM8)nNKUg8r@N zHcXg%siza5Y(@Z(({5qv&Ay%6;R%IEfSwIc?|u%b&3R808QsHLj85-Re=(YKThfG> z$^K&aYM+j1hR;)G)Q{60YN0)g+Ef6NsgBc&AuA?3{R|!1$zl{xGBj%vl5J5sf{G!D zfSHT*ZJE_eQwsH@4A5%u$BcJv2oXxcs1LNf6HF1VBZOo=&|c&N9|e;Bt#;8y@_&)C z4FIAzJ*e;xJAn8ALg7FmdBA|r*G`;-)D;H9tLF978-h-%fGlYcb$( zJzB`j`RDijvW)C4x+P_s4JJ;V{NKwu>HfC8U)z};U7jGlPW^NTw*#Zvq539CUAEc2 zwhJs8cUdu?xIQ)JNHKfG9i}BZN(BKn>Cb*n2srO)Ykum}rTSe@eXMnh9{L~s*3)oB zIpXwmU6-v4_Y|My#4y?)wEKV5&Eck?vc7L8Z@X+ATku)+r;DvlaqG!m+VjTg$?K_~ z*mxah1l@U2zVFwKdsQ)|%|7W>zmq?PmNa!TN&Xf5Yw%N+N{nMF$tDU;3%Ie?I@W!{QSvM5n|YDBA}N O1_n=8KbLh*2~7aPo0|au delta 425 zcmV;a0apHs1M>rr7-Iwj0001qplF={000McNliruF97{MY)=3H02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009?CL_t(|oaK^1YQr!PMRkM0+Bx7B`vAQ{ zZ{WL?u9S`O(gU&2;$;JN31pLiC3h))uX+SjLKcsapD%38P7ASJ3P()Ze>xV0e*?>I_mO%7o3MJv zGK;-q+T)BojmZcejy#L~h`!*VP2aqMff0C$k_(BF=Q#9=ggr|cCBfi=MML*O1!iZd z*i+Hpd3e~rDOj_U!1E%|FIj~E%m{9+5P*SiC%~+N(At7cwe`S2vPauC1Q@gMaS{QT z$pKXHI1q*SJ2^Q%yaOt1u4NW!GJ;*15yl)aJ?BGME|~mUM?D2*<%4ebxB0jM@7=eE TX8E|eVAP4w-Vx&S~x@4($LRvzIu@czYN9BJM zA%sk%75KRffj|f$WP&dA9&tuAKop3&fFTru(BF6i8wx=M@YMzaDO7?1-V*)~cR=bF z0@V!MhdIyz$U_@LR06s4W<&yd1hFjHoJ4NEw*g|CTId23)D4*cZwZ7}Lb!nXHzR^_ zA4fn65JVBS8il?BEsOzDf69@50cn4EXa^92?C(GvmpR@x{imz`2Y4d95!QesC7>nH zJb?l@uOe6km;o~2XTTu90&*%7m?axL6@)DnS#_;CQ39$C(Keez1$RGLq*bAu(pkaa)Xd{1)<(a<$ zNFQVthAn!|?=FGvw`z4Okk|m4&sm9tcE2H*25z>}5cH|Q<>k9j-j87>Xq|qTBaBlN z!m&LCprCi50f+P%;970t`T7M|2`~Eh!W#g2mzKcl1PCBqXeBJqkOByo!0B;P??mHe xQ-tmFtVLMXiv-r2Zm4sBtw0;}VjF&~{s1|5JN;t$euw}7002ovPDHLkV1i*H1P}lK delta 670 zcmV;P0%8641m*>h7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ih0L_t(|ob8i8kDM?N#eI<|=+=s^fGW32 zr1V#&J5gM^O(aXer%BMQM9CHu<|?E^3PY80@t4c^FSfa)y(ZIOct75}v4N2P^@i0P zkH^pd(w~Z=cs&02oBmGfSWQe&s;?glQ%$Jf+~3nq8aSZ%e-Ho(egEZ(L{dDqZL8Wm z#4Q$qL?U%rJK!4yB*?L~_2hb_2i*gZ=*shVM_7Q*G96)n#I^i%$E?fA0M9}Z$smdH zE`uoqQXy6@7d-+{vU&%siy>r_scab2y4|UC1rS?|iM5Re&Nc!9NT@ZFIjqCkOz|vR z!>TMurfxJ+e?IuYqAhZD12dDQHzF0VS=8AUbo5<|P1pVAeAr zupG=3l?CPq_-em|+F7J70s=2TNlc7e1O$FLU?VaI%!3a&V$_$3!UXU_$)3m!kRt#G z;uAVv#s>vZj&>v{JwV1eS3s?{B`CQa7cOg<=xq&Se@Cd#r1;K^5hT&mTeT2=7un&W za!5dCUWDjEV76z?nYs#y94-)-KPYA#RYFhinlL- z1MAKLFn6-rT7WpjKoTD0-XR$RV2pL|A5|O0_rROgAA@=Tk#Pz^G5`Po07*qoM6N<$ Ef>bdZegFUf diff --git a/graphics/pokemon/pikachu/sinnoh_cap/front.png b/graphics/pokemon/pikachu/sinnoh_cap/front.png index dc2712fdfa83bcb55b49357f8538635ec0cb4cac..91d91acc28c36e79858d2d9dfcd2ddafb94e328e 100644 GIT binary patch delta 566 zcmV-60?GZ;1^xt(7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005)Nkll(+U1Bdg7m(V zj`D>onh>N3MNI(2PwbMHj+_I$>`tZdH#pgU)K3UJHh5FbJd6ORsWf5kXk8&z8uUrWKr#0w8?=QX7rA0^EP~@~nr$ zbT6uf8$jAXpeMsr!ICd>91@U=fy^IC{StuWUG;JV(3XF00VV{6P^p5qHxu%<%^`_&r_0>|fOqtKm0=s1 z49{wTs^?=w{m9U4q7st%_&*{eZ~WXGk$=)Z@x(lS0Hb~+RoE-NQUCw|07*qoM6N<$ Ef`L8?q5uE@ delta 651 zcmV;60(AZU1k(kO7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H+&L_t(|ob8mqj?+L8#y3bVwlqE@M1_L= z0LRK#T@`H+s7&F)_5<7lAmJM6PBK^JbfmCdqDbtx1Q+(c0Z+y3ZUEhSaxKk`qA1Dt z(>H$|#-8FoL>Pw8Uq7Y`APHz}HtI4FHspU}xVS>Ih^39Ao55ovl(9%uXLh)-7}v zWGv8*z*%$fcWoJM32m0qDFWac=Qr6A2S5SUA3$d%e^5CpqxR-iV8g^!mJXPQxdcTO zSs*Z(By$er6O0c;HTLKMhhk55+3yj-vw%a;5*B#Ic=Zz&fesW;-)D;HSaxL978-h-%h#6b;y9n zmD^0#Y3I-X`%Qg!Z&ZzR_~3ZZuJgG>FxT=a|0};66!$TzoH}q|+sB8}_jZ4}o3JW} z&1Ux}O^)^9&DJ3qz2$X+6?zJLPR8!ATIa!fp}_XO8f(XmkM)J>49(ou1hHDp5n!O1V)c7CzfFe%|*5hQ5;N}_RVTFtZ2loM+e z)TIqnpX?D)c>e!0@AJcdH!yDeTfk`e_XFe3Z-?2Bd^yaj@~ZveI{CDt+4hHQ=KK<5 zbGc^stI5=WThq=q$u=Iej$uB~8Pt|8K}W80aBK+iLHy85}Sb4q9e E02j%W{Qv*} delta 424 zcmV;Z0ayNj1M&lq7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0090^R0;?gU%jH}7?Y#8bBe&_J~VVMM(j z8rj1Xm8gHZC>&}pd*b77&(lc4(5Lh~821r+Zl~qTFUI6Je)X$wDu3qk zAGUj!%YS0D_H1kj1 zd#7w8gpi210za1$flvq`B!Uj`9$-dBfG7|(0Ybr9b^C1tmcG$md62NLhaXbrUQ= z9r2Z)`3r!?gUmv=Mfdq#B^dj)vTg+u8$k0p%aK6uR|M67#a1f9cq+iWd=v8fG0X(n z>AN{%KSd#I+hYI<<1SQSlRg1l);8|1p8-pF(7zU*0KmIs0@eu-K)jG8m}h7J2uxu2 zI4O6c^0LXo@_AMxnDrom_NE}~Y9C-J5Ixw2Z>xU}OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00JCIL_t(|ob8i8Zk<37##bpQEDm8IC5l|; z2+0lNAh}5KlwySn`!YXA~;a`XMlU5h@h23a#cdN20|ewE;kJVkkD)cOrs%WkuJ$8)j)1NP5@%D(a|E; zz`7_~&D4lqy|`%B#fED{&3KD3a*UqW}* z<17)v0*KmNqj?DcADI0B2#iP5MQVY;13ud?A)6(_*#ZI&KZ#HDiv3I~QUIT-@YfjZFz*9JZA8w=Qu~!bAeB%$IR87qJ zZr!Mrn2Bb$o&!oS&~55wygYtweP!B|J_bKe(xJCsmijsTJW09R=2id!UM)bk$&-M) z5|02WLUn<$-T)b-PL1*W2++8|w2{C`rb`JB$BoJLMQ#;>b_Mi)-uXw>p!gPew)h7i WS)-r`;1SmV0000Alp`L(d3q!6-!>2+PBB^yqFCtsGbhFO0E znU*jKgerRwf^!ZK=>k910t624d45bBc3uS;_L)x_j2p}G5L{p<=~q5&IO514c!%!s ziB~i*IKh=80OBWh$;*zM3!KbOW#KbKnSaj@3|uytsb;?J1VcgOBhP2X-Pg({VHFDEvD{kAS-C#FJ%a?L@We2hfAiW7vD~)*txbc7TtcSyN zFKP=nfoubTo($6prhJj(E&;h1$o!GiF9As2m6s!cw*2!JU_wv{l~wTcW<#E~T+3Mb zoWX@H?1PeSAR0eSKy>7jrHy*Qc6G=|d3z1I*6+jGN7IMf;9>&O)8*~}z&ku&W!Oq4 z#k00R<@p#|34xtZ~WZcEC0lQ;~V4n0kG#Uh{)%iiU0rr07*qoM6N<$ Eg3|d4+W-In delta 665 zcmV;K0%raG1mOjc7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00IR`L_t(|ob8gmZqz^!#}^70r)@6B1E5IU z3oH?#phCPrBuf+^ZRG;lZYWMXK%y;3MS=1H6nCORa)BE+TmiPr6H<2E;Rbu3f!W>T zBkM_8nv71qJO6+CpN}2JZsR}1d_F(8f0HhRcz7bO*B`B3e+%*K>^l9<)78aeA&x9C zTT_5|vwDv?lw|8o`C$s&6YnloScQ`7vMh@!un@Keb-1iA5g>(j zpPw0HeinoQTO6OpCx^=%f!^x83cEOsox0aqI|RVpc!}aJGur9ggusJkhQOy+rgwi^ zV}cyZ?Gpr&f6pG^W&-eU`Ow)E!`>jw(R^)PiSbx@g8<+f-!#Vjh|i@r2y$@!a;#O| zeOCxLg8=xb&q1rV;DCkzHVD9%7XS(*2e5i_rG`z>cmP1+F9`KnSwsNZN>I7yRUH8t z!9IFE)!D3I(dhNAXU#-skz|qa1kRd66#|wqjxhEze;Q2y+~E8MH{u8=ApZ>*nE{m} zw`yxYDK;#pK<0t58#B;UktqU$O)@4xoVS3<`xZT5mu|@}+btrv7O;zI!UESAw|>AP z(18LnzXN6*LD!Q>TcGnm*G+HA18z%3KnJ=B4u680Gj{P8*pUEBP)Sm^bEM9j+BTQg zKurmwD{Xb+YoRX6){s>GJ8x;=AM$4XHt6^T<@k~Ye|bEW00000NkvXXu0mjf53w3a diff --git a/graphics/pokemon/pikachu/unova_cap/icon.png b/graphics/pokemon/pikachu/unova_cap/icon.png index 6d448092847230603facae126acd1b177055b160..1dbc18cfae63e36b50e6899f3ff7bb8de9c38a5e 100644 GIT binary patch delta 310 zcmey)+`v3Rf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HSaxL978-h-%h#6by$JN zwRKj9!pZ;t-zH62H_OD}#$mR-{!71`^m3>#RiEEB^Rd)M77lqKomT(4*V(z@O^WMT zwwrOztBvcld&rxypP^^#wT-QFS~tJ+c64Fo@JRYCxRT+K?n-Ok5`x7pqoPG5lrU(elo*E9H~^*8T-Mm(4E}ku2i& zSj5P@Xor8N#=H4{oc6uxk5$-h-{W9bAJMqx-v*|ee-c?9{Y-w{Yrjo2ynaX3jvt3b zJJ!_xYL01)`76l5QtG0hBruDOlf}sW&Yf5Pe?4S9lrQwfQla8B(DMwQu6{1-oD!M< Dc)OD} delta 429 zcmV;e0aE^e1NQ@v7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00A3GL_t(|oZXVKYQr!PhV=&bFoLWdDzC}n zzoR{r+GNRCZ^=V+GW2aS74jI?dNovz2^6bJV#&7lLg_8yK7I-5^a=5&%eGNp92SJ6 zEDzV!)62VDRj%naBl!L}%CZ%ds@5lNpi?8DZS4-RR;h7IfB#xYxy!imfyx!@oP9vp zYR?HaMuoc!I(7grWL)H^>V^CufiYK^Uq}HxPt5*KZC?!cbK_ z%avyKf!_JDKW7Y$*Ma(q8>Ds;h8T|>>?91O$hG^)Ntg~O5DBwGB#h2tVKf%P{I(xI Xbfcn1$3*z0 zB#r2`j}rj0BV=2^Fbn{jU-Vl@1TzLC4u23P0G9Z$m;*qqA0Gp#3K$1qI>iYvHb}rN zKt_?4^it33aYo<{zUoZ^_h!qwq4eX|8= zB=YHySABrbe`NrY3F;4~?jCY$AOn9&a<2q!zx`^xtZgkA725Nu?Z-l&eLyBe54P~f zfwnILigbCj5W<&AlXZ&FCWItnu`rAf85o{_Do7@x=7i8aS$m$&iB3ZvY}77pD2RDk zRsvW_AZm-RJMB?+`sR)fX@kmAx&(0H<=yS%d%#d@sz2ZR3)U<|+a=(P?;a)qdYwiC k6(AXK;~$wFJ9fN@Kgc-}Lv%`2GXMYp07*qoM6N<$f-1SkCjbBd delta 518 zcmV+h0{Q)e1kVJJ7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DDJL_t(|ob8iAZo)7SMUzO~*HOHv#3Hfc z6BrHB*o6Ms>DcGNb~sr&)6i%v;M3Oe5HTfm9c(y z6c7cp0MId@1^^l9zjV+=fee7J0Ftc%axH@_Vt}2ZE`npGf2G|+TNh;zKP>bDn+Z@qq(mWiDNN1t&m9H~AH84WbksOm&=JadPtQGrqi6ixy+CN07B#DikS zmN?~{aQo-5r+U4oBp9Ljph%reMabq;>uS0O{IN2GYH~Kl+)l>Os+_IbMtd{nLJZc; ze#oqk54PPHb2TIIy|^t3&3OR6@Y@ndZG-{9^Lk0181?V!2eQ|i=lne~X8-^I07*qo IM6N<$g2a;FEdT%j diff --git a/graphics/pokemon/pumpkaboo/large/back.png b/graphics/pokemon/pumpkaboo/large/back.png index 571144ecf9008fb639ec4c2c30bba23fe551e57e..e5deba0d7d62d0c148a8fbb691aa545ba9e58c87 100644 GIT binary patch delta 474 zcmV<00VV$H1fv9y7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004!NklNXv49F<^=l<;gsDu0Qkbyu0y)BCWjX+L62H3LtAH6`4w|cA)w*=GUg+7&W zt%s2wq9IBI>BD$)a`y;Yy@%>*U#Wlb@nCvrI*?~7fo#ABfSA8CKrP9h`u<7v)EPJd zz8p{NnjrntU!&(&M+7dl-r?dOOZ{o27;H#Y=&OwbX-vgvT;XZesUE&}N3>Z;woAZ~OSuK;ahwcPfYU&j|4i-JvExDf0S?C$6Rb2qv`+v02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00EClL_t(|ob8iAZi6roMFFY%7{Q`a7r`KR`cns86vzPT2Y}*_0QJa&Dq;X_A&TIde<|HW0)j!Mq+|wo7=Sv- zIA|UMIJBIWY=RyO0D2S9gmeO=lo22kI~nbe4imybrZ83r;2x+0777ov-H$-td0@A} z?Y&+hOeJM|M^yC;pmp0@12y^yVjyl_IY$(OuKbXNp4Mo_1|^-2TD)$v^%W?w92-C} z9Qwb+6-ZI*f6;;xBSfjM=M8*}jRW~j@~ diff --git a/graphics/pokemon/pumpkaboo/small/back.png b/graphics/pokemon/pumpkaboo/small/back.png index 23283b1b30431015edb77358ebcf3eac98cb5515..5d7c21e3465d5cc220350e31899fad7acf675774 100644 GIT binary patch delta 437 zcmV;m0ZRVQ1pWh%7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004PNklqD@6OyBmqC4H{SS_V1OUV z**V6vUgggFX#lgg;Mq+;v__b;pa#GX0Ac{ZLx6t*upENs0nq}@RDqBQ1{gO$Nuz%$ zWSRnaJpr)@5IMK{R1*IULgc&$#K&CJTRk82s7<&Vg6YxKXT~MrsQ0-ZTnPL*JzAotMh`R~ z=Va;xVEU#5$|Kd8=>y{WI05WlbOC>&m!D|cg4@Ehy#hMNlgRY>doJH@gyKQH_VTau z$GvN3C0InjymlPed^S)UrUDU!jgJP>Cbo5#%wk%W5EP;jbb0QjAekrzLLloZB9Tk1 zVOeY>sk*pga}ELfR+mh%<^f&a(8)JbqpF7M^#vO(L<2P-+SjQYfL(^!Km{S#41|e) f#2atC@h|ZQU{(>BE4zRu00000NkvXXu0mjf9+b?v delta 518 zcmV+h0{Q*^1J4AI7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DDJL_t(|ob8mcZi6roh5;#ijqp$@16XG3 zR402N=e;=i#ky7EWzwyZ^9Jd=)Q6pvkk}ckN;%11?&H7zj)Nq5#Gi$#@8oyuGM3MF z0-}Hh038Fk1ZX4qMc?*OAOptl06Y#XdZ?m6!rLa?MOxY#e-Skla_<%mtJaXb?h;byi*oP~QXd(Ds#20orxGg8~6( zr@Rng6QJdDe}JmG@Bqb&j1#YZ1t{xK6%WI!L5W76-#gW`JJ-)~V0P>+Rp%Nh(P%+B zWr9dm<+_`gq~pWyR#`p|pM;QQrPXw^2m+lUT9d(;T-9{JTrz6W8-Mgezx1z zgIpSOFel(JTiw+D6<$2>WviI)`ED21f(ORy82&mQ81aAO2gQVyBjODpN&o-=07*qo IM6N<$f+v;VkN^Mx diff --git a/graphics/pokemon/pumpkaboo/super/back.png b/graphics/pokemon/pumpkaboo/super/back.png index f14291657eff9d422c2ea65b69849c1e3f02b425..85cc83e2c0cf730ee55dc22bc5779cb7dfafe145 100644 GIT binary patch delta 489 zcmV7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004@NklFHjk1~X_yw=mg9rBzLRg_Q zhiwBd@HYixk`Loc5|aWJKPY%E34{|<7Nmd@dqKbqfY$^7EC@(&gav_=1JObk%mRN+ z7$9T|Yy!gu=m-hn2c}^IT6tX{;hVtlDv(Vtatmp=1tzfNJqR?)*T7psnt_Q7YQ7X< zT%bx|A_oc$2FCzs1;*w8#7;rUi9N?TYzqBKdFlxuskx5ww5NcjKQ1@?TNV9qkBcd~*DArkdIC0vev!jnMhx zI-UN2(fSkn87_(!ZC3+`fBCs3ss$92?vJ;h6;d0RT-d9Z f;fwCUga3d(TN4$G@g6X100000NkvXXu0mjfMjYkI delta 561 zcmV-10?z%i1o{M!7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Ev!L_t(|ob8jbZi6roh5@yEj9{qLp|SAR zsZRFdocBVx7wZ;@mr1uu&Ku-mdNzhYiruwCPYOc$KmY#kY?9=^*6R-9`h6!w6hJBW zPZ2$Pmph07NIGBysDMhvB0?7hG63-lpm-eUl!^irvM!=se+a0G;2csCGF=t=EdZ3ecRItV0n9IM|b@LwZ&nq?9y;kV6WjlY`y_0k;D{81NMuBp-pm z9I|o*4%MojcN4I~*A*RMDk=33BF7m(^U${)lsN8C4aCj&wMDE3z4jja#hIr9TW?^S z?Q9H4_?iI}fBq+5xSAO>qk*zuc{{KY%W+C|=eMDnE>2oDZ8Zn#p`$4SN8Z2!aDKYn zOa{XaR#U>hvEh}E2{;zxh`=35ZJ%3gMhE5q?G`KHR_C1(xVeUOe=?VXxns*2!*;q_ zxy#smkcDQ)Pe#?Bu+6V$?bbdRCXn^UT#iR$PBVSDLyr20fYSn?K{dt$-ew8>*B_{FGitW#VF-It00000NkvXXu0mjfXI$(d diff --git a/graphics/pokemon/pyroar/icon.png b/graphics/pokemon/pyroar/icon.png index cd0b94401f9d5bba8e353d66b28b6847b960a580..e00595a15955b41156c947af7d7382c083a3c8b8 100644 GIT binary patch delta 419 zcmV;U0bKs81ndKl7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00047NklVhf+Ih(N-)HpW|z#UbHG;{*Vc(zCu z!XK3H?mbgsOaSU~w&a0zx@z6O0;nvaHE&pfvX2%{1SZjUXQiI!bOnqDlU17E2uoWD zRO(>^KnD?X6=);w&WqJCBB3csMe2W$RI`KuEIS1AD?&^61;`mD$|dT2V$<7r3}jW# zP4aXu{n;^TpMh=bZ!n_b7;ZA2J2_8vGmv2r=fu@O>gANf5UvI?{Goj|kkUUG$n*7o zYamB@?+oM#d=2CveqkVsel?J*KWql_${$t(*@CAt{g1qk_%na_0fvz%q`42KYQg{j N002ovPDHLkV1nh#!6pCz delta 481 zcmV<70UrMB1FHm(7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B=)L_t(|oYj)Oa>6hSfc*w~qw+R%BU`hD z)nR~@cwhz%&MS53k&?mI&?A_^uK&U%o!W)FYO(H%B1g){*s}u0#JO}Df|xm_5;Co6 zL!oj*RWL?Se+mi(nn6hnTG(*(C$pXoK0zZI)a*{af?bIje>~L!rNht}d<%oJ779_2 zzXAMPMs$s=JkXBPSM9sHEAK~PHDs{Zl!e(Jlp0cr`6!E*OCy!)B7jzxUyGXif()>A z%k$-+?66Lw-KDKove#CP0Eenae7DtGzW21%=m9L33EZ0gbU;b$x=Ky?7LRaKHS8&k1lzhfx@?T@@!Dg|XVD znMPqW1sx{BP}E^2OweH_Ow?g2Ozb!nCW3z;Ow!>Y%)^gSn28@*m`6D0g_-L>fAZrS Xq3m0`$`o_K00000NkvXXu0mjf9zD)3 diff --git a/graphics/pokemon/relicanth/back.png b/graphics/pokemon/relicanth/back.png index cf4886a6b77dbdd67b83a1c6d0779ccc31d94627..678602343ae778bf2d80518731078f8ee9627e57 100644 GIT binary patch delta 540 zcmV+%0^|MZ1>^*f7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005gNkl`(zIC1G?3l7tt4*@JK#t_K?gkR0m~t{&aPk3$L8Lo^BJ*9}3b z)n@{F09*lt4UtX(_%#N=m4IsJeZ81~9Uxo)iny;ogUS^37i4guAn2|%my>@DfiE^b zhn1JN7F=7HQEz|%KLw<+{`Y|20@?*Km>WO@6Of;u+{04Y-LiuEF`Y079l+K14`Y9U zlKa0~A}_$-R_yEh+vp^8OK=BB{$rNdByb&pnwb1M$JhII@|RA6)vJc?mBC-5c+?0E e@WvZ&EFXJTCfdH##h?HH000O{MNUMnLSTZM#rgUG delta 673 zcmV;S0$%;(1nC8k7-Iwj00013M{Ml?000McNlirui02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Iq3L_t(|ob8jnYTHm0$K63tG}VZ7N$ER? zgFQrg2n%D=&!GgL!Nz@tLYBTj1InaQT8OEk!5|8k45k!9dxuUMVzOq;GxU61$+n~i z$dLbXuXTU-f4;6eod?}FJ^om2yRE>9{pog(>_r>!##-m$f5ojt62$g{0ub9LO<))X z@s$Dr#Oo&T0>YKE7y`6dcmNl0RRVD<00Cr@4sDw;yc2*h%1X8+2{MNMv;iG zre(ANqbPt#05MxPn&m+VfYS!MEfVxG}$5lSHb~Hl73BO)uP@Wf${eH{IUl0$}*i~ zOpHk%p$7+IFfZh`$!9!;joFxD5-2c`6pa{fjErfn!_qc|0%-ST%(QdUOe6yDG$3k(wzesyskes;H!MV9~Yb( zAeC)jAfFKk#xIBhIW+(~qAa-JECtP91!gc7fWx5ySRoe16r4{}P#RUBIi%qB$$Wn# zhz1pi8xB*j0(_{!1!o2Tz$9S%(b7K5;huI!@$LX$riK9nWd)DUB)mOPsg%mc zCi4BMhAs|pYDEbg_te8y7zAVL%94L=v0K5wRqL--R#?T9hhe6f>dJ);{b)^7) z6hLfYGRQ*F6Eq5_381@8<~lk8U=UEVm9&kBGF^2YLDwW`&b93|q$h#Bl40Nxhb}(} zXv(Pa2sSjxi2!Mg5A$u`=4^j%e^CRcl3X}j_rdi zm^y#kgdv4k!u8D0HPi=5up3PZX_d0UmT}K_MGp_YNl;5j71SfCn?MifRuK9GsNajb z91zM&n67wY{C^yIs|NHdIo~LdE>(fdt6*__db->KQ18UT>l^Jp1Hdvp@*#xo$)>oZ@b!-8hNX4VF~WTcs{D?igourk0nae9#Xn~gZm khqXZW$r~r(fBe$%0cE5anJXoQBLDyZ07*qoM6N<$f;+Jm5dZ)H delta 675 zcmV;U0$lx`1?vTn7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Iw5L_t(|oZXbcj-xOPhN1HUn4z43QqHs; zX|5AuxDUd;7eQZO-(T7|3ABWwk#-L&Z4QLSpa0(uay{=~E&nHApZqn@Zkh*NfIn^n zz30V&KVG*y{3h|@Z-1l>0Q{!+VuG4BJR-m$iK%TifeP<^e?*j1_w^dUyy>Hn+N~l0 z5u0=*Dqed)r~m|I@EU-E<0(I|uGb!Lq(Q|Cx-!wNfZdT4APOStsw~6G1vrAJS|F-& zta2CFaV83mcbT%N(DB$4d#g(#s&ifE5>VfVYumFxr{hi$(fzK@gbLR+2bD{|5HLxi zCi9Yu5ZhP4eB6u&coV*x%|8p$r|`D8_EnnFZ(ue9cCcRQ2shmKND{@aRN^I zdA#-x02Yw?rkXapIY2o9nXZY3!x9hy7~q_xmRtgIQaZCj1rUkXKy|hPBADBZ%x|;H z>|zp5kBc(Zm1dWjCN6=u2EYObyga4PfGvUn=`9yne?S+ZfU1`EPhCuacmg0@eTx5m{RVpx*^S-Czxe5jrM41_z*fePxr|KqOh9CeNrY5B<-iHf%KW$Yvl+xBHa^qC&s z<5R#L3)MG~zhi;wux#KCKxCxjJAaEH07q;;=`RDoDL4*a1J?=(=Nq{sbjbvI`PF|k zkmbVRPvE#lK#^CyB9;kiz@^}8D1lW1s$4>ZA$_d_oCSz7gyX@8MFL!FK*krqW0BD4 z8$bwgp$=gN2sj=O0mS%@fY}yod!-a zkOia+qHrb#NIRCV2rwYDRTMqnjCz0fr_sBl)@4t|Kxix^K-ALwSb!tDV^4qHsp9mHJj5(MYfa~-EAUgG0 z5$bZVbBNkF^FSnZfziu5Ai^Jjj4(l**8$VI@OnLYrRAmE)?hnFFaU0V2jqWddiLUY za@5N7`mS}5miE~9-3i3une~9ps}1T1yu6rD%Ae%H<)%8(_ZCXw^%qGtbrY++-MLdj zM(B%mO7f!^+1zlt41`SwmTR=@8j$Mj`*_NZgz}&QHk~WpX@?$J1A(T5ytBCkp^lPP z-PqKuiL*Hs0|GEUr?X*AWWsH!PeZ14i@(m5HVsm}YXGUZbM*uvdRO%Cj)FpHDt2RYalXUcH{Aj|GN8`d-U bkMD_J)$11CID@v&00000NkvXXu0mjf-I+K- delta 731 zcmV<10wn#(1)~O#7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00KuzL_t(|oaK}~ZreZ*g}DUMYe}sFBrrfN zl>?ANwE-+{Yd{P=>QboSULjRZ;WR4UDmSoC5d?vdG8f1hGW$b{W=Oeo;Q<6edY|6R z?mRIFUaG?68DM_>9I%VN{p>8%*Ci2DHU|0CXX+gscOk zbRG032XMqjf7Fn9Ih0Bnf-RcL0Rr`|f{)%HU(tffgaF-O+5*iU{yHEp>~<}H7`K4d z@gL{!bd?7IZ)ih3AhEzob$~ECj2*Dk+J%mJy=;LhZGq|u0FZcq6Ob9e-*fB?2natI zU>5L{0PFx}Vro*5tgej#eZwX10fw-Z&u@f{+4~2%f26C{-KOXl7KqCqJfcsJkH@1K zXFEtq&eYA}jz`(|hvPlB)3g=39!XUEzN7bd$9s`cXnQg60E^6< z0M4{`Z4!F`kiG+@kuEsv>1`7kENTbPz)wT(iDg57{d1oC#oZVwtO+QR3&a{>90<5y zd`++MM;LP^rpAV#3VGBL1Kgf>V#rrp{{T_6!W7Teauomo N002ovPDHLkV1ngdH~atq diff --git a/graphics/pokemon/sawsbuck/autumn/back.png b/graphics/pokemon/sawsbuck/autumn/back.png index 029ddf1d6f18d29dd1749d9875e00e816fee1e89..3d32c819b4b69f291dd0314e91f082d1c63ec279 100644 GIT binary patch delta 730 zcmV<00ww*02cZU#7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007zNkluByK{0$F6-{J^S>qc3mW1xGv3%|pbqia4=$8@W*Zk); z2O5B?Y6Lo(4t>*-VD$VX>kK`y37~%+2^!4xT~WU9YkfMqlO&)4Hhcu()0uFCz7V(; zm9fAy1(2Xe=Zp&>AaCMY2E0r@AaW$a=YwWaLo!+GT}{f#L5K_>+6V})rmE(|B?ovsl9pu%j(T+X;VpaD8KG157A@>&*L62CW4p7lOqaGz-^RN`Ne7ElKDX zfM;-=mheTbATpxltpe^1(6K^yA(H_Eu-CN#9G0Ie3(6~`)!P|F3qVQy;>G$G17#ZP z*Yan8o7eg$fV-asCI!bFa1+)*#PLcWPitU*2e1YRa9uADLk0-2zwt&e7!bg73!{O^ zfX5a_y%^vuP(0BeM=#HS{gI0plSIo2a6QwOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00OB=L_t(|oXwRzZrd;v$7yr)V#+#ztoQ(u z$reSD4x)I2ASVbQbnqbxcoAac6kZIqo0q`agP`cvwV85&UZL;tk@~RZdMziK|DPZK z?}IjDZgF;Dsp%ykbDQy5KnS}@BRYtW0G=6Rku+d2Fk{^ne`Ul{V@znKjL(C>=!h-4 zz)}RUvC9IXF?wuz5#}NwAmeIow{z3WYB?7R0+i7fSeT&eaumk|fDJ>p>4oVK%D5#% zzr#(`c<`rrqg$Gt0IDNrt!`^@0+==rZo)ypcc-;z^d%r)baml$*`DP=Cymgh$(zsF zkp~AT5Nt#ve^cd9Z^;D+=~P17`#^?+!K84f3D8R$$}ebgn}kAueOMX|{h%0H2od2p zVf%7UfRvJrL=$0#b;e=Q2~#(9&G_AYg0|?IT;jC?W+lT&*Hu*`Q12TbGdr+o9s9zo zs@mV(*VPujOU80r2;nkDU?XoJ5Exc%skqGycZX^xe;>DiZF4s21KOrAIe_{NfOX;; zpj*J+#-FQ-bT-DmYCE<(#A&y{g!IozQ@+>@+?3k^JXm1&_6r_@%QT{Py2&8m>Gz)m z5A74tHcOEZaP5G13BYs&#FeCcs32sadV6{QE>#wBs*f@uwVEo07G8>?P?9-7roPoZ zV4K+3e^}uWOaK9g4)6dcAr*pygIUsgtez0~k>HP#wgY3XST_mC0(6PLT49DWN27#E zJXXF?66>bmouvq92areTrKAHDI3QQvP$+4=cMLERc<2TMc9{SN)?j7ur)&_~3rVy~M(?-m*6k&-Mp-Y9MNY5I!$)6dRB3x$d)i$@w#lT_c z;~=&ta$m>Ay9Dg`2rfGywm2g%Z}?0$vS#_%oqYu44+}_LW)%=$`4^2LgP?0)~V yfGogSKsG;j5s)46CLlNZFst9_!xWHT)Q4|(s2>-6mTbQO0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L009rV?>;Q`-1^SsZJ+>uM!5D982 zcP$@JM0B5VpV<~Pl<^a}6r9o{g^BEnBkeY6m|OSKQDxG~1Bk))n+4b?y9S`38rIq5 zXJ1_p`-gRlI>NZe_QLen!Z=^NFyVhEVZu~KVbUMM1RX|U%(XB}KL%lb>Bl$q#Rd_5 SFMzZF0000&B*}k- zr+OM=8GR}5+C8uZrt^ycz*7{%0MY5IZUpy5eK{@DYqPQ;WxFP_0Bgb>aQnnu8O{KB zQMiVdP)%d_WE7e?xeGHnFV!A??#DWY=buZN5XqT0(ICk%hyYgi=(@XZk3dfNK)GO+9!D7rp*(a)>RdRbx- zqW5j?Lf|=GXSymSuXo7~OqktgJR|p<_`b3Xl8b%kW05;GBLK_k*kP$fve6TdEIcmP zFuhVG5ujWnUVlmMg9uEq1Yd`3gYf5|&yNvMMdaAn{viggzf6H=4w|n3lJb8)b}K?S zBLh_Z4j@EoX~cCsmCSm?Kr)qwwO(f5+KRXI6d1#KMd%N}?*{JHvHYGv-@lMz9CCk_U73A7xCX$1;6O(uvCo&a_WU?_nI1&}NU zV!n(jH?^_fM!J#43*8Q|Yn5;iIs>aGvF}3s5b(xT@V^0F55uQDq`Nt+88~|b`x>A( zK!B7M5JLwDu&;O+3^2fMVKfjkz-(dEvw_?N3X493R<3~EOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Lb}L_t(|oXwKEZrd;vhAD2|bbA1abWkeG}n zSqDgbG!jE!l5p95BzA-ZNjD^-n8UEj~pF2QVY~(pjWz+9hB*Lkc3*4e-mHMX?w(;ldmPV`gu#xNqK$07uth z{ppnm>(%|=BdklmMH>Nu)n^~zHhNd@%hCsQ9qKpb>b^cl4z<$}C_NqxDps$rP=6V7 kqIFj{S3gEl{>SwUKqDn|X*o9{00000NkvXX1g=70f{UL%8~^|S diff --git a/graphics/pokemon/sawsbuck/summer/icon.png b/graphics/pokemon/sawsbuck/summer/icon.png index e699823cd691476598d98400f98287cd97876be8..6d46101dd17c933d89d6b51b1c5003fffb05340c 100644 GIT binary patch delta 315 zcmcb@+{!#bf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HD5ek978-h-%h#Bb=ZN! zMR{UFf>Y#xH(*>2F+e}?y-*I z44*}w?6S{Y!?Txf-mrd$so6oRjE!3tR$t~hLY zXyv|M^uVLfo@WBDF?_9^lT*a*u)UhiWZItlr-T1(D*rjZ|9ma;k{Q1Q6s~&z6;g1u zkzsb}wom7pkaB_DmdK II;Vst0A*N^aR2}S delta 394 zcmV;50d@X`1JnbM7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008(&L_t(|oXwK4N(3*%ZJcn8f3YT%#%QhTw-#)V zSQw##L8HBC2A)!{fON>c{jh`Tt9$!j>(at-jeH9e8<2&GagmX;Fj0P#2vbHx7}@cc o!ZbRZh2fvV9Q1x+{QdXf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HD5hl978-h--bByH5>3K zpVZ_y`v3piJ7Ox=mKEIKo9xCSI%)0|-xbrJ_A@=G_B8mgGF~M;2%q3Dct8x2)x)tyhMYZg&~Bv6U)h zs~@>~qi53ur75=pz52Oglx-||yWd;9uJGtT+;`zxkE8bS8(J<0H|H^4EXit+JuM-n z8r_im%l2H1x$E4zLk$^{;fxHOYgn?)XZw3-4G!|)?PxvS?Uz+3ZLxTz2^*4B*Z2$9+^>wH4>$*GaCxJo0;OXk; Jvd$@?2>@?@l1Bgl delta 390 zcmV;10eSw01JDDI7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008t!L_t(|oYj)CZp0uAhIxWor%sV7MGbqT z!&8^=j8P{q$-v5ox+@mmWV+z8q`0T7bn zqu^(qSuhH5Cr7OT$2`c>XHXxx@Or$MkUbI0(KgiQ7HVG(e{LsGTjr%L^mZED?uCE1 z+HqVcq%tUV(Qk@x3?eoiXL_&_QJJn_N4!UQCjKzU=opAnqF}JD#>Z4F)B}~yrbju{Pg7!e}DZyU{Yz{zyuyP14B2!w47)Ih7)bTq|x37 kW?q2_J3dxm7=Db8D|k?@su_npq5uE@07*qoM6N<$f^qqrSO5S3 diff --git a/graphics/pokemon/sealeo/back.png b/graphics/pokemon/sealeo/back.png index 162838a2c8b929c5b54f8b2afad1db7aa8b51ceb..84a89788b3f7e684c0e027859d78932991012797 100644 GIT binary patch delta 413 zcmX@X@{DJLlmz(&|3?F76*o;`U| z|LA+)7tVS{y^hazo$Pvv6&zdK*MBZ())c?MB6g1@DKJ#&Ce68zopr E0M~QBn*aa+ delta 511 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C@CL_t(|obA%VYQjJe2H?}(PPz4YYdIN#1cn zb*Z`nfcx6M5aOjqbcLuDED}d?4s^t+p3V$_hG`BU62nsOe_GDX0DuPP<{lMWFjVtk z45xZ5XD~#yfV>1$0Ngqd4Uf6f0lCDn16hWYE8LO^ACdqV^d)9PX#`0yHO0Sz{)Q$z zltA#jrT}_qmXdNrfS-`q0Z2gC11$sO#se&-pc$Lv>m^wsa38{giBe{Z1?h(#I7}3- zyh{Y3x8otif0goA=#+qY9JuQ68w&Jn`i{yagk#R_uS5V%V6U9}!U8wo?bs(NdS;f$ z2lV)FREkgvpxAl+*M7%zZ5XiY(zg6#aRm4Uc&0Jj&g zV01RYf?EgLg}woxcXwY^E1d4QgY=U-aH;>QALCog5oy(cK!yMS002ovPDHLkV1jDN B*C7A^ diff --git a/graphics/pokemon/shellos/east_sea/back.png b/graphics/pokemon/shellos/east_sea/back.png index 0613c7a58a6294b863a40e01c99ce639ea55eb56..2cb650a28c567ed3ec4d7cc99f4fa2d9f2a1555b 100644 GIT binary patch delta 504 zcmV53`Gr;PJ#db-@Pp`x@tlhUpCq4!;CSUV}Takwr_mnZwDhj zpy-V!L{}`hC=hp?Nfm;7ba2fDfvFL2=|6Fduhd;GK?o6{f*4uxI1DuBw@pGoR3dV3_ z=o8))H0I6YA}#gC;4KT*`KR=972{RVBP|)OJPailw}8`CP;$=onV?3mfYXhj=1TdQ zfXF)sx)Wdxp9$2Ez3m{khFY`RaJzp9x{(i30AH%Rqi#~b^Gk785>hyCqT+7;k^=a; zf}7#YFX0gIkuUDm+aI*IbS)mF8t&O3$*X z00i&63R)eh#goDS@KGb_D4_H(suS*+%v?v;MjALeokhHDJ^c u;jsc*Nz+my3qJ9?z;_ltNZ=d)JbnNGbRa;1gC}nQ000041hEB>7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00GrWL_t(|obA&wYui8+2XGC-1pFsi#iO4I2D@e*Y)k zo#%b5f3QaS{@vP~>I=9-p*06466<#nB%T1^#N?BRAijt|e}>-y9vBduhu87>jSR!j z0I>_s0u*r&(gJ{62lxT5tDiv+l8nnhKo10oVF0zb%BW9Z3Lzb~abT1T;L%nmK=p+K zivuXC=?PFyf1eo;9V6B!fN7dr1}HdyqAMBTAHmkLARjV{<~J8{9OBWo+>oBygTl72 zT>UUaSMhbs*f)5u?#aGE&DF*<)o#O!)_sH5=W$mJVCyy*+p4o`{NKn3#evRRyZVM8 z&1}sjbSrJsW$o#BYD)%;?EPMJ;cg@W{Dul;-)D;HP<{{978-h-%h#6b=ZKz zb+*gF_7{Ku@1L7iB0KkMZjYn>my^N06XxXZ{ydkVRCF(s!rpKOmnG6k9(EcGn=RQ5 zj2O6Q%ro5ND4_q=;a0-FN%I)?{OeWwDcA8#W=6v4YYftYmh}pJ3}-kWDt7xGGj+d&K0`b?0RCE{O`Y)#-b(`cR3W&y^yF`7K#-@!wf}ubzr#y)ymX zIr*pGj-QlIe|1OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00AmVL_t(|oZXVaO2a@9hVur4kgEuN00q4Y zMM$BCVlN4J2=-li+CxYmsx9R3Q}NK_76gSJs!7#_95iEcNOm^h1L%L7kNszsncwsN zny7GVes=-Q2QDbpITzAZsy7TjETB>yu)MUOL{@{Lb$p@Le}izuSRxfI>3~_B6&`os zKA6U;;HZ0KqHv$);i?1lIU1*%7&F_Y^0C5tYWp7j#2u{lU9u5_E3LQTjR4=TTI(~p z4?gO=w<7NC@L!AFlK8>}<-i4`<~d6jsr0a95eHT&aAjSTpaJ4cO(Uf mpdZEknfY|r+Y$Hb-}M8I%d6WKin`PQ0000^;aIFg`5HtXZ>W z&HAC3i283&^28~5lG77_=23_;rzZqLIwL7W2?Xi?XNtk}vRraPBS0xZ_Qpa4YoLD= z8;1|ZnxH^8wCDyxs$#S)cjvf|ti$0}R#`S?h z^Y}--&mM)ame{S7Fm~;K2q2a9!l?na>zVroz@jtQCR1mBC~i*%=Dr=aae#kbo|ycB zq7BqRg7_9NK;3*k#{k&B*#X7YbC5vAH@x0@E2iI;WCS1>zute+pX}m)4-kCW1^2T* zjYqe^(F#2a&YCrA)~s2x{&fXS^T*sXb9O_eh7ha&r)$!_l>!GK8dTjck1dJI&Tu6<=x#oy_xGh;Uw?w-fphplQvG}ySz8| z=EHnLgwqQQYe3D>4(?Hg?;Hqlb8jX)>Pu7`shRuN7g-$oXU-hfPIZ58HUjnGL)z3_ zs}CX|&u|n`#nJXFSJOr%h}mntd4I9^banYQdA1f@|M3$RmIG}x`L0!G!~yEl=CJxA zCeQ{ye_B)DXU+PL Z>JOjO8F+Xhks|;A002ovPDHLkV1n!(pSl15 delta 911 zcmV;A191G62h|6V7-Iwj0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM?{!*(FQ&M00Q|*L_t(|ob8q|Z`wc<$Il3N>HxOr)DFJG zv{JHgFGN&XqF^~4&yY(8SlSYkxk}>Bv`W82*M5YG=@_b1p72-bcj-HmRKh;fwXJwU z47?xre|K2?j*wmL>hCPCso$#m7UK<4>sA8}K$lQxR01vxf4Y&&dU=`wt1&+9GM9tY zX@(>V4q^rz00b^(NV3@BTgahpe}vOuc3l|L)g$&94FgOd_V_#&MS$TJfMOpzV|5;1Y({Y4O+0OieOqKI zoyyG>EbIdI{gxnOsTN`BtZI>?zfWCZtMNhv#Xhkbk5f6hYmIoel;2D3ye3(ejsVn3 zm4A!8TlWQ@d6+q#nlOCl{_d%)Ue_|o)#R~{drsbYV*i%a4D>*A)08sAP z4>(dv$dyWyq%?}WquDnNquS+3X?mi%}OiBG>T)gCv-0rwpUz<0KgK2rI7Ij>F zZYSvOdJr1`)c*rOND!A!0*9ao;5{Ty4-LQ>^`I;7)m=VILeAsqED>AO9Z{*Tz13w) lA)B#3*ga}(@9*mWu3sd^+7ZP+E5ZN(002ovPDHLkV1g>~lh^P&`+^^uz_#-q3$% zK?ng#g!sqBZwT~R5GueCWMA>u%II1U5&*UE`nPf-YV{*_tx@IL<{~Dm`I}rhd)jkKT{IYN{0A_cq3{XGObSWtLapuo};P>9o zwiCq)=Kcf-`S*a8;y92>{bLKX3mbnwmPI%O!1LWmI{*{_O8`2j319OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00I0-L_t(|ob8mcZrd;rhN*#>I@mJ&06Inw zAQIV)!bw+E4&6asBfUTny_W$_)aowsL-k0?5-G_E(6v3okfHzc-G6rk3Hcv?7ty-^ zvAP2sxKpBRS*J`mCB6g1AcRe^$;f)W02IJ15Q%s#gd_I8e?>sx37?ycZ-j7ue(gL9 z0DvYU6cd4wSm1pEh@Yqn^L2)g%`N~~#!%uLj@3kNJk;;xVZR#yu>VcCO=bXEHT#!l z1X82(#GtGP>ZbV^OB@UU0Z>)-ZU9o_0DRzxz^#!ehLj6a-h}~Z^(O0~(*h2RK>!@9 zQjfDLpx`_Jf6&1M057r?p;Bs94?vXqIy_nD`u8|X8UkDM?wgiB#thp4FkO| zDU$yENnc#8oaVu-`UE&@M^Hs=L%2Uwaj!RkbVx{Je@3=Ww*hhhXsIpIDV4Ed<35H%kT&YZ}EfR!uNbCj{qaDg4lU6^I3o`Fkr$U z03iYcWDtPJIs}L;>uSD`Vjp7$W*e}VkbuPo$R0d^DWoPYB_7i^=Nf$@C?du5a{C4q*=F5v!jsqkMN6Zstn`za> zES}TX9i+YM)rEYb#3t$fe95HzS*nio>K<-s{Kljs~ zM-O2C9C3kU9zBJ-$3`L(CMqz(GnVNl$o~`C2arWDK=c#!|55vuyZ!*nw+#`E9X!75 P00000NkvXXu0mjfAU(yl delta 503 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Cr4L_t(|oXyn1YJ@Nl24E3N&Jn5Cby(QG z#xA2?d$12sNcUXDHBV6bB&E=&Y@(6sA2o+wb}k;~V=_scMA5y5cn*NR2o$*f7xV!j zu0f#oK_38Sg&^Qv&wh-9iVUOr7Sj^6q>oHf7RO-5FHP()x(rGp;tl2 zrL>`#tM|16E-&Tdy6C3-P^4M`QqF}}LY(J7`X$67FH=4M$d^EJ8vt1dwED0QC;&40 z-UrFk4_wFz!508R@BttWf@KpKed19<6GRB&W_eH)VNfHp`5GRGh-@E;>k?P6iws-M z#%@;%L^S?XfB9MgVKyBfd2G+-u|UTc8^%S*Q`5!9f5xYW@xGBO1u93?zFzp z-(~s0%ycpX5*N^Bd&zi6W5CP^o1+P|=5twsm|VCWG_u+NCwoH{;!qJpgM%9b$Wt6# t6sb4+AR6z1!7enu4hZPzKQQ+kzgR(WR+kDV&j0`b2>?k&PDHLkV1hNo$}#`| diff --git a/graphics/pokemon/silvally/back.png b/graphics/pokemon/silvally/back.png index 3994f8bf209196cfe33c18d39d80b85c5bb80094..94c3826cbd699e2a83c48e877e26a50125604a3e 100644 GIT binary patch delta 568 zcmV-80>}N%1%L&R7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005+NklXNtVMf2t7@439M0`aM#Qq2Y4Pt+Z5WqWxl;J4?4FNkzB}oyq3fOmPzVwz#jsX^?=<@?4@p z5xXfk0k{@<*oBG!>t#ux5pl5Dhbez{50DWUs=8n(u2A($06K+v6vx5>Ku5m&)aK7ZZdZToUCz^%S@B(s1` z2>d%s;Ck2&50L}}u+0&!bDWM;LeR0&qZR{-9CsL3=DmcIUL@Gne;S|!&OK}AVTDk#=cb>}P6F3{t{f$*PQniW^^SCe zg*J$?LF9_g1N8r?HPoEMETAOOQ%yn`lK|6qfNaaROYjF8Z5vSX5yRX70000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00HtzL_t(|oQ;&hZsQ;jhKX|ETGI3Z;!4T2 z6;Pj7#@h#QM!qMKv&TrRjq>&#u(4wdN#~Z#rw`@_L&)!ny*vRnJN6h@W!V$SCd(d6 zP=ONu@lb(8ktSA-*ghk+>Iv~G9uc3LY+LbTAya_(!<4O(e=p?Br6iQEkXYH2UhaSe zVF%c;H-M3l3xz}A=z(w_%n=!rqoRlt@1vq<;>4tAnjkT@nJd1Ub2uy#@0`mdK-N>& z0pS{?ow}-o8Gu}uRz_0-j>N^fd7z7D`v|g~dlS66DM{^tI zH4adthr>t!({Uw$wZE^49Q>Cf{$5n{3#R@)pY|pS^f#)kntgWDF@gK?FsCLv-3}4O z5EBBY{q3-vV>}7yn#=i+Cj|ht(G6b!P9P`Azi%1p6ag4UjRL4>p_cs!QGg-< zd7nl6y>~lkT^8{h>9VXjB!SjGOrVp%TDYgHPA);!(GhtH5Dq{>$APsfv5gEKl#BsF gK@XJu7z;Mm4>rc<&ZO-;-v9sr07*qoM6N<$g5FgZ3IG5A diff --git a/graphics/pokemon/silvally/front.png b/graphics/pokemon/silvally/front.png index a0caf35b63e594f523bbb930b7e5390fc6e5edcd..01d9f14a9c39fbce7b507806004f79965f0d7ac8 100644 GIT binary patch delta 766 zcmVv#muEp6L@<6BQCSI@C-I8nd zJP!j*J*-daAw5x1kLZbPVR;0M%e@AT$QO464ajRf98~d0z8qr2T*ZGa z0P+m@qkWdl8eoWn@^F-tz#5GlJW(5f@y4l&164@tIXA*U8x%mEg@KDiQ>TPg5wD*z zcmP%hfVczk+ceWE2CyXlR)vEAfQ*!(0&M?7Q2n}Y9^E+cC;+=_XVVoRgdSkEVO-|< ziV(uP4bUsa^DK)3^w9-`cSo-Pk_dl*1#(RSk?PwSrgceSIdDw?dH)XW60ryfWWx|I z*l$9Be(nL5b%{co=+@n;$5;KlbO`Ih`C50dVYAr+^xBN=USb9y6BNPU`Yu7&GWiT} z}lwUD5;?#8XTG2<9dM05$`NP8Jd%CD8K0l*4-wc?3v=_}AyVTC0D&Z5#6) z0GF^HvBK*M(&*39Oz(83I5E0fePbr~t8?09j>C z|M`3Z-{pV{0NYzO&|L+vT@rNZRDDTu%%a+l83+LuLVq42#8m_V0u?YqvhWUwJ3Zz4 zTLGoE@V4k(S)9kHbdWwZ5uy5EhjGEE}(0^b=La-0r1SA8v(URQsg_EO; z;CvT&bRxDi!!Uj(NT0yAdu;x+Fhl_J1Awpre9T#17jSg8K4A_q4{f>ZI0R$(YyBrw zis+|FQ2mZ>_WHiFRQuO}scS)YeW35{kRWh-$Frj|00+hXyLqr&;UeFdh2RYF7P|UUGLg#K_%Ao)9OS9eonp>-q;$^z>(q$R76= wd*1xS`kv(|+quLw;5*PY`|q;a(=;ak2TK?zP|cZ%`~Uy|07*qoM6N<$g6t?~ivR!s delta 887 zcmV--1Bm>^2E7N67-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00QAjL_t(|oQ0FWYuiu|$5lKClcnx|5D^U7 zl0N^)u5;Zz79xpGqg-~~IA1?)O#pGovDWxQe=MMINU@{vo`Wt#ra-t{2 zau2-R_oMIKy*nF5CQ7ffnN++gSsQ`U8*6*>=hg-TMxR?7e+(GBReG)g1F-+26R=r# zoc(;g3o7<<^M0}jI$a%uT=r)Oz()ZtJHGTpY4?xzpG62Ms86-Q7;RodO=FdXpW#+v!=I zW|CsFUm9@Gqp0;N2~cpR+SI1F?6HbXr~6#v_wlU`e7hvkQD^hi;cRMkwP*QwqR!ri z3a|vw-_1Nh^c<+z04%EVFuUDJJv|y990H&kx518Qf4A?-9YYVV+5#Jzp3_$&98YQW z-PCTp3bhE}GK%VvSOXkJKtmn4ehDQ!4L(1UT*{lt{Cqb1n*!_zXbN8lsxg^!L`+q%)w&x< z0Qcqf_dB7>3ZP{VNav(;5k-pd2xxdH1;D~g-HxYw79Vm`G@Who=xyc<@DKg>-AVSYQe+m~OGKc{(N`T^WiLMYMpKD*PoL0cX z@WU`%a3iU`r8QApqA`j9Q$0kSB&(!LG>S^^qe*WNr!fdpbB>g*@_uZftTaG~l}7}{M!8ztPJe^`4^{VAi24Df>;M1& N2>?k&PDHLkV1jwygpmLM diff --git a/graphics/pokemon/sirfetchd/front.png b/graphics/pokemon/sirfetchd/front.png index a7ac2a974a3a32186422085a782c0260a5798856..3ae79de6e60402d54fc9dfa9ae834eae100b47e2 100644 GIT binary patch delta 837 zcmV-L1G@Z(2#W`h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0008|Nklz3jm5QGD10)!;K|J!a=a|t+Z#^|p-+m7*!S|8OHh|}~*7-K%t zRk@w5d?)`-Z@<&e^LPILd;ORF|A+O?eO^Cm-Lklk_0aON$f>`zj|re2fTo{s5LADg z0nPtCfUf{|>hA#5g7zfA*bq2)sn&4Eb^6VtWn!}rb5JadBzUYfUkis1C z?|MlHZb^?VrL-u0-43F``ind3_bEE!)O4?(0F`z`>$LLsa+&L)6mh^(ScLJtTkhf&HmS58CU0J7GwxdbSNGyoP2@a=f^;PsIK z?%dG;#8?5=vJSEDBT!&??+U=xbx(w}E<(sMkT7(C0PnE6Yz3fqm5wj~;%wspK>l1G zl{^9U#`I(X1+-el*aNs2*T;Vpq93QO97{Tj1t6?LlyR7O0DIMQezv}R93m}mwqV4p zcvvw*A6c-hX9ye8)V=^jBIFbrq_M^UFgelueGTXPaD@xGscDeZPtrE%Mf{JzTe%7` z15lJ_eU)*I!>klrZS2AasjZLjQswvx+uW06XPfsLdfT@6_r`P8JFmGL_ldTl!N znp>ig<7JVrqqHF3=Jqk;g@@k&MbA`txlbq<+~SV?+#w%9K3u#bTzvKil+Z2K!p(5* P00000NkvXXu0mjfHJXr& delta 962 zcmV;z13mnU2Z#ue7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00S&ZL_t(|oW+yBPuoBg$BpDjsaTqZB^ezS z*odcW=juTONd%P=r%SiwT-4R%7`qfaL`wOw#9L67ct)s_3sWj}K+3{anSTH!6Q~_5 zx$n*f8k&Tu>Kp7R-_L#Dk9(G+sWF$Bt_eM}_>8WQnZPUMe;ETcJKG?s{&$1tW{~~2 z29=pD#I|De&8!ymdW_bD!OLlYPHWs?Ze?-?N)g}&(|`s7bzVVoG9c-cQD$;Lom>Q? zby^ibW-<_?b%T)^fQ}__0|X`(QK1+W0c0lu*aW5T>6XOrV-oOok5a?huj5ZSi*3Ak z3REphcdZ7ue~?uK?9WeI*xlQ;(4{SfgZK-uz_Ru!-R8n;HP?1}|WGHycPVif}n4fJkNuMe__ zgqGqKe@Cinhbg3Ho|XOL9p5INgVrM8Xek0(M0P%#sltqGt&3STb!_p7yv^}Q2T+5!T6UkazL z3*;Us0mvQ)OpVC00A%;nebA*6kpv(U86Rn}afMU3m*-tC0>X;Y-SD;_K8$m39B>}3 zRK8vRJfJWFX@2P45NS%tcosjv>#L~%L4%9YkKt4c kWS}$zm;r=&X2S)#6y$Act@MUN&dglbp)l(w@34RHSOmEOK+OKemN6kf&aSvqw{=ROB~(Lh1T?V( zIYc+;+GUX7+KmZb6=G0G3<;7S;v9bXk83^qMmOIQ&=*v<=QSpExCh091F-~<7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C7=L_t(|ob8gaZi6rohE0_R;D9X2(p;qO zXPy(6I*aHgv2l7FydeV=^xot1jz5l@~FNBhMaKD+y1 zSrqwczl-HdwXpjOVV_L| z7>`QFKQN<7r@0RZ;ULIa<55J+mD5Owg7u5zD<>%t8N&U=y*q1$PkaVzAFTEFWkAps_skpgJ^e)jFgwy dFFf+!`39@Zi(f5c3gQ3&002ovPDHLkV1fo((iH#z diff --git a/graphics/pokemon/spheal/back.png b/graphics/pokemon/spheal/back.png index e859b980fd92e846f88df4fd4026307cd008b777..5c23636edef66c297f717948d6d993bcde060205 100644 GIT binary patch delta 319 zcmcb~+{rvaf|G-pfq`M}_Qp38tL^IrN`m}?|D%DkikqeY)%@^uaSVxQeLLy2P_qJ$ zYj2Cs)BpB6_V8vHTyPh^^9&!jYK!G+ItwoZnu zcA8t-0xZhdA`T08J8CZ2U~#zTdiaMXuVThyK~i!IT75e8aR~x?sz>VYb6hg}@XD?8 z^InH!iBFjdpJcgf;*>cLrOR-fx^l9nN8~jDB02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008|-L_t(|obAvt5`sVs1yF6MT|h4&9DoTI z(2W+BjOk^@gLn!@kKmrtEDO596$=Xs`2`H*k+7Le#*F!Krs_jIfj2_A_bCF*f?w)# z#_bg%LJ=R1H@r)Jw5ADj2}Q205@+&b}$2t^CXn#BMA!DSH=T9Vqz^r185q0>6KM;9cJ`}OsQ0suaf zBO=hg9yPWJq+4`xEuI|2MQoGbvW?w0^KhzGE`uT!K3 zl`}QZ=m1dXa&p5QGBr^>)#G#n3@IofG@%iQVqe3M1pnRX)k6p9%h}r?SUVnre8T=0+8K13P5)c6@X1IHJIiJNw{sU8M4l=1YZ4(eo2TI3rSae@Q>Sn{91ei07w!%S&mBW00000NkvXXu0mjf D!ip9t delta 707 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 MNkvXX1g=70g5NFq2mk;8 diff --git a/graphics/pokemon/togetic/back.png b/graphics/pokemon/togetic/back.png index 755fcf5950429d8772919e69a78e35c2122c63f3..76312f9b82573b9f5f4f4b69fda3c5553ae36df2 100644 GIT binary patch delta 472 zcmV;}0Vn?I1fc|w7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004yNklG^5!}dl4apdKAVuxvp>grvMK1-k%`? zARrFR1b}mq02I<5z-hp&d_YJ5XL=d{4I6cO?}S`7uBHsJNODI5VDkZ|14-(b3>JS7 zXPXr%a@Ils)Qvkqqh|q1$U15Dd=eC}(9=l>XOMK#=}CgRPZc0;2)Yu0Lx7#cq~EDU z8~`FAq+!-?0Ce)_fP4*qAHcVi8v<)Uo606&>bZ*qPI^=oQVV(^^Z@v(lGMhY38Mk) z7{;*1=Q_klm=aKWO^}I0y!wy@!R~*>B7t=YNPe{Ir1zrqW&RtFQlB!u4vqb;fG_}( z*$nV6XWv@rx102qqsQti7W#oSfamIM(l`=?`H30>(|$q>xR_R>cB9w?R>c8~}{b5K3-0{tiR=VXj1rXo0~X z|KAN66?^qwlKF2^yJVluSe37r!WTdnMtcX`>2t7v8+ib1oaQ(FD1HDryA(ixwl+)v O0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00E9kL_t(|oaK~lZo?o9hOu&ipu#;e0S7>M z2Z)OAf0db!q*-v1-_uZ4srAF_*I=X6|6Tea4)j0((ahiT4S=fxyIunsakf?F8i*tV zpxGZFA`4Iw0RCUklXH&aC<2ypG(>?)8WBL$MDG$uTm--re|!0h@CsPb^5&4Q0AK(y zH31ar9ffg%Tdi_3Mc<^dps32%Y*9stV5-vgL#0cG&B9s#jq-~b3m&49T8 z_9osf?iQd0J;g+=1yoOz2&IoNWJEI9TgDU z+4*!2sL9o{Dw(4EM7ni9k41Wk`SB`5b+Ukc50&!MGnk|9{TOHf%G=tX9@GX0pa{@m j?7k%ckAOIse|7x;zh$ea(f+#}00000NkvXXu0mjfD{|)v diff --git a/graphics/pokemon/tornadus/therian/icon.png b/graphics/pokemon/tornadus/therian/icon.png index dd6db6b5c04ac4ab1ce991b9a293abcd71ef6977..fea79288d249339e894faa064f1e41b2deb6215d 100644 GIT binary patch delta 406 zcmV;H0crk+1>XaZ7zqdi0000?P=%b4dp~~=bW%=J0RR90|NsC0|NsC0|NsC0z)*`r z0003_NklpgDV+e)Lg`F!?m}dp;9*Sdj_uF7XunQs9BYff`5NV zhTfFA#*|^8K3x>@XidBFGe)?l227~EH`aYyVFOp9Yt(Xj4;% z$9-ZW^3}xAS}a1HQ=qZ3Dl&&K#G2L3!oh&GV%?Le-Fg@}37%g<;{lyV7#eDNOU9(G zid&8jB^MBDV!YQfQaKmnPm5yLi_?E$@zJsDlcV_4cGPFvyZ%MJ-uVEKnI9*B%=|b4 zWah^SAPYZE09pC517zbz2FS*b1dz;+4Iqgh10YMpg&$=AWVz(dj}S;?1BV5W7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0004WQchCENtuyBPWVjDpU?QJZr z3xp?k?SYz;0O8dcqrzJ0P3qH8JcmEJSQmCN)-8bFi?GvqQF@LVQo(H_a)q0cv zU@1-|t&e`3RHRhCKdD~M3srFPs{jB1 M07*qoM6N<$f;PxnZrb%|xdNox^S0X*t?ouCMYftYhjs{}!yv_K=Lunu^2Idcf~1>t`H zJVj&Q=ZCfN901a)+S{WW72C%e}#~3sNO9hOJ zAb>^nVBwE5=ZV1PT^kxz0p$dQ81L*P6z@3HD&GBw1IUj>~O=I^Km2S=~s3hku zpZpPu+Qz|KkYAsY(Q zu=%{EPZI*FS~D7;-s$lA)M8vKaDR|=P}o*Q+ecoUDM!(TJiqglvV_^nHSg)PiVwN5xL)U!wr1%842x nPYjHN1At5}l=02~KJ)km4s$p@5P;Dc00000NkvXXu0mjfW5F{t delta 756 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Li0L_t(|ob8mqi`y_1$1}#f9BUWo)89LY%YW+gaxiwo(s_cXG{oR z8)i_9dGE7rgU!1Wc!1glD9?#@lnzkEUxCb?^7Gd<1VnZAx(wjF0z9bgMIbqQpeKNe zlaml9z#cIfe};fTk)u6Ql0k^#1V~QT!~lH`vqy5%>tm_)-iH=3##cF1qqN=wL5+w? zcBd{1cqo5|Yqhv<10Z&d2Jr_P zC1f@3*2nN(5wjlxoO7CPrsm;PnG{Xc0$r6sAqN&0OCgnG%_9n z;u~XZ24X=e)N!pEAW>(jx;6r)?KTUkLbaHxBGrA-XV){xbpRlMN~9)>2Xf|!2e-dD zy9EP;f7Iu+kpw)_7dgP}I{+0qU4&sCL5x86Djg6wK-<28Gy;)DZ+_wBX6O8}>002ov22Mn-LSTZnRYmXs diff --git a/graphics/pokemon/unfezant/icon.png b/graphics/pokemon/unfezant/icon.png index 8b61d1bfba1bb4a21b9ba9bdedea73de74eaf50d..785bd89a9b4c4a0f4394f951285fad83c605640c 100644 GIT binary patch delta 323 zcmcb_+{-*cf|G-pfq}s%pmol~YWsSDk|4j}|7hT>;-)D;HGe!^978-h-%j!5Yc}9< z%@)>F6#Db~{x-Q5iAODZw|rg8zS!HieAyd!ey7X>HT_hN1y6KXc9jNjuxL(BcH(L% z+9)g(b-<}4&2eIbrM6JtB8Kym&ua1nGGEzwCH2xPrUK>#_1AWt;9!xT9^H^O?YoCL zFV_p(YQLz4oo9`0#2K=?igH*N{9PaY%6QwH&Wq;~96rriq&U@sb60}7x?;~l(=%H) zDrG;PJR!a`NTKHM4UHX3ia#meS*XdRw2n}Dif|5us43;DHiZZnGvgS z#hj-$MOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L008z$L_t(|oYj&sP6IIzMSX+Oq)TOaFOW;P z&K`&DB4}dKOp#NB>(FouyrW35C^9%3F&SG_6bRh;>HB+ZJ?H+?l5P(vx1c-_G@;^s z*_#mT=P4yJ;ISkU(*u--iAt8N;OQ{sBBc9zRhW@lVPd_*2m_}m mjW8^oFan)08dt_Y_u~^g?xPf{Y7GDY0000#Fw!qB91Uu{Pk32YoUX}v6eY5`vfNO_K- z7zB+NaL^G{O(m8I;X)U*TJiDK2jfWqwLZm8LURJ)`X(4`gzm)Pw;R}U0z~RQ;<|tG zrz8+RC{bSp%IeE;)nk8IV5?SsPYp&~w4Aag2n~1bw6LhfZhE0o7p$!7YD1{{q zr$RvBE=eic$Z|ZGDsWoRu}QysVI!=>o($EE(Bxi|V^ORK_C2uJzlR?@B)FeBBl*}u zkEhCfeZ&9PZ1sG|d&n7AOa}zJt37{VGDb1RWKJ$2g8O-N0ba@L{g7nlk|o-4z8`|h z2^45($Ov{HuB}3bL+=tjK|ElBbYZI=2{K+A;E^D4m_8EZhzNKjh=v5c6C_r!UV4H^ ztZ>ep>B4+TvcbA!2~vYy-W)TM#fw$x36dq$(u-i40Uev3tsG0%58#3tyU`EL2B`o5 N002ovPDHLkV1lwf!X5ws delta 488 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CA>L_t(|oXwL>PQx$|g?)pOFW`zCAiY7k zjS-td(3dCk6txdQ0XOhA?XEJpwycpHhMe-RKV1NvbUFek*(3|lG3 zj62R}pz*!X#h|w95x5E$)lqNc1o+{zZq+KhTIZN=w4MN?Iy+*!E<(kGVztA# zK8s4f7NJSZWvyC90OmM*3Z7nItm%umX&wPZ7H17h1K90{pK!WCuA#InB54x%NKtOMF9GAGBH4Pet4Ls;F_|kIyQv;X)Nd51O?EXW7S2g z3n&gK-U6UX+%NJb0OvBS+eqO$m*u-A_9$K3?xG5bAaB;m4?=amjDf3N%kLC{%shZzxx#xQd+o7#Vz@%`QJ0(@!L|DBWRE{o{spYGB=Sp#TJ`WXQ_ z4_B+`AHAl??jW!P5%6-5?&$Z_z};UGr@;Nc*9G?+Y_+d+;Ps9y&OM_bL~a*%;H z=qb5_4BW#QbC40h0`4Fqhg!S{rXJwh^lgo`L3{v-9UG)GrK-sQ0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C1;L_t(|oXwL>YQr!Ph35u?E}&2!z_~$s zoKkv$KrWC_sCTVJz&S|3cd@e)hOw${A`DWMq_U)zZcE?B=+m1K^J9QNlluV_pqfwU zKr67(ge?lU3PAGia1_M~mr82LN zB1GIVwm|VvzkG%0cTU`hdL4l6Xw^yK6#zSZ^d7`l`;tnL0C0UFN$%TNv7<&bl-8$7 zh`NnU0$WJ&oB&+XVk?>mtkP;~)24ZZE=h6mKrV#;FF)aYgY4k)vYb2W44^huUaB*7 zb^Xps#`DF3cVie69S_3aVjIEE7?lDNmxrf$3U;WvZiFfB&!8D&%FJUyw`A0f$?78U z6Y+HfuH*Ns@+ksq3+m-20i!L-W=L}!tdz;@eFw0V`|JmCeVGB<+s@_=Tw)5Y`|+)9 b@S8pXJ38$wI&vi400000NkvXXu0mjfsEW`k diff --git a/graphics/pokemon/vivillon/fancy/icon.png b/graphics/pokemon/vivillon/fancy/icon.png index 22fe6f1a0161bc2d18082de80cca10bfcddb8a3f..10d9a2e9b246969bada468eb7c8083bf5de23682 100644 GIT binary patch delta 435 zcmV;k0ZjhK1pEV#7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004NNkl+7AqeG=?tBn&9;^X*J3;0REl4ls4 zLXa5)1{#7OONnDcXejaE@!0iXD8UC*ILK4%K_DD@g2D$X9%Ar4t}#&vNb!mzE-!yR zLIP3>aS(ue*)lxF+^4`&y||wmkQh_Ga!*i9PJPEjiOioJfdVH^aTK7$d7XU@;v6?Q z6JVC-Z78iWn=VOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C=BL_t(|oXwLvZo)tihW7>|Utm#u0Mn;% z8fc*iD5=aPh@eV`a6>o+N|nD#?_Gdvq zfM6iZ35ZF-lvRNg`ns;X1RpS90K@({`y2vbFw*B5g$tk_e>MOBy4vQh*BAj&SHS$S z5irI1t2oTYCgUOqT98iG$ybVeA%h?gN23602bfiRI~G8`LB6(tGJX|DD+`ngG2gy8pi*IUU$`E9RhF?+ zArVBy%KJemk7h1VxyqEUfHt_`v>)Hv#(s+r>j~j~5HGp-IsgCw07*qoM6N<$f>aFH Ar2qf` diff --git a/graphics/pokemon/vivillon/garden/icon.png b/graphics/pokemon/vivillon/garden/icon.png index 03032ba4d85b8862e5c5169d01c1a55fca7fd1f2..868f8c7fe31af20ecc5bb0ed5ec1290d0d5a6d60 100644 GIT binary patch delta 409 zcmV;K0cQTF1mXjb7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003|NklO0# zDju9FDa3OzYnycLg%qV&JBR9pP=C#xYq4p!Xq#}ZhhIE&aKCdR`LTsHepSZt3;&N% zRDbCAP!|cq1F9pp4I~JXF*qleCyH$rû}r?0000U$7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B%%L_t(|oXwLlQp7L}MSTN}FW?<=fN+DQ zQA&~~p@VI9D7n&JilKLK3L3>MPLW2&yGvplhL%B%C(mDBBTEtD&%*xzR)AfC=m zjw+aKxOQWfkOKh%0GmtpCF})&Bbx$nxBv(s*dQ%N;5}OCe^!BDrHq|A#3kcO$_;e4 z`}!;8_^wDz__6}lwAH4&M_hn>{pbg*V%5H+vh9*8zAp@QZ5=!IR98f4e@DXZu8xl+ zxEOGs065U*F?t4povo|WM+*piVsX-lJV5;a2ougXh>g$N3S*oz0JCfIR=uls=W{g~ zr(KZ1xQvOgaKUg3^$M!iIhz8)Q{icy0-HwbQA}}v%uz~dqXPW3Bt0gp3#492?IZA7 z-E7O}2$&1%heW|67v+OVJsLK{Q_`XLP?|RTL403kfZteiu7Cri;JhE-o=yA~pU*$p U*CwEZZU6uP07*qoM6N<$f`b{!9RL6T diff --git a/graphics/pokemon/vivillon/jungle/icon.png b/graphics/pokemon/vivillon/jungle/icon.png index 8d83dd4291218cfd3d5965b3cadd85dc832f3c7b..1a3249596c47875e141358689a23f8a7a28812ba 100644 GIT binary patch delta 396 zcmV;70dxMF1l9wP7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003+NklqPitHW5Nnyn`aE@VQ3OPDAglC$IS*0iEcAT$gVA{@rtruzx4mLTJ8_|8G-|} zydXX~afitWPRh!~EJUk#e$Q3V5$<^ZCnsZ-RZwqYGAh_(sk+ex)BxyO?VYSA+(BRg zBH-&FG^%NIfzClmYQX2$07?q7)=fSi50>a=ln{kjy>&Qt2QW qpb6YTGKVUj1WONaZ8=-HmaGq5w;jEk4OKJ%0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BQqL_t(|oXwNLQo|q+hIxaXyZ{~Z0O=dl zi|6{}(Mykon)DieD0(!zVrvNKcy-(h!^girv&*8?pN0GYK~cy%5*35uRYftRdh+MMiu^5qv3v|o^#ag?Ne-d)WUDIq%2F8A+#EXWW zVKU$Wy8%aw#gv=#>j=E`*<zYmcd`c2pbcD(G>6B~+ z?#QWO^ppXvV;9dhj|==Tc=f){4`S0afwO{S+hFj;=o0i9dRl=D`hM3HkI&p7hqCyes+@bm)GIkZrXnpV5+=ees5fRv zPvI6ZKY!@StzX*~fh?hMGBH6=aZw5hXn!$S+ z1W|`XUPJ2yAwY6Ac$b18X_1$w6J!M-vrdo|p<*_JAR7jBZ97|QZ4p1@r5X`-n(6WS P00000NkvXXu0mjfgN(=9 delta 484 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B}-L_t(|oXwLva>F1HhPlBGr5ilf0hGc` z(l|%(wM1i&JJU#Klbk{{D`cw>4I69+0m-DzWE%}1`(Sr}G4^LhKY(FimJ<-040F*7 zCgZQ|kOky`0RvF$XY|tyz^U0Q_?6`r;g`b|sc_n^d8$(Adj5c1&2G5196MMO8@= zhs0dbt5X7Ck88y-0%s;Oigaim0VOH!J}ft2|KI$Ea|Jm~d0Rwk$^cBZ$y+6RK0dxn zl3_l27Z}2tc2G6S-$EThWvy4LSOBVf;d$AD(@onBY>xWTSMJ3#haCRxFC5z;kuIRP zppX$zE8chICIaUQ?E1F^46Y~-I?d5I-5-(;iJ;Un`$4EHGvGd4>v9j+Lkb@H_%=57 an|%WN`s1Cx1a|ZQ0000lLSDyU zg3vq$I@l3d3njJ%;X*eQOZeFJ!4M%CuC(n_>?D*?E6m;m!6I}#nWZlY7B3ulpo)Q`=r z@l;vIH~c?VG5jH(A}6z;gG3IsjU-rlz`&MwE5?HO0qv(5Jo^v2ri}mq N002ovPDHLkV1g53#LfT! delta 490 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CG@L_t(|oXwLvZo@DPhIIo%7f?_gK)ykW z7+rddb}$z6(`AP6#eNX}#h@Zf<~RKP$zkad#Ul3H{v%0tko0#{3X6+LI z-fz-U*_X%bd^rc{hT|xKZWwbJ|oA}K>0aWeV0o~;M1& diff --git a/graphics/pokemon/vivillon/monsoon/icon.png b/graphics/pokemon/vivillon/monsoon/icon.png index 6430f1f1b7a9fad31ec8da751dc1b3d151fe9dbf..2eb6221ef4cb427ef2d392c005b7cbcd329607cc 100644 GIT binary patch delta 420 zcmV;V0bBl}1nmQm7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00048Nkl1i?QeI$q z34+fU2rv+srzy4t;X;X9!6WLy5TO`OxcW2MgFv|U1i>3loN(!J)kGr*AL4lfg@1oe z0=!nUL8Fy8(&42HDPSm!XAUymcdOPBgn89xG4q3|&=HuRvUlY#W%pxf(iupN{NkAq z*rhNP67`r(6}Tk$5PtWNJ1I?~pUDSPlr<)#fl6<0XH_Vos654WIu<6?*m8?}L*`B}>qKPIsxpR(Vw5 z0wW<%1fTQSDy%0c1s5S41YrfeN)f&s#D@&(^Wz{$w&r$_>Du7iL1trNBe#R>v&}v4 zQp+73O*I^n#|nwz$1ODn$^1o}5R%x7sx${#WoQnv@PLLb-&T$#=M4w-837QuRyIEX O0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BlxL_t(|oXwLxa>O7Eg>?fBTcyHd(xk$L zd;17`r*yf*=4`Mj;znk%YborH4J4B`6Ez+_o&-`N`Onh0Yp3mSbDt`LXktjeis01f9(VJMz)MrsRpg;het}h zXwp%CKHCRiM}u=_QnCScUc6IJ(|)SAWQ}>*0f;w_ygg;dLi%8-^cSf$uczE3VB=K@ z@JNkOlmUk|L|Zm3A(W!TRReV({QpQ3u3r$JrM4x~uNA;`8EdPu4BhR!7n!+B5}da& zQ9rh67l#adYP^I3%;K&G$6% z2;wndpdpB|OmS=oZJf#_zlaGHA zkWyl^V}Wp55YIWrl!hJ=aB@9!z~HF|C?+p`$DCP#B?bZ$yzr7B1es!L5)uLz1xdBm zQtEh2x=T`mG_pvk-mStKX#{0j{<{}0Z>6SIe1){2pvF z1^wFG9_=f+-F1kOg&yaVVvAusFs8$g-DF~Llb1|k+J>&kKy8tEo{y#Yxaf*%h zbN#2e%mgYPnU8&sLl2$eSl(Mjo>ZYHQM!Ye!8qOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C-AL_t(|oXwN5PQx$|hW!Soynrk60O1YF zV#G$4MwF#Yl&y?`rCktem(H-1XGn37DlS)gQntqP~W1q>K~C=S(!kO1dleJ)Yj0Lq&Ne*i!xSrv~PAt1^m#8H#L zH0PPzM#5Aad0q#GA{u>_Y~DHYQba~WC)iE0VNYNKyyZuliBlsAX@Eh08b6v>DD~Hv zPv>pNg#2lac7Ge3-Cd5`Au;Xei|2(kwGcaf#1?3&WVNt|RwE!wVwc0*0QUc*-mvQ+ zy&|_QqM>pCf2iu#ZI!Bcvi};9VtZAmK+&uTd!eXrVPrtmE6ducV*~JP_i$;}qF0k7 zDOlC|C*OFUC)J<ip7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004BNklbC)}WC(*coO07=u!n(idmBt<6QPeWCf#xZS`hk}buEAV zX+^x>rW$MUMZHrVqd!BSqVRpjfNJv)FN0|+cI72fybKH=5UpB7n4(WjYOPE`oqx@{ zq{VcvMYFF8FQioU9hv0lC8`vu`A79a7({Ar;M_0*M68T#uoOOcuzvEn3e&Ny@r<%x z-}L{rTfv9*9@?OOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CA>L_t(|oXwL>YQr!Pg>{2LIe(cC5hZ*nHt;6N86)dd^0(9}t4{j_vjIvb-;@69lyF=Kxg^aEH1Hk^Ri zWSNgDnCyH#n#_;`1`I%%yZas%psMHdh&BZmPg?u}PD%2KQ3&hwlp;#G8 z=QN-ww=xci`PuWB065@!%P|6PCp*Y=XfpyzQd~7G4`Ba4<`>R4$oG`DMYNkT0MmHR zTcvS#zI{UydgHDVFv~OHzJ8u>p$b4L=WGg4T?@M^tjnd=+AtUQryn@yb_@!j4M%NU zd=@~_q1Z=2T0E6fMc{pbZGTFD@rA7VG{?sGx=cDG0@KO ed>b44Ej|Hr=H!eSDi{6$0000Kv zeq=yn_)uWqGE#RRTELEt?=uIQR2vM^!u0D@nZoY|CNNm+(F+W#MC?0DNVit#S|u%e zFmtd4uTB-{EohG>M+R151IJ-jJF=0(-6jUk4U51`TT%@cA8NMfsC&rC4D@3wdpxtO z2e2^47}2C z^eVW|G;~w+{zOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CV|L_t(|oXwLxZi6rs$9;n*tGlCe06Ju0 zB1g!fvKXmK1{S=K!*uT*ARVw&J=}!BEOwow_@h zWKzTg6->%q&tsC10s;g;jQ8w&D1i3p&Kgw=VCD+|0O@Qve=bH~tyEC#76CDgNu_z^ zGae~j0T<2wE9LybkZHk-1(*)YPVOqvE`Xjc{U92?D4@?VuL|xzgV;WkIPBU`u|?MG zF|O~7;`yZvO(G_H7wZVX7FTPE0T?x@OBpxKA+V9fRYTGM^8dq4INcy4ZCaMKVoCr^ z^D!;e&h_E;fAl7!J~#=C%cxOoYIh5*2Te6=x2dHESYKbPTfZ)+W7myDhy9UfN~yYd z1=uHw-KfJ@0NDvy5rFO3rp$Q&#$?zJbp%F}<*kf8jz$izQH9n*K0G8pi0$)r49uJ9 mOsaq_#Nf6c-`Ylgi%&G==cz2mv#kIC002ovPDHLk0$_s8@zNOp diff --git a/graphics/pokemon/vivillon/river/icon.png b/graphics/pokemon/vivillon/river/icon.png index a7427d685e854d2e91d25e6d665bff8f5eeb5759..d33d8271c3751a739b961bfa0e0247bb377bf2f7 100644 GIT binary patch delta 410 zcmV;L0cHNB1mgpc7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003}NklPtkoYwMHvfOo z?V;yn!*mgPye*KCIG-Nq@>m0^wM~EJs2~GCgAH5DO*LOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Bu!L_t(|oXwN5Zo?oDhIxY%FF;g3fcpli zB4zK=IV0ZU4L18(aa6pWi7T0nD@kett-4md1^MH@JKgb{u|Es?0UQIjeE~7=SV$`H zE?zHFkx&8#3_!Mz>_@l<0FN#Q;Pnb10>`{QuZ4g}I#8Q{e+40|^IFO^u##$?#y3kNr995SlCKSyH^Z8~}Z%2`q#6tDX z4;g?ScSnv11n1pV RBl`dV002ovPDHLkV1g3^z$E|x diff --git a/graphics/pokemon/vivillon/sandstorm/icon.png b/graphics/pokemon/vivillon/sandstorm/icon.png index e90306872fe1cd403559b466f595d622bf0aa560..e5e0b987ebea774b762e8a73cedd061e034fe151 100644 GIT binary patch delta 405 zcmV;G0c!rF1l|LX7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003^NklHBJ_R4JOn7;~B9_)`P;3ZUd% zgO~)(2)O79x|SBl2KZH}cfl}gAPkU>x7>9!8vx3E225rvp;MMwx0(pRe3tp#fs=nf z?TGmtQ-OB+h)#qaqXimH&Zh@Lo@>A~z3gA2fXD>U;KHR%DfO&LZH*|#4EgV!WUv~zH)%~hJA9QsAmALn_oN>y5Bj2{MgbpzFqd?oBls` zBl4l%L)dfK9uVxULN*o@No>x^EqZ^)^S!PDA0A7R*(xdD#1d2ikU&()0KSL2Rle^v zJZKRK;sKMS3%BY?5Lq0o&nH2!>c@~EJxg1BBuEbEogj1g+!dY#sn#HoAW{Ur?~)}* znI6t~f>eN4u>`3S%I~Hp$R-0q+up5OE5;AUNF2-65PQ@B0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00BrzL_t(|oXwL>YQr!Pg>{2L7jUQ#;NBqJ zbe;PNOnjMa41;|JIV*!0t8O;}p{bJ8mekU1>1>QXy?J7OEX1D${{U8i-A};6SrL*7 zoQ>ChDH2K`KmcI($bN(c=*M{WWOD!>Hvj-_w88Uc1kA04e|{H;P*uiyRBFq3lJWqk z`r#{OeXFSQs>clkO-DV)47CAyeV=B9>D8&B2HOM#PqiV_52<3NGY*v3w^Fn?r6!3` z8+FM5bacR1N+4KgKTdhmA_C4VZW>Vri2omP!sP}9!(~~_=n4SNk7cRsalC(bljSaf zWg8RWi18MNYy{AIn*(ZZ5Bu}JE@sqv5kBpYS*4WL?F!&$NqTWS=7 z5JF9HgEFv$x*6u&qYLvqWEC<)V=l!H!c$X#Fb5q<1$2;u`+j_DoA@n00gT!A4tiES Q3IG5A07*qoM6N<$f=J)J=>Px# diff --git a/graphics/pokemon/vivillon/savanna/icon.png b/graphics/pokemon/vivillon/savanna/icon.png index 2665f3456ddaf9b4eb7e9441b008969ab1432b30..37fc6570df34d5ac7bca82f81ab88202b96a363c 100644 GIT binary patch delta 413 zcmV;O0b>5M1m**f7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00041Nkl8A;XPG9V0>k8v= zWl+uGp-o1Dc)$ed!mYX!MCNA$d?W~Z{A#WQnJu`)oggtmuLP-qg<~&0L4<}A56u#! zYpqE(*e+RuNI2r;n2{`AY|2QGETOhB1j`H<*z#`WSW<6|f*X<^VjCj>000R9NkvXX Hu0mjf%ig}m delta 489 zcmV7-Iwj0001qplF={000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CD?L_t(|oXwLvZi7G&hUW$&F0fWO0KS29 z3JN4Y&P9VyLxB_}6@?|c0LulE88#bHAd#J5TkIoI+9=bY{q~=KH4gy(EcgeIfYO|h zK}pb7g-TA>L+2&<01yz9{UiGk@&RxlX~1Sbozod0Vkx0df3n#KnM;XrF$+KoagqJ{ zU^1S9V1e<;q^Ng6Vm!qL=!#ZVn{N&@gW&v8x2L0hwT>uyiDLtR>#(J3k=crw#Bob* zeTvFF$!wEAhu3xC09?`{x1N(gDmi3s(4yEXm{a8eRKw0M zm4|$H{~D8Sd%Q`oo5w`yE}w2Ov!EP%=>j_59`4N)bn{kK9rSj88WjYA9E}2b8Bo=I z+OZ&sGl|3kuEg^ya)8z$)tABnoerbd#`W0i_Of*q`3yT%rr^ f`|+)9@LPNV+!pO+x$cg)00000NkvXXu0mjf)jrRF diff --git a/graphics/pokemon/vivillon/sun/icon.png b/graphics/pokemon/vivillon/sun/icon.png index 7b7974210f5df659b5131604942b88a27e62082a..0a8af5e68ffd56e6fd40c2166260c993111e1617 100644 GIT binary patch delta 411 zcmV;M0c8HI1mpvd7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003~NklsvF}<0IJ@_ZUn;hNidie8ZH5DJ<$k|QUY9eel)}JoQHn~ zY4>F~jSLbzs-5-J0IOx}0mJmL?_5lREgl3495^&7!LfreQesh3s#}9-m!zE zt-_7eBC13AdoOAh#5#lwH)4C35O^4Dg3w~ChYubmxX+xC{Mtf~r^OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00B`+L_t(|oXwLva>6hWhW7?LzJQqc0Okgy zQ9?-rl%xW8p~IaytBe_UYem7h)5gG9k7UwjvW>@|{{7{B7~s!>e*g`r-5W9(4c4pB z=;8R%MhP(h1jOayk^Kn$0N9fb0rtfR5K(IAigGkUW~p(Ve~$vNLe#q3Ntf}IBokc8 z-I!uN1c|F$IbapdRJ~nF8bNaUtZMn{OtH!+TW@#nGk~kKrt_-w6*Gy$hQj&`$(OwJ zO#+*qm-7JNlqP}aAkaqlW!SU646LukCFr28y1O!N^5Z4V(}p3AkHQm6k|(!JhQCh zoBkiGX#OxiL(aHjIUq)@&0%K5$BBQ%oFYXPJkMhn_?2UDGVfCKAy9`~Wqy|+sLd<; zord3(BG;!f)o30}(HsO(Ap>3xGOR9hKMn%TZ_Vu>GA4+deLF}=0lOVUHM_ZSmY0KM z8JrMzkdjx}&Kv6vGIft&ypbuu0?k2Y4i&o@4zloorY(1Cu1(?x)(;!suFeihO8@`> M07*qoM6N<$f?lM$ivR!s delta 495 zcmVOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00CS{L_t(|oXwLhd0IZai z>GWQW5f4JlP^)eJ6>@%;Bs-;(5!iy#;*{-`8i6=o%35vRt7S~_KG72ZE~AR-EO!+% z$>o~-`p%@5tJF0KY*eYt1Gu1>R^)&+t+}Lr(|UyLrMPJzG=%?e{e;5}vNeZgG3zz} z*mj4oRPOYAe>kTk%^<;M91~?b-QQw90j)1xzp3d2=;`)wmrv_bABv)Z&h1Zq7D5=O zKzqkBzYv6IKYLRr}4@GYa=R8uO4V@6t8PP$J|y`?p4T)ag_xhgv&Sp_RSVH lRNw-AFzm;-w!v@q3FvR{ut8XfUH||907*qoM6N<$0fJwo(}4g0 diff --git a/graphics/pokemon/whiscash/back.png b/graphics/pokemon/whiscash/back.png index 8741f6e9ac109ae6820f40920cc05232b64331d6..07e3fb0f68647426aad382e7d614e73beb00c760 100644 GIT binary patch delta 537 zcmV+!0_OeH1>ppc7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0005dNkl!^7z|gem3h$H)CN)2zTz>X@rnp z=mGgs;WUjF`|}O&w0|_k=LQ-UIxB{;|J7zTLPWk1tboWgO;8jD@m%n<@Nx1;Sf_tr z=)?2UvGPHtXju&7PG32;0#i(!V1S^eJ%cnyvllR)-5}D!k+GpT2-qv66Q36AX&(h2 zV-{G2CT>Y*!zKWkd<$oR?3thPLJ(7OiS%&riOc)3@mY{tuyk;d=Tqg0`_va;5VB4& zi5vwME)2R0Qr-d%!x6LiyMk;BU4egB$U}^6d^OA*cS9*iUcbRRj$3RWWS&L1DL{n; z!I8(6F&6`A@D;yGEx_Z43K+tf&-iXA1!HN5jRAn){$V29(O3x93ba-@3MxJuh#=5< z5B?5PJ@HiY5ReO4mpSG=jN}5=gTRVad^X^@vy1Hp{3ehFJ&s?{_PB(BGOK?EUT>vB zF=}WCi1;MP>-c&xNK5Dl+B~jjH?4lM-!6bN>A*XJR)H)5QS%=O>^;FDTo>pH@WS9X z1YI5_OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00H<(L_t(|obA%TPvbBY2XL1(QpP&HO003| z9?HTKOZ-sH^y|{%5G2Rg^opg_eMl;ZjBZQP;;})&He<>EF-vov{SD_h*K)nbc zfn0)H1Bd+o%OD6`F$8#Vd2Sn+TwO-E8N+GVtQ824=N`x}Xm8 zp~wm8n{_~0FwOG^fcUO5!X@Ki?#Udcv0DZ<+c*+{sH@*qu-I-Kuav{f)N+dvIACl; zy;2Ul)gQkKe`XXO)BY*g{R)yTz6s#)77HiOU`$Bwr2^V)<}g;uiE*`ip8FDPXOvyb zoKk)86HX;S_JS505Q74Y1^_m5Ghpx`o^o(bcn%Xi2TOhrd!05bI*b(W42+F*1Ky*@Zr0))ORO8= zsUU)Y|cJ?YX*+BwI5n8_nP%4VF?A1hX zgLslZ%r|Eg5A);|u*v{D_X9A!&1P%@a9cZs1QY86F#et__q9{XW8(dY+q1AXV;P_* mio*Jg9z~Ba4$)`*7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004?NklNRbT43A=xtpqA+`WY8{mLYdZ2$a80>u)KmgVe4YL9|9;mjI`O6uomr>1V4!9nW zN1z_P4UiB*j79*Apj+H*E2M#38zRxVJY$Fk(5MvvYWt!F*Z`a%u2HJ6u}}a>=QOPy zX&-S;U1cwEX7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00FB>L_t(|obA%FN&`U<2H<7EHqUUZO9F~b zX0Z`0_J$xtQyE{tcPQ)rQce_8ziaoib|TDEt&1T#VG zq-j)KQ3BZIJRNNtOk;rEj?y5`(*nqh#Q@x}1bQt7VUI?Ps1e+$4k35I$|5if(DHH( zpu{2KioqEDRosjzMZ_qBoH~IDV1OII<1knwoFfU1Jt10@(|?p73>okq5|KdMMg~nR zfhYhj0(7luv#ubRO-F;z3V%u=c=1NhblrV1ib8pj`l=leYYl z9r&CscnGU_2)pj*Brp4`>rA%y2m#Bh0Vhjh+V}UFKC$? zCh~x$3c0^wslv-vLPh~>s_-!uN`BP?rMJ1Qh^5->Q2$GVX3}SIwWL0(A{Wj6tyv(R z9L=h8p_1f`-of(WxjL8W`0g6ZB(EtDd diff --git a/graphics/pokemon/xerneas/back.png b/graphics/pokemon/xerneas/back.png index 30654685a9aa68df660096ea723b76225466e367..5f38d48dd36b1254066a07ff5e00277c72cb8209 100644 GIT binary patch delta 669 zcmV;O0%HBf2IK{h7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z00070Nkl^IC%2VRT|9| zxMwxo3&Sc&&|Ja00~FmY09vQ?Wd&G*1z0@{ZmQ1V0syaS?79GOnxO$K^}u=5g3W)R z0C>?Y^hpBMLIZFUK&MaDS%kADSb(mY-H;0=l*-Tm5IR+(*WE}l#ta6a3A7m&M$RWq z7y(8@OB<#VY!d(~0A^X5-Ec(-V;8M~fu#55Gc?JN0UUbL3k8S;o52ED{^HmRb8p%U z)6WJ#lLr()Z-5>pY=IG|1OX)H*y?{rK(c@tQBM^J05iaC^t=t|3Zk(<0QOb$r!hb8rsh9{p16aWyi+WkUSZ)Xmz>+}ZxGZ1$ zAT3J-1IYE)_B#tifDi-#)y2NNT9954K>(WIByTOC1&E8Yz5rqlj8RUg%nN@#|0+rB ze9R#KDS)~_;sS`?iwT(*>c{{ed9t1jm?<~yKvbDBP}vNim7SswTR?~zkb=-(nX31} zZ;v7oiY|$~nc2VrKm^|j^S>Cyz!tz3LRLkSfIkUQ3?$IjLMg2yaTpL!1`?r^Zb#%1 zt^l*aS|0w8KrM87T^`RPpZ|Zki%S4mSOenmi6R!p3?jafCqi!_CVBH3yC=AgKpW^i z;yq!pnfUfE$;%O^UGVr`n^#YTOA$HdXsRx{X zen-GZW&ahR+k`&=m~-??{g;I3OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00L@BL_t(|oV}CFj-xOTMGMKJY+G3Dmwry2Cy52eMA*_!NjytCO404 z36yadh@2{9v7;s+`Y`*fQ`6V1@PO>&wd;^tzV-qAX;eCae+(YNl811DAhpX zfT(QTu(iX?3_`}XiA=;^r;LlKPnjDaDQ6!RAbsfpNqOMjEXi6eVrg6&;PZgEohE94 zRF)#uy=Wjie@Mh!`A%;bf1>g(%#W2v0tQbb1VFn09%~B#$KFdf?|ER4$)kGI@q3;Qyq%g5all%$-o52p@NL#QCTcZNjga$PMeK_?3-cRYj0xWz} x{sGvizqDzu?fN?V!1Zb-`D29>{U6rAAKMYd5wj-Y1XTb4002ovPDHLkV1hL=PFnx~ diff --git a/graphics/pokemon/xerneas/front.png b/graphics/pokemon/xerneas/front.png index d219e463b93701b4354211829bc84210b9308993..357f3b4294afcae027cab5710590b6abdfe3e65a 100644 GIT binary patch delta 728 zcmV;}0w?{B2cHIz7zqdi0001;w}I@Ddp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0007xNklPY+YxU>{)#u!8nKLT0^B&K_%+|+xpoW@x4PeM&<%HdEjTH>hadzOOi)=|frV}b znv}G)5PS$B;%~!|c92w~%{q=jhSyWh<=&vdbu7mLCIq#}1)spD z9|XW_fbuxJ5-$Y^Q1X`o3s5Hb8$ta{1Q-ZJ8h;%ioCR$f?6UzABU`y{Uv_^%UCtIk zq<_`$ay^RZct2?Z!HRel_hnOqh1(Mt3;d*iACxSV6Qh{jc zLpT3)Ems^Ly*$4APW%dd;wk-JE8T#mDG6VHGw0WZpD{WHwI-{ zU~|Q(01qF`0A3boRS1Bt3$P_Ip1d=G8j>xeNdd8KJav1#8~Aw@96c~Wt^%N?Ed-v7 zz+KR`R$ST!mDBxB_05pm8^Xb@3CgEn&G3t05YA73Cjcy&OEcZj)O80000< KMNUMnLSTZ%%v^^6 delta 839 zcmV-N1GxO3295`i7-Iwj00013M{Ml?000McNliruOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00Oc}L_t(|oQ>7LPuoBg2k>{ul7(1eyQoqp z;-pk`OH7w$Ii;3R$^ryCRY!^si3wHsuHvug4=+x(776887+6UDxxRBq{5$PaVwC%S z{9b$)2>?|lzR3bK& z`i6nIL7^n9cW2%VxT>xO(#`e(j{Uh&0#df=p12OH_f$#es`=VmE*Z_rL_{W}q zY#X*)5hoR%f0!@(O}ky1|6D>pF?rt{xo&k1p$G-*hrH%~1RiInwm7fLK_B{F{|#RQ zy1_ToXSEZ++P(g?%Tlme$ce+8F1t=2Ve@+dv>0O-r|H7D0KjAiqwp#N?h8P3b^^V`yh92m=}f0*lR1%#YRnVWEwfDvBRR*271 z<{Rh=aEAM!Unzu-J|Ajsi)db*jLJOxwzTDq7WD@E5k9@n-m` R^`-y-002ovPDHLkV1hU+cg_F+ diff --git a/graphics/pokemon/xerneas/icon.png b/graphics/pokemon/xerneas/icon.png index f59ee416fa95623291e0229eef19fef615a5b3d7..31036c9ee11e4e1e55ecb75adbeb05630153bc3f 100644 GIT binary patch delta 361 zcmV-v0ha#N1hWH>7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0003ZNkl7F)ZQd${)(RV`BxU=9z_bMVyX(Z&U9_D+vSSAx-bj8E56kw}#p;~LMcbi-m^^v&% zNJxJ+HiQHsBJl|3tCWIg)gx&DR;>hbx=c?R9;z_fPVrIKDw{BON+5CISKT`~mp=%N zdvHAmc-!hGuJs3CD2>2|C1B{ip(IuB-BYv|fOZABPN3Zbo}xe2Lca<9HL$(X|80He z$5iFh=0`d}runfNAY*>q3=q%p9U$)=Agh0PA0X@XhxzaWA^RkSCYaLj00000NkvXX Hu0mjf`>n28 delta 524 zcmV+n0`vW|1JwkO7-Iwj0001qplF={000McNliru`02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DVPL_t(|oYj)QYQr!P#`OkA_O^MEKA;T6 zUL|njXXzG!V$reSCS=PX%PL)BkgcBo%b|rrr)rVz<9v7D`A5hv4p;)+ZSm2Epsd3u zC^rbIEtEUqBR>(}DNY)B6qdMBdDW+&BAA7DZ3;USEjZ(ee~%AZjcpv`5#Q%V+NrOI zcpjxv&66~|&=}iUfc(PcZixwK_L*M-!HG!HBy=Mvtt|0Nj%N`%tf0=DeMX^2#Dq|AI`(sgPN?o<`wYGGO~Eehi)OM{)xUc$d;2FvXPvQy_DF z&>8;D!VklERCq#~V_uGC8o?vxulhLgfp{>UKA9Pyj-V8Im;oa2_M8hTePGo@si=Zk zTai4PfDe!?-P3R(j?ow^EObCkGqM5(YMgxqOilk49x$Qb4w&`%nU62IsxmsNs@!@2 O0000<%0l}1qVIkQEUNX zD=5*C*J7`Dcfi`zd_MD5wRwKLt3Z!JuoTDpir0f&93&>AfXsfEp*A z=n1^$Pk%rEZgvkndgkutc)QNf`M7+yZwwdXATO;_gbBF9Yf-zZCr|!iegG8c!4rvk S>OAKF0000OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00C}EL_t(|ob8lNYQr!Pg&mXwRJbPBh!~qd zx=HYaEV`^k&S7fM6?%_$rFC~bMlaE0bVl;8l-RpMA#eM>d3qx`Ns_z%k;KCiP%ja? zB|?}bVz)$y%^U%cB+ASXg-$_aGlVF$hEmTEYm_oAE>l84e@IZoh=Bcjm{BkxyK!p| zlSLFz1QT07ZY_>mf+PWCRO1zBZ9DZ7Ql#(56}eVZ>6;m z`A6S@S~fr57Cys^a=w%&O~L}c4k55cl6=%&PfAa zbOmBG-iz1ner77R(S71|3+0iGrdKVO{^0KVL;V6q6ECI(W@KJe00000NkvXXu0mjf DX7JH0 diff --git a/graphics/pokemon/zygarde/10_percent/icon.png b/graphics/pokemon/zygarde/10_percent/icon.png index 3d968a6b698f72dc28537462de56151147e500b4..222eb1b80a5a53ad9d015506ba4482133819abd1 100644 GIT binary patch delta 307 zcmdnT{FiBh1SbbG0|SFkKGU*&q{r<(KE<{%+Mwa3B z5+)hth%?G_@|9n5`oEo|;h3^TBvVv{dGl7Kjs4X;6^d_YC>m&@PlUm_LXR`enP=yL{7S3j3^P6OV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L0081iL_t(|ob8e^4#OY}MY)0HAuAlBC#aOJ zMUk30m+0KPMrv0e5?OIgLP}ujP-Uto{Pe#u#zK4-ROL{E;265n0l}7zV0H>HB*IcA z`6fh?u?)?_g0YjRV(oTV6wnw{@#O952=X)%+rh6nAS*c2e_p4quP9w&!w1GKh69e%99qTa<0LESsU>*_J zMvH~7UszPcmsHQ;65p1 SX7K<3002ov22Mn-LSTX>JeG3+ diff --git a/graphics/pokemon/zygarde/complete/icon.png b/graphics/pokemon/zygarde/complete/icon.png index 8575e8d58d804fa5e6a345881dd1fbcb9268c4bf..663b98fd74fc782251a0cd6b406460310e1104f5 100644 GIT binary patch delta 464 zcmV;>0Wbd01epYo7zqdi0000?P=%b4dp~~=bW%=J|NsC0|NsC0|NsC0|NsC0%^|Xs z0004qNkl+qNHH_?9aM zwMHF?4_OjWh6L~cK!qVGadHhPGy9TN2?CCt!i>5kCPcMRd0&76gCn zG4oQ^fEPHlRvArP2y3y2z0nz94*xqbj{|l7DfpI z9NCXR-rzmAQb&#XUrqp`nM6LEp%1W)^LQhW243X9c>N1x`!fPT7RY6g$g@CV(vv`_ zha`}0kR%WSlR)~yo&qs{41vU!INPxE=l)232!kYnxIdB~xl02g#cSaefw zW^{L9a%BKVOhiylM<8}(av(DOV1ZP1_ zK>z@;j|==^1(6{?e*t1kM@0Xn2lB-L00DGKL_t(|oaK@+YQ!)QMRkKg5Zq-#-Mz_El|4;MYkb_e@3h_0Fn+pN~M+zVBtUg z*aa9qw^X!>WSJ7$w6d3oDPv05$)c5mRFcC6p2nS&ui9eB_{4M=t7rDZL&iw=)DV%M z6vx^U9!d2rYSUcQNzdhsP8AZ%t~;LIW*{6;-x7N8em~4WSYnGa;L9Mu_g$0rt&JnG z8Ny*F@}*bff0tvMPVa%O7=R%H>l=seMXUf^+$A(*O;flT-=5EfyJzqDxAm`taZwnx z3ge Date: Fri, 24 Feb 2023 08:46:34 +0100 Subject: [PATCH 133/290] Basculegion female form --- graphics/pokemon/basculegion/female/back.png | Bin 633 -> 628 bytes graphics/pokemon/basculegion/female/front.png | Bin 928 -> 939 bytes .../pokemon/basculegion/female/normal.pal | 28 +++++++++--------- graphics/pokemon/basculegion/female/shiny.pal | 28 +++++++++--------- include/graphics.h | 16 +++++----- src/data/graphics/pokemon.h | 16 +++++----- .../pokemon_graphics/back_pic_coordinates.h | 2 +- src/data/pokemon_graphics/back_pic_table.h | 7 ++--- src/data/pokemon_graphics/front_pic_table.h | 7 ++--- src/data/pokemon_graphics/palette_table.h | 6 ++-- .../pokemon_graphics/shiny_palette_table.h | 5 ++-- src/pokemon_icon.c | 7 ++--- 12 files changed, 57 insertions(+), 65 deletions(-) diff --git a/graphics/pokemon/basculegion/female/back.png b/graphics/pokemon/basculegion/female/back.png index a652e2fa53525cb97b3484ca6d63b62320d56980..a1ce4263e250b63b02498d1a56e73369096fc024 100755 GIT binary patch delta 515 zcmV+e0{s2?1oQ-uEe8`c9xvW*VUaXae_~={5D*Y9TzISA;O6G$xA|hZt5D*e$J}K`FuFwDg00Cl4M@0Xn2lB-L00EduL_t(|ob8gaPQx$| zhMh2VD=Y}6(gnd($qX)nDIUU@A!6Yn=umZG!Wk|DQfZgCqEn~jF<7cd>C~xGfA3v5 zJ0%h{nXAtu@Sb z0kUt6I&MJ5L299HYlM<7fT9b?_Ii}uR8ak*DDvOJH`l;Fh-1>L=c$Z~rFvSS=+*NG zw##Aoglk2Dv&S>=5sT%^3fHj_f7(0V{pN{$Lo!x~;+=+c2BqOFc0O9hGYzOJJ5+CzS$*}ae!%$xffP= zv?WrIF->RhlL7IDgyYjnNRvqVce%x}#w4D9j+r|+HbP*3sSuG=B+!4IBj$7bWbAS@ zGE)xdOi$HDL|(3SfxBgND&fosLg5tr`@(YEc30aD`vPdQHJesDJ+J@(002ovPDHLk FV1g#*@I3$k delta 520 zcmV+j0{8v&1o;GzEe8xb88|~S0g*IPe=v+#5D*X$Kp=Ris6bFq=;W|qJSZSAIH=s< zAYeFPU|`_n;Gm?SC|r2p@aU3f!ju3200Cl4M@0Xn2lB-L00EszL_t(|ob8e^Yr;Sj z$B#@xpr1j6LZNgqiwG{|4M~UF0-5|QVj~>dL zF_iS(#Rghqzd-$u_xs&@k9)`1DW{xr%0J7Q-ux{9a8VPYcih+sF$lv*9FuBd&<&&x zDN&_it}Bo`YgBOqLJd+V{#qdvybBcJL3q%k;HCoKd7jt$EqrqU`j$Axn`$0O-|O&? zHmXfE4`AF`=N~xbB)A7Wgapy+f4sDD>KkFU=Z$Y3%Nr!4ji~NuNOxHnPFOZb(MAjC zEl5~rRyZ#kr0)fnJKq3zozH$YDEK6Sd;1FRD$i!j8T@LX6@XuN7goqKc2O2c_14xm zLZe?Vg#4i_pxZR~x1jTU#$-8GcjvMW9oqYj2b0OiebKMjG0000< KMNUMnLSTY+Na?o# diff --git a/graphics/pokemon/basculegion/female/front.png b/graphics/pokemon/basculegion/female/front.png index 19275b7697eab3f4e0bcd5c29f34584d474784a1..5b91d3a84c4564ecdc6ae9f9fd3ac67f871cb5d6 100755 GIT binary patch delta 829 zcmV-D1H$~E2df8=Ee8`cDVJl*Zjm%ne_~={5D*Y9TzISA;O6G$xA|hZt5D*e$J}K`FuFwDg00Cl4M@0Xn2lB-L00PfRL_t(|obA%RYui8+ z0Pu5^p;;2gU_4e)V{C9rOmq~LQYfd_a$s7BgXlj{O4cLxZDxETVmOxh)xT<9NA_nrK0XXskU4MOmK??dlI$o=_WPs|*?+4`|K2a-czK;Foc zS1)D@cxGY;N@mo;v8y)5o%N`IK9-}ioxzZXET6ENpzI7P{rDE{0Kvit zR4LnXA=eaKfzlm#Ae|B+)?fwY8gVtY1QWj=>e{VG7(WlA+zng$Tk{W;{Ry zgj^RvQ#H?E4%vvRKm`UKLFd)4aiLw|MN!YN3`8^RAL$|<1SU>IyMA}(KU@h zMRf>C>BI#uLFUdaD_5QCAt=tr$#S=gaT1Gwc?Y;Z|8V{SnR8HrE%`V&00000NkvXX Hu0mjfsGoD{ delta 818 zcmV-21I_%a2cQR#Ee8xYEZbg)Z;>=oe=v+#5D*X$Kp=Ris6bFq=;W|qJSZSAIH=s< zAYeFPU|`_n;Gm?SC|r2p@aU3f!ju3200Cl4M@0Xn2lB-L00P8GL_t(|obA%RYui8+ z0Pw>Ul3)-V&0-Hhz8FGkyWnQ)W^scrgQj}ul0PDg{{lmxOMTq(N>PcOB^rwHf07~g z;x%f9tcijfH1s;COO{UUJNZNY$k4Tr8-(Ef-iO|akmvKio~%84i_K$e4Gd<$g0VFw zUp}rD2<-k0c-npnlt!dK0RT3(SP_F@Fv{K}uUbem#P3ybcOBml3n$SIKKM$7Y!Cz* z9*DMMVo580@whfZa1G$SmgXBke?#=RwFd5igO-*gmZvoQS^10s0)?59XjXKU2fx<9 zw@@Q+W1*A_p3n;)VOD$cVHn=WfCNDBIC8BNSS~p^X*Avm0PbR3DbBe|#`Abo$8ZC~ zic+nFsld6NHi+u2X*xw96uy`O>2>}vaZImKnrmwTT5*@V@#MBFLN=#ye@r((8Q_>6 z35do?+|wqXwkh2K4?7@m?4(5$w_=P(`$++FSY)!J>5vw$AIXN$avN%s_yg_$L1qqG zT0VGCs0u}anhwh4kwXZZuAtt~p4gBp&t_{?wvkBVF9>zD3XpfA9MCFcXfMS}8|6J#!|7R% zWDo?s>@p}{R2bCE^iy!P+<;UV{^$8lDcNp0DX|PPxJ#P1vop}2UsDQdv_r_yBxZs> wSvy5VJN68W*5f3@Ad;fl1lUi2=kpKeFSjpr%tD>0wg3PC07*qoM6N<$g75}_!~g&Q diff --git a/graphics/pokemon/basculegion/female/normal.pal b/graphics/pokemon/basculegion/female/normal.pal index e67011cea2..b5b76f062f 100755 --- a/graphics/pokemon/basculegion/female/normal.pal +++ b/graphics/pokemon/basculegion/female/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -48 140 88 +98 98 98 16 16 16 -16 64 32 -120 168 168 -64 80 80 -232 228 176 -96 60 40 -32 48 56 -168 220 224 -32 96 56 -96 96 96 -224 228 224 -160 164 160 -40 92 120 -224 240 232 +46 92 120 +171 222 224 +230 230 230 +227 242 239 +164 164 164 +122 168 175 +32 49 57 +65 82 82 +55 140 89 +21 64 34 +34 96 61 +16 16 18 +99 62 41 diff --git a/graphics/pokemon/basculegion/female/shiny.pal b/graphics/pokemon/basculegion/female/shiny.pal index 815fa8564f..863a0f773e 100755 --- a/graphics/pokemon/basculegion/female/shiny.pal +++ b/graphics/pokemon/basculegion/female/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 147 49 +98 98 98 16 16 16 -16 64 32 -164 152 77 -79 108 60 -232 228 176 -96 60 40 -32 48 56 -222 208 114 -79 108 60 -96 96 96 -224 228 224 -160 164 160 -115 99 68 -249 236 166 +112 96 64 +216 208 112 +230 230 230 +248 236 160 +164 164 164 +160 152 72 +32 49 57 +64 80 80 +96 144 48 +21 64 34 +72 108 56 +16 16 18 +99 62 41 diff --git a/include/graphics.h b/include/graphics.h index 2f6b4290d5..b81d9951ab 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -990,7 +990,6 @@ extern const u32 gMonFrontPic_Wyrdeer[]; extern const u32 gMonFrontPic_Kleavor[]; extern const u32 gMonFrontPic_Ursaluna[]; extern const u32 gMonFrontPic_Basculegion[]; -extern const u32 gMonFrontPic_BasculegionF[]; extern const u32 gMonFrontPic_Sneasler[]; extern const u32 gMonFrontPic_Overqwil[]; extern const u32 gMonFrontPic_Enamorus[]; @@ -1276,7 +1275,8 @@ extern const u32 gMonFrontPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonFrontPic_ZarudeDada[]; extern const u32 gMonFrontPic_CalyrexIceRider[]; extern const u32 gMonFrontPic_CalyrexShadowRider[]; -//extern const u32 gMonFrontPic_EnamorusTherian[]; +extern const u32 gMonFrontPic_EnamorusTherian[]; +extern const u32 gMonFrontPic_BasculegionFemale[]; #endif extern const u32 gMonFrontPic_Egg[]; @@ -2204,7 +2204,6 @@ extern const u32 gMonBackPic_Wyrdeer[]; extern const u32 gMonBackPic_Kleavor[]; extern const u32 gMonBackPic_Ursaluna[]; extern const u32 gMonBackPic_Basculegion[]; -extern const u32 gMonBackPic_BasculegionF[]; extern const u32 gMonBackPic_Sneasler[]; extern const u32 gMonBackPic_Overqwil[]; extern const u32 gMonBackPic_Enamorus[]; @@ -2488,7 +2487,8 @@ extern const u32 gMonBackPic_UrshifuRapidStrikeStyle[]; extern const u32 gMonBackPic_ZarudeDada[]; extern const u32 gMonBackPic_CalyrexIceRider[]; extern const u32 gMonBackPic_CalyrexShadowRider[]; -//extern const u32 gMonBackPic_EnamorusTherian[]; +extern const u32 gMonBackPic_EnamorusTherian[]; +extern const u32 gMonBackPic_BasculegionFemale[]; #endif extern const u32 gMonPalette_CircledQuestionMark[]; @@ -3410,7 +3410,6 @@ extern const u32 gMonPalette_Wyrdeer[]; extern const u32 gMonPalette_Kleavor[]; extern const u32 gMonPalette_Ursaluna[]; extern const u32 gMonPalette_Basculegion[]; -extern const u32 gMonPalette_BasculegionF[]; extern const u32 gMonPalette_Sneasler[]; extern const u32 gMonPalette_Overqwil[]; extern const u32 gMonPalette_Enamorus[]; @@ -3720,7 +3719,8 @@ extern const u32 gMonPalette_UrshifuRapidStrikeStyle[]; extern const u32 gMonPalette_ZarudeDada[]; extern const u32 gMonPalette_CalyrexIceRider[]; extern const u32 gMonPalette_CalyrexShadowRider[]; -//extern const u32 gMonPalette_EnamorusTherian[]; +extern const u32 gMonPalette_EnamorusTherian[]; +extern const u32 gMonPalette_BasculegionFemale[]; #endif extern const u32 gMonPalette_Egg[]; @@ -4643,7 +4643,6 @@ extern const u32 gMonShinyPalette_Wyrdeer[]; extern const u32 gMonShinyPalette_Kleavor[]; extern const u32 gMonShinyPalette_Ursaluna[]; extern const u32 gMonShinyPalette_Basculegion[]; -extern const u32 gMonShinyPalette_BasculegionF[]; extern const u32 gMonShinyPalette_Sneasler[]; extern const u32 gMonShinyPalette_Overqwil[]; extern const u32 gMonShinyPalette_Enamorus[]; @@ -4948,6 +4947,7 @@ extern const u32 gMonShinyPalette_ZarudeDada[]; extern const u32 gMonShinyPalette_CalyrexIceRider[]; extern const u32 gMonShinyPalette_CalyrexShadowRider[]; extern const u32 gMonShinyPalette_EnamorusTherian[]; +extern const u32 gMonShinyPalette_BasculegionFemale[]; #endif extern const u8 gMonIcon_QuestionMark[]; @@ -5870,7 +5870,6 @@ extern const u8 gMonIcon_Wyrdeer[]; extern const u8 gMonIcon_Kleavor[]; extern const u8 gMonIcon_Ursaluna[]; extern const u8 gMonIcon_Basculegion[]; -extern const u8 gMonIcon_BasculegionF[]; extern const u8 gMonIcon_Sneasler[]; extern const u8 gMonIcon_Overqwil[]; extern const u8 gMonIcon_Enamorus[]; @@ -6168,6 +6167,7 @@ extern const u8 gMonIcon_ZarudeDada[]; extern const u8 gMonIcon_CalyrexIceRider[]; extern const u8 gMonIcon_CalyrexShadowRider[]; extern const u8 gMonIcon_EnamorusTherian[]; +extern const u8 gMonIcon_BasculegionFemale[]; #endif extern const u8 gMonIcon_Egg[]; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 41eb1265f8..20ecc500d6 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -923,7 +923,6 @@ const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4b const u32 gMonFrontPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/front.4bpp.lz"); const u32 gMonFrontPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/front.4bpp.lz"); const u32 gMonFrontPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz"); -const u32 gMonFrontPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); const u32 gMonFrontPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/front.4bpp.lz"); const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz"); const u32 gMonFrontPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/front.4bpp.lz"); @@ -1207,7 +1206,8 @@ const u32 gMonFrontPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/ const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/front.4bpp.lz"); const u32 gMonFrontPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/front.4bpp.lz"); -//const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); +const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz"); +const u32 gMonFrontPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/front.4bpp.lz"); #endif const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz"); @@ -2135,7 +2135,6 @@ const u32 gMonBackPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/back.4bpp const u32 gMonBackPic_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/back.4bpp.lz"); const u32 gMonBackPic_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/back.4bpp.lz"); const u32 gMonBackPic_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz"); -const u32 gMonBackPic_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); const u32 gMonBackPic_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/back.4bpp.lz"); const u32 gMonBackPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/back.4bpp.lz"); const u32 gMonBackPic_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/back.4bpp.lz"); @@ -2419,7 +2418,8 @@ const u32 gMonBackPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonBackPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/back.4bpp.lz"); const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/back.4bpp.lz"); const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz"); -//const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); +const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz"); +const u32 gMonBackPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz"); #endif const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz"); @@ -3341,7 +3341,6 @@ const u32 gMonPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/normal.gb const u32 gMonPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/normal.gbapal.lz"); const u32 gMonPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/normal.gbapal.lz"); const u32 gMonPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz"); -const u32 gMonPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); const u32 gMonPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/normal.gbapal.lz"); const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz"); const u32 gMonPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/normal.gbapal.lz"); @@ -3651,7 +3650,8 @@ const u32 gMonPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/u const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz"); const u32 gMonPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/normal.gbapal.lz"); const u32 gMonPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/normal.gbapal.lz"); -//const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); +const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz"); +const u32 gMonPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/normal.gbapal.lz"); #endif const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz"); @@ -4574,7 +4574,6 @@ const u32 gMonShinyPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/shin const u32 gMonShinyPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/shiny.gbapal.lz"); const u32 gMonShinyPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/shiny.gbapal.lz"); const u32 gMonShinyPalette_Basculegion[] = INCBIN_U32("graphics/pokemon/basculegion/shiny.gbapal.lz"); -const u32 gMonShinyPalette_BasculegionF[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); const u32 gMonShinyPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/shiny.gbapal.lz"); const u32 gMonShinyPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/shiny.gbapal.lz"); const u32 gMonShinyPalette_Enamorus[] = INCBIN_U32("graphics/pokemon/enamorus/shiny.gbapal.lz"); @@ -4879,6 +4878,7 @@ const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/da const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz"); const u32 gMonShinyPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/shiny.gbapal.lz"); +const u32 gMonShinyPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz"); #endif const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/icon.4bpp"); @@ -5801,7 +5801,6 @@ const u8 gMonIcon_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/icon.4bpp"); const u8 gMonIcon_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/icon.4bpp"); const u8 gMonIcon_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/icon.4bpp"); const u8 gMonIcon_Basculegion[] = INCBIN_U8("graphics/pokemon/basculegion/icon.4bpp"); -const u8 gMonIcon_BasculegionF[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); const u8 gMonIcon_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/icon.4bpp"); const u8 gMonIcon_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/icon.4bpp"); const u8 gMonIcon_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/icon.4bpp"); @@ -6099,6 +6098,7 @@ const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4b const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp"); const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp"); const u8 gMonIcon_EnamorusTherian[] = INCBIN_U8("graphics/pokemon/enamorus/therian/icon.4bpp"); +const u8 gMonIcon_BasculegionFemale[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp"); #endif const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp"); diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 8f9dd8ee8f..39caae2daf 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -1042,7 +1042,7 @@ const struct MonCoords gMonBackPicCoords[] = [SPECIES_ARCANINE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_VOLTORB_HISUIAN] = { .size = MON_COORDS_SIZE(48, 32), .y_offset = 10 }, [SPECIES_ELECTRODE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 40), .y_offset = 7 }, - [SPECIES_TYPHLOSION_HISUIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 3 }, + [SPECIES_TYPHLOSION_HISUIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 0 }, [SPECIES_QWILFISH_HISUIAN] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 6 }, [SPECIES_SNEASEL_HISUIAN] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, #if P_GEN_5_POKEMON == TRUE diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index 15c176c922..78bcc2598e 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -1331,7 +1331,9 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonBackPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonBackPic_CalyrexShadowRider), - SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_CircledQuestionMark), //gMonBackPic_EnamorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonBackPic_EnamorusTherian), + + SPECIES_SPRITE(BASCULEGION_FEMALE, gMonBackPic_BasculegionFemale), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; @@ -1359,7 +1361,4 @@ const struct CompressedSpriteSheet gMonBackPicTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SPRITE(PYROAR, gMonBackPic_PyroarF), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_SPRITE(BASCULEGION, gMonBackPic_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index ff9fa33169..411a2ba379 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -1330,7 +1330,9 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(CALYREX_ICE_RIDER, gMonFrontPic_CalyrexIceRider), SPECIES_SPRITE(CALYREX_SHADOW_RIDER, gMonFrontPic_CalyrexShadowRider), - SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_CircledQuestionMark), //gMonFrontPic_EnamorusTherian), + SPECIES_SPRITE(ENAMORUS_THERIAN, gMonFrontPic_EnamorusTherian), + + SPECIES_SPRITE(BASCULEGION_FEMALE, gMonFrontPic_BasculegionFemale), #endif SPECIES_SPRITE(EGG, gMonFrontPic_Egg), }; @@ -1358,7 +1360,4 @@ const struct CompressedSpriteSheet gMonFrontPicTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SPRITE(PYROAR, gMonFrontPic_PyroarF), #endif -#if P_GEN_7_POKEMON == TRUE - SPECIES_SPRITE(BASCULEGION, gMonFrontPic_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index ee390c1e06..b47a74db40 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -1330,7 +1330,8 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(CALYREX_ICE_RIDER, gMonPalette_CalyrexIceRider), SPECIES_PAL(CALYREX_SHADOW_RIDER, gMonPalette_CalyrexShadowRider), - SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_CircledQuestionMark), // gMonPalette_EnamorusTherian), + SPECIES_PAL(ENAMORUS_THERIAN, gMonPalette_EnamorusTherian), + SPECIES_PAL(BASCULEGION_FEMALE, gMonPalette_BasculegionFemale), #endif SPECIES_PAL(EGG, gMonPalette_Egg), }; @@ -1358,7 +1359,4 @@ const struct CompressedSpritePalette gMonPaletteTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_PAL(PYROAR, gMonPalette_Pyroar), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_PAL(BASCULEGION, gMonPalette_BasculegionF), -#endif }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 78ce1d23b1..3501556464 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -1330,6 +1330,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_EnamorusTherian), + + SPECIES_SHINY_PAL(BASCULEGION_FEMALE, gMonShinyPalette_BasculegionFemale), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), }; @@ -1357,7 +1359,4 @@ const struct CompressedSpritePalette gMonShinyPaletteTableFemale[] = #if P_GEN_6_POKEMON == TRUE SPECIES_SHINY_PAL(PYROAR, gMonShinyPalette_Pyroar), #endif -#if P_GEN_8_POKEMON == TRUE - SPECIES_SHINY_PAL(BASCULEGION, gMonShinyPalette_BasculegionF), -#endif }; diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index f8851d4e20..f911f6e44e 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1293,7 +1293,7 @@ const u8 *const gMonIconTable[] = [SPECIES_CALYREX_ICE_RIDER] = gMonIcon_CalyrexIceRider, [SPECIES_CALYREX_SHADOW_RIDER] = gMonIcon_CalyrexShadowRider, [SPECIES_ENAMORUS_THERIAN] = gMonIcon_EnamorusTherian, - [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionF, + [SPECIES_BASCULEGION_FEMALE] = gMonIcon_BasculegionFemale, #endif [SPECIES_EGG] = gMonIcon_Egg, }; @@ -1326,9 +1326,6 @@ const u8 *const gMonIconTableFemale[] = #if P_GEN_6_POKEMON == TRUE [SPECIES_PYROAR] = gMonIcon_PyroarF, #endif -#if P_GEN_8_POKEMON == TRUE - [SPECIES_BASCULEGION] = gMonIcon_Basculegion, -#endif }; const u8 gMonIconPaletteIndices[] = @@ -2543,7 +2540,7 @@ const u8 gMonIconPaletteIndices[] = [SPECIES_CALYREX_ICE_RIDER] = 0, [SPECIES_CALYREX_SHADOW_RIDER] = 0, [SPECIES_ENAMORUS_THERIAN] = 1, - [SPECIES_BASCULEGION_FEMALE] = 1, + [SPECIES_BASCULEGION_FEMALE] = 0, #endif [SPECIES_EGG] = 1, }; From 079ca8ab2925c572c96a7042f2ce6d275bb844ba Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Feb 2023 07:53:02 -0300 Subject: [PATCH 134/290] Renamed MON_DATA_SPECIES2 to MON_DATA_SPECIES_OR_EGG for clarification --- include/pokemon.h | 2 +- src/battle_ai_script_commands.c | 4 +- src/battle_ai_switch_items.c | 20 +++++----- src/battle_controllers.c | 14 +++---- src/battle_main.c | 66 ++++++++++++++++----------------- src/battle_script_commands.c | 18 ++++----- src/battle_setup.c | 2 +- src/battle_tower.c | 2 +- src/battle_util.c | 16 ++++---- src/braille_puzzles.c | 4 +- src/dodrio_berry_picking.c | 2 +- src/field_poison.c | 2 +- src/field_specials.c | 8 ++-- src/frontier_util.c | 2 +- src/hall_of_fame.c | 2 +- src/menu_specialized.c | 2 +- src/mystery_event_script.c | 2 +- src/party_menu.c | 6 +-- src/pokeblock_feed.c | 6 +-- src/pokemon.c | 20 +++++----- src/pokemon_jump.c | 2 +- src/pokemon_storage_system.c | 20 +++++----- src/pokemon_summary_screen.c | 2 +- src/pokenav_conditions.c | 2 +- src/roulette.c | 2 +- src/script_pokemon_util.c | 2 +- src/trade.c | 14 +++---- src/union_room.c | 12 +++--- 28 files changed, 128 insertions(+), 128 deletions(-) diff --git a/include/pokemon.h b/include/pokemon.h index ab102000a3..c845227461 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -70,7 +70,7 @@ enum { MON_DATA_SPATK, MON_DATA_SPDEF, MON_DATA_MAIL, - MON_DATA_SPECIES2, + MON_DATA_SPECIES_OR_EGG, MON_DATA_IVS, MON_DATA_CHAMPION_RIBBON, MON_DATA_WINNING_RIBBON, diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index aacbe20ac4..2152be374a 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1329,8 +1329,8 @@ static void Cmd_count_usable_party_mons(void) { if (i != battlerOnField1 && i != battlerOnField2 && GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) { AI_THINKING_STRUCT->funcResult++; } diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 13cfb9bfdc..5789a3ff6f 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -86,9 +86,9 @@ static bool8 ShouldSwitchIfWonderGuard(void) { if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[gActiveBattler]) continue; @@ -184,9 +184,9 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -382,9 +382,9 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -488,9 +488,9 @@ static bool8 ShouldSwitch(void) { if (GetMonData(&party[i], MON_DATA_HP) == 0) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; if (i == gBattlerPartyIndexes[battlerIn1]) continue; @@ -823,8 +823,8 @@ static bool8 ShouldUseItem(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) { validMons++; } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index e5cfb3be68..b93e65fdc0 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -592,8 +592,8 @@ static void SetBattlePartyIds(void) if (GET_BATTLER_SIDE2(i) == B_SIDE_PLAYER) { if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG)) { gBattlerPartyIndexes[i] = j; @@ -603,8 +603,8 @@ static void SetBattlePartyIds(void) else { if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG)) { gBattlerPartyIndexes[i] = j; @@ -618,7 +618,7 @@ static void SetBattlePartyIds(void) { if (GetMonData(&gPlayerParty[j], MON_DATA_HP) != 0 && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES) != SPECIES_NONE // Probably a typo by Game Freak. The rest use SPECIES2. - && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gPlayerParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gPlayerParty[j], MON_DATA_IS_EGG) && gBattlerPartyIndexes[i - 2] != j) { @@ -629,8 +629,8 @@ static void SetBattlePartyIds(void) else { if (GetMonData(&gEnemyParty[j], MON_DATA_HP) != 0 - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&gEnemyParty[j], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&gEnemyParty[j], MON_DATA_IS_EGG) && gBattlerPartyIndexes[i - 2] != j) { diff --git a/src/battle_main.c b/src/battle_main.c index 508cc400fd..b8fea024ee 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -712,33 +712,33 @@ static void CB2_InitBattleInternal(void) gBattleCommunication[MULTIUSE_STATE] = 0; } -#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ - for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ - { \ - u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \ - u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ - u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ - \ - if (species == SPECIES_NONE) \ - continue; \ - \ - /* Is healthy mon? */ \ - if (species != SPECIES_EGG && hp != 0 && status == 0) \ - (flags) |= 1 << (i) * 2; \ - \ - if (species == SPECIES_NONE) /* Redundant */ \ - continue; \ - \ - /* Is Egg or statused? */ \ - if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ - (flags) |= 2 << (i) * 2; \ - \ - if (species == SPECIES_NONE) /* Redundant */ \ - continue; \ - \ - /* Is fainted? */ \ - if (species != SPECIES_EGG && hp == 0) \ - (flags) |= 3 << (i) * 2; \ +#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ + for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ + { \ + u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES_OR_EGG); \ + u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ + u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ + \ + if (species == SPECIES_NONE) \ + continue; \ + \ + /* Is healthy mon? */ \ + if (species != SPECIES_EGG && hp != 0 && status == 0) \ + (flags) |= 1 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is Egg or statused? */ \ + if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ + (flags) |= 2 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is fainted? */ \ + if (species != SPECIES_EGG && hp == 0) \ + (flags) |= 3 << (i) * 2; \ } // For Vs Screen at link battle start @@ -3502,8 +3502,8 @@ static void BattleIntroDrawPartySummaryScreens(void) { for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gEnemyParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -3520,8 +3520,8 @@ static void BattleIntroDrawPartySummaryScreens(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; @@ -3546,8 +3546,8 @@ static void BattleIntroDrawPartySummaryScreens(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatus[i].hp = HP_EMPTY_SLOT; hpStatus[i].status = 0; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2fcd195953..d12477bea8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5682,8 +5682,8 @@ static void Cmd_drawpartystatussummary(void) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_NONE - || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE + || GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) { hpStatuses[i].hp = 0xFFFF; hpStatuses[i].status = 0; @@ -8331,7 +8331,7 @@ static void Cmd_healpartystatus(void) for (i = 0; i < PARTY_SIZE; i++) { - u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG); u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); if (species != SPECIES_NONE && species != SPECIES_EGG) @@ -8877,8 +8877,8 @@ static void Cmd_trydobeatup(void) for (;gBattleCommunication[0] < PARTY_SIZE; gBattleCommunication[0]++) { if (GetMonData(&party[gBattleCommunication[0]], MON_DATA_HP) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) - && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[gBattleCommunication[0]], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && !GetMonData(&party[gBattleCommunication[0]], MON_DATA_STATUS)) break; } @@ -9396,9 +9396,9 @@ static void Cmd_assistattackselect(void) { if (monId == gBattlerPartyIndexes[gBattlerAttacker]) continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_NONE) + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES2) == SPECIES_EGG) + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) @@ -9564,7 +9564,7 @@ static void Cmd_pickup(void) { for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) @@ -9587,7 +9587,7 @@ static void Cmd_pickup(void) { for (i = 0; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) diff --git a/src/battle_setup.c b/src/battle_setup.c index 2ba9429d32..cc1ad70fed 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -724,7 +724,7 @@ static u16 GetSumOfPlayerPartyLevel(u8 numMons) for (i = 0; i < PARTY_SIZE; i++) { - u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) != 0) { diff --git a/src/battle_tower.c b/src/battle_tower.c index 1e134b8fa1..8838b5f2d2 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3271,7 +3271,7 @@ s32 GetHighestLevelInPlayerParty(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG) { s32 level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL, NULL); if (level > highestLevel) diff --git a/src/battle_util.c b/src/battle_util.c index bbf34ab316..4bc1a4156f 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2278,8 +2278,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); @@ -2318,8 +2318,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE); @@ -2336,8 +2336,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = playerId; i < playerId + MULTI_PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) break; } return (i == playerId + 3); @@ -2365,8 +2365,8 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_HP) != 0 - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_NONE - && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_NONE + && GetMonData(&party[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG && i != partyIdBattlerOn1 && i != partyIdBattlerOn2 && i != *(gBattleStruct->monToSwitchIntoId + flankId) && i != playerId[gBattleStruct->monToSwitchIntoId]) break; diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 6b5d66d315..3487428495 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -93,11 +93,11 @@ bool8 CheckRelicanthWailord(void) { // Emerald change: why did they flip it? // First comes Wailord - if (GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD) + if (GetMonData(&gPlayerParty[0], MON_DATA_SPECIES_OR_EGG, 0) == SPECIES_WAILORD) { CalculatePlayerPartyCount(); // Last comes Relicanth - if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH) + if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES_OR_EGG, 0) == SPECIES_RELICANTH) return TRUE; } return FALSE; diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index e23c04c1ad..8d47595c8b 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -2906,7 +2906,7 @@ void IsDodrioInParty(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) == SPECIES_DODRIO) { gSpecialVar_Result = TRUE; return; diff --git a/src/field_poison.c b/src/field_poison.c index fcb47acdb8..f254a6d142 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -19,7 +19,7 @@ static bool32 IsMonValidSpecies(struct Pokemon *pokemon) { - u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); + u16 species = GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_NONE || species == SPECIES_EGG) return FALSE; diff --git a/src/field_specials.c b/src/field_specials.c index 6251a4db7e..38746c97a4 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1442,7 +1442,7 @@ bool8 IsStarterInParty(void) u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == starter) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) == starter) return TRUE; } return FALSE; @@ -1535,8 +1535,8 @@ u8 GetLeadMonIndex(void) u8 partyCount = CalculatePlayerPartyCount(); for (i = 0; i < partyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_NONE) return i; } return 0; @@ -1544,7 +1544,7 @@ u8 GetLeadMonIndex(void) u16 ScriptGetPartyMonSpecies(void) { - return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL); + return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES_OR_EGG, NULL); } // Removed for Emerald diff --git a/src/frontier_util.c b/src/frontier_util.c index 4830f92117..8cd385e653 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -2044,7 +2044,7 @@ static void CheckPartyIneligibility(void) numEligibleMons = 0; do { - u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); u16 heldItem = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); u8 level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 18aa19cce2..f4a4c96d71 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -445,7 +445,7 @@ static void Task_Hof_InitMonData(u8 taskId) u8 nick[POKEMON_NAME_LENGTH + 2]; if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) { - sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + sHofMonPtr->mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); sHofMonPtr->mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); sHofMonPtr->mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); sHofMonPtr->mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); diff --git a/src/menu_specialized.c b/src/menu_specialized.c index e9317a8ebc..8f25c3188f 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1072,7 +1072,7 @@ void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, if (partyId != numMons) { - u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES_OR_EGG, NULL); u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index d1b514a173..124ababa45 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -319,7 +319,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) void *mailPtr = (void *)(data + sizeof(struct Pokemon)); pokemon = *(struct Pokemon *)pokemonPtr; - species = GetMonData(&pokemon, MON_DATA_SPECIES2); + species = GetMonData(&pokemon, MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_EGG) StringCopyN(gStringVar1, gText_EggNickname, POKEMON_NAME_LENGTH + 1); diff --git a/src/party_menu.c b/src/party_menu.c index 7fbefb5b52..dce0a38e10 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -3593,7 +3593,7 @@ static void CursorCb_Store(u8 taskId) // Register mon for the Trading Board in Union Room static void CursorCb_Register(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); @@ -3620,7 +3620,7 @@ static void CursorCb_Register(u8 taskId) static void CursorCb_Trade1(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u8 isEventLegal = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_EVENT_LEGAL); u32 stringId = GetUnionRoomTradeMessageId(*(struct RfuGameCompatibilityData *)GetHostRfuGameData(), gRfuPartnerCompatibilityData, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, isEventLegal); @@ -3934,7 +3934,7 @@ static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *m if (IsMultiBattle() == TRUE && gMain.inBattle) handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE; - species2 = GetMonData(mon, MON_DATA_SPECIES2); + species2 = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys); UpdatePartyMonHPBar(menuBox->monSpriteId, mon); } diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 7117be8856..a334038d8d 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -725,14 +725,14 @@ static bool8 LoadMonAndSceneGfx(struct Pokemon *mon) { case 0: // Load mon gfx - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites.ptr[B_POSITION_OPPONENT_LEFT], species, personality); sPokeblockFeed->loadGfxState++; break; case 1: // Load mon palette - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); trainerId = GetMonData(mon, MON_DATA_OT_ID); palette = GetMonSpritePalStructFromOtIdPersonality(species, trainerId, personality); @@ -907,7 +907,7 @@ static void Task_FadeOutPokeblockFeed(u8 taskId) static u8 CreateMonSprite(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, MON_X, MON_Y, 2); sPokeblockFeed->species = species; diff --git a/src/pokemon.c b/src/pokemon.c index e8d334a6ac..94ca688d79 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -3960,7 +3960,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_EVENT_LEGAL: retVal = substruct3->eventLegal; break; - case MON_DATA_SPECIES2: + case MON_DATA_SPECIES_OR_EGG: retVal = substruct0->species; if (substruct0->species && (substruct3->isEgg || boxMon->isBadEgg)) retVal = SPECIES_EGG; @@ -4087,7 +4087,7 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) case MON_DATA_MAIL: SET8(mon->mail); break; - case MON_DATA_SPECIES2: + case MON_DATA_SPECIES_OR_EGG: break; default: SetBoxMonData(&mon->box, field, data); @@ -4464,9 +4464,9 @@ u8 GetMonsStateToDoubles(void) for (i = 0; i < gPlayerPartyCount; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0 - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_NONE) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL) != SPECIES_NONE) aliveCount++; } @@ -4480,7 +4480,7 @@ u8 GetMonsStateToDoubles_2(void) for (i = 0; i < PARTY_SIZE; i++) { - u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL); + u32 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG, NULL); if (species != SPECIES_EGG && species != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) aliveCount++; @@ -5872,7 +5872,7 @@ void AdjustFriendship(struct Pokemon *mon, u8 event) if (ShouldSkipFriendshipChange()) return; - species = GetMonData(mon, MON_DATA_SPECIES2, 0); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); if (heldItem == ITEM_ENIGMA_BERRY) @@ -6183,7 +6183,7 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon) u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); if (species == SPECIES_EGG) { return 0; @@ -6273,7 +6273,7 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) u16 learnedMoves[MAX_MON_MOVES]; u16 moves[MAX_LEVEL_UP_MOVES]; u8 numMoves = 0; - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); u8 level = GetMonData(mon, MON_DATA_LEVEL, 0); int i, j, k; @@ -6442,7 +6442,7 @@ static void Task_PlayMapChosenOrBattleBGM(u8 taskId) const u32 *GetMonFrontSpritePal(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); @@ -6464,7 +6464,7 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 p const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon) { - u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + u16 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); return GetMonSpritePalStructFromOtIdPersonality(species, otId, personality); diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 963552d7df..3a985a6d59 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -2354,7 +2354,7 @@ void IsPokemonJumpSpeciesInParty(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)) { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (IsSpeciesAllowedInPokemonJump(species)) { gSpecialVar_Result = TRUE; diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index c9855f9d5d..80d0605a0a 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -4430,7 +4430,7 @@ static u8 GetMonIconPriorityByCursorPos(void) static void CreateMovingMonIcon(void) { u32 personality = GetMonData(&sStorage->movingMon, MON_DATA_PERSONALITY); - u16 species = GetMonData(&sStorage->movingMon, MON_DATA_SPECIES2); + u16 species = GetMonData(&sStorage->movingMon, MON_DATA_SPECIES_OR_EGG); u8 priority = GetMonIconPriorityByCursorPos(); sStorage->movingMonSprite = CreateMonIconSprite(species, personality, 0, 0, priority, 7); @@ -4452,7 +4452,7 @@ static void InitBoxMonSprites(u8 boxId) { for (j = 0; j < IN_BOX_COLUMNS; j++) { - species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + species = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { personality = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); @@ -4480,7 +4480,7 @@ static void InitBoxMonSprites(u8 boxId) static void CreateBoxMonIconAtPos(u8 boxPosition) { - u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(boxPosition, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { @@ -4714,7 +4714,7 @@ static void GetIncomingBoxMonData(u8 boxId) { for (j = 0; j < IN_BOX_COLUMNS; j++) { - sStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES2); + sStorage->boxSpecies[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_SPECIES_OR_EGG); if (sStorage->boxSpecies[boxPosition] != SPECIES_NONE) sStorage->boxPersonalities[boxPosition] = GetBoxMonDataAt(boxId, boxPosition, MON_DATA_PERSONALITY); boxPosition++; @@ -4742,14 +4742,14 @@ static void SetBoxMonIconObjMode(u8 boxPosition, u8 objMode) static void CreatePartyMonsSprites(bool8 visible) { u16 i, count; - u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES_OR_EGG); u32 personality = GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY); sStorage->partySprites[0] = CreateMonIconSprite(species, personality, 104, 64, 1, 12); count = 1; for (i = 1; i < PARTY_SIZE; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); @@ -6867,7 +6867,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { struct Pokemon *mon = (struct Pokemon *)pokemon; - sStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES2); + sStorage->displayMonSpecies = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); if (sStorage->displayMonSpecies != SPECIES_NONE) { sanityIsBadEgg = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); @@ -6890,7 +6890,7 @@ static void SetDisplayMonData(void *pokemon, u8 mode) { struct BoxPokemon *boxMon = (struct BoxPokemon *)pokemon; - sStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES2); + sStorage->displayMonSpecies = GetBoxMonData(pokemon, MON_DATA_SPECIES_OR_EGG); if (sStorage->displayMonSpecies != SPECIES_NONE) { u32 otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); @@ -8438,7 +8438,7 @@ static void MultiMove_DeselectRow(u8 row, u8 minColumn, u8 maxColumn) static void MultiMove_SetIconToBg(u8 x, u8 y) { u8 position = x + (IN_BOX_COLUMNS * y); - u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES_OR_EGG); u32 personality = GetCurrentBoxMonData(position, MON_DATA_PERSONALITY); if (species != SPECIES_NONE) @@ -8463,7 +8463,7 @@ static void MultiMove_SetIconToBg(u8 x, u8 y) static void MultiMove_ClearIconFromBg(u8 x, u8 y) { u8 position = x + (IN_BOX_COLUMNS * y); - u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES2); + u16 species = GetCurrentBoxMonData(position, MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE) { diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 1f6ccd2737..7b306016ce 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1384,7 +1384,7 @@ static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *mon) { case 0: sum->species = GetMonData(mon, MON_DATA_SPECIES); - sum->species2 = GetMonData(mon, MON_DATA_SPECIES2); + sum->species2 = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); sum->exp = GetMonData(mon, MON_DATA_EXP); sum->level = GetMonData(mon, MON_DATA_LEVEL); sum->abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM); diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c index e0645bac0b..05f86cab2f 100644 --- a/src/pokenav_conditions.c +++ b/src/pokenav_conditions.c @@ -531,7 +531,7 @@ static void ConditionGraphDrawMonPic(s16 listId, u8 loadId) boxId = monListPtr->monData[listId].boxId; monId = monListPtr->monData[listId].monId; - species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES_OR_EGG, NULL); tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); LoadSpecialPokePic(&gMonFrontPicTable[species], menu->monPicGfx[loadId], species, personality, TRUE); diff --git a/src/roulette.c b/src/roulette.c index 283cceebfe..06561f7988 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1144,7 +1144,7 @@ static void InitRouletteTableData(void) for (i = 0; i < PARTY_SIZE; i++) { - switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2)) + switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG)) { case SPECIES_SHROOMISH: sRoulette->partySpeciesFlags |= HAS_SHROOMISH; diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index ae7aa92dc8..6e5653884b 100755 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -118,7 +118,7 @@ static bool8 CheckPartyMonHasHeldItem(u16 item) for(i = 0; i < PARTY_SIZE; i++) { - u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item) return TRUE; } diff --git a/src/trade.c b/src/trade.c index f8817421f2..ab19f5fee6 100644 --- a/src/trade.c +++ b/src/trade.c @@ -564,7 +564,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -576,7 +576,7 @@ static void CB2_CreateTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -755,7 +755,7 @@ static void CB2_ReturnToTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i][0] * 8) + 14, (sTradeMonSpriteCoords[i][1] * 8) - 12, @@ -767,7 +767,7 @@ static void CB2_ReturnToTradeMenu(void) for (i = 0; i < sTradeMenu->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + sTradeMenu->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES_OR_EGG, NULL), SpriteCB_MonIcon, (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, @@ -2395,7 +2395,7 @@ static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int for (i = 0; i < partyCount; i++) { - species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES2); + species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES_OR_EGG); species[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES); } @@ -2593,7 +2593,7 @@ int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx) // Make Eggs not count for numMonsLeft for (i = 0; i < gPlayerPartyCount; i++) { - speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES2); + speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES_OR_EGG); if (speciesArray[i] == SPECIES_EGG) speciesArray[i] = SPECIES_NONE; } @@ -2803,7 +2803,7 @@ static void LoadTradeMonPic(u8 whichParty, u8 state) switch (state) { case 0: - species = GetMonData(mon, MON_DATA_SPECIES2); + species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); personality = GetMonData(mon, MON_DATA_PERSONALITY); if (whichParty == TRADE_PLAYER) diff --git a/src/union_room.c b/src/union_room.c index 082b7dec54..9160fc16ae 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -4176,7 +4176,7 @@ static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { for (i = 0; i < gPlayerPartyCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (species == SPECIES_EGG) return UR_TRADE_MATCH; } @@ -4186,7 +4186,7 @@ static s32 IsRequestedTradeInPlayerParty(u32 type, u32 species) { for (i = 0; i < gPlayerPartyCount; i++) { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (gSpeciesInfo[species].types[0] == type || gSpeciesInfo[species].types[1] == type) return UR_TRADE_MATCH; } @@ -4319,7 +4319,7 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) for (i = 0; i < gPlayerPartyCount; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= UNION_ROOM_MAX_LEVEL - && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG) != SPECIES_EGG) count++; } @@ -4348,7 +4348,7 @@ void Script_ResetUnionRoomTrade(void) static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) { - trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); if (trade->playerSpecies == SPECIES_EGG) @@ -4359,7 +4359,7 @@ static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trad static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) { - trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES_OR_EGG); trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } @@ -4390,7 +4390,7 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); if (cur_personality != personality) continue; - cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES_OR_EGG); if (cur_species != species) continue; response = i; From bbefee6bd403973ce3f957c9e5d6df692793e4b6 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Feb 2023 15:22:58 -0300 Subject: [PATCH 135/290] Use proper symbol styles for Hakamo-O and Kommo-O --- include/graphics.h | 20 +++++++++---------- sound/cry_tables.inc | 8 ++++---- sound/direct_sound_data.inc | 4 ++-- src/data/graphics/pokemon.h | 20 +++++++++---------- src/data/pokemon/level_up_learnset_pointers.h | 4 ++-- src/data/pokemon/level_up_learnsets.h | 4 ++-- src/data/pokemon/pokedex_entries.h | 4 ++-- src/data/pokemon/pokedex_text.h | 4 ++-- .../pokemon/teachable_learnset_pointers.h | 4 ++-- src/data/pokemon/teachable_learnsets.h | 4 ++-- src/data/pokemon_graphics/back_pic_table.h | 4 ++-- src/data/pokemon_graphics/front_pic_table.h | 4 ++-- src/data/pokemon_graphics/palette_table.h | 4 ++-- .../pokemon_graphics/shiny_palette_table.h | 4 ++-- src/pokemon_icon.c | 4 ++-- 15 files changed, 48 insertions(+), 48 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 55174442c5..49ce74b2ec 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -868,8 +868,8 @@ extern const u32 gMonFrontPic_Bruxish[]; extern const u32 gMonFrontPic_Drampa[]; extern const u32 gMonFrontPic_Dhelmise[]; extern const u32 gMonFrontPic_Jangmoo[]; -extern const u32 gMonFrontPic_Hakamoo[]; -extern const u32 gMonFrontPic_Kommoo[]; +extern const u32 gMonFrontPic_HakamoO[]; +extern const u32 gMonFrontPic_KommoO[]; extern const u32 gMonFrontPic_TapuKoko[]; extern const u32 gMonFrontPic_TapuLele[]; extern const u32 gMonFrontPic_TapuBulu[]; @@ -2082,8 +2082,8 @@ extern const u32 gMonBackPic_Bruxish[]; extern const u32 gMonBackPic_Drampa[]; extern const u32 gMonBackPic_Dhelmise[]; extern const u32 gMonBackPic_Jangmoo[]; -extern const u32 gMonBackPic_Hakamoo[]; -extern const u32 gMonBackPic_Kommoo[]; +extern const u32 gMonBackPic_HakamoO[]; +extern const u32 gMonBackPic_KommoO[]; extern const u32 gMonBackPic_TapuKoko[]; extern const u32 gMonBackPic_TapuLele[]; extern const u32 gMonBackPic_TapuBulu[]; @@ -3288,8 +3288,8 @@ extern const u32 gMonPalette_Bruxish[]; extern const u32 gMonPalette_Drampa[]; extern const u32 gMonPalette_Dhelmise[]; extern const u32 gMonPalette_Jangmoo[]; -extern const u32 gMonPalette_Hakamoo[]; -extern const u32 gMonPalette_Kommoo[]; +extern const u32 gMonPalette_HakamoO[]; +extern const u32 gMonPalette_KommoO[]; extern const u32 gMonPalette_TapuKoko[]; extern const u32 gMonPalette_TapuLele[]; extern const u32 gMonPalette_TapuBulu[]; @@ -4521,8 +4521,8 @@ extern const u32 gMonShinyPalette_Bruxish[]; extern const u32 gMonShinyPalette_Drampa[]; extern const u32 gMonShinyPalette_Dhelmise[]; extern const u32 gMonShinyPalette_Jangmoo[]; -extern const u32 gMonShinyPalette_Hakamoo[]; -extern const u32 gMonShinyPalette_Kommoo[]; +extern const u32 gMonShinyPalette_HakamoO[]; +extern const u32 gMonShinyPalette_KommoO[]; extern const u32 gMonShinyPalette_TapuKoko[]; extern const u32 gMonShinyPalette_TapuLele[]; extern const u32 gMonShinyPalette_TapuBulu[]; @@ -5748,8 +5748,8 @@ extern const u8 gMonIcon_Bruxish[]; extern const u8 gMonIcon_Drampa[]; extern const u8 gMonIcon_Dhelmise[]; extern const u8 gMonIcon_Jangmoo[]; -extern const u8 gMonIcon_Hakamoo[]; -extern const u8 gMonIcon_Kommoo[]; +extern const u8 gMonIcon_HakamoO[]; +extern const u8 gMonIcon_KommoO[]; extern const u8 gMonIcon_TapuKoko[]; extern const u8 gMonIcon_TapuLele[]; extern const u8 gMonIcon_TapuBulu[]; diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7714cd00ec..7b59475061 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1127,8 +1127,8 @@ gCryTable:: cry Cry_Drampa cry Cry_Dhelmise cry Cry_Jangmoo - cry Cry_Hakamoo - cry Cry_Kommoo + cry Cry_HakamoO + cry Cry_KommoO cry Cry_TapuKoko cry Cry_TapuLele cry Cry_TapuBulu @@ -3249,8 +3249,8 @@ gCryTable_Reverse:: cry_reverse Cry_Drampa cry_reverse Cry_Dhelmise cry_reverse Cry_Jangmoo - cry_reverse Cry_Hakamoo - cry_reverse Cry_Kommoo + cry_reverse Cry_HakamoO + cry_reverse Cry_KommoO cry_reverse Cry_TapuKoko cry_reverse Cry_TapuLele cry_reverse Cry_TapuBulu diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index fb4c6b44f6..74f5529d76 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3522,11 +3522,11 @@ Cry_Jangmoo:: .incbin "sound/direct_sound_samples/cries/jangmo_o.bin" .align 2 -Cry_Hakamoo:: +Cry_HakamoO:: .incbin "sound/direct_sound_samples/cries/hakamo_o.bin" .align 2 -Cry_Kommoo:: +Cry_KommoO:: .incbin "sound/direct_sound_samples/cries/kommo_o.bin" .align 2 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 385460228b..a39f6f35ea 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -801,8 +801,8 @@ const u32 gMonFrontPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/front.4b const u32 gMonFrontPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/front.4bpp.lz"); const u32 gMonFrontPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/front.4bpp.lz"); const u32 gMonFrontPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); -const u32 gMonFrontPic_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); -const u32 gMonFrontPic_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); +const u32 gMonFrontPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); +const u32 gMonFrontPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); const u32 gMonFrontPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/anim_front.4bpp.lz"); const u32 gMonFrontPic_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/anim_front.4bpp.lz"); const u32 gMonFrontPic_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/anim_front.4bpp.lz"); @@ -2013,8 +2013,8 @@ const u32 gMonBackPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/back.4bpp const u32 gMonBackPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/back.4bpp.lz"); const u32 gMonBackPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/back.4bpp.lz"); const u32 gMonBackPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/back.4bpp.lz"); -const u32 gMonBackPic_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/back.4bpp.lz"); -const u32 gMonBackPic_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/back.4bpp.lz"); +const u32 gMonBackPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/back.4bpp.lz"); +const u32 gMonBackPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/back.4bpp.lz"); const u32 gMonBackPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/back.4bpp.lz"); const u32 gMonBackPic_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/back.4bpp.lz"); const u32 gMonBackPic_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/back.4bpp.lz"); @@ -3219,8 +3219,8 @@ const u32 gMonPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/normal.gb const u32 gMonPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/normal.gbapal.lz"); const u32 gMonPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/normal.gbapal.lz"); const u32 gMonPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/normal.gbapal.lz"); -const u32 gMonPalette_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz"); -const u32 gMonPalette_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz"); +const u32 gMonPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz"); +const u32 gMonPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz"); const u32 gMonPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/normal.gbapal.lz"); const u32 gMonPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/normal.gbapal.lz"); const u32 gMonPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/normal.gbapal.lz"); @@ -4452,8 +4452,8 @@ const u32 gMonShinyPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/shin const u32 gMonShinyPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/shiny.gbapal.lz"); const u32 gMonShinyPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Hakamoo[] = INCBIN_U32("graphics/pokemon/hakamo_o/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Kommoo[] = INCBIN_U32("graphics/pokemon/kommo_o/shiny.gbapal.lz"); +const u32 gMonShinyPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/shiny.gbapal.lz"); +const u32 gMonShinyPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/shiny.gbapal.lz"); @@ -5679,8 +5679,8 @@ const u8 gMonIcon_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/icon.4bpp"); const u8 gMonIcon_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/icon.4bpp"); const u8 gMonIcon_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/icon.4bpp"); const u8 gMonIcon_Jangmoo[] = INCBIN_U8("graphics/pokemon/jangmo_o/icon.4bpp"); -const u8 gMonIcon_Hakamoo[] = INCBIN_U8("graphics/pokemon/hakamo_o/icon.4bpp"); -const u8 gMonIcon_Kommoo[] = INCBIN_U8("graphics/pokemon/kommo_o/icon.4bpp"); +const u8 gMonIcon_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/icon.4bpp"); +const u8 gMonIcon_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/icon.4bpp"); const u8 gMonIcon_TapuKoko[] = INCBIN_U8("graphics/pokemon/tapu_koko/icon.4bpp"); const u8 gMonIcon_TapuLele[] = INCBIN_U8("graphics/pokemon/tapu_lele/icon.4bpp"); const u8 gMonIcon_TapuBulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/icon.4bpp"); diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index 0ecfa59ccf..d27399d326 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -790,8 +790,8 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_DRAMPA] = sDrampaLevelUpLearnset, [SPECIES_DHELMISE] = sDhelmiseLevelUpLearnset, [SPECIES_JANGMO_O] = sJangmooLevelUpLearnset, - [SPECIES_HAKAMO_O] = sHakamooLevelUpLearnset, - [SPECIES_KOMMO_O] = sKommooLevelUpLearnset, + [SPECIES_HAKAMO_O] = sHakamoOLevelUpLearnset, + [SPECIES_KOMMO_O] = sKommoOLevelUpLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoLevelUpLearnset, [SPECIES_TAPU_LELE] = sTapuLeleLevelUpLearnset, [SPECIES_TAPU_BULU] = sTapuBuluLevelUpLearnset, diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index f4ad3b5669..bb6d97be90 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -15978,7 +15978,7 @@ static const struct LevelUpMove sJangmooLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sHakamooLevelUpLearnset[] = { +static const struct LevelUpMove sHakamoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT), LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE), @@ -16003,7 +16003,7 @@ static const struct LevelUpMove sHakamooLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sKommooLevelUpLearnset[] = { +static const struct LevelUpMove sKommoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 0, MOVE_CLANGING_SCALES), LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES), LEVEL_UP_MOVE( 1, MOVE_SKY_UPPERCUT), diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 4925382600..7952f44a3c 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -9408,7 +9408,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("Scaly"), .height = 12, .weight = 470, - .description = gHakamooPokedexText, + .description = gHakamoOPokedexText, .pokemonScale = 356, .pokemonOffset = 17, .trainerScale = 256, @@ -9420,7 +9420,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("Scaly"), .height = 16, .weight = 782, - .description = gKommooPokedexText, + .description = gKommoOPokedexText, .pokemonScale = 356, .pokemonOffset = 17, .trainerScale = 256, diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index 6048d21215..a28bd184e3 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -4703,13 +4703,13 @@ const u8 gJangmooPokedexText[] = _( "tall mountains where Jangmo-o live. They\n" "grow little by little battling one another."); -const u8 gHakamooPokedexText[] = _( +const u8 gHakamoOPokedexText[] = _( "It sheds and regrows its scales on a\n" "continuous basis. The scales become\n" "harder each time they're regrown. Its\n" "scaly punches tear its foes to shreds."); -const u8 gKommooPokedexText[] = _( +const u8 gKommoOPokedexText[] = _( "Its rigid scales function as offense and\n" "defense. In the past, its scales were\n" "processed and used to make weapons\n" diff --git a/src/data/pokemon/teachable_learnset_pointers.h b/src/data/pokemon/teachable_learnset_pointers.h index 28998aae1a..c8adc8668d 100644 --- a/src/data/pokemon/teachable_learnset_pointers.h +++ b/src/data/pokemon/teachable_learnset_pointers.h @@ -790,8 +790,8 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_DRAMPA] = sDrampaTeachableLearnset, [SPECIES_DHELMISE] = sDhelmiseTeachableLearnset, [SPECIES_JANGMO_O] = sJangmooTeachableLearnset, - [SPECIES_HAKAMO_O] = sHakamooTeachableLearnset, - [SPECIES_KOMMO_O] = sKommooTeachableLearnset, + [SPECIES_HAKAMO_O] = sHakamoOTeachableLearnset, + [SPECIES_KOMMO_O] = sKommoOTeachableLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoTeachableLearnset, [SPECIES_TAPU_LELE] = sTapuLeleTeachableLearnset, [SPECIES_TAPU_BULU] = sTapuBuluTeachableLearnset, diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 19b22d9b3d..2130b18a2f 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -29445,7 +29445,7 @@ static const u16 sJangmooTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sHakamooTeachableLearnset[] = { +static const u16 sHakamoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, @@ -29475,7 +29475,7 @@ static const u16 sHakamooTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sKommooTeachableLearnset[] = { +static const u16 sKommoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index ebe0c316f8..c018d89878 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -790,8 +790,8 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(DRAMPA, gMonBackPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonBackPic_Dhelmise), SPECIES_SPRITE(JANGMO_O, gMonBackPic_Jangmoo), - SPECIES_SPRITE(HAKAMO_O, gMonBackPic_Hakamoo), - SPECIES_SPRITE(KOMMO_O, gMonBackPic_Kommoo), + SPECIES_SPRITE(HAKAMO_O, gMonBackPic_HakamoO), + SPECIES_SPRITE(KOMMO_O, gMonBackPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonBackPic_TapuKoko), SPECIES_SPRITE(TAPU_LELE, gMonBackPic_TapuLele), SPECIES_SPRITE(TAPU_BULU, gMonBackPic_TapuBulu), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index 24ebc78f38..e346dd4a2f 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -790,8 +790,8 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(DRAMPA, gMonFrontPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonFrontPic_Dhelmise), SPECIES_SPRITE(JANGMO_O, gMonFrontPic_Jangmoo), - SPECIES_SPRITE(HAKAMO_O, gMonFrontPic_Hakamoo), - SPECIES_SPRITE(KOMMO_O, gMonFrontPic_Kommoo), + SPECIES_SPRITE(HAKAMO_O, gMonFrontPic_HakamoO), + SPECIES_SPRITE(KOMMO_O, gMonFrontPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonFrontPic_TapuKoko), SPECIES_SPRITE(TAPU_LELE, gMonFrontPic_TapuLele), SPECIES_SPRITE(TAPU_BULU, gMonFrontPic_TapuBulu), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index a8c986d795..49551333c0 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -790,8 +790,8 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(DRAMPA, gMonPalette_Drampa), SPECIES_PAL(DHELMISE, gMonPalette_Dhelmise), SPECIES_PAL(JANGMO_O, gMonPalette_Jangmoo), - SPECIES_PAL(HAKAMO_O, gMonPalette_Hakamoo), - SPECIES_PAL(KOMMO_O, gMonPalette_Kommoo), + SPECIES_PAL(HAKAMO_O, gMonPalette_HakamoO), + SPECIES_PAL(KOMMO_O, gMonPalette_KommoO), SPECIES_PAL(TAPU_KOKO, gMonPalette_TapuKoko), SPECIES_PAL(TAPU_LELE, gMonPalette_TapuLele), SPECIES_PAL(TAPU_BULU, gMonPalette_TapuBulu), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 012a95cf1f..0a327b37e5 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -790,8 +790,8 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(DRAMPA, gMonShinyPalette_Drampa), SPECIES_SHINY_PAL(DHELMISE, gMonShinyPalette_Dhelmise), SPECIES_SHINY_PAL(JANGMO_O, gMonShinyPalette_Jangmoo), - SPECIES_SHINY_PAL(HAKAMO_O, gMonShinyPalette_Hakamoo), - SPECIES_SHINY_PAL(KOMMO_O, gMonShinyPalette_Kommoo), + SPECIES_SHINY_PAL(HAKAMO_O, gMonShinyPalette_HakamoO), + SPECIES_SHINY_PAL(KOMMO_O, gMonShinyPalette_KommoO), SPECIES_SHINY_PAL(TAPU_KOKO, gMonShinyPalette_TapuKoko), SPECIES_SHINY_PAL(TAPU_LELE, gMonShinyPalette_TapuLele), SPECIES_SHINY_PAL(TAPU_BULU, gMonShinyPalette_TapuBulu), diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 0758ea37d3..85a69fa934 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -816,8 +816,8 @@ const u8 *const gMonIconTable[] = [SPECIES_DRAMPA] = gMonIcon_Drampa, [SPECIES_DHELMISE] = gMonIcon_Dhelmise, [SPECIES_JANGMO_O] = gMonIcon_Jangmoo, - [SPECIES_HAKAMO_O] = gMonIcon_Hakamoo, - [SPECIES_KOMMO_O] = gMonIcon_Kommoo, + [SPECIES_HAKAMO_O] = gMonIcon_HakamoO, + [SPECIES_KOMMO_O] = gMonIcon_KommoO, [SPECIES_TAPU_KOKO] = gMonIcon_TapuKoko, [SPECIES_TAPU_LELE] = gMonIcon_TapuLele, [SPECIES_TAPU_BULU] = gMonIcon_TapuBulu, From 1e1686b69a7dfbac4480bdd62867d6c0ccc81548 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 24 Feb 2023 23:38:23 +0100 Subject: [PATCH 136/290] Fixes #2414 --- 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 a626ef49a1..2d4d075282 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2632,7 +2632,7 @@ static s16 AI_TryToFaint(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex, 0) && gBattleMoves[move].effect != EFFECT_EXPLOSION) { // this move can faint the target - if (!WillAIStrikeFirst() || GetMovePriority(battlerAtk, move) > 0) + if (WillAIStrikeFirst() || GetMovePriority(battlerAtk, move) > 0) score += 4; // we go first or we're using priority move else score += 2; From ca81d7a0f921e52419f2309b6b452b53a62e31bd Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Feb 2023 21:58:09 -0300 Subject: [PATCH 137/290] Forgot about Jangmo-o --- include/graphics.h | 10 +++++----- sound/cry_tables.inc | 4 ++-- sound/direct_sound_data.inc | 2 +- src/data/graphics/pokemon.h | 10 +++++----- src/data/pokemon/level_up_learnset_pointers.h | 2 +- src/data/pokemon/level_up_learnsets.h | 2 +- src/data/pokemon/pokedex_entries.h | 2 +- src/data/pokemon/pokedex_text.h | 2 +- src/data/pokemon/teachable_learnset_pointers.h | 2 +- src/data/pokemon/teachable_learnsets.h | 2 +- src/data/pokemon_graphics/back_pic_table.h | 2 +- src/data/pokemon_graphics/front_pic_table.h | 2 +- src/data/pokemon_graphics/palette_table.h | 2 +- src/data/pokemon_graphics/shiny_palette_table.h | 2 +- src/pokemon_icon.c | 2 +- 15 files changed, 24 insertions(+), 24 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 49ce74b2ec..443dc4ade5 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -867,7 +867,7 @@ extern const u32 gMonFrontPic_Mimikyu[]; extern const u32 gMonFrontPic_Bruxish[]; extern const u32 gMonFrontPic_Drampa[]; extern const u32 gMonFrontPic_Dhelmise[]; -extern const u32 gMonFrontPic_Jangmoo[]; +extern const u32 gMonFrontPic_JangmoO[]; extern const u32 gMonFrontPic_HakamoO[]; extern const u32 gMonFrontPic_KommoO[]; extern const u32 gMonFrontPic_TapuKoko[]; @@ -2081,7 +2081,7 @@ extern const u32 gMonBackPic_Mimikyu[]; extern const u32 gMonBackPic_Bruxish[]; extern const u32 gMonBackPic_Drampa[]; extern const u32 gMonBackPic_Dhelmise[]; -extern const u32 gMonBackPic_Jangmoo[]; +extern const u32 gMonBackPic_JangmoO[]; extern const u32 gMonBackPic_HakamoO[]; extern const u32 gMonBackPic_KommoO[]; extern const u32 gMonBackPic_TapuKoko[]; @@ -3287,7 +3287,7 @@ extern const u32 gMonPalette_Mimikyu[]; extern const u32 gMonPalette_Bruxish[]; extern const u32 gMonPalette_Drampa[]; extern const u32 gMonPalette_Dhelmise[]; -extern const u32 gMonPalette_Jangmoo[]; +extern const u32 gMonPalette_JangmoO[]; extern const u32 gMonPalette_HakamoO[]; extern const u32 gMonPalette_KommoO[]; extern const u32 gMonPalette_TapuKoko[]; @@ -4520,7 +4520,7 @@ extern const u32 gMonShinyPalette_Mimikyu[]; extern const u32 gMonShinyPalette_Bruxish[]; extern const u32 gMonShinyPalette_Drampa[]; extern const u32 gMonShinyPalette_Dhelmise[]; -extern const u32 gMonShinyPalette_Jangmoo[]; +extern const u32 gMonShinyPalette_JangmoO[]; extern const u32 gMonShinyPalette_HakamoO[]; extern const u32 gMonShinyPalette_KommoO[]; extern const u32 gMonShinyPalette_TapuKoko[]; @@ -5747,7 +5747,7 @@ extern const u8 gMonIcon_Mimikyu[]; extern const u8 gMonIcon_Bruxish[]; extern const u8 gMonIcon_Drampa[]; extern const u8 gMonIcon_Dhelmise[]; -extern const u8 gMonIcon_Jangmoo[]; +extern const u8 gMonIcon_JangmoO[]; extern const u8 gMonIcon_HakamoO[]; extern const u8 gMonIcon_KommoO[]; extern const u8 gMonIcon_TapuKoko[]; diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc index 7b59475061..c9da7e679f 100644 --- a/sound/cry_tables.inc +++ b/sound/cry_tables.inc @@ -1126,7 +1126,7 @@ gCryTable:: cry Cry_Bruxish cry Cry_Drampa cry Cry_Dhelmise - cry Cry_Jangmoo + cry Cry_JangmoO cry Cry_HakamoO cry Cry_KommoO cry Cry_TapuKoko @@ -3248,7 +3248,7 @@ gCryTable_Reverse:: cry_reverse Cry_Bruxish cry_reverse Cry_Drampa cry_reverse Cry_Dhelmise - cry_reverse Cry_Jangmoo + cry_reverse Cry_JangmoO cry_reverse Cry_HakamoO cry_reverse Cry_KommoO cry_reverse Cry_TapuKoko diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 74f5529d76..611808d236 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -3518,7 +3518,7 @@ Cry_Dhelmise:: .incbin "sound/direct_sound_samples/cries/dhelmise.bin" .align 2 -Cry_Jangmoo:: +Cry_JangmoO:: .incbin "sound/direct_sound_samples/cries/jangmo_o.bin" .align 2 diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index a39f6f35ea..314d081ea8 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -800,7 +800,7 @@ const u32 gMonFrontPic_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/front.4b const u32 gMonFrontPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/front.4bpp.lz"); const u32 gMonFrontPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/front.4bpp.lz"); const u32 gMonFrontPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/front.4bpp.lz"); -const u32 gMonFrontPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); +const u32 gMonFrontPic_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/front.4bpp.lz"); const u32 gMonFrontPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/front.4bpp.lz"); const u32 gMonFrontPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/front.4bpp.lz"); const u32 gMonFrontPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/anim_front.4bpp.lz"); @@ -2012,7 +2012,7 @@ const u32 gMonBackPic_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/back.4bpp const u32 gMonBackPic_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/back.4bpp.lz"); const u32 gMonBackPic_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/back.4bpp.lz"); const u32 gMonBackPic_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/back.4bpp.lz"); -const u32 gMonBackPic_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/back.4bpp.lz"); +const u32 gMonBackPic_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/back.4bpp.lz"); const u32 gMonBackPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/back.4bpp.lz"); const u32 gMonBackPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/back.4bpp.lz"); const u32 gMonBackPic_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/back.4bpp.lz"); @@ -3218,7 +3218,7 @@ const u32 gMonPalette_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/normal.gb const u32 gMonPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/normal.gbapal.lz"); const u32 gMonPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/normal.gbapal.lz"); const u32 gMonPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/normal.gbapal.lz"); -const u32 gMonPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/normal.gbapal.lz"); +const u32 gMonPalette_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/normal.gbapal.lz"); const u32 gMonPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz"); const u32 gMonPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz"); const u32 gMonPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/normal.gbapal.lz"); @@ -4451,7 +4451,7 @@ const u32 gMonShinyPalette_Mimikyu[] = INCBIN_U32("graphics/pokemon/mimikyu/shin const u32 gMonShinyPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/shiny.gbapal.lz"); const u32 gMonShinyPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/shiny.gbapal.lz"); const u32 gMonShinyPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/shiny.gbapal.lz"); -const u32 gMonShinyPalette_Jangmoo[] = INCBIN_U32("graphics/pokemon/jangmo_o/shiny.gbapal.lz"); +const u32 gMonShinyPalette_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/shiny.gbapal.lz"); const u32 gMonShinyPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/shiny.gbapal.lz"); @@ -5678,7 +5678,7 @@ const u8 gMonIcon_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/icon.4bpp"); const u8 gMonIcon_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/icon.4bpp"); const u8 gMonIcon_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/icon.4bpp"); const u8 gMonIcon_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/icon.4bpp"); -const u8 gMonIcon_Jangmoo[] = INCBIN_U8("graphics/pokemon/jangmo_o/icon.4bpp"); +const u8 gMonIcon_JangmoO[] = INCBIN_U8("graphics/pokemon/jangmo_o/icon.4bpp"); const u8 gMonIcon_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/icon.4bpp"); const u8 gMonIcon_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/icon.4bpp"); const u8 gMonIcon_TapuKoko[] = INCBIN_U8("graphics/pokemon/tapu_koko/icon.4bpp"); diff --git a/src/data/pokemon/level_up_learnset_pointers.h b/src/data/pokemon/level_up_learnset_pointers.h index d27399d326..9fa91ee232 100644 --- a/src/data/pokemon/level_up_learnset_pointers.h +++ b/src/data/pokemon/level_up_learnset_pointers.h @@ -789,7 +789,7 @@ const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = [SPECIES_BRUXISH] = sBruxishLevelUpLearnset, [SPECIES_DRAMPA] = sDrampaLevelUpLearnset, [SPECIES_DHELMISE] = sDhelmiseLevelUpLearnset, - [SPECIES_JANGMO_O] = sJangmooLevelUpLearnset, + [SPECIES_JANGMO_O] = sJangmoOLevelUpLearnset, [SPECIES_HAKAMO_O] = sHakamoOLevelUpLearnset, [SPECIES_KOMMO_O] = sKommoOLevelUpLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoLevelUpLearnset, diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h index bb6d97be90..17af6b8888 100644 --- a/src/data/pokemon/level_up_learnsets.h +++ b/src/data/pokemon/level_up_learnsets.h @@ -15960,7 +15960,7 @@ static const struct LevelUpMove sDhelmiseLevelUpLearnset[] = { LEVEL_UP_END }; -static const struct LevelUpMove sJangmooLevelUpLearnset[] = { +static const struct LevelUpMove sJangmoOLevelUpLearnset[] = { LEVEL_UP_MOVE( 1, MOVE_TACKLE), LEVEL_UP_MOVE( 5, MOVE_LEER), LEVEL_UP_MOVE( 9, MOVE_BIDE), diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 7952f44a3c..83b58c1d16 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -9396,7 +9396,7 @@ const struct PokedexEntry gPokedexEntries[] = .categoryName = _("Scaly"), .height = 6, .weight = 297, - .description = gJangmooPokedexText, + .description = gJangmoOPokedexText, .pokemonScale = 356, .pokemonOffset = 17, .trainerScale = 256, diff --git a/src/data/pokemon/pokedex_text.h b/src/data/pokemon/pokedex_text.h index a28bd184e3..5e28a204be 100644 --- a/src/data/pokemon/pokedex_text.h +++ b/src/data/pokemon/pokedex_text.h @@ -4697,7 +4697,7 @@ const u8 gDhelmisePokedexText[] = _( "It maintains itself with new infusions of\n" "seabed detritus and seaweed."); -const u8 gJangmooPokedexText[] = _( +const u8 gJangmoOPokedexText[] = _( "It expresses its feelings by smacking its\n" "scales. Metallic sounds echo through the\n" "tall mountains where Jangmo-o live. They\n" diff --git a/src/data/pokemon/teachable_learnset_pointers.h b/src/data/pokemon/teachable_learnset_pointers.h index c8adc8668d..31a39d516e 100644 --- a/src/data/pokemon/teachable_learnset_pointers.h +++ b/src/data/pokemon/teachable_learnset_pointers.h @@ -789,7 +789,7 @@ const u16 *const gTeachableLearnsets[NUM_SPECIES] = [SPECIES_BRUXISH] = sBruxishTeachableLearnset, [SPECIES_DRAMPA] = sDrampaTeachableLearnset, [SPECIES_DHELMISE] = sDhelmiseTeachableLearnset, - [SPECIES_JANGMO_O] = sJangmooTeachableLearnset, + [SPECIES_JANGMO_O] = sJangmoOTeachableLearnset, [SPECIES_HAKAMO_O] = sHakamoOTeachableLearnset, [SPECIES_KOMMO_O] = sKommoOTeachableLearnset, [SPECIES_TAPU_KOKO] = sTapuKokoTeachableLearnset, diff --git a/src/data/pokemon/teachable_learnsets.h b/src/data/pokemon/teachable_learnsets.h index 2130b18a2f..6365af3b97 100644 --- a/src/data/pokemon/teachable_learnsets.h +++ b/src/data/pokemon/teachable_learnsets.h @@ -29414,7 +29414,7 @@ static const u16 sDhelmiseTeachableLearnset[] = { MOVE_UNAVAILABLE, }; -static const u16 sJangmooTeachableLearnset[] = { +static const u16 sJangmoOTeachableLearnset[] = { MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_BRICK_BREAK, diff --git a/src/data/pokemon_graphics/back_pic_table.h b/src/data/pokemon_graphics/back_pic_table.h index c018d89878..29eaeceede 100644 --- a/src/data/pokemon_graphics/back_pic_table.h +++ b/src/data/pokemon_graphics/back_pic_table.h @@ -789,7 +789,7 @@ const struct CompressedSpriteSheet gMonBackPicTable[] = SPECIES_SPRITE(BRUXISH, gMonBackPic_Bruxish), SPECIES_SPRITE(DRAMPA, gMonBackPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonBackPic_Dhelmise), - SPECIES_SPRITE(JANGMO_O, gMonBackPic_Jangmoo), + SPECIES_SPRITE(JANGMO_O, gMonBackPic_JangmoO), SPECIES_SPRITE(HAKAMO_O, gMonBackPic_HakamoO), SPECIES_SPRITE(KOMMO_O, gMonBackPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonBackPic_TapuKoko), diff --git a/src/data/pokemon_graphics/front_pic_table.h b/src/data/pokemon_graphics/front_pic_table.h index e346dd4a2f..4530963af4 100644 --- a/src/data/pokemon_graphics/front_pic_table.h +++ b/src/data/pokemon_graphics/front_pic_table.h @@ -789,7 +789,7 @@ const struct CompressedSpriteSheet gMonFrontPicTable[] = SPECIES_SPRITE(BRUXISH, gMonFrontPic_Bruxish), SPECIES_SPRITE(DRAMPA, gMonFrontPic_Drampa), SPECIES_SPRITE(DHELMISE, gMonFrontPic_Dhelmise), - SPECIES_SPRITE(JANGMO_O, gMonFrontPic_Jangmoo), + SPECIES_SPRITE(JANGMO_O, gMonFrontPic_JangmoO), SPECIES_SPRITE(HAKAMO_O, gMonFrontPic_HakamoO), SPECIES_SPRITE(KOMMO_O, gMonFrontPic_KommoO), SPECIES_SPRITE(TAPU_KOKO, gMonFrontPic_TapuKoko), diff --git a/src/data/pokemon_graphics/palette_table.h b/src/data/pokemon_graphics/palette_table.h index 49551333c0..7311dfd0b3 100644 --- a/src/data/pokemon_graphics/palette_table.h +++ b/src/data/pokemon_graphics/palette_table.h @@ -789,7 +789,7 @@ const struct CompressedSpritePalette gMonPaletteTable[] = SPECIES_PAL(BRUXISH, gMonPalette_Bruxish), SPECIES_PAL(DRAMPA, gMonPalette_Drampa), SPECIES_PAL(DHELMISE, gMonPalette_Dhelmise), - SPECIES_PAL(JANGMO_O, gMonPalette_Jangmoo), + SPECIES_PAL(JANGMO_O, gMonPalette_JangmoO), SPECIES_PAL(HAKAMO_O, gMonPalette_HakamoO), SPECIES_PAL(KOMMO_O, gMonPalette_KommoO), SPECIES_PAL(TAPU_KOKO, gMonPalette_TapuKoko), diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 0a327b37e5..81bc45d4d9 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -789,7 +789,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(BRUXISH, gMonShinyPalette_Bruxish), SPECIES_SHINY_PAL(DRAMPA, gMonShinyPalette_Drampa), SPECIES_SHINY_PAL(DHELMISE, gMonShinyPalette_Dhelmise), - SPECIES_SHINY_PAL(JANGMO_O, gMonShinyPalette_Jangmoo), + SPECIES_SHINY_PAL(JANGMO_O, gMonShinyPalette_JangmoO), SPECIES_SHINY_PAL(HAKAMO_O, gMonShinyPalette_HakamoO), SPECIES_SHINY_PAL(KOMMO_O, gMonShinyPalette_KommoO), SPECIES_SHINY_PAL(TAPU_KOKO, gMonShinyPalette_TapuKoko), diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 85a69fa934..5e2e8a6562 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -815,7 +815,7 @@ const u8 *const gMonIconTable[] = [SPECIES_BRUXISH] = gMonIcon_Bruxish, [SPECIES_DRAMPA] = gMonIcon_Drampa, [SPECIES_DHELMISE] = gMonIcon_Dhelmise, - [SPECIES_JANGMO_O] = gMonIcon_Jangmoo, + [SPECIES_JANGMO_O] = gMonIcon_JangmoO, [SPECIES_HAKAMO_O] = gMonIcon_HakamoO, [SPECIES_KOMMO_O] = gMonIcon_KommoO, [SPECIES_TAPU_KOKO] = gMonIcon_TapuKoko, From fc5c93fd83efaf64129a32f52646d7922177e0a8 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 12:15:40 +0100 Subject: [PATCH 138/290] exclude status move type check --- src/battle_ai_util.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 4641ba2cdd..8cb3d46602 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -802,7 +802,16 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, } else { - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + #if B_GLARE_GHOST == GEN_3 + else if (move == MOVE_GLARE || move == MOVE_THUNDER_WAVE) + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + else +# endif + if (move == MOVE_THUNDER_WAVE) + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); + else + effectivenessMultiplier = UQ_4_12(1.0); + dmg = 0; } From df47312e329b9f9576036b4c7604f40e1c70d33a Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 12:38:57 +0100 Subject: [PATCH 139/290] Fix move to battle_util.c --- src/battle_ai_util.c | 11 +---------- src/battle_util.c | 18 +++++++++++------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 8cb3d46602..4641ba2cdd 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -802,16 +802,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, } else { - #if B_GLARE_GHOST == GEN_3 - else if (move == MOVE_GLARE || move == MOVE_THUNDER_WAVE) - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); - else -# endif - if (move == MOVE_THUNDER_WAVE) - effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); - else - effectivenessMultiplier = UQ_4_12(1.0); - + effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, FALSE); dmg = 0; } diff --git a/src/battle_util.c b/src/battle_util.c index ccc7445b52..0a00372c0d 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9851,7 +9851,17 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1) MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities); - if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) + if (gBattleMoves[move].split == SPLIT_STATUS && move != MOVE_THUNDER_WAVE) + { + modifier = UQ_4_12(1.0); + #if B_GLARE_GHOST <= GEN_3 + if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + { + modifier = UQ_4_12(0.0); + } + #endif + } + else if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) { modifier = UQ_4_12(0.0); if (recordAbilities && defAbility == ABILITY_LEVITATE) @@ -9869,12 +9879,6 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat modifier = UQ_4_12(0.0); } #endif -#if B_GLARE_GHOST >= GEN_4 - else if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - { - modifier = UQ_4_12(1.0); - } -#endif // Thousand Arrows ignores type modifiers for flying mons if (!IsBattlerGrounded(battlerDef) && (gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING) From 31ab56bceb00c12a54f02c520b057911de7c94ae Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 25 Feb 2023 09:23:34 -0300 Subject: [PATCH 140/290] Fixed footprint symbol names. --- include/graphics.h | 6 +++--- src/data/graphics/pokemon.h | 6 +++--- src/data/pokemon_graphics/footprint_table.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/graphics.h b/include/graphics.h index 443dc4ade5..f00c727884 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -6960,9 +6960,9 @@ extern const u8 gMonFootprint_Mimikyu[]; extern const u8 gMonFootprint_Bruxish[]; extern const u8 gMonFootprint_Drampa[]; extern const u8 gMonFootprint_Dhelmise[]; -extern const u8 gMonFootprint_Jangmo_o[]; -extern const u8 gMonFootprint_Hakamo_o[]; -extern const u8 gMonFootprint_Kommo_o[]; +extern const u8 gMonFootprint_JangmoO[]; +extern const u8 gMonFootprint_HakamoO[]; +extern const u8 gMonFootprint_KommoO[]; extern const u8 gMonFootprint_Tapu_Koko[]; extern const u8 gMonFootprint_Tapu_Lele[]; extern const u8 gMonFootprint_Tapu_Bulu[]; diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 314d081ea8..1d67044169 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -6891,9 +6891,9 @@ const u8 gMonFootprint_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/footprint const u8 gMonFootprint_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/footprint.1bpp"); const u8 gMonFootprint_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/footprint.1bpp"); const u8 gMonFootprint_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/footprint.1bpp"); -const u8 gMonFootprint_Jangmo_o[] = INCBIN_U8("graphics/pokemon/jangmo_o/footprint.1bpp"); -const u8 gMonFootprint_Hakamo_o[] = INCBIN_U8("graphics/pokemon/hakamo_o/footprint.1bpp"); -const u8 gMonFootprint_Kommo_o[] = INCBIN_U8("graphics/pokemon/kommo_o/footprint.1bpp"); +const u8 gMonFootprint_JangmoO[] = INCBIN_U8("graphics/pokemon/jangmo_o/footprint.1bpp"); +const u8 gMonFootprint_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/footprint.1bpp"); +const u8 gMonFootprint_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/footprint.1bpp"); const u8 gMonFootprint_Tapu_Koko[] = INCBIN_U8("graphics/pokemon/tapu_koko/footprint.1bpp"); const u8 gMonFootprint_Tapu_Lele[] = INCBIN_U8("graphics/pokemon/tapu_lele/footprint.1bpp"); const u8 gMonFootprint_Tapu_Bulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/footprint.1bpp"); diff --git a/src/data/pokemon_graphics/footprint_table.h b/src/data/pokemon_graphics/footprint_table.h index 2b0dd0a4f6..8e21b0604e 100644 --- a/src/data/pokemon_graphics/footprint_table.h +++ b/src/data/pokemon_graphics/footprint_table.h @@ -789,9 +789,9 @@ const u8 *const gMonFootprintTable[] = [SPECIES_BRUXISH] = gMonFootprint_Bruxish, [SPECIES_DRAMPA] = gMonFootprint_Drampa, [SPECIES_DHELMISE] = gMonFootprint_Dhelmise, - [SPECIES_JANGMO_O] = gMonFootprint_Jangmo_o, - [SPECIES_HAKAMO_O] = gMonFootprint_Hakamo_o, - [SPECIES_KOMMO_O] = gMonFootprint_Kommo_o, + [SPECIES_JANGMO_O] = gMonFootprint_JangmoO, + [SPECIES_HAKAMO_O] = gMonFootprint_HakamoO, + [SPECIES_KOMMO_O] = gMonFootprint_KommoO, [SPECIES_TAPU_KOKO] = gMonFootprint_Tapu_Koko, [SPECIES_TAPU_LELE] = gMonFootprint_Tapu_Lele, [SPECIES_TAPU_BULU] = gMonFootprint_Tapu_Bulu, From 7ea82820ec66bfb91a4171a51c1a94fc8721964e Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 15:07:45 +0100 Subject: [PATCH 141/290] Consider nature power in AI_CalcDamage --- src/battle_ai_util.c | 4 ++++ src/data/battle_moves.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 4641ba2cdd..a48c051acb 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -744,6 +744,10 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, SetBattlerData(battlerDef); gBattleStruct->dynamicMoveType = 0; + + if (move == MOVE_NATURE_POWER) + move = GetNaturePowerMove(); + SetTypeBeforeUsingMove(move, battlerAtk); GET_MOVE_TYPE(move, moveType); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 82883fb8c9..50e10d414d 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -4847,7 +4847,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_NATURE_POWER] = { .effect = EFFECT_NATURE_POWER, - .power = 0, + .power = 1, .type = TYPE_NORMAL, .accuracy = 0, .pp = 20, From f249b58c01862fdf55a95dbb866a14d3c9b28388 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 25 Feb 2023 15:24:31 +0100 Subject: [PATCH 142/290] fix style --- 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 a48c051acb..22e88aac4c 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -746,7 +746,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, gBattleStruct->dynamicMoveType = 0; if (move == MOVE_NATURE_POWER) - move = GetNaturePowerMove(); + move = GetNaturePowerMove(); SetTypeBeforeUsingMove(move, battlerAtk); GET_MOVE_TYPE(move, moveType); From d00c8902f9bc1a6a2dc16fc9005b04818ebcfe60 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 25 Feb 2023 16:48:16 -0300 Subject: [PATCH 143/290] Whitelist instead of Blacklist for TOOLDIRS in Makefiles --- Makefile | 3 ++- make_tools.mk | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 88303e7f39..50a7e0d255 100644 --- a/Makefile +++ b/Makefile @@ -134,7 +134,8 @@ JSONPROC := tools/jsonproc/jsonproc$(EXE) PERL := perl -TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +# 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)) diff --git a/make_tools.mk b/make_tools.mk index 697897a693..7e0baf8900 100644 --- a/make_tools.mk +++ b/make_tools.mk @@ -1,7 +1,8 @@ MAKEFLAGS += --no-print-directory -TOOLDIRS := $(filter-out tools/agbcc tools/binutils,$(wildcard tools/*)) +# 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 .PHONY: all $(TOOLDIRS) From f376b71f7c9c256858f350abf0a079d4b79afbda Mon Sep 17 00:00:00 2001 From: Zunawe Date: Sat, 25 Feb 2023 13:48:39 -0800 Subject: [PATCH 144/290] Fix wrong route in item flag name --- data/maps/Route110/map.json | 2 +- include/constants/flags.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/data/maps/Route110/map.json b/data/maps/Route110/map.json index 630b20bd37..2b52164113 100644 --- a/data/maps/Route110/map.json +++ b/data/maps/Route110/map.json @@ -288,7 +288,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "Route110_EventScript_ItemRareCandy", - "flag": "FLAG_ITEM_ROUTE_109_RARE_CANDY" + "flag": "FLAG_ITEM_ROUTE_110_RARE_CANDY" }, { "graphics_id": "OBJ_EVENT_GFX_CYCLING_TRIATHLETE_M", diff --git a/include/constants/flags.h b/include/constants/flags.h index 4bef779385..99a8377a75 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1051,7 +1051,7 @@ #define FLAG_ITEM_ROUTE_105_IRON 0x3EB #define FLAG_ITEM_ROUTE_106_PROTEIN 0x3EC #define FLAG_ITEM_ROUTE_109_PP_UP 0x3ED -#define FLAG_ITEM_ROUTE_109_RARE_CANDY 0x3EE +#define FLAG_ITEM_ROUTE_110_RARE_CANDY 0x3EE #define FLAG_ITEM_ROUTE_110_DIRE_HIT 0x3EF #define FLAG_ITEM_ROUTE_111_TM37 0x3F0 #define FLAG_ITEM_ROUTE_111_STARDUST 0x3F1 From 4bdca43dbd93b82ada5adede995be9197e8390dd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Feb 2023 12:51:35 +0100 Subject: [PATCH 145/290] refactor mega evolution indicator sprite --- data/battle_anim_scripts.s | 3 + data/battle_scripts_1.s | 13 +- include/battle_interface.h | 4 +- src/battle_anim.c | 43 ++-- src/battle_anim_sound_tasks.c | 5 + src/battle_gfx_sfx_util.c | 1 + src/battle_interface.c | 408 +++++++++++++++++----------------- src/battle_main.c | 11 +- src/battle_script_commands.c | 153 ++++++------- src/battle_util.c | 2 +- 10 files changed, 305 insertions(+), 338 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 75a831a331..8a674fee7d 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -24860,6 +24860,7 @@ General_MegaEvolution: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 createsprite gMegaSymbolSpriteTemplate ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -25005,6 +25006,7 @@ General_PrimalReversion_Alpha: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 createsprite gAlphaSymbolSpriteTemplate ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER @@ -25031,6 +25033,7 @@ General_PrimalReversion_Omega: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish + createvisualtask SoundTask_PlayNormalCry, 0 createsprite gOmegaSymbolSpriteTemplate ANIM_ATTACKER, 2 waitforvisualfinish clearmonbg ANIM_ATK_PARTNER diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 04b709f826..3b6e2c5c22 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -7808,6 +7808,7 @@ BattleScript_FocusPunchSetUp:: BattleScript_MegaEvolution:: printstring STRINGID_MEGAEVOREACTING +BattleScript_MegaEvolutionAfeterString: waitmessage B_WAIT_TIME_LONG setbyte gIsCriticalHit, 0 handlemegaevo BS_ATTACKER, 0 @@ -7822,17 +7823,7 @@ BattleScript_MegaEvolution:: BattleScript_WishMegaEvolution:: printstring STRINGID_FERVENTWISHREACHED - waitmessage B_WAIT_TIME_LONG - setbyte gIsCriticalHit, 0 - handlemegaevo BS_ATTACKER, 0 - handlemegaevo BS_ATTACKER, 1 - playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION - waitanimation - handlemegaevo BS_ATTACKER, 2 - printstring STRINGID_MEGAEVOEVOLVED - waitmessage B_WAIT_TIME_LONG - switchinabilities BS_ATTACKER - end2 + goto BattleScript_MegaEvolutionAfeterString BattleScript_PrimalReversion:: printstring STRINGID_EMPTYSTRING3 diff --git a/include/battle_interface.h b/include/battle_interface.h index c82f2acc2e..3d49356e24 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -77,7 +77,6 @@ enum }; u32 WhichBattleCoords(u32 battlerId); -u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId); u8 CreateBattlerHealthboxSprites(u8 battler); u8 CreateSafariPlayerHealthboxSprites(void); void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue); @@ -94,8 +93,7 @@ void CreateMegaTriggerSprite(u8 battlerId, u8 palId); bool32 IsMegaTriggerSpriteActive(void); void HideMegaTriggerSprite(void); void DestroyMegaTriggerSprite(void); -u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which); -void DestroyMegaIndicatorSprite(u32 healthboxSpriteId); +void MegaIndicator_LoadSpritesGfx(void); u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart); void Task_HidePartyStatusSummary(u8 taskId); void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId); diff --git a/src/battle_anim.c b/src/battle_anim.c index a7faec1fda..fd81152e1c 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -274,6 +274,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId) case B_ANIM_DOOM_DESIRE_HIT: case B_ANIM_WISH_HEAL: case B_ANIM_MEGA_EVOLUTION: + case B_ANIM_PRIMAL_REVERSION: case B_ANIM_GULP_MISSILE: hideHpBoxes = TRUE; break; @@ -447,14 +448,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { targets[1] = targets[0] ^ BIT_FLANK; numTargets++; } - + if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + targets[2] = gBattleAnimAttacker ^ BIT_FLANK; numTargets++; } break; @@ -463,14 +464,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) numTargets = 1; break; } - + return numTargets; } static s16 GetSubpriorityForMoveAnim(u8 argVar) { s16 subpriority; - + if (argVar & ANIMSPRITE_IS_TARGET) { argVar ^= ANIMSPRITE_IS_TARGET; @@ -493,7 +494,7 @@ static s16 GetSubpriorityForMoveAnim(u8 argVar) if (subpriority < 3) subpriority = 3; - + return subpriority; } @@ -519,7 +520,7 @@ static void Cmd_createsprite(void) gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); CreateSpriteAndAnimate( @@ -536,22 +537,22 @@ static void CreateSpriteOnTargets(const struct SpriteTemplate *template, u8 argV u8 targets[MAX_BATTLERS_COUNT]; int ntargets; s16 subpriority; - + for (i = 0; i < argsCount; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); - + ntargets = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < ntargets; i++) { - + if (overwriteAnimTgt) gBattleAnimArgs[battlerArgIndex] = targets[i]; - + CreateSpriteAndAnimate( template, GetBattlerSpriteCoord(targets[i], BATTLER_COORD_X_2), @@ -575,13 +576,13 @@ static void Cmd_createspriteontargets_onpos(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, FALSE); } @@ -599,13 +600,13 @@ static void Cmd_createspriteontargets(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, TRUE); } @@ -656,21 +657,21 @@ static void Cmd_createvisualtaskontargets(void) taskPriority = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; numArgs = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + // copy task arguments for (i = 0; i < numArgs; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + numArgs = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < numArgs; i++) { gBattleAnimArgs[battlerArgIndex] = targets[i]; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index d96a4cea46..bd4638224f 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -283,6 +283,11 @@ void SoundTask_WaitForCry(u8 taskId) } } +void SoundTask_PlayNormalCry(u8 taskId) +{ + PlayCry_ByMode(gBattleMons[gBattleAnimAttacker].species, BattleAnimAdjustPanning(SOUND_PAN_ATTACKER), CRY_MODE_NORMAL); + gTasks[taskId].func = SoundTask_WaitForCry; +} #define tSpecies data[1] #define tPan data[2] diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 389832fb20..bc541f0a01 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -691,6 +691,7 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state) { LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]); + MegaIndicator_LoadSpritesGfx(); } else if (!IsDoubleBattle()) { diff --git a/src/battle_interface.c b/src/battle_interface.c index 9c0db8b074..4d0eedc35b 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -182,6 +182,11 @@ static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *); static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *); static void SpriteCb_MegaTrigger(struct Sprite *); +static void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible); +static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level); +static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId); +static void MegaIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority); +static void MegaIndicator_DestroySprites(u32 healthboxSpriteId); static void SpriteCb_MegaIndicator(struct Sprite *); static u8 GetStatusIconForBattlerId(u8, u8); @@ -660,90 +665,6 @@ static const struct SpriteTemplate sSpriteTemplate_MegaTrigger = .callback = SpriteCb_MegaTrigger }; -static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); -static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); - -static const struct SpriteSheet sSpriteSheet_MegaIndicator = -{ - sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE -}; -static const struct SpritePalette sSpritePalette_MegaIndicator = -{ - sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL -}; - -static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); -static const u16 sAlphaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); -static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); -static const u16 sOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/omega_indicator.gbapal"); - -static const struct SpriteSheet sSpriteSheet_AlphaIndicator = -{ - sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE -}; -static const struct SpritePalette sSpritePalette_AlphaIndicator = -{ - sAlphaIndicatorPal, TAG_ALPHA_INDICATOR_PAL -}; -static const struct SpriteSheet sSpriteSheet_OmegaIndicator = -{ - sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE -}; -static const struct SpritePalette sSpritePalette_OmegaIndicator = -{ - sOmegaIndicatorPal, TAG_OMEGA_INDICATOR_PAL -}; - -static const struct OamData sOamData_MegaIndicator = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const struct SpriteTemplate sSpriteTemplate_MegaIndicator = -{ - .tileTag = TAG_MEGA_INDICATOR_TILE, - .paletteTag = TAG_MEGA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_AlphaIndicator = -{ - .tileTag = TAG_ALPHA_INDICATOR_TILE, - .paletteTag = TAG_ALPHA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - -static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator = -{ - .tileTag = TAG_OMEGA_INDICATOR_TILE, - .paletteTag = TAG_OMEGA_INDICATOR_PAL, - .oam = &sOamData_MegaIndicator, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCb_MegaIndicator, -}; - // Because the healthbox is too large to fit into one sprite, it is divided into two sprites. // healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite. // healthboxRight or healthboxOther is the right part of the healthbox. @@ -751,26 +672,18 @@ static const struct SpriteTemplate sSpriteTemplate_OmegaIndicator = // data fields for healthboxMain // oam.affineParam holds healthboxRight spriteId +#define hMain_MegaIndicatorIds data[3] // Mega, Alpha, Omega as u8 in data[3], data[3] + 1, data[4] #define hMain_HealthBarSpriteId data[5] #define hMain_Battler data[6] #define hMain_Data7 data[7] // data fields for healthboxRight #define hOther_HealthBoxSpriteId data[5] -#define hOther_IndicatorSpriteId data[6] // For Mega Evo // data fields for healthbar #define hBar_HealthBoxSpriteId data[5] #define hBar_Data6 data[6] -u8 GetMegaIndicatorSpriteId(u32 healthboxSpriteId) -{ - u8 spriteId = gSprites[healthboxSpriteId].oam.affineParam; - if (spriteId >= MAX_SPRITES) - return 0xFF; - return gSprites[spriteId].hOther_IndicatorSpriteId; -} - static void InitLastUsedBallAssets(void) { gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; @@ -864,19 +777,13 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId) gSprites[healthboxLeftSpriteId].invisible = TRUE; gSprites[healthboxRightSpriteId].invisible = TRUE; - gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF; healthBarSpritePtr->hBar_HealthBoxSpriteId = healthboxLeftSpriteId; healthBarSpritePtr->hBar_Data6 = data6; healthBarSpritePtr->invisible = TRUE; - // Create mega indicator sprite if is a mega evolved or a primal reverted mon. - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - megaIndicatorSpriteId = CreateMegaIndicatorSprite(battlerId, 0); - gSprites[megaIndicatorSpriteId].invisible = TRUE; - } + // Create mega indicator sprites. + MegaIndicator_CreateSprites(battlerId, healthboxLeftSpriteId); gBattleStruct->ballSpriteIds[0] = MAX_SPRITES; gBattleStruct->ballSpriteIds[1] = MAX_SPRITES; @@ -899,8 +806,6 @@ u8 CreateSafariPlayerHealthboxSprites(void) gSprites[healthboxLeftSpriteId].oam.affineParam = healthboxRightSpriteId; gSprites[healthboxRightSpriteId].hOther_HealthBoxSpriteId = healthboxLeftSpriteId; - gSprites[healthboxRightSpriteId].hOther_IndicatorSpriteId = 0xFF; - gSprites[healthboxRightSpriteId].callback = SpriteCB_HealthBoxOther; return healthboxLeftSpriteId; @@ -940,19 +845,12 @@ static void SpriteCB_HealthBar(struct Sprite *sprite) static void SpriteCB_HealthBoxOther(struct Sprite *sprite) { u8 healthboxMainSpriteId = sprite->hOther_HealthBoxSpriteId; - u8 megaSpriteId = sprite->hOther_IndicatorSpriteId; sprite->x = gSprites[healthboxMainSpriteId].x + 64; sprite->y = gSprites[healthboxMainSpriteId].y; sprite->x2 = gSprites[healthboxMainSpriteId].x2; sprite->y2 = gSprites[healthboxMainSpriteId].y2; - - if (megaSpriteId != 0xFF) - { - gSprites[megaSpriteId].x2 = sprite->x2; - gSprites[megaSpriteId].y2 = sprite->y2; - } } void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldVal, s32 receivedValue) @@ -966,28 +864,18 @@ void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 oldV void SetHealthboxSpriteInvisible(u8 healthboxSpriteId) { - DestroyMegaIndicatorSprite(healthboxSpriteId); gSprites[healthboxSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE; + MegaIndicator_SetVisibilities(healthboxSpriteId, TRUE); } void SetHealthboxSpriteVisible(u8 healthboxSpriteId) { - u8 battlerId = gSprites[healthboxSpriteId].hMain_Battler; - gSprites[healthboxSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE; gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE; - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]] - || gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - u8 spriteId = GetMegaIndicatorSpriteId(healthboxSpriteId); - if (spriteId != 0xFF) - gSprites[spriteId].invisible = FALSE; - else - CreateMegaIndicatorSprite(battlerId, 0); - } + MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE); } static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) @@ -998,7 +886,7 @@ static void UpdateSpritePos(u8 spriteId, s16 x, s16 y) void DestoryHealthboxSprite(u8 healthboxSpriteId) { - DestroyMegaIndicatorSprite(healthboxSpriteId); + MegaIndicator_DestroySprites(healthboxSpriteId); DestroySprite(&gSprites[gSprites[healthboxSpriteId].oam.affineParam]); DestroySprite(&gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId]); DestroySprite(&gSprites[healthboxSpriteId]); @@ -1009,26 +897,19 @@ void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBattlerO } -static void TryToggleHealboxVisibility(u8 priority, u8 healthboxLeftSpriteId, u8 healthboxRightSpriteId, u8 healthbarSpriteId, u8 indicatorSpriteId) +static void TryToggleHealboxVisibility(u32 priority, u32 healthboxLeftSpriteId, u32 healthboxRightSpriteId, u32 healthbarSpriteId) { - u8 spriteIds[4] = {healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId}; - int i; + bool32 invisible = FALSE; - for (i = 0; i < NELEMS(spriteIds); i++) - { - if (spriteIds[i] == 0xFF) - continue; + if (priority == 0) // start of anim -> make invisible + invisible = TRUE; + else if (priority == 1) // end of anim -> make visible + invisible = FALSE; - switch (priority) - { - case 0: //start of anim -> make invisible - gSprites[spriteIds[i]].invisible = TRUE; - break; - case 1: //end of anim -> make visible - gSprites[spriteIds[i]].invisible = FALSE; - break; - } - } + gSprites[healthboxLeftSpriteId].invisible = invisible; + gSprites[healthboxRightSpriteId].invisible = invisible; + gSprites[healthbarSpriteId].invisible = invisible; + MegaIndicator_SetVisibilities(healthboxLeftSpriteId, invisible); } void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) @@ -1040,17 +921,16 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes) u8 healthboxLeftSpriteId = gHealthboxSpriteIds[i]; u8 healthboxRightSpriteId = gSprites[gHealthboxSpriteIds[i]].oam.affineParam; u8 healthbarSpriteId = gSprites[gHealthboxSpriteIds[i]].hMain_HealthBarSpriteId; - u8 indicatorSpriteId = GetMegaIndicatorSpriteId(healthboxLeftSpriteId); gSprites[healthboxLeftSpriteId].oam.priority = priority; gSprites[healthboxRightSpriteId].oam.priority = priority; gSprites[healthbarSpriteId].oam.priority = priority; - if (indicatorSpriteId != 0xFF) - gSprites[indicatorSpriteId].oam.priority = priority; + + MegaIndicator_UpdateOamPriorities(healthboxLeftSpriteId, priority); #if B_HIDE_HEALTHBOX_IN_ANIMS if (hideHPBoxes && IsBattlerAlive(i)) - TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId, indicatorSpriteId); + TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId); #endif } } @@ -1109,6 +989,8 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) { objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3); xPos = 5 * (3 - (objVram - (text + 2))) - 1; + MegaIndicator_UpdateLevel(healthboxSpriteId, lvl); + MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE); } else { @@ -1119,7 +1001,6 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl) xPos = 5 * (3 - (objVram - (text + 2))); } - xPos = 5 * (3 - (objVram - (text + 2))); windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId); spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP; @@ -1418,7 +1299,7 @@ void SwapHpBarsWithHpText(void) } } -// Mega Evolution gfx functions. +// Mega Evolution Trigger icon functions. void ChangeMegaTriggerSprite(u8 spriteId, u8 animId) { StartSpriteAnim(&gSprites[spriteId], animId); @@ -1543,6 +1424,65 @@ void DestroyMegaTriggerSprite(void) gBattleStruct->mega.triggerSpriteId = 0xFF; } +#undef tBattler +#undef tHide + +// Code for Mega Evolution (And Alpha/Omega) Trigger icon visible on the battler's healthbox. +enum +{ + INDICATOR_MEGA, + INDICATOR_ALPHA, + INDICATOR_OMEGA, + INDICATOR_COUNT, +}; + +static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); +static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); +static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); +static const u16 sAlphaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); +static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); +static const u16 sOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/omega_indicator.gbapal"); + +static const struct SpriteSheet sMegaIndicator_SpriteSheets[] = +{ + [INDICATOR_MEGA] = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE}, + [INDICATOR_ALPHA] = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE}, + [INDICATOR_OMEGA] = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE}, + [INDICATOR_COUNT] = {0} +}; +static const struct SpritePalette sMegaIndicator_SpritePalettes[] = +{ + [INDICATOR_MEGA] = {sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL}, + [INDICATOR_ALPHA] = {sAlphaIndicatorPal, TAG_ALPHA_INDICATOR_PAL}, + [INDICATOR_OMEGA] = {sOmegaIndicatorPal, TAG_OMEGA_INDICATOR_PAL}, + [INDICATOR_COUNT] = {0} +}; + +static const struct OamData sOamData_MegaIndicator = +{ + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 1, +}; + +static const struct SpriteTemplate sSpriteTemplate_MegaIndicator = +{ + .tileTag = TAG_MEGA_INDICATOR_TILE, + .paletteTag = TAG_MEGA_INDICATOR_PAL, + .oam = &sOamData_MegaIndicator, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_MegaIndicator, +}; + +static const u16 sMegaIndicatorTags[][2] = +{ + [INDICATOR_MEGA] = {TAG_MEGA_INDICATOR_TILE, TAG_MEGA_INDICATOR_PAL}, + [INDICATOR_ALPHA] = {TAG_ALPHA_INDICATOR_TILE, TAG_ALPHA_INDICATOR_PAL}, + [INDICATOR_OMEGA] = {TAG_OMEGA_INDICATOR_TILE, TAG_OMEGA_INDICATOR_PAL}, +}; + static const s8 sIndicatorPositions[][2] = { [B_POSITION_PLAYER_LEFT] = {52, -9}, @@ -1551,89 +1491,137 @@ static const s8 sIndicatorPositions[][2] = [B_POSITION_OPPONENT_RIGHT] = {44, -9}, }; -u32 CreateMegaIndicatorSprite(u32 battlerId, u32 which) +// for sprite data fields +#define tBattler data[0] +#define tType data[1] // Indicator type: mega, alpha, omega +#define tPosX data[2] +#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit + +void MegaIndicator_LoadSpritesGfx(void) { - u32 spriteId, position; - s16 x, y; - - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - LoadSpritePalette(&sSpritePalette_MegaIndicator); - LoadSpriteSheet(&sSpriteSheet_MegaIndicator); - } - else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) - { - LoadSpritePalette(&sSpritePalette_OmegaIndicator); - LoadSpriteSheet(&sSpriteSheet_OmegaIndicator); - } - else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) - { - LoadSpritePalette(&sSpritePalette_AlphaIndicator); - LoadSpriteSheet(&sSpriteSheet_AlphaIndicator); - } - } - - position = GetBattlerPosition(battlerId); - GetBattlerHealthboxCoords(battlerId, &x, &y); - - x += sIndicatorPositions[position][0]; - y += sIndicatorPositions[position][1]; - - if (gBattleMons[battlerId].level >= 100) - x -= 4; - else if (gBattleMons[battlerId].level < 10) - x += 5; - - if (gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_MegaIndicator, x, y, 0); - } - else if (gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(battlerId)] & gBitTable[gBattlerPartyIndexes[battlerId]]) - { - if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_GROUDON) - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_OmegaIndicator, x, y, 0); - else if (GET_BASE_SPECIES_ID(gBattleMons[battlerId].species) == SPECIES_KYOGRE) - spriteId = CreateSpriteAtEnd(&sSpriteTemplate_AlphaIndicator, x, y, 0); - } - - gSprites[gSprites[gHealthboxSpriteIds[battlerId]].oam.affineParam].hOther_IndicatorSpriteId = spriteId; - gSprites[spriteId].tBattler = battlerId; - return spriteId; + LoadSpriteSheets(sMegaIndicator_SpriteSheets); + LoadSpritePalettes(sMegaIndicator_SpritePalettes); } -void DestroyMegaIndicatorSprite(u32 healthboxSpriteId) +static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, u32 indicatorType) +{ + u32 side = GetBattlerSide(battlerId); + if (indicatorType == INDICATOR_MEGA) + { + if (gBattleStruct->mega.evolvedPartyIds[side] & gBitTable[gBattlerPartyIndexes[battlerId]]) + return FALSE; + } + else + { + if (indicatorType == INDICATOR_ALPHA) + { + if (gBattleMons[battlerId].species != SPECIES_KYOGRE_PRIMAL) + return TRUE; + } + else if (indicatorType == INDICATOR_OMEGA) + { + if (gBattleMons[battlerId].species != SPECIES_GROUDON_PRIMAL) + return TRUE; + } + if (gBattleStruct->mega.primalRevertedPartyIds[side] & gBitTable[gBattlerPartyIndexes[battlerId]]) + return FALSE; + } + return TRUE; +} + +static u8 *MegaIndicator_GetSpriteIds(u32 healthboxSpriteId) +{ + u8 *spriteIds = (u8 *)(&gSprites[healthboxSpriteId].hMain_MegaIndicatorIds); + return spriteIds; +} + +void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible) { u32 i; - s16 *spriteId = &gSprites[gSprites[healthboxSpriteId].oam.affineParam].hOther_IndicatorSpriteId; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); + u32 battlerId = gSprites[healthboxId].hMain_Battler; - if (*spriteId != 0xFF) + for (i = 0; i < INDICATOR_COUNT; i++) { - DestroySprite(&gSprites[*spriteId]); - *spriteId = 0xFF; + if (invisible == TRUE) + gSprites[spriteIds[i]].invisible = TRUE; + else // Try visible. + gSprites[spriteIds[i]].invisible = MegaIndicator_ShouldBeInvisible(battlerId, i); } +} - for (i = 0; i < MAX_BATTLERS_COUNT; i++) +static void MegaIndicator_UpdateOamPriorities(u32 healthboxId, u32 oamPriority) +{ + u32 i; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); + for (i = 0; i < INDICATOR_COUNT; i++) + gSprites[spriteIds[i]].oam.priority = oamPriority; +} + +static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level) +{ + u32 i; + s16 xDelta = 0; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxId); + + if (level >= 100) + xDelta -= 4; + else if (level < 10) + xDelta += 5; + + for (i = 0; i < INDICATOR_COUNT; i++) + gSprites[spriteIds[i]].tLevelXDelta = xDelta; +} + +static void MegaIndicator_CreateSprites(u32 battlerId, u32 healthboxSpriteId) +{ + u32 position, i, level; + u8 *spriteIds; + s16 xHealthbox = 0, y = 0; + s32 x = 0; + + position = GetBattlerPosition(battlerId); + GetBattlerHealthboxCoords(battlerId, &xHealthbox, &y); + + x = sIndicatorPositions[position][0]; + y += sIndicatorPositions[position][1]; + + spriteIds = MegaIndicator_GetSpriteIds(healthboxSpriteId); + for (i = 0; i < INDICATOR_COUNT; i++) { - if (gSprites[gSprites[gHealthboxSpriteIds[i]].oam.affineParam].hOther_IndicatorSpriteId != 0xFF) - break; - } - // Free Sprite pal/tiles only if no indicator sprite is active for all battlers. - if (i == MAX_BATTLERS_COUNT) - { - FreeSpritePaletteByTag(TAG_MEGA_INDICATOR_PAL); - FreeSpriteTilesByTag(TAG_MEGA_INDICATOR_TILE); + struct SpriteTemplate sprTemplate = sSpriteTemplate_MegaIndicator; + sprTemplate.tileTag = sMegaIndicatorTags[i][0]; + sprTemplate.paletteTag = sMegaIndicatorTags[i][1]; + spriteIds[i] = CreateSpriteAtEnd(&sprTemplate, 0, y, 0); + gSprites[spriteIds[i]].tType = i; + gSprites[spriteIds[i]].tBattler = battlerId; + gSprites[spriteIds[i]].tPosX = x; + gSprites[spriteIds[i]].invisible = TRUE; } } +static void MegaIndicator_DestroySprites(u32 healthboxSpriteId) +{ + u32 i; + u8 *spriteIds = MegaIndicator_GetSpriteIds(healthboxSpriteId); + + for (i = 0; i < INDICATOR_COUNT; i++) + DestroySprite(&gSprites[spriteIds[i]]); +} + static void SpriteCb_MegaIndicator(struct Sprite *sprite) { + u32 battlerId = sprite->tBattler; + sprite->x = gSprites[gHealthboxSpriteIds[battlerId]].x + sprite->tPosX + sprite->tLevelXDelta; + sprite->x2 = gSprites[gHealthboxSpriteIds[battlerId]].x2; + sprite->y2 = gSprites[gHealthboxSpriteIds[battlerId]].y2; } #undef tBattler -#undef tHide +#undef tType +#undef tPosX +#undef tLevelXDelta #define tBattler data[0] #define tSummaryBarSpriteId data[1] diff --git a/src/battle_main.c b/src/battle_main.c index 6588d3c5ee..0d87847814 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -2878,10 +2878,6 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite) gSprites[bouncerSpriteId].y2 = y; sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF; - - bouncerSpriteId = GetMegaIndicatorSpriteId(sprite->sBouncerSpriteId); - if (sprite->sWhich == BOUNCE_HEALTHBOX && bouncerSpriteId != 0xFF) - gSprites[bouncerSpriteId].y2 = y; } #undef sSinIndex @@ -4886,11 +4882,8 @@ static void CheckMegaEvolutionBeforeTurn(void) if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] && !(gProtectStructs[gActiveBattler].noValidMoves)) { - struct Pokemon *mon; - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; + struct Pokemon *mon = GetBattlerPartyData(gActiveBattler); + gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); gLastUsedItem = gBattleMons[gActiveBattler].item; if (GetWishMegaEvolutionSpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_MOVE1), GetMonData(mon, MON_DATA_MOVE2), GetMonData(mon, MON_DATA_MOVE3), GetMonData(mon, MON_DATA_MOVE4))) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3826a47517..9ff0146393 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8633,6 +8633,74 @@ static bool32 CourtChangeSwapSideStatuses(void) SWAP(sideTimerPlayer->stickyWebBattlerSide, sideTimerOpp->stickyWebBattlerSide, temp); } +static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) +{ + struct Pokemon *mon = GetBattlerPartyData(battlerId); + u32 position = GetBattlerPosition(battlerId); + u32 side = GET_BATTLER_SIDE(battlerId); + + // Change species. + if (caseId == 0) + { + u16 newSpecies; + if (isMega) + { + gBattleStruct->mega.evolvedSpecies[battlerId] = gBattleMons[battlerId].species; + if (position == B_POSITION_PLAYER_LEFT + || (position == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) + { + gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[battlerId]; + } + //Checks regular Mega Evolution + newSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[battlerId], gBattleMons[battlerId].item); + //Checks Wish Mega Evolution + if (newSpecies == SPECIES_NONE) + { + newSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[battlerId], + gBattleMons[battlerId].moves[0], gBattleMons[battlerId].moves[1], gBattleMons[battlerId].moves[2], gBattleMons[battlerId].moves[3]); + } + } + else + { + gBattleStruct->mega.primalRevertedSpecies[battlerId] = gBattleMons[battlerId].species; + if (position == B_POSITION_PLAYER_LEFT + || (position == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) + { + gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[battlerId]; + } + // Checks Primal Reversion. + newSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[battlerId], gBattleMons[battlerId].item); + } + + gBattleMons[battlerId].species = newSpecies; + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[battlerId].species); + + BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[battlerId]], sizeof(gBattleMons[battlerId].species), &gBattleMons[battlerId].species); + MarkBattlerForControllerExec(battlerId); + } + // Change stats. + else if (caseId == 1) + { + RecalcBattlerStats(battlerId, mon); + if (isMega) + { + gBattleStruct->mega.alreadyEvolved[position] = TRUE; + gBattleStruct->mega.evolvedPartyIds[side] |= gBitTable[gBattlerPartyIndexes[battlerId]]; + } + else + { + gBattleStruct->mega.primalRevertedPartyIds[side] |= gBitTable[gBattlerPartyIndexes[battlerId]]; + } + } + // Update healthbox and elevation and play cry. + else + { + UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], mon, HEALTHBOX_ALL); + if (side == B_SIDE_OPPONENT) + SetBattlerShadowSpriteCallback(battlerId, gBattleMons[battlerId].species); + } +} + static bool32 CanTeleport(u8 battlerId) { u8 side = GetBattlerSide(battlerId); @@ -9709,95 +9777,14 @@ static void Cmd_various(void) case VARIOUS_HANDLE_MEGA_EVO: { VARIOUS_ARGS(u8 case_); - - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; - - // Change species. - if (cmd->case_ == 0) - { - u16 megaSpecies; - gBattleStruct->mega.evolvedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT - || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) - { - gBattleStruct->mega.playerEvolvedSpecies = gBattleStruct->mega.evolvedSpecies[gActiveBattler]; - } - //Checks regular Mega Evolution - megaSpecies = GetMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); - //Checks Wish Mega Evolution - if (megaSpecies == SPECIES_NONE) - { - megaSpecies = GetWishMegaEvolutionSpecies(gBattleStruct->mega.evolvedSpecies[gActiveBattler], gBattleMons[gActiveBattler].moves[0], gBattleMons[gActiveBattler].moves[1], gBattleMons[gActiveBattler].moves[2], gBattleMons[gActiveBattler].moves[3]); - } - - gBattleMons[gActiveBattler].species = megaSpecies; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); - - BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); - MarkBattlerForControllerExec(gActiveBattler); - } - // Change stats. - else if (cmd->case_ == 1) - { - RecalcBattlerStats(gActiveBattler, mon); - gBattleStruct->mega.alreadyEvolved[GetBattlerPosition(gActiveBattler)] = TRUE; - gBattleStruct->mega.evolvedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; - } - // Update healthbox and elevation. - else - { - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); - CreateMegaIndicatorSprite(gActiveBattler, 0); - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); - } + HandleScriptMegaPrimal(cmd->case_, gActiveBattler, TRUE); gBattlescriptCurrInstr = cmd->nextInstr; return; } case VARIOUS_HANDLE_PRIMAL_REVERSION: { VARIOUS_ARGS(u8 case_); - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]; - - // Change species. - if (cmd->case_ == 0) - { - u16 primalSpecies; - gBattleStruct->mega.primalRevertedSpecies[gActiveBattler] = gBattleMons[gActiveBattler].species; - if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT - || (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_RIGHT && !(gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)))) - { - gBattleStruct->mega.playerPrimalRevertedSpecies = gBattleStruct->mega.primalRevertedSpecies[gActiveBattler]; - } - // Checks Primal Reversion - primalSpecies = GetPrimalReversionSpecies(gBattleStruct->mega.primalRevertedSpecies[gActiveBattler], gBattleMons[gActiveBattler].item); - - gBattleMons[gActiveBattler].species = primalSpecies; - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gActiveBattler].species); - - BtlController_EmitSetMonData(BUFFER_A, REQUEST_SPECIES_BATTLE, gBitTable[gBattlerPartyIndexes[gActiveBattler]], sizeof(gBattleMons[gActiveBattler].species), &gBattleMons[gActiveBattler].species); - MarkBattlerForControllerExec(gActiveBattler); - } - // Change stats. - else if (cmd->case_ == 1) - { - RecalcBattlerStats(gActiveBattler, mon); - gBattleStruct->mega.primalRevertedPartyIds[GetBattlerSide(gActiveBattler)] |= gBitTable[gBattlerPartyIndexes[gActiveBattler]]; - } - // Update healthbox and elevation. - else - { - UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], mon, HEALTHBOX_ALL); - CreateMegaIndicatorSprite(gActiveBattler, 0); - if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) - SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); - } + HandleScriptMegaPrimal(cmd->case_, gActiveBattler, FALSE); gBattlescriptCurrInstr = cmd->nextInstr; return; } diff --git a/src/battle_util.c b/src/battle_util.c index ccc7445b52..e70b9f04dc 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -10141,7 +10141,7 @@ void UndoMegaEvolution(u32 monId) if (gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) { gBattleStruct->mega.evolvedPartyIds[B_SIDE_PLAYER] &= ~(gBitTable[monId]); - SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &gBattleStruct->mega.playerEvolvedSpecies); + SetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, &baseSpecies); CalculateMonStats(&gPlayerParty[monId]); } else if (gBattleStruct->mega.primalRevertedPartyIds[B_SIDE_PLAYER] & gBitTable[monId]) From 8143f57eb9d487e3e2285ce6ec839739451b4722 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sun, 26 Feb 2023 14:06:32 +0100 Subject: [PATCH 146/290] Fix sprite palettes up to Ampharos included --- graphics/pokemon/ampharos/anim_front.png | Bin 1115 -> 1128 bytes graphics/pokemon/ampharos/front.png | Bin 699 -> 684 bytes graphics/pokemon/ampharos/normal.pal | 28 +++++++++---------- graphics/pokemon/ariados/anim_front.png | Bin 1369 -> 1308 bytes graphics/pokemon/ariados/front.png | Bin 806 -> 794 bytes graphics/pokemon/ariados/normal.pal | 28 +++++++++---------- graphics/pokemon/bayleef/anim_front.png | Bin 1123 -> 1112 bytes graphics/pokemon/bayleef/front.png | Bin 700 -> 710 bytes graphics/pokemon/bayleef/normal.pal | 28 +++++++++---------- graphics/pokemon/chikorita/anim_front.png | Bin 880 -> 871 bytes graphics/pokemon/chikorita/front.png | Bin 517 -> 503 bytes graphics/pokemon/chikorita/normal.pal | 28 +++++++++---------- graphics/pokemon/chinchou/anim_front.png | Bin 1117 -> 1120 bytes graphics/pokemon/chinchou/front.png | Bin 656 -> 644 bytes graphics/pokemon/chinchou/normal.pal | 26 +++++++++--------- graphics/pokemon/cleffa/anim_front.png | Bin 600 -> 592 bytes graphics/pokemon/cleffa/front.png | Bin 415 -> 398 bytes graphics/pokemon/cleffa/normal.pal | 20 +++++++------- graphics/pokemon/crobat/anim_front.png | Bin 1121 -> 1125 bytes graphics/pokemon/crobat/front.png | Bin 690 -> 677 bytes graphics/pokemon/crobat/normal.pal | 26 +++++++++--------- graphics/pokemon/croconaw/anim_front.png | Bin 1152 -> 1054 bytes graphics/pokemon/croconaw/front.png | Bin 681 -> 668 bytes graphics/pokemon/croconaw/normal.pal | 28 +++++++++---------- graphics/pokemon/cyndaquil/anim_front.png | Bin 936 -> 887 bytes graphics/pokemon/cyndaquil/front.png | Bin 572 -> 540 bytes graphics/pokemon/cyndaquil/normal.pal | 26 +++++++++--------- graphics/pokemon/feraligatr/anim_front.png | Bin 1680 -> 1688 bytes graphics/pokemon/feraligatr/front.png | Bin 975 -> 982 bytes graphics/pokemon/feraligatr/normal.pal | 26 +++++++++--------- graphics/pokemon/flaaffy/anim_front.png | Bin 1125 -> 1127 bytes graphics/pokemon/flaaffy/front.png | Bin 669 -> 655 bytes graphics/pokemon/flaaffy/normal.pal | 28 +++++++++---------- graphics/pokemon/furret/anim_front.png | Bin 1058 -> 1124 bytes graphics/pokemon/furret/front.png | Bin 634 -> 658 bytes graphics/pokemon/furret/normal.pal | 26 +++++++++--------- graphics/pokemon/hoothoot/anim_front.png | Bin 825 -> 830 bytes graphics/pokemon/hoothoot/front.png | Bin 557 -> 548 bytes graphics/pokemon/hoothoot/normal.pal | 28 +++++++++---------- graphics/pokemon/igglybuff/anim_front.png | Bin 553 -> 579 bytes graphics/pokemon/igglybuff/front.png | Bin 392 -> 407 bytes graphics/pokemon/igglybuff/normal.pal | 20 +++++++------- graphics/pokemon/lanturn/anim_front.png | Bin 1145 -> 1097 bytes graphics/pokemon/lanturn/front.png | Bin 740 -> 680 bytes graphics/pokemon/lanturn/normal.pal | 30 ++++++++++----------- graphics/pokemon/ledian/anim_front.png | Bin 1291 -> 1326 bytes graphics/pokemon/ledian/front.png | Bin 736 -> 738 bytes graphics/pokemon/ledian/normal.pal | 24 ++++++++--------- graphics/pokemon/ledyba/anim_front.png | Bin 1222 -> 1218 bytes graphics/pokemon/ledyba/front.png | Bin 683 -> 674 bytes graphics/pokemon/ledyba/normal.pal | 28 +++++++++---------- graphics/pokemon/mareep/anim_front.png | Bin 975 -> 931 bytes graphics/pokemon/mareep/back.png | Bin 577 -> 520 bytes graphics/pokemon/mareep/front.png | Bin 619 -> 593 bytes graphics/pokemon/mareep/normal.pal | 28 +++++++++---------- graphics/pokemon/mareep/shiny.pal | 14 +++++----- graphics/pokemon/meganium/anim_front.png | Bin 1511 -> 1424 bytes graphics/pokemon/meganium/front.png | Bin 887 -> 852 bytes graphics/pokemon/meganium/normal.pal | 28 +++++++++---------- graphics/pokemon/natu/anim_front.png | Bin 610 -> 570 bytes graphics/pokemon/natu/front.png | Bin 412 -> 381 bytes graphics/pokemon/natu/normal.pal | 30 ++++++++++----------- graphics/pokemon/noctowl/anim_front.png | Bin 1159 -> 1143 bytes graphics/pokemon/noctowl/front.png | Bin 727 -> 702 bytes graphics/pokemon/noctowl/normal.pal | 28 +++++++++---------- graphics/pokemon/quilava/anim_front.png | Bin 1033 -> 984 bytes graphics/pokemon/quilava/back.png | Bin 775 -> 715 bytes graphics/pokemon/quilava/front.png | Bin 649 -> 599 bytes graphics/pokemon/quilava/normal.pal | 22 +++++++-------- graphics/pokemon/sentret/anim_front.png | Bin 948 -> 929 bytes graphics/pokemon/sentret/front.png | Bin 634 -> 597 bytes graphics/pokemon/sentret/normal.pal | 24 ++++++++--------- graphics/pokemon/spinarak/anim_front.png | Bin 727 -> 704 bytes graphics/pokemon/spinarak/front.png | Bin 536 -> 508 bytes graphics/pokemon/spinarak/normal.pal | 16 +++++------ graphics/pokemon/spinarak/shiny.pal | 2 +- graphics/pokemon/togepi/anim_front.png | Bin 672 -> 683 bytes graphics/pokemon/togepi/front.png | Bin 421 -> 421 bytes graphics/pokemon/togepi/normal.pal | 28 +++++++++---------- graphics/pokemon/togetic/anim_front.png | Bin 771 -> 720 bytes graphics/pokemon/togetic/front.png | Bin 464 -> 478 bytes graphics/pokemon/togetic/normal.pal | 20 +++++++------- graphics/pokemon/totodile/anim_front.png | Bin 790 -> 795 bytes graphics/pokemon/totodile/front.png | Bin 556 -> 538 bytes graphics/pokemon/totodile/normal.pal | 26 +++++++++--------- graphics/pokemon/totodile/shiny.pal | 2 +- graphics/pokemon/typhlosion/anim_front.png | Bin 1408 -> 1365 bytes graphics/pokemon/typhlosion/back.png | Bin 858 -> 817 bytes graphics/pokemon/typhlosion/normal.pal | 28 +++++++++---------- graphics/pokemon/xatu/anim_front.png | Bin 1059 -> 1042 bytes graphics/pokemon/xatu/front.png | Bin 610 -> 589 bytes graphics/pokemon/xatu/normal.pal | 28 +++++++++---------- 92 files changed, 386 insertions(+), 386 deletions(-) diff --git a/graphics/pokemon/ampharos/anim_front.png b/graphics/pokemon/ampharos/anim_front.png index 1b3930f64a134c42f1a17bb59405adff5039642d..4e71838b007865af7fa9ed4b3bf1d842546dc141 100644 GIT binary patch delta 1119 zcmV-l1fcud2lo1dVFz4bV%gt_L{%jCoS`WX0BM=Lb!rz%w z>Asvs`Tg-Mh<^-6aX~!0Ss3yNfHNm4S^g#%&*T)qALBs?A%X`0QhpaFQYq^7Y%Zn% zW2Xt6i`Fflk2DTJf0~R3*f)l=QHQt+P?PhuzyY|WWH)M%*S6V`fGD?01ia;Fh2vG| z*VX2Ps5Th&M+oPy;sNWnR^+~}9RT`%(;~4-Kyo7{dVgzSA*iRN+k@>@(Yvyk1DXq7 zhdy4Y+RHP5Y6F%eEC?S@Zbg#-_Nx%mXZ}s&hS^@gsR20y_91}ivp3i;Ho*b%zu z0@$zmB-e(d`5AW7V5Z;I#c>3rw2_k9hM9g>SNA)Ba>*`f=K89fAo^>7%NtN~i<=Cv zhviDdHGcuUo(~JA0FnCuE&*;EIEoBF`?25-z{M0X1!yYtH&v1WZn-)j%>@X+pn14FaqFt2l5MaEChEp zi`GsOq_;YfFNqleV$0X5=QKVA)lJ~je0m9gPk&q638*%>)ZZ+DJH-#j)~AE>-wG?; z$C*t{3<#PU{|^HKCddD1K+KN+q%0c{v*W)vAiV#;!~4Ye?^?HYjf3~h_%F@g^!Ok3 zGX9UxuI2bY4fsyrg8(e#lLmy=pUCo10qH6_$LNL zKOxEDV{&`rkbwaS+IH$(}@ z43IWpp*Yl22jD!u^X$#mK=}@-0a5_E41b8!0J#X@!hooq)*%C;0*I$FHz1ntaDGxZ zAX>L8oSL|X0nwaX&kjh#fM|w*g#*$uAet3I91!s@E)0lf2*Cjf2F8^E(GEczkdWzZ z1EO8!*a0aF41LyLlu33#n*KwN0RRa=4(&WyFI34GRpbt{FD@$d&1d$7$el&he+sg5US?G l@$|mi2|4hjGyLDohhI&(HHg4n5`h2!002ovPDHLkV1fjF1p5F0 delta 1106 zcmV-Y1g-n%2-^sd7=Hu<0000~l79t5rwVnf*wTf}{ukZb zp?m4OJ3FzRyNfzh;v`U{`||Gj-TB=Y%lfB5=n|m5T{8prR#U{$Vtv<*b{*H%0(-|t zZ0x&DEwKOoE$jI`eX6%#-?1QUYk|t^3&yq@(XI~YFdV0Js7(QZ^9~DWSGNLw|K%#i z&_&?Dc*K}zOn(6bv~<8o&Vv?MY0HjP1-O6u-#i0!F;r<%|@uL6d!$4DJ9^4)NUt^3P2pgaHs`3r+yq?htSR=$A`0z z5o0@X9B*JEb7bY>DvOWv0=NS{GUE0)mLV$qNQF2be}51__B6N0uMTJP%oe~9r#)&F z0Wm-3E5vcFN9Vh~a&ajF@cDB)1qzS$>@)w*kE~~d1l9`x5xm1#3+wzw0QU;O>QSCr ztOAg8)|gAPo?d0Up9m0Sr)HffEh~#0r~=0Gwz90Bhfqq)EzE zNJo`|H<^5+yosoL2mvaODp4+hdzLjoCj{loIe&t2Mk-rC6$_oNg%we>0OGT34cg!N zq{?yLg?q|w`ZQK2KM%2_2|tn{1;dc65R9rp4}@T>8uWk*Mqtu|y{jXm9$5PqC#+@A z1MAC)Sq~~p^nkZgt_RwyH`4DVg31|ePie+qfExlmitL?Mxu0b$tPMmf1g26ov*m+Ga7?KzdxnQVw zLlENLyKZX;u@yovJdLB!P~OdVkZ+VZL*dVm35LQ@1mMpMWWi7@ae2$Dx1lhU0#Fc6!ykO+pI?1|TUN8zb zZ#_MwdBG^$drl~;niq@$K-w-ps71jjBtczpo3tnxh0BN9Ew?Nf1%NnpEWv>HpMyl{ z2M+2(H1M%M9VALWAOe6?4|o8D!$d&_+^Y-(i6AqSb)`TMil($S;ex@NgzDH6XiH3_ zU|`ltM`@8%Fff8bAkYbFxzCI5XZ6&dXXYpb0=H`ZC9)_GIlYh%Ren(HK}&wN|2Mt( Y3%)DKK1$T4$p8QV07*qoM6N<$f*>gEod5s; diff --git a/graphics/pokemon/ampharos/front.png b/graphics/pokemon/ampharos/front.png index cc9711f87d9def90a2dc62fd6ab60e82bfbc47be..244dfecde3aec8bbaaf5d7c9101280dddc8501ef 100644 GIT binary patch delta 672 zcmV;R0$=^R1*`>-7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D;2g zTK~lm&5IC&S~0~z0RQev|6&0D|No010IaO6=H}-AVgOnI0L4K7CHK{^0006iNkl5au#1hCeaLVyW( zi1o%G;sPlD#sS7Thu(XzUi9Mt7h-VU69Z@_plevyzz!gwMH&a7cR}>t8X$?pu>NBf zfM~)2H9|cEBPR6`iWhSL50vzi4t%08>;Sd$aR4-GJA48rkP4B~?@U$l%~{OvAJ2lq zUClx!4kl+GEilE}U;g z04}%-xy-c#K%YD95~~MP9kJ5K2n)e=T5=4+dZFjB*na|kHCPXQX{c7@4Z!>kSSq(5 zU0&{rz5?ubF4WKDq$ObSDd4n#oB{g~AnThG>^DJRK$~0|iOzxjZcpMhq|VP2NsoXB#&9-Q4we0K>_i(~S43mXP)L0L~jQxr_S-uqWdYaZfU?T5iPfDTi{8epl@f0>dBVBQ0ZR1{`;8D1n2=z^@=zE zAH8|5R|F*jY+I5;#y-<8+7RUZn^?(j7y;<_4zvw)%muE^Znet^@^m_qjKqcjW#xOQ z*EBvk^_Za5d^&{m=@=gZE*D&SzAOP(@ypNFw;3PK|7Sl8>>6STt$Hp10000kicTbdDz+l z2@Gw(Oy|)G9Dm6?BHDU%*aR`7$39WkACZ9F1`2?SseRa51upggY2FSz@S)!h;3(gx z(0;YMem}7~C1cWNr3Rue)^SpF5QV_$)C!E3kr3Y!%>G2?m-nwJ=chu50X4Ei4%S~Q zeab7~C(5XZ&0J`Sj=WL{<;7VV2GWCbA(bJ$J&VEsu6 z$o$GJf!fg?UCUp2WkVM=@T3MX#e19&$>(!p|CA@RBwiqvgqS(gu8oj}ge02$UqXdfM1_0O#0A?DX zeBq__CVwCf1{jVNAoJU_0k9ZQ1FJ&DT@#>>Hq}6=0Pin=L7HX>t&gx2$ec!iM*unf zvJ{A$fRu1cfCQQqB;iRwRX8>XNTMGjKK@k{K5M#AMi(%=z5M}liI{f?L(o^18B5U2 zss-pJX#6;5xTr|u3h0v2Wi4{VumV`bs~Rvly(lvExZA?HahpCA=H_=2dzSEj#&2Tt V;W2-!`>Ox|002ovPDHLkV1iE&I=}z` diff --git a/graphics/pokemon/ampharos/normal.pal b/graphics/pokemon/ampharos/normal.pal index dd9818d6b0..af1e4ae876 100644 --- a/graphics/pokemon/ampharos/normal.pal +++ b/graphics/pokemon/ampharos/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 80 88 -248 192 16 -200 136 16 -128 88 48 -192 0 0 -248 232 72 -248 32 32 -248 248 248 -168 0 0 -176 176 176 -224 224 224 -248 176 160 -127 63 75 -198 121 121 +90 90 90 +255 197 16 +205 139 16 +131 90 49 +197 65 0 +255 238 74 +255 98 0 +255 255 255 +139 32 0 +172 172 172 +230 230 230 +255 98 0 +90 0 0 +197 65 0 diff --git a/graphics/pokemon/ariados/anim_front.png b/graphics/pokemon/ariados/anim_front.png index c579c4c01492c742a68b81840bb08cea41c441ac..024aa0bebf9e98b4c1e72e8d2397ee354c54a71d 100644 GIT binary patch delta 1301 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 N00>D%PDHLkV1gjBX^a2> delta 795 zcmV+$1LXXg2Brp(7=Hu<00013M{Ml?001yhOjJdf(4c5g82H#g0002Mut=C#z_@_m zU@(}7AOOfHIPget@Q9dbXlS^&xcK<^Pyhf&4~obD00OZ|L_t(YiS3jzZ__{&$1l2} zMd}ce46Hpn1Dl&?w{=^PV!IM64R&S}<+@g)VPPp`amLDvuYZhLuvexgEU0XaI(Hx} zl^8(kXW%(@l1pPLVnw{c^4S}X%F`#tPheV;7{l0b89Dr=|$Jc95){Lx-`FPlb!RUQ!G8d3za}JEJ{nm} zfk=S)eo??XEs}%l;qc29SPGaTG(Rj{@(w>Ou3slPM1L?bA;N`A-f?w%Jw`v)DFCg^ zQG-bmYi^U)p8)jY!~hiD5}_lNn;JW$0_ZZ)9|bkVLqNU}+bx9@J`UmtiAV_D_P80! z0=#7v_mcp+7@YtI3~mOpK>I|05#upo1x-=r0EXL;YE9cNCboNl`+ovB#|XQ|QB~TZ zR&D&azkeSmDPR?J#X|{8>I=%$6F}k?B?Lg}slglINNuJw%oxVwTY(wiTGMb}f-ZGV zO|4_8VB8a7Pe8>M!I4_tvSzJAJqLl#FJFjGLx63Hz+rW8s%>qS0~X!*eJO&U2w))) z*d)5gPcp!LgI{BRAcDJAn4Gk)TdatUnDtq$sees?OVNc^KmjzOJ1Dv{117=Hcai8C zS$*jtw(*+bP4=K^Ive{!^n}ndz&lRrGa1n|o9BCYO8)dJ8!kqeEu8|l=pRpOLnrcj z3Z#=acfIi0c>YFt%_%UQxm!QG`97cN;FYCBHXs}K2lJtx^Kes;2YGK4`5S=1D&U{8 ZKNQ5$@ov96lzRXG002ovPDHLkV1lC)Y^eYM diff --git a/graphics/pokemon/ariados/normal.pal b/graphics/pokemon/ariados/normal.pal index 5939c4fcba..66aaa7bdb4 100644 --- a/graphics/pokemon/ariados/normal.pal +++ b/graphics/pokemon/ariados/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -104 80 24 -248 216 64 +106 82 24 +255 222 65 0 0 0 -192 176 72 -152 88 192 -184 128 224 -96 48 152 -136 32 0 -200 40 56 -240 72 112 -240 136 152 -104 104 104 -184 184 184 -248 248 248 -80 0 0 +197 180 74 +156 90 197 +189 131 230 +98 49 156 +139 32 0 +197 65 65 +255 90 74 +255 139 115 +106 106 106 +189 189 189 +255 255 255 +139 32 0 diff --git a/graphics/pokemon/bayleef/anim_front.png b/graphics/pokemon/bayleef/anim_front.png index 3b5b90f511e14e66622bbd863e9e024381f33986..05f44e73b544892b06fe09fada1bef2560e52d28 100644 GIT binary patch delta 1103 zcmV-V1hD(#2-paa7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!gpQV3Fe z2#dWjYMc-d5D=t;7-~`g_U207y($0y|NsAstT6!9i&A1@V#US9bt#JC000BlNklFz~?(#kZEVyIZdW*F4;v75PxX7Tz>-H!8n5IkzI<$qpK#?jK}lTs z&H^VqtwetZM9eVeF+nu|#$$+NI8^n<;2s!@O)-FE@MjEE?;rROC=EWwkbon>8G;1} z7;#0MaUsO7?0^6Ey~2zOMDQgwTsI*|qb^_}fPGtWCXGap(+}Gkrs`03(GK5}g(QNI zp*Xn{Af?1-DWuu01c*s&dN)IdpV*4o2UG`Ut^?Z4)d8nHZHz$Ik3cPLBn#ZSiJ;;m zooym8Uu)cu+2hud7!Ta2ZEpC5uLP)gCXm+bt#NqqA%ArQu*hfTJWyL-ngev0W%-dj z!jXU(My_OeM^rf9sfjKY<8Gu_`HMSZ!7sA9^@@@7@t5leq$r0Y@jjgV>l6etNE}Y^ z7!fOo}t zklxw|l7IYpnNRVV!`F3%0t6p&m$}B*Do6!=Ehw)nZ7y8bQ!?oCb)v~DaACmPEh*k& z>m&_M0o=pcu%1LAD~k((?Lc5ksgJzjuj|+2OTk0x3~vk26JV$q&E9Yi zY=I*Ia6Kvml&i{=#p*2Rx|}>n)+9b^wi*F{hky3I1R-Q!VaG-Q`@Y-u0j%p@HasM` zV)Me*$9i^F|G5&|@GI@$4%ip|*vCHhhwLM~{HwwX>mGB$3wsLPkTER0Jjot&lVUG> zOfVGLV_x^jvd6scQDqO+JthdEFsSY^8iUFn)4GSs9`m|~ZlY=3g9%jk=w%0cLy~88 z)_*^tjnJ=m^}{=uac&wrxC>X$;PrXYR~^M6e~$B$T1w-kJGXwe#vB=Ozw&tV(`xbJb`djjci{ZDV?#jGE6aK0O2 z_fE%4f|GvG1cWm2;ibTN)(?&X!tLyS(0>ok0z&M@k9Q1BKX@e|#B@LRRQ=$UfDkQ% zm+A+v1cYcAysCb177(Ikes21~lYpQT?A<=h`hgy$L-NW9dqcpdsXvUWom7H5d_TQs z0in+R#_5^Paynb6B=-a{zG6TnxQhXE&Ja%o`pJz8m~_L+(Ay-0!ytampuZ;9gh;}w zf-pkBH%-5=Q9=L=b>0VrVF^Ko|D^v_2fa&12?3wx^{gR`N(cu=))0Oq0sQw8!fz>F VJ9y?**0cZs002ovPDHLkV1jc?2w(sJ delta 1114 zcmV-g1f~1f2;&Hl7=Hu<0000c~G1~3!P8r&CL5TU&j7Ub9^+r+xJ6pi}Qn#+0D5?yTLh+OvIjc3lSs0 z4-EdW_7D8AagAU8edh9Lzny#-AKWGYT|H92i6R+t)aJ4e<1H3P)DpEx_aR z6e=5#BXIvbw`ZBZ0g&g1cEH0LzkKSb(}P2RWmhAn>R~qP0^Cd~)wvr}rB1-!2MSRj zaNB$w$bu=ZunY!vfC7|aX!df>t}5DYK6FeMZ%>5#)PE`%hq5OOJGvK(VXlEF5TR+y zxd=}*FySIH<>16O$q$u?O)H>{Yd}rt0vT5DeLAw>A5_xROCE<|ivER&rRnxyk+JA& zAQWkRvUe785by`!!y*jsQ=~NhpSZ+rHW~ z+91R=jDJ6bazcOt)j0l6h)L3)p_J)rjc2P-NissskLhP@mkPcmJ(Kq0K;~9O7FHJn<>L~6m%!n+OLXcjWw{DQT9r0@Y4vW zO;H0=8&J6tKk>^5c=T(6e^y5b7?Sj;xf&R;xqtCc-IThv2xaZ%xGKSE_-R1f(4eITH;sR!n& zYD)8BGPI}%CMN~$co|sK1J+logL1rGq4n6h*P$kAkGpCtg!)1I7k;XrdanUo>Ia;y zQM$w+`7ZEFKR`h98|Ka7zts;5oX(+$Q-3`?cbCxm0fIq)5sGj~~-=SOA&Lbp_LQ4lJ2f%>9u_4R|tXHR|kZMWbCy6(qm3BFwi>C@P2}%X_*_=IqsP g1cEfmk3VTY0g{gUKIWa5umAu607*qoM6N<$fc0004VQb$4nuFf3k0000mP)t-sn9!gpQV3Fe z2#dWjYMc-d5D=t;7-~`g_U207y($0y|NsAstT6!9i&A1@V#US9bt#JC0006+NklcE+!``cG;kq5kr~ z6|bK3Gc$96fyV`H0RYc=Q{$L_Ef!JGv`BA{f?+<$q{v7UwiJl*~AP{@M&8KNb z_|30TkbmKGnKJkIUInXQ>;;8q8*}--o|eH-)=5iVg&PCEZAnwhW0DNG2JjvZ<9-s2 ztU5OW-+^EeIY&P5_w_sDYr(UejNcaEOu)HgTK3*o@S;Gl6;1@?Xn`vMp&p%q>Z)>O zv5TeV7s(^>Ch^g;H3;yF{d0+OE?Vi}K|sfG_%r%|_Wh_0Phu;!IQCxFi`e#cSGMU} g+C>ie9sjrX4Yzq6HIOAH9{>OV07*qoM6N<$f*veAS^xk5 delta 688 zcmV;h0#E(M1-u227=Hu<00013M{Ml?001yhOjJdf(4Z(#2vB$kh`2Clm=F*U5U7AC zXixz7=%CoRaQOK6`0&WkH~`RyP+(wSz`($(swKGq00KuzL_t(YiPe?8irYXC$0dVK ztz}{2_IA+&NE?$rPvEoJSZ=Nhu{$@1rF1TY#*o(5%@YK!2!Estt!*|1>`$bIVbr&1D_e zjPX|=dVxxYm&xmFe8&JuBPoM8vz})ON$Do&ewKJQyRB!fz4YD!Y8I}cc9hRH8WsRh zxq;x;PKdbTVt=kCS6$qU6l|7IyMZ{b>yL#y#`-hBhwnLToxoRs_s=;TT|hy={d3{Y zviJgEpVw|6q#A#GyHaNeYk>M%BUbosx48xcJ4C!XjTPb}xck5^N&@cWcLC_){l zZh#$BW-6;nc`uO1t){-Tcmtz{+$xxBJ2JvV2bq}`Eq{>2MoS}CMnAT|LYYL$!Ovc? z4o8zo5y<8pfD2wAAwm@Kk%ee{v{ElsrgcvG-egwV9x5_3lNQh>?@snvAfJFJg$VYU zF$o;V#S+i_L^?I;-b65>B64W#63zk7#)<%yR|{>XKx02Ny*3zgOa7-&Ef_$+-tqS} zCCM*CWqd2>I!fUdAl} zLXsgjw*_Y2gLtUkY-V2Ys|D_V3w;Qle$vy`t|@G|t%3vc%YmLgIlpq9S?O2tkL?d8 Wd-<|t)QNEb0000a#3*ylTuh(>u&Ls zss|F)q@==286wDA3nGMS)UnWq;u7?9R)>0P!y};nLQSQO;Q_A1sTc&BE`z1tmvv7t zD&3=z^9i`01_T(J?NmR0Ho;J0Lc|Fe4E0a*70Sdjo@fPJ+cli&})76CKs-Ma>aA&3F6 z&5qV!-nY%Uj)kOQZyUHdmyyjQ4I9tGqMtbD#|hAsvb2=ea(#RN!W$vklTa(Cce()n zax@lH^%om3sngSw2Q~no8nmjN4#!>$`=N~h_I7|zF@NbD+rlNl4Fa45fa7-;asdGE zg|i-n07pkMWId4HvH=kM;>YpWL0D*k|56em+#LzwgJ?W^C!)^#c(aLscr7^<^34XP zLV6~)q;(ZIzxFbwf9k1!vO;tkQDbW8O@Nq{Vr0_vTV0GuYE^QJh!Ewf1RqKag11~3 z`4l6E?0=Xb->OPp(gTL#=X+2;{hnTn4@fmN!k_$+{!pL-FI133RTa$R)`K%T$T^9cYw$+0pJ6MRn# zAPpcTc(Db)r}3u*F9w_wd_Q38Yyl*|763i#;D2}gg>CjdCwM8qZ4RHk9|Mt(fm}BL zsf7e6xku6h07yY28^9Q=*m36t>uRmdv6(KEXeXHP`jDo{&-_=~IF~|Wo1gi~I|I@J zf^->71pvqkAvl&oTnrGL(6W;JE)1o;=%O+ZVl1CvQ&aXdACh6rg^*o{j%RZ;hVv*W zeN_tpNNC(k+6M>0 delta 869 zcmV-r1DgEj2Ji-u7=Hu<0000yMG zPAc*ODKfKnMTmrIZaGDN0##T~{_4q9_}H z0JKFD8`5L|Yq}*0*ec4*T6H2suCefUI&DP&f8A)^SH1kr47&fIe$E@&-$j8x>8-?)b0U==sghsym0O{`Z0>M*8Sz?vH<4>IAeiF5v1^R zzyjCjkq$ole2y;=fAaf=2fhRF?$@^!!2GLz!vQk@#sHjJ0Z73DZ$lkS?qa^rVQ@Fn zXgv2>&q75Bi*nw~r5YxagT=;3=F!s{~Qx2H=0S1_k;(ZD@h-1|Q;7IL_ z$nTIJU6?IX!nvk_8+iTF>;rMRpy6xBW6xw_&h3#M5Q>1+{_me_`TY;=#i%0$^{r!9cd z=1!dpu+c~oY_b_J!1fdVXjid-Ht$DyZ`Cb-jT~fP>q`NvUu>=L!+>D-n*qTNC{ijG z=7D41Wj^0QH}3brvQ1&jOkLTY<4{KmcGo zo?G;PcBfI-S_!6fNQzY4E9s%spX8^Hh0MBPfMrWumb#QCccR*JW0^pfEJ{{u#f~S=*Nx*X$ zqh5UL4c0004VQb$4nuFf3k0000mP)t-sz`*!oizz{3 z7=z|9YP2Z;002Q+7=x5j)%J_-|HZV;YQ@FH|NsADL0ZKrDeilFp`(M)0004XNkl5ju741@~_m~f=;|F&xbO>?k`O{A4p%KV}g^D#C@UVpDgkN$}iN^9M19;$jE z#Z68U4rPdJ-$oE2)W%(eITV+mhrK&%)P_euf5T1E#_#|wa}|R??J_7mHg!!fs?O2K zIRdWRfB<8cIIARed=UY_k*xjxrE^84e~35-z%)&+AbtyYT7#daOTy{;ZUyKeECF&S zKhR^|sa|J{sz&*emZATNr2apQDvF=_QkV_B)AURKa;O3OP z@7PExJ0mNAp#}2TOvb2@fa&sI2`9?_2B&?moSO>u0j!gu$`o#te zYPWjLzy{!|*{ing@a)a72X6tej{_Xd7wY_Jv5H*rgfQINcy f<(~i1qrcJ*XCW5~JXLB+00000NkvXXu0mjfrcvJs delta 503 zcmVT7=Hu<00013M{Ml?001yhOjJd{!1z#zAV6RkkkDXgut)#^0AOG^ zn3!1L=&11U(74EWz`(%x`1oKzSimSK=y-Ux70(?200EFmL_t(YiS5*}PQpMK2k?`m zkhm2S;%EvyKsla(VB(00M~qV!wQ+JGG))|cksggQ+Xo=Tdw&52)KM4X8}JJH0uFw6 zrPa{y%Ay6+n>0~=J7^}6@>}S9stSQuw641&5=Ez2>N(-K=J^Gvv z9krJ_V;y4DR)0V#x(D%Vz*srxLlkk&o$TR~0wV>6TCg2Ki#`vuU^a?)@aXA#JVE{O z*IWw400000JX)YJ000BtNklHc3N0e=GN=jXA<{!t5T0Pwvy zntj7aDd%Ar0wNMB0N{0Y^d)NuY3%;10RZsYPE+VID*(3CJ5Uplmleer(E-Ylegj|# z^A&&T;v+do-m4h^z;h=n`DOA1wrJ>7s7ruad6h+3=nqsTL3_Y?EQOP zCm^7+9e)iNbHC{t3u>rGuG3PB8GkOi=-BQp8(6< z_D2Akj@$+@hu~CDHChR5h0~G7vIA%ZEPe%37dC|Eqi_iII=qA+CCmpHVPOQRc6#C0 zPA0Vj{eMbm3>?5w4U_%Q6R07Kr+T^C9YQU55gi7g1}%bb=`an4b=M672$n#AA1s_t zKHhlwxxi{E=F9=RPbf}87_Jk{U0h#0q$O&&_}*9zx3?M}Ro34HSSYgr-qx?7JoeaQ zk3II-|7@^c>R(v^d!K!YkmsFv05W^{0ui>!3x83(I=-m%L;WBmxJwXy{WIMJgt+e} zuZ~cT^t+xNJ`A^{Y1;$p7ZSwt;nrB3c6f6Ebp8>Khg&j7IRSv}3dHGvAU%ZBPA`CM zK@SMp#d!U=B>}2r;^YGI0YF`-^$c(b)<$`aWDjs%&`!_*yGfS-TD=FbS=_rMXESi? z(SHFtg0-UWcM^RM*zf1wg=G47VZgGVwNumi1$+V6+D7iRVE zCpEuY&Zbx}$Ot7h`eCSD;Ddh(C^EAs3x6Rc1q?0VbPQH9_vQYWe8j@>7K)KLEg zp~=AcFf7ORGeDjP1j__uJxg~0;srybCT;iO0ytlVj#H1(ZaCnY6^>gDbcD5Xd`tM9 d{ISP;`wJozBS8h~8pZ$s002ovPDHLkV1gCV?wJ4p delta 1108 zcmV-a1grbt2;B&f7=Hu<0000}@jIJm&* z2q;(p004ksP*5ls_~?MxxG<2Q;IIGy0001fzMgvk00ZbrL_t(oh3(frZ`(!`0PrJ0 zfKsNMDM&8h05S!X9-4u=LiQp+MySF`v>4$5cJ0M=ap_P4vVRNox)_k`7?ulkC=df4 zG>)@(i&&w+q<8S$8LF?v#wu5)C!|Q$yQ2umo z1SnJ{L2<{q8GmJg4(|&v#14K8(m+SeyJ`%u{Y3Df35qB^z7xR3)^!S~kg^{SqawE z+|J}A2rEEci7EiaPUj)=$U%k1pq&7a-5u9%k^}Fbet$1o0OOWeoIv#peDRm(dE>P_ zAQP|R4$d~4-WZ{%L>uEbqV?uMA8%c4B4k>~>i*Vc$5U-5V9ta*%?7t4gT=LvYsUJ{t{s<2(Xa^;7EuQ-qlO1 zmjY@(0*gHH>Q|5sgNsG&!4Ex<7e_0)-vK>E@BrK!Ghx{g>*u zkK}o74Zn>4HKx`God#GL7BbEICK6@lF^_rtkAETiZ~lysY6z{)5Rz8c_5KW@)vN5) zK3$!2_@(tI%C6wU(QZ#WdZnCR1MWrqWE5%^M`&D zwN;8z6W0)@fXr?O9VeDh-1rptL9o~3#1b7G1Gx+2pi%Yj7_<|BZDTpO7pf;}u+z() z1b^T-20M-&oc|oi;k}AM$8lb_Boc1KIEjF0qU|_Nt1Lh?p~PK2W#CQO|1{u&L06Wi z0?9vF;b0|dR~$M)327fb2+n3Sm;g%9;&3})C@Hujr8PvYII2$qW^*4m@$7`4w)Rwkh z`k=E*c#Wc)0i~@C21+0Bdmrd}5ods8-Lf7w{=o0Zepe@CH~~uQY>XNWE}xM-mj9lO zIIXl;hHQ-LytsHo?lcIOc5ZM6$Pj))rQvOv)M10L4=4-x3}dY~_6=RvUB|h}0!=`D zfl#Fvd_Fk<3{IFZSbiD+bZ}0C_tpoma{vpK&mQbCvvc!NwAp_xGl7Eb{0bth&*bNk aiGKkr6DrRT0143m0000c0004VQb$4nuFf3k0000mP)t-sn9!hFbHyoA zlxn2r#gqX5%~F)j<_IZT0001kVp38m82|2r=Cmn$z2>w400000JX)YJ00064Nklg|DU@jpjHH1z5B8co|$%9JLhW>LVw`r=h378R0J{e@6AKe zZx|tnjN?eEYML3h?IJLjubFX!Q0x+?-7}->gkl$&s;406RsZV+dzuci{UU0qhBiWmOjt4IrKQ-vA|AT12@a zgp>kg9{{@AbAK*JLUeoV`B#8e#iXH0!mMjw3CGpcv9lJR0Cd3L0=oms7U#S5o!k&%9128G$oqs~`ckKW=At(<3paMuDQSsvo zKIy@q2Vk#^jFLM+%K1Ww#DcS|0+a#R-TtWIupCc#kp#0Op&riP0PETI#{sz$Ke-EIZ{002ovPDHLkV1j*)B-8)^ delta 643 zcmV-}0(||11&{@h7=Hu<00013M{Ml?001yhOjJdf(4bgwz$j3Vc$nC@m>}@jIJm&* z2q;(p004ksP*5ls_~?MxxG<2Q;IIGy0001fzMgvk00J9HL_t(YiS5)eYui8+0N{%; zNY0e23U(m@qYlc_L3z+-5j1dyCU`OELEL&t2c?TacA?j$V1FeIaS9y@4S49_v40?w zmISOR?GOT`i>CgOo-FGurRQ|%&>?RShu+6~Psg1Ixr=`tl$!Nh(*UqxF3dCZ_W0Y^ zut+dO?h~RNgSv~zx5v{}u%XJA5%GDt)D2$&8XXf=c^FZi&(=(blsLr0f>+ z6k@Mi<#W);0V;MUaviT5{|p9M0mP@WxJR`Ic=A1tzLF|c5?Zo#4PSf@GK8VUy6fts?Tgt09ufNTAKL!ffU0^Ma@`yH6W_! zubasP{1CkTx(XavF`Qxu5D*Z>iz)c{_|1cZ|D>dx0000000000A@I%!0005bNkl3{R>Rw|WBr86R;Ykp?A z65)PE#Kiz^sx$817j<(Juc4VMYro$YA#RL$kiOjSnGD$7FBk*9@Iz-K49|DL@Z&QA zmSySZ5^TYk6Y(V#Cg`dI=*iZVA(Cx*~;x|IcfDhg;mh&S40a1k=C8S!x zgdd*@uYNv8D}SZ>QMV@ERuLt%*0KSlEbEF+R`ODwTd!KY;&y9shYYq0@kOo`1rB=WhfAdr#nh(0>q545O#< zKVV%B>dWK58+xpOyaY_)|Dg9t{6FA(7XJ_UPUHWecjf)E1)N_7RRX>8~SC!XO9Bzd3gB<=p0|vW#4T*!jpw(~w zzo&Q2(mcDp6`)yq9|`*@K$`xM(2fMMMiVYU7{zagmW=iWM~9rGAnMZGRJypd5q~;rVxfbRLfXz^L$_*U z%^TFLK0+Ts@Bzfxck!nFnZB=C1VwTPcR9Z#-@RNoM~G6T{<13d0zlfEi3(tE6#zIs z;r-|uzH9f=8RutLvLo%o=|jr+OC=#O%(9FkjA?cW2b~;jDOZX+EK&;d%z=hH9&6E7-1KluBv4VGYWr;xsD1&xZUK-m zfG|INFHtiZm@89xp&nsC`@--BX?mynH;gYt`n{AYRe!3~zf^HOKw&+=rg~75P8SWn z9@NItvB1}Z+IShj0wS&+jI*Vu!=JAQadv^ai-LN9&Gld%?wjhtI^5ZMpwnLmYmnE2 z5xLR6x&I`sgO!!i2T_FwyuAU^rn9}8?_lR8Uzuz-wPi`YG?;o&4L@3tWBOb@SOYqG zTYi%Ultd=%A4&f+F8$}9>3_zhzoAq!AA$RT5Q)+Sp_y#6*U|{vH|n&{**P&Q+d-+{ Z);mLijbH)s@B;t<002ovPDHLkV1lBt3oHNt diff --git a/graphics/pokemon/cleffa/front.png b/graphics/pokemon/cleffa/front.png index a8d989f263c27bb07603e6760ac8a9c935f5da57..5b28503ac2ae9ff943ae30ed7f2d8ca5203e847d 100644 GIT binary patch delta 383 zcmV-_0f7FW1C9fb7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!i8P*DHX z&HtpN&4YttAQ*E>F`Qxu5D*Z>iz)c{_|1cZ|D>dx0000000000A@I%!0003DNkln7ok)NE_{C&y!N;s zrBtd%+lzQVMR-I|)hd9D<@rP<8$~gymLeFcaF2nGGzebFV8SneprZs7-Ubta3I4ni zXyaxUB82-S4?y7{?d*>g$Rz**Q~>8SR0E(EW8czhM*u6nY93Zk1;NbgkMsNTRA1Cq dtJV51{Q?XE2zS&8C1C&n002ovPDHLkV1h_es0;uA delta 401 zcmV;C0dD?|1D^ws7=Hu<00013M{Ml?001yhOjJdf(4eSLQ25Zu_@JQ3fPhdiC|EEc za7Z{15D=JvaQOK6_;678n0UZIKmY&$0001Kmk~%EFQwsedC%gw%lvBsV*vR<}aa z;2S_zj=&u_0T;sM-}ISGNDO(3vb>+2&sG@g)8{`Y8gu|IeisoS_B#O1&cnUAg-*rH ztwVi#!*ec9R!=U_KS~acMccNNh*#}3M#y)-E{U(i)?NVv;K5pJD6m+j*roA(Ma|Gu zA3ZW-g5VH%#(&rY@}O~rF>nvj82XrObMy*azWAF8TxJ2}BR_=FAuudX-!S1)Z)s5S z1HZl)PE}2BQNjaJAW=2_SCnazLLU1^Pe>5SuVgwS!QMBRO*=px04(|JRV~*v*vLex v(vL8wdlsv?b6a_F7w8#tKd(N0{wnX+yhq)H*SrJ(015yANkvXXu0mjfWkjgU diff --git a/graphics/pokemon/cleffa/normal.pal b/graphics/pokemon/cleffa/normal.pal index d6dafd7980..c4944c7c66 100644 --- a/graphics/pokemon/cleffa/normal.pal +++ b/graphics/pokemon/cleffa/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 168 80 80 -248 208 200 -248 160 160 -200 128 128 -80 48 40 -88 48 32 -112 72 56 +255 213 205 +255 164 164 +205 131 131 +98 32 24 +115 74 49 +156 98 8 16 16 16 -152 128 112 +197 139 41 248 248 248 -248 112 80 -248 152 120 -192 64 64 +205 131 131 +255 164 164 +156 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/crobat/anim_front.png b/graphics/pokemon/crobat/anim_front.png index abf3b22be46eb2945cc395ee1587e422dc0951e8..9275d830942664f0889805238c7dbc8bdbf96d01 100644 GIT binary patch delta 1116 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 delta 678 zcmV;X0$Kf~1+oQ@7=Hu<00013M{Ml?001yhOjJdf(4b%#cz8&duz1K25D*AJXdq~i zpjgOAn7Gi80Qk@VumAvPXlS6Ip!oRs0002_3l9$f00KQpL_t(YiQSX2Zrd;rhL3`p zqMJn75ZWoC6lg0Tvw(*#a-bk<3z*&wBt%xJ0yuT>VtDS@F@G=7N61^`37R}ZkF+a` zlDHSW#iITX|NT6j0si?4LtvL~nNVIpv~Ut$%8L?6v~cU;4B*X{Pg{83cqmGMi~Y2P z(bxLvVK-%A^!w5Phbar}FXWwhyf}<3yi1Q4Ldx|CI7G?@$Rgr%DP?&)J{;)6n^{D} zi;a}`9kAokr+>cg*T&!uIv`c01?2Un2VjV}&a4)>HaKN809CCOvJsneMh)!j79P7@z0MLQS)*NfE)V$@#*J}Caxz9u*uiv`Gu)kwbKRwtM9L`PfDqYgvTNupI?3} zd$nw!$$uNB)XWViT}=|W058`7W3G(g#oC}|p$ni0G&!T0Lnka@x)N6p%2o!*=rllB z28JjdJtzX#6=O3XZov1eik5^;4V$33{`EFN+8hr`qMx! z+4X$XLr>vcJ{wt(E`X`k)zD%9ATh8QO|Ke!kstARXM-N)5ctpP5ArLTAtXf4_5c6? M07*qoM6N<$f|4jZ{Qv*} diff --git a/graphics/pokemon/crobat/normal.pal b/graphics/pokemon/crobat/normal.pal index c8b2897700..5db72c9cf3 100644 --- a/graphics/pokemon/crobat/normal.pal +++ b/graphics/pokemon/crobat/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 24 120 -120 72 152 -176 120 200 +90 41 115 +131 74 205 +205 139 246 16 16 16 -8 64 104 -32 104 144 -160 88 200 -72 152 184 -208 144 0 -248 208 0 -176 0 0 -104 104 104 -160 160 160 -248 248 248 +8 65 106 +32 106 148 +172 90 255 +74 156 189 +213 148 0 +255 213 0 +180 0 0 +106 106 106 +164 164 164 +255 255 255 0 0 0 diff --git a/graphics/pokemon/croconaw/anim_front.png b/graphics/pokemon/croconaw/anim_front.png index bdd5340fd5ed0cc33fbebc7fdbb627a874c59070..3fc9ff81f28730f3aedbf0549c0b431078ae8b48 100644 GIT binary patch delta 1045 zcmV+w1nT>M37!a$7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!h{5Fr1o zS`ZKr|4K^L7!V+0dmxLwYR%1y?&kmh|9b!c=0PBfVgT;6O8@_2=^P;y000A=NklwYa2%vEjfGCfYvyOq{(H>CrAhMp`PJ|4yBEEnGB>nRV zGr+YH30O~r%z)tcAb$g(XAYKBK=e-@L8?pY8bbr90~O#IK`QC-#Q_Z^>)y`d0+itZ z?Mx1A{$>F{DfGr!A1S)U4)h`LcMOn9A$@|eDZm84J%1o-E&`b39q^uj(6dowAIi|T zF}$Be(gzF^U?K!|0gt8-c5E&bwFby=u!bugAG~igBZY|~`g{}ud>%^zob;0)1UT@X zjuQ5vW}*)2fM5jhJWvRYu{V7<9Ky27b%dfQ(kAKzJAmeR1LQ^IuZ|FX4h(p|hLSpE z1#}rIp?}IVeWs%z93eM{A{oEEZmaiWfbgnU0DEr(EV_4I03=jEvZMk@7!434p>=>U zmk^>3g&)t2pnBU83vJ(rl!t*KmkdPJ<0O|q+0S^8+@T{#d_}P2l5Z|RwLUDQWM?A) zKl^3GgrN1c0f3*3-;!5%$LN6nc6sJqmtFRoc7L@Ht`@@8LbzH8Z2zH!fc5r#x`n_6 zI3&Knx?GUkcHu>&`n#0GO$678+b*f(2>+V63Bf%GH=vo!qO<&-Ei1q=26)j60DT(* zCV5UZD1A+kH1t`^Z)Y0?n!Gmvyqg;2u9{SjC-$_~-wYsm^j`fq71e5i-QPKy&G&WD zOMgm0_PiBB*1K}kYf{-e!0f_G)^{{g4Fg(8S!xbM%EojgbpWR(h#-ZK0YExE4VA!o z0kY&)Q`Lj2Uy?e#*V3g_f?)))Ue!}gCvqfY0a(iSrM56Q4{AE$K$6Ny3TVp`w8lf4 zdN@+Zb4Z!iu+RQzA@ma36v|qHYYU+RB!8yCl-fZ%5aLCtdTt=(aMVEPfKh)-6GGg# z)&Gq!4yHDJF2FLvIKou_n;Hn!+7xIDVKfjtwR4 z4B)ka;Q1GUq=DW*aP|-S7^cTP{ez{o5MG~l)%4mzus;4T!qr0fJ^KXWvquBRxDJ?9 P00000NkvXXu0mjf%xmHE delta 1143 zcmV--1c>{d2!IKY7=Hu<00006JA5D*aXP*}()I3Qqn zAc(kV$jFH3;Q09XcmM$4Kp<#P0LZvt_~3~37Ae{Q00aw3L_t(oh3%I?YvWcB$0Y>v zDUkK{3$*nIaCsZcO*Rf8&fb@jp0}7t>Y=3|@KXzGD1zr%Xn);9A=%KQVG9fU1?t># zYu!_zxg`f3eDd>Q58X?w&Pdr7q&H4!E_>*M5Xk&AGkS0I{{L9kySUbGiQ6CE6{zps z39v1@v1i?1@%TCd&L^w#*Sot9RsmfE_E!S9ZUqh=uL2(V{y~$C_v?>BfF28c{roV5 zqy-#MI{|>?n|~-wIN(_T@bH&$TQNW!#{g%)j@w)f>D z8HcdFiNIqc;f%M&lgVY;0(D^Ctfsp)*?gr_fDPt2T9ebW0$|?bd@`MObQ-f6(zn2& zxrepar_<@BzK9_)XCUBAYYzc)4{O(_)8F-60_~J*+JB10)^taw1jxvfhAca;#gZz3 zl2S&cVC^f*jjl3%F6qp?D&QXbI8H+3aRSOEdNfaPmA%P<05g<;kB@^K$Z{Z({c?}a z(Q^!BSwW=b(Y|N30Viq*@I!`GMrrx^`nsS8*%NOXKH_HG~jNDi-*L8cx4|Q-9j=lrjMAFnl{_jxd$*g1~(B{9VHM z*#GOlFZ(v2&a2+P1MJ4#fOS;grp+Vv`vh=uk>~%Y(Y?RF3fOIQ-&-N?b|W_kw*dPG zycckM)d3Lsd2fDVI{;Ah@q#7C%Szr7Tk{MUwfnSb{X0j5TN z8Gk|_FKxzyxXMRC+I+R`$4nDDS?0s$)%D9zmN?0egPY1%SZsNHf%8JUc{Ge z&L21hpxbcBcZu;iaQ?vBrUH6~05cNK4#snTz@50$(Q|YlinokHcrsSKAvY4fk8%OY zQ7|;8a8E$_g4D@$SL6Ep1V`pa0^+LVpnt;OBUMtKP-Gjcl(p zfG<0ccvV$%zs3Ix{=nSFkzRnPik6#*<{Him^g4Pm98~wg!D*z45}wwJ<)HeO4(V=g zf<}u>n`DvR0Ao=21H)FM@Tz#UAYeI@tt#Ne3O&x~4P?uKerl-U$Ufv2BSY~{O>j+k zVF75#08S2c^bCOuqq>us8x}ytffO|)3`yS21|tV>U6MgC`qjcf^eHYF|3C%;J<7QV z82@0kf(Q)+>mTwa^1n0w!E%(kxttgyfEL8~cKc0004VQb$4nuFf3k0000mP)t-sn9!h{5Fr1o zS`ZKr|4K^L7!V+0dmxLwYR%1y?&kmh|9b!c=0PBfVgT;6O8@_2=^P;y0006SNklu&5I41~i@V&?|D|JxqhTtd6j2GS$-Pu=cTsxlvAY=2Cq=`T9M{Z#+L?*iOw z{yl(8dIh*A5chHgfaMurhU#aB`6*ydfO&Zg$njIavMf*9(Ez0J$N-Z7h*k~4Fo3sh zrN!ic{22wPJ_UH^2LxU>V$+|;z5|lQpk9A8PMiraW`Wik%&<)uvp}oVj=4Z+C)><^ z6To&H$8IabV}DP8#q}c~c?&=&hYum=ApO|iQ1T$DURD=EfK_CyAwi-)PqcucN_ePV z2tffn?jXDYXk-s2A7T1aGw`XTLpc;cHjn@#8TjarZw7KJ^`7lu77#B3ax%5C^{WSf z7-hv)ze;yo+~}G0n;1Su(R*Bn0$l*wm?+O8ppjR=XMX~rPNP*l#7kdt_`HjvXW|CX z5LhkH-4sd^a}8~DS_N_$5+TWh{QA2l zyjrepMSlrhJsqphIe@?FGeF(<0j7L*z5qm+0lsGx*uW?Nwt-dwowGy`DHVM@6hhYb zU9l+Vo_)9i9kb*@Bt129`&a)R51So11Fx?LJ+tJ^0#ekpNQPY>0s8E>j0GX}?E^rc qT;GOQwbN-}{O$6|T7U6B;vbrmC2|t<8^8bn00{s|MNUMnLSTZOcP6m_ delta 669 zcmV;O0%HA~1*rv)7=Hu<00013M{Ml?001yhOjJdf(4c?-2>6JA5D*aXP*}()I3Qqn zAc(kV$jFH3;Q09XcmM$4Kp<#P0LZvt_~3~37Ae{Q00J~gL_t(YiPh9GZ__{&2XIH0 z(y3BvJ_3AzNLS*}K&z^udxf%BifVg8NS6Ez5?w4gkAbq$B7a6p-S`4HTeiwf9lEu{ z4ViKsI>18AJG*7D@7$paSc)>d-@X6k?m33>FFu`n>aE8Q1=h}kK+9-7*)bk9EbkC7 zUp4i&hTH2+U`XI)BcSJAFxqPZyN)yJYU_cu>miP{;O)tQhfxo8VC4%UM(=zt(t!^y z;`8rGKh}US41W=4XGvd|LHk3T_{_t74RBm)f$=FuObOW6H1Y7o27x`LFq1)&rkA{j z@ko7G-S!~e_$D~wQ_Xes(&?-On%{ArX4$6Tp|%6R0|)9otlmts>{48W7^yo*FcZQi zpx(pk?`if!ECA(6wN*!PJ;=5MmjHYl6kWD%*it5741WNArMU9OX!}>WI0t!Wb{({j z9U3Rbin;{Vh_Rd}yvlzSz@-iq@a)(vKwbbJg6ba4&nHyK^HT8YXs;Q4q=}j!e#$B3 zh*#HJ9VQosw@r?C^#rVKgJ!Wn5=>OUFjmg67ol?!FavrqKi@xm;)bI zjuB%IV}I&@ozouX;_$++0{KGF=OgX#C(uk(Z^EXcSAr#|fJv8Jf~6p^sNE$AkiZv0 z0$v9sC29kq5QXsqL%byK|F)gQ3#2XBj_#Ez`6x~LgYz*Sn|~;0mSt*c>iqgZh+#pk@*1V=%ivTVorY5vlG-frHh|Bp&9`OC2Kzc z8vVxDbzQA7b@2!PJ;1CYYfUxlZEG!{`mF`F(reo@;I58`wb_m(5Mig=@4G(gqK=16 za?Tk7(7n;W^?&+3$r+%VCLRUi^kg0Ox%Gd~>iTfKcx21>il| zQ9wSM?JY+^2;K!*1DJge_I&#*djUZ5<5q^%)*2cPlC(eyh#;q8wbIAy4LDSg_P|31 ztn1d$zygr|;VHnwlnK@}9AgHo;&%bvF5*Ad9{jf*cz@u~BLLh_@xbeqQG){b z$UZeSHGefV^)ECU+dl@B!9hwn-2;T2juN1IfKYF&^}-=~6u=R-`kPmhEF6C;pd-Mu z<&ggg&>Y}%Dy52TMp@3}f?y_W{BX;4nZKiSKY8AoKz# z{^PeI9S9hj9~?qE4-h`e|F75cvjM;yAWTjD34HBjE6vw3|AW}3){sy|i1iHi(Axk%3uzyKbt4lWz#$#whWNd{j z#c1f*EL~$Toa`agV9;}x(qfRExe&KsAs-?1-N{2E-6^G8zz-x0{~zz(Jq!MSP21FS zE(;&K7_fAwK-V4JDLn-cOC@4|os@_guxzcA0=ksZZQDYbIQUC(zU>eWAemRU+&!JF z0qm61-9xWhA%8+AwglMnJg-p|a=B?sPS{6)()XlHnr#kbo9s}o(*v?gTA}De9&d98 zRm!doNW0nYr@-SWKBImNaCO%1hka6R@j-I{0DL`bhhe{sjGY-2fg_klaR&jcW>)9G z@iYSHgde%?rgSf_Ym4cLWhWq-E0<+|=ZxBu5@?gGd(Sb*0+V?-wi zTWH))8X*1#Vi=%~hScHipU(#`xoN_k4}(s)jt7~5fi?j*Xlj$%Iv$XW`5FksfQD5| z^3<2Z)xFU1Zwgb_Ihj2c-Fc69HqZn2LZQ(~%g1hzGPH{~(u1v^?htqbmPm zO<=$H!Y2qw%Y>K%5lHg`FFzOuw}tt^?5?l z825>9F1tnXz{gjRr~y$I4^QL+!!Oo1^%som4{{G+UPy1Vf&c&j07*qoM6N<$f>45= AH2?qr diff --git a/graphics/pokemon/cyndaquil/front.png b/graphics/pokemon/cyndaquil/front.png index 448a51f8a91ce20152aaa0f05603df43fd0a9f49..b8b7e71aca85e21c3b6fe01c6fa111d6a792850d 100644 GIT binary patch delta 527 zcmV+q0`UF31e^qr7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!i!00945 z04Y*ZIbwTagPi}I01yxm|K0!?IZDN(YX9z}dtxBw&1$TytoZo&y#l1x0004+NklSZ3>n~~oeTKw z=9>Zm`R(Q}1>?M{w-SuM;W`DLV|V`$bn@Oq z2m!p`FMr^#1wL2+{0`4C_7<@70H~ zag@&z@+gP%OMeA1#@5VBLAIDcV&8F_#ea$_pqvZx2VtrLvs~euAZNijC>%7rXBEtl zsn{LRr&Qqc_%nPHVC8v~CBR-o$0At^tbi45D*{*_&j)a*pw1v;6NC^u8n_9pf4l{} zOw9nkV~tf1jHkjht^5bTfxqm)!Ve3MsJOJE?WXVgPk*u~k2p=jS}PmhCy@FX7rx|T z4pKo6uACe{O}q$LvMv;v0{aZuo0g3^!6uim5UZoDSlsf{Rr!n|`H`UD`euY1I^5j?f1EgpaH#I=I R&;S4c00>D%PDHLkV1iOD>~sJC delta 559 zcmV+~0?_@O1iS>07=Hu<00013M{Ml?001yhOjJdf(4g1=0Qfin5I9gUXnAs=6vq=BL~uy_2Dw2xDpFj!<)ol%(to8}2FWNb7^x{;O2`MO zOIHQqqEicjJi8SF#?FO)h<=39m)J$`&d!1l5)OVp{_ovO6y;RMTpB+5VL?-k16(y! zqxPRbG#SKvmDGq_&~&A?6;z?4>bi!Q7jX!5kwYN+H-z$A{hI=0y)1t+>d zDA~4cnFX#px__XpXWj^jsQmCW6llkqBvx4fjw@+ zckIFQLKp+Y^uj74_(f3~WdNVJ4l4}%2Dj=;aS8BHuz#=k5p$u7e9C4WjA(L;M!||8 zS+gaeVT!)h#D>IU%N4xh#!SKQHn|2*$pGg>p(zlaAy%r8Wh+Q1ZSY*l;(<~I9~KZL z^im*{2lyKMFkS)7L_$&NhX)Mct1aPGwqE9ACURlH*gd?lfvm-vZP*=Sa=~YFKV@t# xw_Bo5qi`D=C|Nq6s#sB7uYEl6I=8Mg}VgLXDD8((_000ISNklC)OT3`|fIkq~(Q$E_}3iH}fb`lFu0@X_pAl5JU9rhlnE=EnDT$NYfb2$sih zCd`lJXM&~X!+e)^i39~?zUA0#1}MR7!E_e>`bKDF7A2S!uMi7J%dZ;2B7@-uv5-cy zh6Ib@mtcnxDBDc}8({B~hSaRNwYE+GxFSRY+?+cGxU0CzK!Dt)`vj<9p>PkrAfV?g zc%m&Z%n>f39Dh5r}e zFL?Q9W>^Ek2>)EOfm<+PrNq!Bkf{LFXo1Bh8dK3@rF+xYPASl}l)8wK3|s1hLHo{V?A6M*Iu3=yi} z)p1@nz|4FJj3wo5lXX=VkcV;tOVRvD2)xG5;b^Ilb4#!RqHPL}brfug&S~8D;K!CgGV&4N2~V0VblI`y029b|;@6R14{xwML42tBpo
    X?*iEic zUc)aqU{}1xfh#+(Fnl3yp}7E7rOL)kVYp=oSP(P}R$hf#K=#yq0$B;rt3C8;wz0<^ z>|g{tNPVUZXw%0H-Sq@zD~SQS^?$&J?#U?%IkTRvo+Ui>EJna~yc2`%YCBqeQ4Bte zw;(10+ts|K9z#Kh50Y5`ju(O;gtW@Ll3-W!IR?=HEgiM3x^c2TU<6xc!0OFAH(nzd zfm?WA#2`Z$o(%uQ#>HC@WC7$7iQE7*1t6$oEj)60t5>X*cn~CjC?Rx30Dp-!ofLpV zL%^;GU=6SqXNFD0=!pQA2Dl8Le$x{HE)6h1*8dwGGZEkt!Ak?2uE>bD&rla3Dh+T!klWKJ^3M%$ z?m-~}KtshTOE)Y+P>2A{B7ZCUTDDVRKqdlkN*rC3Q4q=)k_a#)z!DllA4P!CuMAo1 z{XB6fPyEfHk1w15sOt)k{CdzyNJD}Zq-SrZBY)~BJUEiLJ0QS}AcN<O=5r*nCf}9fZ6b)d!z{ z*!`cigIp$sv3yX`4!qs>ZoKb7OFPJ`5$Na#W9?uH8*Qx$2xIMFiuyxKKp1ET(S)A_ e1o$rngg>kOVw3#6JA5D*aXP*@0PkU-Gr zD44j2==k{f_`txx__%O@SOECoh{(8L0002WpEgkd00tXLL_t(og{_ypZsSG}$0;zv zwWjPBIL8k_V=U4%&H-#O{UP*{x*(|tt`3Nc3kYiOf@^}nHh+7;2$WVxf^*UxQYE!r zL`ri=C%JJe=ovDzONk$%bxqc`ENlLpncbb;`B~HQ(a=6JTINRtr(2utjlGWwI{EuL z?I$G2EUk4xLug|s(G0Yl;2&V9&K6fl{@b!2$B}XAtQh(3{XD@!94rVyWMK`Sq^k_Dn z%qE$jm$DElo7J8z2MVGK-o5ZDieqKIpUWhp)aOxIp_Af%v9RTIqYKvOVI_@!7C1mC z58X7W3Zw!=pH?b9Ow-gV3z|&x0E83>amc!<^}J}u4_J@cf+F+;upsidS$v#FJPMLn z3PhZySATvng=Qaj5FiPJEhAX$b^1fWLDLU$^Wgj|M}Ndo=L0Mv9bxAZcEK{xP1qg4j;n!Vx^gEskfmW2$|hwk+`y0cUxH!z&Sp z$$wPVwiN~9^_306PV)27#LW`NO99rTAOY=QHgpoam4bzxi1bR>Hi&{i3s4Z_@x$V` zW2zo{UhRn*xT!*XMyF$LOW#tE@4BW-hx5f^eAgCnkYF5jtoK%ju zM|Ba)>Xp$eW;`3RFii;L^M&-4JrJt2v41cDOdTVX96Wh5Oz6<9vO+&4g)6oxdps$Mg{~QT>MZb*4 z7yxgggzVTEjare_^Lwu}WA~)7v%6a>z+!*i*maFoZR5p>al8$`kWI0sbK^K-j(>$c zkJa~Gba1mjyrv^}_J{)=z6I=T0Ic2tPBS(Piy!@IojtY^fnjX_^3C6av(u+Wt>DNo zoNL~O$aO!h6?ldLc+Uoyrdhk<_CCg-8;ouRqh>KtunpnNqK4PlU0=-R2nD0_*#{mW zZ_#Qu%DFag_6>M;;R%WpehBKk&OALa0R^c`MVH=a2sQwHC3Irh%3-@U-@QznG3CIH8?#RCBXL&Av4gwSNYXT%2&wonAY%7lPtB7cZc0XFr2 zhPSySgcSf}-5LA0>i-FNk`PuoEW5KU0!bKn8xkR`BCNWz0th0AG9j$GbC#i~62h`O z$Fd(%1SSa~--WC@n|kIz5kkI9tL~f$l%rxNSaxSiv4bRput-7Kh36@OA_TK|iK+K2 zR9vbELEEVwVPYi}LK4E7fPeAjP=rwZ7en>-OC>=n3wP{sSjn WM9kuFe69ch002ovP6b4+LSTXffg)P~ diff --git a/graphics/pokemon/feraligatr/front.png b/graphics/pokemon/feraligatr/front.png index dda82ea749535a0385fb313f01d0f1d50abfe8b3..ed0e53f63ec55d212dbe773d435257c93dca9bb8 100644 GIT binary patch delta 972 zcmV;-12g>32i6CW7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!hu00{q! zgAfo9_EK6YN{d>w_Bo5qi`D=C|Nq6s#sB7uYEl6I=8Mg}VgLXDD8((_000A2NklEr&)+Nz z&+%u#*c-!e7dsZfPBPpY*x&{XFnE|jk*{w=tGyUtFuh4UkfU++0HZdMyTl_cwk`pq z>&NWF0Yv;PBum!9xP6@PqwKW?cb3t^0*sI^~wSNgw^}a#Q2&iId;C5c6f8xAB zjuGoSH-Ncypg}TS0SZFp#Q-xfd&4P!Y(Hq)DlY)Ng^s`gbfTVZx>&;g&;u3#(V+p~ zb9NCkF)F~ipK}0xy`@XBVp$Q4#sHLh5`cCNUum41*P|flzGQNJ2f#_bUns)zCeM|6 zfKny&{(l?5DaqztXs3VZ-q^|Gmo9)nOEn+*0Kn=A<%BwV8@NmxsIjlXcu`JC=hZ0C zhgyJ_Xn7#`JqmWG_8?Xv1oPk+NQ583x77Bdg3d0KfkHueF_;KmKFBZ~p*S>@nV=gZ|_I00006JA5D*aXP*@0PkU-Gr zD44j2==k{f_`txx__%O@SOECoh{(8L0002WpEgkd00UY{L_t(YiG`HGZrer>hF4$( zUu`u{5cmNYj7eGrTtLz09)MX=DbN$Kqa1Q0s7Zoeioh}Nf`1V(S0jfu#~`tp_KuIy)Y zdk+kZlUN_}%YW!tkM{xN1TprVtNlQNF`};??*|Tke}Z%wV%8H~AO3h7NbIL7M0}); zd8QwATo{!Y%>Vk#Sy+RZ>62ZcU-G{QpTF=E69GEsFe%a5^MD^y{+@IJi-0z(%uJn3g7kPO*a3cVobw z=?YWs@)=A@^H5*XvVNw=dz!5+*IjQ`#EX!~g z=o=LSkOPQL&7=&Uwsro)Oie@*VM<_98>8P|juvfNh23z2uvVSI1(R1Z(bS|iAfXm>@ zttVfA3};qSinkFUDx$yzP>S1rc$v(m2zd?k*w1ht8J1(#jb#AXMJDdtjUYg32ms`? z5MN++RSoBJa>p?61@L}Jq24a%R=&$%p3MPe#DCOa?Cue`s*~Y%Ps(?)MbR+_z7dXn zUhMh10KQzgjZ(m43{7)Ngyez^CUmQLRQ zc~t1u2%d6@^VQdd^nM~GE8>FSSrg&(f>OF(y50_LO0O;=pr~l(qtC^nv+n@+BncoD z+<%xSz;6y%M+KD^6h%NSK&1@iJbv8#Q7+vh>+71-#ziIiS*GJAa=snVR9$(_;mvxz z_&cCHEjSJppxP!~0gHt!raYp&=!|$QeUZEFb}2^$d)c|HpOsH(WVC%#B1ZM%@b?U)hS4{xs2|C?7q n1$O~z=ns9k3-Gqhe4qUX0KTXU?VT3;00000NkvXXu0mjfxOB~f diff --git a/graphics/pokemon/feraligatr/normal.pal b/graphics/pokemon/feraligatr/normal.pal index 166ae9add6..3322ac24e3 100644 --- a/graphics/pokemon/feraligatr/normal.pal +++ b/graphics/pokemon/feraligatr/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 0 8 -248 136 128 +131 0 8 +255 139 131 16 16 16 -240 80 88 -8 104 144 -64 208 232 -40 152 184 -136 232 248 -248 248 248 -192 192 192 -248 184 112 -128 88 0 -248 224 136 -200 184 96 +246 82 90 +41 74 139 +90 180 246 +57 139 205 +139 213 255 +255 255 255 +197 197 197 +255 230 139 +106 82 0 +255 230 139 +205 189 98 0 0 0 diff --git a/graphics/pokemon/flaaffy/anim_front.png b/graphics/pokemon/flaaffy/anim_front.png index 0cc7d0439e647ec2a552f3c86ae2cdf1ab2bdb12..c09ccf4922e56a2824ee152d9e0f8af917cbc624 100644 GIT binary patch delta 1118 zcmV-k1fl!o2e#_R_~000B!Nkl0|T)LNqDiPqbXfN$3EwzlKW0PCX2MwD}Dtp(pfxC#F#V2Rus2qkBB0-EU;{%H**DeNl24p3_=!py;W zmTx5001bM*6q5HS21}u$dP5)f=iq+7{{~1&niik+P$rA*Qn|;+XL=xL z>f`->OrZD{T7q>A_Xn2nIH-sSk9+8q5O#og01z#H_nz2+r6laynCL3H1W7N3{}f#+y`r7nzF#_uidrA*Ld(rDp05SmQE~ZjTT^BGwSONeiFE*)F7mmc&1hjgN z%e^R}Z{7+J&$j_7G!bP;8TvCXz&-_&*u`io(Gs`-H$60_;kg!{9R%#jlkfZkn!`j3&jAI}_BJ}=vc>giW z@PsxZ=!RwnZbBKY!PfUX2MBHHh}FhBEfdtEKbZvbSm&)tgncF3$w)5uz5;$2-5InL zk`u7@cmP!N+u1iiK!4L_qp8hVMt6`s1B@(cSf{>0ulC;q0HG+Mw>Ikk$!Gs9h0z&l zdw&W0Pd@XVWoyv`O6Z>-z*h{1fVUajz~m{S28AG|Ht+uC-cRXM>My~nzcR|&TX&Eg zgctih5^$wJ={1Ew`vJrWeTZ)<;C;HXf{@l4TmdB0j}kh2RgQD)Vb1^q?Qq1@)ayL%q)9afOmGj%kSLjrI1eYkfulX^7pt#}>{<gqvL~?!}4dtZH6l(YXwGDs{X!XJTJRHiEH~(Mz45dqlCp{d>X$pJ)KUeHO zzr2-)L%GfWE1+I*->S8dFqe8o5BonSKG)nkbYW`v5`g3SMYa)yKY?9|_51348DAsE k^pXCyn`VCF8~<1Q2T9^E{+*&yz5oCK07*qoM6N<$fLD%daJ2vfKQ1l%s7Z7<*=^x++PkJA}cRwEQ`_;6Y$j934kK~E1Y32%OlMvG+ z_UCAU1|gdOmGKS@+a`om&<-}KR7itVupR(ZE5s&F4eQ{z#BNlG<9(q7)}g&a${w*W zKyCscVp~lmpnqQj`*cqUJn)F^LEhSbi~t>4ehyW(jsx{R_0H}-8+sm`asdE96Bnn;E9sSp>*Z>H5$Z&TZziE}?ZI4PYrzo$($pEFrN0T|s-)LNW#nb%tVA|N0j&*lH>JFg2sNdgxc zV7yVx)qk^VfHO8bJu2kktgeB#hde=nLiFPeqgrciKU*Kq-d&`FJ4C zlcC>Mj9uwuAUgoW17EQM&4|J%;xL#oM<%~_0vq^R0u%LIPvd#W-$4gnJj84foX;7H zVxAx$hIYsUO%FLAB6*$4^M~tHoIwUKIc2)Pi+^><;uhIonb$P7y1-4`#Q%=9+iT{k zyhZApWQBiNBcu-RXc;9yyqf@2Z44-N!&6y-U?t!U<5l@sy9h7>qMGW3`oky*cwl~( z7KLH}=<365VpkCLm%y(NBd=*;z(Br&(R1b_fDy}wG)|8BW3@ea!u#?CJmX?V4fwO} zC4W5BXYEtO9^9HG@I3LL-Eolz;z_C{TR!R^v^faHJ+sC<%&TpG%1jXdh58p`-D(i0 zZqYh&4w{$gE{MOWUPN^PSQNP}FVk*XrfN^RzPYdubbCt;NF&&gYrp}=O4o=zwfCht zp9XN7BI!{; z-KF{;b9eXb>9XN7qF8N8jcQU+?5a6obKt`CG^`xU-z$n?_Q%B~>tC z*^TB5pAn7U0RZ*@`!GV@XRH^a>aQJkgO%#9>35*Ez5=)}ziV(9sJdrMf6&I}VG-Zm iU7gq1M+)48I{pQvJDnI^wD)2F0000l diff --git a/graphics/pokemon/flaaffy/front.png b/graphics/pokemon/flaaffy/front.png index 373ff986f2920767332d5f33faeb46faacda9b0b..6bb2dc324a7812b07301a045d9643e3495c7925d 100644 GIT binary patch delta 642 zcmV-|0)73R1&;-g7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!iTz19E! z|ATXj-sbiY5D-dATHZlo|D>e#_R_~0006FNklQx z1v0%7wCn@o`f>nr2Zaf$E2lo^C?I8*f_`Q90ztw70RMJW0SxL@;^J~Z3X})|dgm4c zfIXvtF@syBR7xNQdJ%*#R+H^ zc1o`RetXc{rvj=1<_;4zYPSYDNLx_AguWAFA3vIdACQ&RhCV ceQKiq0gDzG8R2J%H2?qr07*qoM6N<$g38n-ApigX delta 657 zcmV;C0&e|}1)T+u7=Hu<00013M{Ml?001yhOjJdf(4ere(D?ZHfN+S&*zgb#5J*T^ z&|rA@u*mp`nE1%hh#)XPaHvp#z<|K`C_sqUe+KCQ00JmUL_t(YiS3iIZqrZ{hA*m2 z1}g$L;Q@SXb|7w~j@UO@SU}W31Y2n$X5<9Zk)d`rR0VUI4SxwKxhzE}kdP-}?Vgd5 z!V@6QO$burd&3L#$dmss=RfE84`Ua#UYD-^M+ciRYXh_mU|C?_&^GV^wh1cf9empc z07vU!gX4e?j?ROCTMpRZ?&uuc3fR5_u6I`nY>~YSB@fCvKrTTL*yTV87)zkeYf9jO z2ewCgx&BlGw10W&6?M7xEK=`jw0FCr0&YW8)kCt!*M&$c%@|7>zvLd`9)|Y(ot&ou!47WX(!S^P2kzPiJR!hbX`H@H0q&Q^i1;`I`!9m_Eyg}|H~YCu89aE-gK#9|B6fwNu5=&>qo!g4W+rixAO$l; zP4ZtH(E^VoFjD7woK9o>LJpWe;$jHIX&5FcW|}_++sB9*F=9`n8(iL>KBwXa3m}v! rGn%_Phech6`bM3xaC3u;($pV7?8{b$%JOpn015yANkvXXu0mjfj*u*Z diff --git a/graphics/pokemon/flaaffy/normal.pal b/graphics/pokemon/flaaffy/normal.pal index 9b67813424..5dd45e400e 100644 --- a/graphics/pokemon/flaaffy/normal.pal +++ b/graphics/pokemon/flaaffy/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 176 208 -248 248 248 -128 112 136 -200 216 240 +189 189 213 +255 255 255 +131 115 139 +222 230 246 16 16 16 -72 72 88 -208 96 120 -248 176 200 -248 136 152 -248 200 208 -136 32 48 -64 112 168 -80 128 192 -128 192 248 -40 64 136 +74 74 90 +222 65 98 +255 164 164 +255 115 115 +255 189 189 +164 0 16 +82 131 197 +82 131 197 +131 197 255 +41 65 139 diff --git a/graphics/pokemon/furret/anim_front.png b/graphics/pokemon/furret/anim_front.png index bd0119c5684b6bc8201f0e1f0d8236bd14e8bba2..6e84d7410355a84dcc717919a421f2c1366a4539 100644 GIT binary patch delta 1115 zcmV-h1f=_-2;>Nm7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!h7DIn&> zN_#;$ARsBloI(HYl$>Hptb-~4|Hc3R|8sM5oB#m-lwx>5H~;_u`8TpK000BxNkl2^#<@wJ%;9e zN@)+-09cI};|>6b3LqsSmT&0=kO?9uM5Mi#1Xh7qk|(h}y*d#5pM5<8T$nBG=?`f2 zu&Y0^9wm4Zj9vXfk!baaWHBM)F(BXyK)Q4=mO)_e!eR_8XaE-0Ai()c!!bMq z6#ZThz_uJw1%M9F-BdlmPrvXYfPMm?0}ba#eGDdmqJL-euR*^QtMJ?b@^^d?0E8Qa z4Defo&F+M#TP%lQ4yg40#8*o6(>;@h1SqOP;zJB|9zp@|=theX&;i900VF$*^AKi- zJMeH@|K$ZSQ3XhRVGp+hVCR6os3s(zAWoFVQN-SXd>^ru>78yS)J!B^LeV4%696X^ zLO69EwSUTRvJwrDFMtAQ2{;EB0n2Pq#GIYDe4#G@zRH3>wzj%nH45@Y1K9J1-UyWo zE#gs<6L_whae_^n&PZZ+qL@{wMqC#?-c+zJCpvW$SATZ7uPAfcB_1^j6W7QbKOv zX>0A$_p!!SzAItYngbGd`@fcCEtFDXly-9Y1{XR}tPs<*m6LAK^APH+kV*+s632m_ z(3${kc|%~y|5-K+^;R17>B#JaCF(^~_pEso$L*P!0ln)rWL-%<1$*85sB2X5*^ z{eN8BQs{lLTSABvfHr8n^jQM>yxyx?4dAf1r~N9ttxU?;v=|(@5UL`n|Cxyg>okSX0d6J% z#DP*I%F^{O@l&TC0$d+$Nr9P+=n3FFZGYlfHs`WEJ_A(0f36Atq_Nw*#8+Rd_lJu- z-dA9`gK!RDs2>67z6J4AU$r0_2QJ;LF~Caa-hoR$Y*K?l-GL}W!CpTpVj&mrEdX2j zysM}LjYSy?m5yBQBuujm2;P9`)>GYzm;nxLAe0`8qI4^JBVzquZqh)o_JMaI6jT8A z4jwgQfOKbRD?$J|FV;-3EwjvxKyP^Rfaq~4fFmEBYk*uJxq~6!r$FU=(KjoA<#3Q+ hpv~y^vb%rZ{sR3!Ix!Iq>}3D|002ovPDHLkV1jig`6~bb delta 1049 zcmV+!1m^qX2%-p(7=Hu<00005GLG0)Pe&(WvoYZOJ10DoQFJCbrFT8uljK#?1y zAorPfCsKF6isFAXe!`u7wmfuXoLSI<1ZHI6v91ZGAN2tV}YRiEMRp5_qKD}9Prcu{Cb9L5m#RT z;3opPDy}{vuz#_jb3pmDUm?^n1#AZm#V`@jX`Lnl!xB2Jv!Z_z&|Cn9G`pk>1__YX>4C!- zNcMB3owFWTMPQu(bP#V}0qV;D9s&Z`kV8Ms(cvD!Cx7~@8J<)E(EeZyR*PXb4kK*tcn;6+%V4b#&Y2#_By(yZVU0lFXWC#L3{UqzZH?Vd2i^yD)^Pm&;Q zHqHaj?c_vMIz+JAZTcPo{dkj8WzA|O*h-334d zze#{%seg7XY^T?YSrgW+OhBoRk*o@2=4Sv2?Pcl~A_D4u)y$ghi=W3HE99kZ@Cd$WIS ze=4}LR$m1A*Zqq)JuU)_XOgW0z^g>_mHY%Ke1AvzRP(XJ!bZNNPPgTW=3{y_@J@Ro z(R|e&G!O03(qxfILoS;RL>NTnN*f$*a=L(p2AVL3*yk|2R7om`@TsS&uvHgpa+i3+53b&CxOKMc>mw(zuI<3sb&dG>?uZ`*H9j}q@| T4b;md00000NkvXXu0mjfd>+=u diff --git a/graphics/pokemon/furret/front.png b/graphics/pokemon/furret/front.png index bab4d95b6bcba4c421d01f93c445ed66ca1bffa7..4d7361e08b3487221742f694e1f356894eb4e869 100644 GIT binary patch delta 645 zcmV;00($-W1d;`i7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!h7DIn&> zN_#;$ARsBloI(HYl$>Hptb-~4|Hc3R|8sM5oB#m-lwx>5H~;_u`8TpK0006INklYXKXJVPTxiBI{Q;vMqWZ)1 zsL9i0MD+({s-+W?M1%n(vLa_0;Tr@NS<&B>5U&B>sd~>h0|cwUHv=G3%|Z}B5&}TB z945^|EC!ht9)AxbU@C--3ow*g{iYAn2U5Zk#15c7A4ENYngjZ_O9H6dvV2a!Xge3Q zSVG8nEC{#*P+2;dTM#(Au!%tg1K`PrT_M3|T)7Yi%r0z_0Ow507+wQ3eJlx3w;WLi zfC(_&R5QR&zw{=6egaSeP3K>84lV#qFXo@YycE0ie18S7Z#)P9!T`Ylev63JJ0X`X zW+}J^bb24jm6H8*H`0;-P1Q(ph+(NiY5<9DwHN^%&^%E9*YnsyxH{ZH!X5qB2O?7k zV7aiD+W~NLpgf8uu@^`hrF9l@cEIimnuH60G!#lWb)L1(@M0xa zfL#C$Fn$v78c+$?szDj8J8}6&-vDxzB_EEqyIxBc^ur3M2`WEZ-xt>OBa@htLY|>OBJE`_Pz*pOF fLEtw;f73nzN0}cF3JCJ*00000NkvXXu0mjfW`Pj; delta 621 zcmV-z0+Rib1^NV#7=Hu<00013M{Ml?001yhOjJdf(4bH#AkeUActAKHASl3?K;jtRJDz5ig96o0ULw%;WSq_9^x?N+}8S;(yLac3CS{b1ZZYQpo>V z^N&W75dUMy8+x&i^J>VDBQX4^56eL1f{r!ZWdOWq-Ky7&hYqFOb%>Z*pg`B5COx-6 z;V{Pc9MDC5m(j&15|zT&i~}J`Lj{6yS-_hbUVM)aIpEv_{JKE4h}Aa$_(?#niq%&F zS`Q`%l;^{i5P#R_HnN1zZv^b0np2__as?w_a(@(+n!0gJ0lsgtLRAB2=@WpD zA*G=~dEkbbc@6?tr=hW1cxJ%3kNqTTh+&n+o(-NU#r)(Kig%JBV_OWsrJJ3IwTT(L z!PYqf%xRd_xgIStGz>f@w{xwdg-~sXq??8A0zj8y1ez4kPZ3a2w+SFN`jIQaUIoIc z;{woVt!C8}>7gYPN)gbF`WKPLhCX(Gi01kYDk#TZb6C>#!uud&ju?xNn6%10Y@)vW zz)02FhKa#mdyGCVs(v9IUAqj3i)&8uPV9! zRiR`K3H0)tj{)1ir^EZtGG^Znf?nSsOKSb-0ciifumanpt5^M+P*(y5 zz%coF_B2IRmVY36VUlr10)ldYE1yci*kwWi2$0kSQxm|}=tA_U!28@pt-zKhh$HR4 z_ana2JesO8h|>jNoF-rqs@<9D099PXT25?1=|p1tCVRL+AuMT5q+~;gU=?B?y4zFR zh|hNP8VOrJ@zJO_Qz zlrRjQu&ME(f)lo|`Nx299K9c^y1()x_8AX9wng~+j6-qMvwfT&EddX@KeUOD zJASs5fPXpg>FMe{UsqRGSJ!`5r}y7L?-9O-Exk9ux3PAG?`k{H%cQ&Oh)dP%t^SBf zF2i?q0w3YKmfjP5ds^YUj@}b|D?2yA_mJQ_qVEddHT0g~8{oTz?*j5&ZfI?SZ?Cth zRq)M;>)2)Zo~CgN-;^)%eo8sR)w<;K%R8PPWfEX1@>?}D!9eT?v({YUmL{1*WB|2ujw;rAHvj^2y8=LdRs zmTR!-h2EVWZsq=;>Ak}Lj^5i7Tm!cr=v^AnbES724}jQ@Sm>Yzdm>T@9O#!`Ud;wB<5O)!!7^-002ovPDHLkV1gMfl@tH~ delta 814 zcmV+}1JV4x2Dt{17=Hu<0000CaaRE(U15o%fNO3bDF=}IbK>VE(YMk<}a;iUszsur(7 z%3zc)0P=)X7H{1^Oh^$ESv!SKkfH4tsCxD_5#W1G#|rUVjP!f-p6>uZCghm^F?1gw zNB5wz%CFMH2OpqCd9OvqfTpRO+Y2BoxWGxaRMk*Gl27xd*+f@hM80F1D#g#Eoa&gL zX!!!`Pg*Ll0e>1)5Fjth(4v&4+Q@)(?QL9DoNC+t(aq0-ol3l4p1Bi+ z-?-udH|UR=kaKUq84e^Dt7Lak#79u&CbpopfDsXD(Qv600E~v0$PRd{(a^$Mx1ZUA z03vd4&ws9`_D>x6^@Cc!>1Du(1R?!^gFNP#gUeyqUy`HT{{6(6V#PEW`8F4c|SnzPhyj2^Qk9yF_2cq?=3F(w6AoZzInA_ zjVwg&<#r|1Vsdwep4=Ir*R}y@dvbTadU7|SOn+KiK!|CP$^F79a=9xV^Tigx%${Su z?H1p7a<75eD{S9H-EaX{S?tmVFn14&$(;>w#R@#WqX<_w?eEt=BR1_X=m~kWKV*eH zd9=TgEeL@P`wROm`-`(_e{ufWU%}1l*`Mk~6yWwR)llHy>`$Zsb9(j<%0Bx?_Sl~c s>?fH$8wL!xx4-RsJ%~n*uLlR5KM>zMugXjW8vpa!X*Z=?k diff --git a/graphics/pokemon/hoothoot/front.png b/graphics/pokemon/hoothoot/front.png index 0cc0353801b46a3b5561242631a2a2ff14160725..8a89546b76fc5104f8ef9e89c1e6ae87abc30359 100644 GIT binary patch delta 535 zcmV+y0_gp%1f&Fz7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D-B@ zL7Zwab4nOeF#x@bLCvIlYB3nSS}FEoG48CC-o2dv=EeX2|9g9Tpp~1+0004^NklCzh!eG3SG30+VM zCj$NX<|APLdpcczRtS3s9WMs~eP!JM%rS}#1Sq2>X1zf=5TGDfi~knL)$NZODgged z8hib$NbLl_e*jB*{ip$KTJuvcfte%6EQB!JLtuez_U?7R6Z#@x01+lz7NfbS zGlKYyNzwuWKz|!R+ow`6c9{_X0I5X?J%Gr;8_|%!Y%8KC;8ubtdHu~2UUeQr*BC^- z0fIUKP3U$F-2hiDWCw^t&syQ%`wtN?igKW!6h{bHgo5xf`^gYtnvAfh@le4I+gSWF zAf;qBbyff1uK*kIZuSL-r7?s(7Ho>i_x7}`BY>42s~2&7;C&&yTE delta 544 zcmV+*0^j|l1g!*+7=Hu<00013M{Ml?001yhOjJdf(4Y_y5I{gcm}oF~SWr+f0Jw-i z$e?&=Fc`R4DDYq~=%|p`xS06h!1(z1czAfs1Wl6w000SaNLh0L01m_e01m_fl`9S# z0004_Nkl9G!P``k&<>CT&Wz>PUw8{JBfA?N1NvHac1;>CKJ3?i`o}u5D z1E9rNUyJd9rV-|j0>KGB2wxTqO$b7AT&J`yJi!xslTrfWeH7D8`UJ&0Q9s-u=mlt4 z5&&J6u>k<-dw)SdrgEba#W7Ti9}za4u?96~A`8yY6O-h;>o^WzjtdNBd^?{`&OK1) zf-0%?=ToER9l-@>7eIP*+q)#7#oJ}1t`d7N@D@o_b# zufN`IR=zW@4*TVdj$6N&IOtcctopbETjYr@8>F84ozCOVIhE704 iQj)p>iy1uCpVkk7jGD8Ert(Sv0000{#R#E(azP=6@=6%f(S;#=c91CcZk zFsbI^tq~*Mlv_%LHWmhilX%9D>2t0 z084~G_zEJk&_0n};>{77B)u@q_~1g5n4QBz6<9QgT@Zf|yn8z`4~kRBntk$BM>rP2 zJD5no1wgsC&UNG@Y|1s6LZMJ76bgkx;X9N8@xKiS+<%-G10tHj;vbw0h~R(xUj3^9 z5j+3IU4z4bh&vF3oBd=!#2pAHI1Grm1F;?U?7Ov*9^DYAo><7UPKKn)VqXv1BWK*a1Ra#A-2(C8%5SZm`D2w zi5Eq86E8z3XF!m+_aGw4>wh&6^7g@IAe4PjC=`ARpAUu(_XF!iga7~l07*qoM6N<$ Ef|bSY7ytkO delta 540 zcmV+%0^|L|1gQj&7=Hu<00002v5kR0lMNbKJzy{^LR+*Oy378-P9A ztf1892I*HvgW0*?n^ng$;@WL=V2AAcTIKq!X%mA_Ug&o@nDp337={D52dXOvQ8j!Vo6cNDXl(+cD3Ofpml?3o!ts zc~s1h!ph3Z>YvLR3>l}b!9b6KUJV8|vs}0u49p&6m47lAa`Yi{b5JXTQBlmJ3~FUC zwg<$cxU)+6hX$DIYkWVCgIQIbA<-5wmt&buih2uaqTR+EZsJ-XEpEV63%ILm_z9-^ zcJV797}sAJSNs|b#G;T)D1(9<2q$a}2DX5l{_7^}8K!%$WKWrC`t!WIMlFuYu_PVS eyRovmrxhPoRDa+x@;0gf0000c0004VQb$4nuFf3k0000mP)t-sn9!h{7*hYu z)&H!$v{G{r5D?~roaQMIivR%s|Np%J0E++s000000000000000yUrHY0003MNkl*K?8 zWR4Rsn83MD@qc{;=k#<8ny^Ue!5iU)CR|rIehwBt+~*uhfVD={am0HWNT~o!?*bx9 z`-HgpW2$tM{6<**;zGkBKJBFroEa=`sy_&GdT(_el!>sb`sS-nI~QS2uu;Gaz~pmu nGeZd?(#`qQipqJ6&|dTL2QHP7Zop0o9)GX1Sfd+wgGo7W-9TU_0MUI+ z7V@!PAX4*AajFv$Y>OR^BB#mpSa0YD!?f*Ddg{Th(~-x4g&5f&9)MjxmG)T7nsrNm XX?Z{X9*zp)00000NkvXXu0mjf=U=5( diff --git a/graphics/pokemon/igglybuff/normal.pal b/graphics/pokemon/igglybuff/normal.pal index 4bf00fcd79..c0e93f53e7 100644 --- a/graphics/pokemon/igglybuff/normal.pal +++ b/graphics/pokemon/igglybuff/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -136 64 64 -248 200 208 -248 168 184 -200 104 96 +156 24 82 +255 205 213 +255 172 189 +180 82 115 16 16 16 -240 120 144 -224 40 16 -136 0 0 -248 248 248 -184 0 0 -128 0 0 +230 131 156 +230 41 16 +139 0 0 +255 255 255 +189 0 0 +139 0 0 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/lanturn/anim_front.png b/graphics/pokemon/lanturn/anim_front.png index 69166b66bc60f5aa0d7fbb583dadc1ea8ef7b994..b84c0a77fdddfbcb6fc80656a46ec76950d80724 100644 GIT binary patch delta 1088 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 KMNUMnLSTaB6G+7X diff --git a/graphics/pokemon/lanturn/normal.pal b/graphics/pokemon/lanturn/normal.pal index 792d90f29e..377916306e 100644 --- a/graphics/pokemon/lanturn/normal.pal +++ b/graphics/pokemon/lanturn/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -136 120 88 -248 216 96 -224 184 48 -88 112 192 -144 160 224 -176 136 32 -48 56 96 -120 152 216 -16 16 16 -248 248 248 -80 64 40 -184 192 232 -160 48 72 -232 96 88 -168 0 0 +123 98 74 +255 222 98 +230 180 82 +74 123 205 +123 172 238 +172 148 65 +41 49 115 +98 148 230 +0 0 0 +255 255 255 +65 49 16 +164 205 255 +164 49 74 +238 98 90 +164 49 74 diff --git a/graphics/pokemon/ledian/anim_front.png b/graphics/pokemon/ledian/anim_front.png index 57d90f93be59369c6608ef99074290869be8bce3..c866d2769f9d5680379729ddbdd52bf46e4c73cb 100644 GIT binary patch delta 1319 zcmV+?1=#wF3a$!}7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!gQ5D-#Q zQpGu1|AT{bAQ1mbK>!e1`1tq$YTmT8w4{3g&9pi8=5y86)lg7SN$_JA000E6Nklyn!=422_Wg~5h>|HrM4Bna7V42J2C&cxGcvm4HbY=6s_qdp#=_D>tpO?kQn zptRHX$3lDkg;-Rcwzs~-a!r2)a8n<0X5O>T16;!V^#vA5FTiI_2jpo|MCLvK(=<7NCvBPf^tJ|n1qj-)UK3aBBVhO(~o0P0-1K6D+x2YrC<;k}{ehkiJ77QdvPu0EpCD0l+Vc1;=k!C)qQ_P6PdCS?aQgugyef z09c9o4Ef<^dL`J89#ztDsSUkt>Gb_w@W#+DP9p=;w|#!EPv73~^a@xo6*eZtzDw`r z3h)RJ!+)mNPUuXW1X#L(K)(PYx)ysd^(nz13Tr++IY&&D=@Z9A3qqKMgG`<+DvdHaYE zwx)#VMVFt1<}%s?l<))4T*3PmkMGYi`s+7m2-g7*`s*;IKEQU>eI?wrKlk*X_GzDX zvE5#KH)|KSiyv1i4rc&o+=36@uX@3$ceF7^*Zp?-@;bPU6Yg;b7+#Ep$rX73SVMoB zUVnM&;bZ25E(Cygu30vHSdSAu;MMeQ1ljbpeLIQ(Q1{quzxEpDz~s1c90Pb)IoSbl zOS9Woy9WV?%13tB4Z{+bztX;A(gqmFZ0ne_1N8N7#o8Bb5ai1<#+<+Uc6NYY5KB6| zs%u+2pr&>-NZ-4S3z#!5QfaO_!QGh#llGU-L0|1P_B>;K# zV>0V*04Gp;76c2%iXVPCMe!h;b4C)8xvn-~fV&*imP6U}2B^twV|xUoy1~sGVPLCfmB!-glMyJh5241ZRF zLHz>nPnZ(?ZI^dT$>w^9UbE{hyWyDps_7Zowj5^A+$Ea@M=3-t42WW;(JBZHfSO;t z0wbpVu21L6>=l4?;8`BAaLt?Sy{}N%&vZs#JpLzOk*H7~nwAtrn0*1l+^3GfsT;dy zO4Kl@yaF%?CoT>?OuD^duOrKDwbU*dJ%D&`9)rZe^x-3 z^FcOX4TDhqRO$lwF07j%RS%*v^|&{;>3-IsqJ|lG^n^g3PGz<6adqhclvV$7;pwn{ zUJ-lz{6Crw`?qG@ohzS}f#otFHb&H9uf5(97j=V+u319g>DyljHvtd&r68Emji6I| d$fy1P?GN%qIe)C}HoO1;002ovPDHLkV1jaSZ(aZZ delta 1283 zcmV+e1^oK13X2Mm7=Hu<0000m=G(!N^b5#8pQZ0hO^U$$?D*f<(YBtswV_o5&OcxI;Vx>SaI$D!ZNsKwp*u)o0!dpwus|QS-bP z^-Vy-^Ck^SOMh$VxH%bZ0;qf7(+$9g8nOV&lmI6QaClM%Xm2Sr=<(~Hs9OSr_zZM* zS`IwH^3&Pra#{u~4=6o8pUp@K;GQG!_4%?!iqD&PPd@>}VXhauo_~>+5UxJ-yl;mJ zF!09_p_I&oa0lKIzOX`!deCYS65k0?_k8G_HL@MoX@8RiQ7rePkw0#B*x4v^?D~YU zc?*PS-PFlAVj(+wmytkV;j{$oT|mDpBDPp9TBA%2lPwl|wrv?e#v)p=4sT^^n5#|* zoQDPsFRvobok0ANIaM>{ferkN5AleCVdeoXz7J5WlxA z-~bO+_J4})tk>(m0tv)W=bW$C57|!cpu#%93UPc(UKIe^oVC~R5kS55egE&Ur+2bOiZ5qv8=(DjX|)m{8O4th z+l;Anod3T*pSAT6x5baG`9v$t1$jWv+XehPn&_jPuW7i6Gd8sdeQ=bs&J>`ji42bX zp??ZUdE?RebozxmgU_z(A%n&d-Y~EHzIl#a}{o~Umsddp47hfrZ z7ztV7@D#1T+nh6=11d1J8}x8CtGQ#7*?+vP0^KCx9KK#65Xq^m0K^;7Ne#V!`Nka! zlLyLM=tuq&I&IMD`BFqFumPR%w$~@U_PV1uN@a%y+_v@-=OtiqM+NYyOb*iA<9-jl zH4Ib%<^b3UaEloozalEIaMFMg$D&uuUsG*`5d_kFAo{NQ|I&G#uD}MYZSy* z(}Bv)eJj3}VT=}pPH7`HfROGTO?*kA>+G=5Xo*X_S0w;`n}ho+adqPsJ0G@UZdJ6s z-`#4X5YVt!f&8UYEwM&zHOKy^lc?AlO%!u;3c<-$Tr=XU@A002ovPDHLkV1o5|S$6;c diff --git a/graphics/pokemon/ledian/front.png b/graphics/pokemon/ledian/front.png index a51f2884e99b8fa29062792c998c641d05ceb518..cf066921cb6d1d2b0182c28a8aaba57fd342482f 100644 GIT binary patch delta 726 zcmV;{0xA9A1>yye7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D-#Q zQpGu1|AT{bAQ1mbK>!e1`1tq$YTmT8w4{3g&9pi8=5y86)lg7SN$_JA0007DNkl77cFMkTQ#4bqN21VjE0n@g*fHy>R4%!GpE#c;yh_ zQY&t18L;9iklq@)wNr&e(MLd~ioChCrhHXiFNB<3G2tWSoC^%C9eCB2LSB?1fI=n) zF+S%20~uTEPQt9yf>;eyCk7XkP?W}0_FW%|##g&iEPp+Do&psehCzD>b~xb2`D&K} z9McpC_rM@vMI)#{WZ!oc=oiJ3($pmzk?i5NqExET+F{pnc+ ztjj*(?U7FRd(k^~zPXJ|On3YIoDX*o9eoIzZiTH$v1{Qu4uNN&IXrkw0z2`hz{*Vx z^n;*hH-9sb?RBPc33L(21wFf00xhI43i=ihX_3=ha8x1cAcJv&Trwg_IZ1-GH< z0@RJLy>xX!o<85aV1sQpI??-C*N{|g{8WIEa+LBzfR8Lz<;ItZzz$Op>hD%=AnOG$ z@)!I~jWWk5f5b6m>V)zE88P6rUdv!WJ-mzUcC&VcJHc0EYhr z(+(b^4k+6pa1{> delta 724 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 diff --git a/graphics/pokemon/ledyba/front.png b/graphics/pokemon/ledyba/front.png index 10e52bbc70c46ac677f73c31c836c7a0de690b4d..a34bf944a9993029d172aedde4bcec4a87bf95dc 100644 GIT binary patch delta 662 zcmV;H0%`rL1)>Fz7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!gQ5D;2Y zQfes}v_UcUS{VPFAl1#y|NsB2q@>lfd;jK~|Np(DdjM);v`R5^CHT6E0006YNklu&5I41{B2mdkF!`@iiOn}ki(iV#-k-&(yYoiFxyK!079Z+)vglWAg9cmUJ;vbKP_g>r-K)mXW;Qf69 z^RBM|@9yeDl-7X682Kh4MNZ9vn3&_eEGCW=q&5$Ij6{*-1|lK5Zvcg$09ZMU06<4L z0D2gL0Y(WJ`G07@dyIpA*ol|nTY;16HHA(IAq0j6XkqwVL+A1nm4OgALZSc}8G=y& zIF-L%FCe6rHZyRr7^w-oh^u-Kp3V^XT3hHN5J4k2YI+n-rCvTw{A5EGvd4WBDJ6@FuA*25cXcTUqZ_yq>R(`A zh*NQmpccw#jP(8JG*MZc({q4NN45ltV+e)~b(F=`LTeQ;MnD6*7w6$X4gDCM2*35V w;uzAP4S%_N3w>TH+_7B6oR{#J207*qoM6N<$f?nb!D*ylh delta 671 zcmV;Q0$}~31*-*+7=Hu<00013M{Ml?001yhOjJdf(4Y_y5Li%9Xeb!4KrrxF82FeV z(8$R6`1q)xpwO^*_~4lM__&~W0BB&aNHB2N4`mww00K5iL_t(YiS3j>Z`wc@#%+@& z8)raZP=f8K!gMM!EMzh{q^<=n-=OS{Dj7zjN?b>>5XLCmMSrNOvT@-P#ABwQDB=S& z72VVJ&TUoUe~~)pS?_o6^S;k}Izf0*Sm2p+QG14x`I(pmq(9;8>tKG2N=DjykudU*6E z1~{v>S%J5wMt@9{yGFi^Q1254t`!YvKHxgQMUkWKYE>VQH5)~yDUCiLCIjRT+E!E> z(zM+*P1JEtvblGWZ=%t?qzkjB0hsHBJtSRi9MWrVQHKyVPo_BLqhevf} z1qo?@#|Ncr&!hB9#)54HkGD-EJj$z0>fKOE>RH%2!++Qg0EVlkE-9sp3k$;5q!0ug z4iwpaQro+Qt-@%$4G7hVyv|xhLcl$l-@=0HOtt~Bym?&TUjT4N2$@?OWf+bMJeKI3 zaDno7AcvC_K#4AWV1J$Kgt8Q6HM^qA1qaTvs1lfhMQO{a*L2C}AavQ0@mLK7p?{@x zMY$d}*nhy=9^#;4|5&en1B?CjGz2)dyvY=~2Xi?u>%nD+Q^!sVdxVwXeOihWY*Lw} z1zmh1Jc-XwuofN@u$_Z%O~Rsl*jQ0H3A&?{Q_cC^y!Nx;jv{~xU^Xe!G=*}(#cBjF zoc%Et?ff_bkY;~ZEINZ>1R(tDTnRphpc4PO7a0AYegWKd$|rv>#kK$d002ovPDHLk FV1geCF)#oC diff --git a/graphics/pokemon/ledyba/normal.pal b/graphics/pokemon/ledyba/normal.pal index eb13383dae..cb287fc017 100644 --- a/graphics/pokemon/ledyba/normal.pal +++ b/graphics/pokemon/ledyba/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 16 16 16 -88 80 80 -104 40 24 -176 64 48 -240 88 24 -248 152 32 -208 200 200 -248 248 248 -168 160 160 -208 176 120 -248 224 152 -248 248 184 -160 120 0 -104 96 176 -72 48 112 +90 82 82 +106 41 24 +180 65 49 +246 90 24 +255 156 32 +213 205 205 +255 255 255 +172 164 164 +213 180 123 +255 230 156 +255 255 189 +164 123 0 +106 98 180 +74 49 115 diff --git a/graphics/pokemon/mareep/anim_front.png b/graphics/pokemon/mareep/anim_front.png index 5c67de5094474dde0d3cbcce0331fcca58f21ae2..47961b201aa02804d11f34e5b7b99976d50ddb83 100644 GIT binary patch delta 921 zcmV;K17`fs2crj&7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!i+tN_iN zQvd(||K0$cVjvI@5dZ(Z?#**jQc|R(q_legQiHt!N|bY?_F|OY2Dknq0009aNkl2i$|9@MFmr3Fnk*qqyU36NHbtQ!CntyY&1XOK^v)>7^4ASN-&F48I4 z$Z?}%!`J}$FQnW;o7C$8@m2?tWaNXm{kY_i)qkU+ap9MEySyj2Ez7n=2dgYV*5LME z(ar{3fpgg)wm>rmMEC5#20v^-5DQ=fK%mff2ow$OvxS6S%C5CeS)-Y)d+_E zA<8Hc$A17|?cPW<$M5?dLf|206G`41y_5JnZ8FJ<*?p4CT76(b@WTd@w}#LM@h|0k z@kw=4jQ-Tr)YR0})PEE_bCA*CbY}a=0$L2QwiY^|RU=;<6hP|~Ak_Fi&^jjwPz`!O z>kUCDFsBQ&P6M`t$D%L4P<5dOWKo2v2K>i@*-gat%SSX9n(a z4~grm1i{)SHXVP^(RPKi1R5L!p(2QbKp5KS3TH(GQ3=9yAMG)0MVAS;{a)L?_DuPHWh$lhnVT=cY;4mVDCcaOzT7n=1qC$kM-WleU zAb%VOS?GeCcLbpr^y1$Vgmj`t1N;{U?Lc3*9L+p`V6e6b0=u z79r&<>2pOve-1`&Knhzc1sXd?hX@Y}!H5hcc=ZZyi6T(6pa?XCp@c9N&kiC%2;)ca vum|BF@mK#5LkP9rv8A7BB7~_ao&EspLlQH)LmG-w00000NkvXXu0mjf&6}Qu delta 965 zcmV;$13LVp2hRtP7=Hu<0000zF^)J2v000SaNLh0L01m_e01m_fl`9S# z0009;NklVF+4{QYQ=XdW(!taOB zI{t3d?ySyNwjZtrHn%r-R|B=pgO$MJT1^dTZeCe?a9f?X=<}TL)CKC4QiER&RDkAM z4CuIUJ$j`88h^CI01F6hqL@;nMRa!2#wP_(p9Ay+4ZbP>*Zp0>JtA_GTAdnmqWMt) zzzOqHyfKjrz=$V2ZPCd0)H9rP`F9waa*rB~4BE@jsCOf|g+8^S1|}S6*jNJEKBZx+ z030j<`sl1ndo6S1QQ8eL#$pfpR0c4rwQ1fPd6N^Yq%^Pu_g~HlR?zkbw5v zEc=-Z$HM{b7#O=!llqfcmLm`o+$*=&|3m{O?Wcu0C5>S2(kEt|bf z@Ox=U)_+6CBm`SIpvWT)N*92s$Rp%%g7si13$R;>i!kKZkw=wa2kwBW{yjo*dUfGB z*gG!CS5vrmgap$PK%er*bCs3>i16Bh^pJ!I;<6s+CzZ^&j&-c#KM2irSEm~^TtR5u zF~WRfRc^{agKusy3>LTUiM!F|4g&$1%Kf{7u752E1e{UXsXbZ-76bxhO53R|%hrNG z&@PmCymPP&{1FH?2$T^15*G!61EP#+Tp$h$4>FJ@%2*!+!mx87GSP-0V{HNg;n>iG z9opvJ(YvL*KKcLxLBKF*gd_9pOMe-daDf<(-yZ^i{mDQWqR9n<8wLX$V=Qjh_G>N> zV1F0@U|)1noq#~J$3wpx+6*v77b^s!PaHdnKrzH;oeM-lT#RkluhM?Dwm={*_=a{= z3!V$a)Zqf*s62@agpc|9XFFQqlMxdL2c8p1j4$PLKVa`n7=gs7Hh3!sK;-b2s5tx# zmaw_VVJB7r$b}p)KvHQ)h^k-Q1T$7|@IGpqu;gV6ACzqHI86yTj+4^;9>mEx($jK- n(8)PBk+OUdDotC*zY)Ix2ilIakHnta00000NkvXXu0mjfV%fJf diff --git a/graphics/pokemon/mareep/back.png b/graphics/pokemon/mareep/back.png index 027ad17ce9a04f577704bd21c77cd29ad8bae22e..c0d26a07b66d3bc2361f03f53cd6bc8648dd9814 100644 GIT binary patch delta 506 zcmVc0004VQb$4nuFf3k0000mP)t-sn9!iur~uGl zxcK<^@Yn#T7>E!M5ctUW=$P10P*9+tps08NFo?JiNRWWQ@KC7WX`O5{0004oNkluWq#*x2zno6$qbVha-J^0jq@3K&JGXXnWpTJ<;73_v{~92jSSZV3awM8GlN7-8s- wg9yg}y0%0AA({(_F5G3v+gJV4($e47FGI5)1b=3XvH$=807*qoM6N<$g46irt^fc4 delta 564 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 YJds^4sk3;)00000NkvXXt^-0~f{p);s{jB1 delta 1505 zcmV<71s?j43+D@v7=Hu<0000Wq)gACk=(DXe|-Yq2P{V z$kFRfkAcWp9RrD@JqG$G^X!SV$&vb2(knOAASb%oTG*_|i*y0&!`fc-b^plq(7ndNBt0beYoimHBHx zXj(1;lyb{-qkl>7Kng{_qLm`R7bQy9DwJ-|Lo?=Mrue)`>C!_=TZ+E46unX^E&_ewPY01Aoyoa4I&8w8Z5@bXDTQeU zfGZ9e0Ds@Q?&&lHWawt2w(q(2*&%MIJ@MFfLr;-u!pzqG_-ynEuJ&E6;Mw6KJCK+; zp3pQ{ik7B{<7v1LCS#Q??_7+uj~J_I+Vx}qc?eKpt8NX?#iCZ=Txg4V`6-l60{~y- zM+G4skHqLp8Bi?-3pEm=a4H;85WYW_dK~~h+<%S$^vRd1%&-9P&tC&@264I90BqrE z`QuY@6#NLc5&-K07@Qx!83u7%27(PS9pIvSo)23p1i+DWh7-8&PXON7wkK~&IFnoM z&>Q!$(kb7UmI4o@5o~52q-hf_pPf#fbS!q#sdtC|xK9W%B%n>m4sM0I;dlf1L*(NL z*MAHINY$`0o(yo#V}T3+l}e>v-rg~5aexW{sn?;l86X#_lIpE0T(2pr$q|UWBC5Sd z2ta@M-|dSZ;nD5CeSe*|%hg&0P`7!zTD`cjUG4SX$p9d4d%cU&)NcP#-{Mdh2%5(^AUAURq~1IUk8!Gxp$^fmx@(tsSLX(|j@A!vdQh8JP4FPC7=Hi`2()AEpC9izmUQvniL^UI|#InTz@%5hOGbqCZ&Tle)rUNW$|t{_)~B(fh%Tv1@It> z1Z=YJCvRLA``FTikhB{d1Z7*$snN$59z{g_0ow$RG69ofvD!$>gOie;(_%NFNU$-7 zT#WMCb=e<)a-w95V4M|1J_s#Vq2w z!~kF@0b3AX_+ z;fL=K!$yx13k2HCXC5O87+N!JR!uW7Arer%Ri0_{3@C?-Z1*00&1c%YQ{zz&0{-Eb z_c_%E?}%BJ4lgLX`maAbH`X46YmkO&cmGNS6t1SnKa76>6}uZifKC4f00000NkvXX Hu0mjfkzK5w diff --git a/graphics/pokemon/meganium/front.png b/graphics/pokemon/meganium/front.png index 2a813e11888ce778d4973a253000eac4cb6248b1..8d2d25f6c19d8617b843fc297877998dbcd61c16 100644 GIT binary patch delta 841 zcmV-P1GfD42Gjc0004VQb$4nuFf3k0000mP)t-s_`vx8-XLO1 z0OqU!YOFyJb1A+5dyC#N5D*am|Ns9vT6+*V_N1K6AUVy=&1!0DK8Rlp+2D&hTO{knD+ zj~L5pYPeXRAOxUl=Ohh5+^q)mmV;}E^&Y~n$RQ8{2oH=Q)*U&<(KzKjYQT`B4!F8)oau53jjjkoC`C@7WXVTQD%*&05FQ^3q1!oS90C; zPXJu10>a}IDnU51{fPS0MZMR8hEt~a#q5m1vH}~?dT{0My@@yd$a*cv3}M|fMZbdc2Pyk zmWa_ua1!ddA!2>(V!1F7TfQWRrb50f+ujUtCubaliz0Hf8zZ(7`eos>9yPey2JK&H zfRch15q~NjBL#RX;-v*^ps1qgy)MgoLx>!N(Me$Iplu&TpuSPQj30|19wpxOn@Z%L z-YzL;E5Yz29RNE^xpqL)4=hkT0l<)tM*+3V2No!P5vl_6Y2@lGDu6x!sccyL7{OT@ z0gjFU1N*04F={>O;xrqe5$di7Az^sX7291{ihnIAUXNnPy5;gqKeG0l!6UPpmbvdp1JTwAbN$Av67Tn@;*=?527o5qKp0!(!I0{~mh0vs72MEt>k zybsVSc^1%$5R_mg`veS%2ml58qc)o`ozZ8ze)vkDkSOf{TaNktp4&xCmXiO`_jE0z zyh6Qcd^I~ft7JN115fK=M7;5P>VY60WHNpDWq3<}6Bc?RDSaiZ-lpVz^33diO{+0) T`K0F>00000NkvXXu0mjfxe#@g delta 876 zcmV-y1C#vJ2KNS#7=Hu<00013M{Ml?001yhOjJeq!1(ysAYe!U;HUtYs8CR77|`g5 zxX@@25D@tI`1m+jcn~=7pqR)YILOGzXlQ8a+23{m00RO^L_t(YiG|cZYui8+0Pu5K zgTRv6iT6+5_`-bMQ(>q$)z8__8Gi5;6!rV41a|htXKp*6x?$R87r$D z1GSO&#_^5$4&B;!a$C^f-eURQ@9v)N-U%Up6GfERL`f=#XQ3~eRj2GEd zRzgyKGcJ+TMs@>!q`VX(9&K(sR@Hs9g}9J5BEYjfj1TwMwn2zuHU#q7J$zKd?_dff zZHf61c#+5Wb$=1#<{E6qTEr61YZw1^}BMO_r>cl*o@ zSK1bv_GDQu1wc!dPkAX+O19gFKXUMTLSKmkSt*%39uEw|hy-Z>#bU9t+dNgvQ9uA7 zS7j=Y+aC~2QjnFm3iOwepc)*6J`qayiUZgm<5z3-;BW2T!{2_RwX2jvKxi5*MOh7O zDc#=BAOP~v?XFT2+P$mL=fPXWEd84ZU|6wtj~*gniVsE{Qp&kJ z9R|*jO3sIaM-2Wj=)aqoPlK>k+`ecXiNF=0a||prLt%$6#EmAPBUOj|M)f+7MJd>3 z_n!1*;Ex1xWS!Jnke01c2dex;#zw@1=?-4ycRbxOy@3@Ht?Ajs7WZRWD;F?3NH4MWr z48!>4%q4fy&m{MzpECHk-nm)5x_LMaKB?#a0)nPJ5P!IWkp98z{JG1mXmc7=Hu<0000FnjF%a^_@LoZ~pTa{apsp5RyY^LTHeyM8(9HuV^ozZY}O#`@si@^y#K{Ba$W!)<%#1%lR!6z*CbQTVd z0Kzcg)6XueXmjp|Qi+(d*Z{Z+xDmquQI|pLQUY~hJZD6+*VQJ>RH)#&Yc^PU_t$*0 zz2nULDJyNgnE|}JO_}#aSghdf7a{>j6DmTkT)A@ny?-p-?-c0ncO1(&kOrH-G+-73 zpIIXMCzz9RCoE1Tw<$gf2+volDI4Jkc0N$m~aj;>EsNO() jr8bb1OV5j3xor9dE-0+xU7CV=00000NkvXXu0mjfvSJV; diff --git a/graphics/pokemon/natu/front.png b/graphics/pokemon/natu/front.png index c77e0f9bd7a5780f4ca098c22811ccf77ac5e580..ebf3bee930bad2d31cea062a4faa02d22d485b99 100644 GIT binary patch delta 366 zcmV-!0g?Wk1N{P!7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-s0I=wTDFF6b zTGc69N|Zq>5CbINY3TkFtG>FaS9Y!6 zn*N2PqjxQ>`NK|5|0BIU%_Gp#2WnT);Vq$(dN>c@)x(`#EEbDt9xzyJUM delta 398 zcmV;90dfBQ0-OVo7=Hu<00013M{Ml?001yhOjJbxu;_p&0Qgu~*eF;?kU%JCC~&wy zkk~*F5D^TJLIaHr@tDuz zmS!x7Pu{(}%q1-qw*t5F^76E_v<5;7GH}VWrlpsc0Ttk~gR?UY3Iedp&sseVssOtq zX0KYcGcBbf1gM}9Ye;p06vW&(7nV75hN1)(1suCq?Vgs`aU^ZlS_?rXY_@dl-rbg# zmg2c;t#Pv;Hh&`+I%cM&xwy<)wc~E1u?1FlhPVL1tlc||n{g=M04eC+J;Si01DhLw zpcSaVV>eD|h>Fn8MyxJ`07i?B1`gZ?@Lm*_5XNmh1H=8^8^%H!7jP@+=2Bm85QGghP0N0X`;Kg~q!-R@#;(ilWr#;(stu%(DEgs_~^hy#Z9# zzX8+)nE~^Jn%KaLHn3Xsp8!A?Af?CuORu~EXro2}O&_0s6To02zA*s$7Z~(VzcZlv zF~Dg6q;3XAJE0i>C{loUG7~ufSk6M90V70vx)H!-z*>x|GXUnCJqDHql>n_B09neR zHv;Q3bOTbO4S$d}WNUM-$kp^71NA`FKgwl*R{Q{<$AADf6n%wO7#s!|aBLW)`Rlq9 z<{;$(EHx7kUBGqQR*Jd00Z?V=OF-I=$PFpQ3E=qy8Ra8`SY2@D|>qZ1%w5gLQ+`RD|6gv>!T!NcI%WVs@d$}t*( ze~@Eg;o@_F%!dUaiNU)fKlL+9!UGT| zp3kOF@x;@4ImX#Xo1WLSp28=_PqO3M0gQ0#3+;D+n*f1ulRmWbof`lp^gh%%B&U8S z0Dm=b+x$Uy8(6;)hbFvrg3AJ6*3*9Cy*a@JsC95z(csEmh%2|m4y@9Zb@+wUP74V+ zyvy-G#CDI9uFI{T36*$az!|(fwPQ=l#J9 zKrayN{$TFz%Uq?006+iz>rutpnzz48jSw{000SaNLh0L01m_e01m_fl`9S# z000C1NklPiq@T7{&*)2%Vg-5Ee=GStE&_jIl<$K7ZLzc~o8O3Tr(Q4(POK za$1b5ZWcq^FA+jWFujx>+C#oWAi>8FDUMH*(t|01Lf_eylajpeh#q?A9QFM6{Ua^& zJYwwMoYyP#^}1VsHFpE+jc)y}6WHW)Cot!mdsC6)~y}rbOk%lvEe;DS|8S3yn5EeK^0FSqH z+=2?Si;lq9kdN8`2r0W*2gXXU-M-exQcA1?V;$&ys1)cuRA=voyeae3M|H3NXbJT2 z5xoA>p*$3DCin>6H@{q|lZ*7w7#v`4X7cLkuV*x{+kcVC_*wN(Q@|+h#XTk8>if9P zyy<8(=SJ&m0w`$}CZH!o2gWA$*VaiEP(biD*CR0?X1LKtC+1p+8Uf@ll%5Hn=&|?3 z5~vV8f?S_Q+d`mwtldNwxGwmBJlkh zx(3UPFu}F(k0_w@gE0$p=GTr0fR!i4m>npf2*45xk@>!#4hUjnCbAe-LpD(^cd!HFrf5O{ybrMFHXW1rSrfZu;}EAw)<4Uef8=B||+RfT`@k7pcf0!g~)A1vv#w1qXt! zm1=bwIbg7NCRFk8$it;Uv#>h3-LMO>7;e&^l+5F%DvXhqwo5z>*l1Fk&Hw-a diff --git a/graphics/pokemon/noctowl/front.png b/graphics/pokemon/noctowl/front.png index 6665234c049e535e1cdf21c8254b7062e5b05416..c646747b44a09fe7f1a239131143bafbd8081bd6 100644 GIT binary patch delta 690 zcmV;j0!{tb1-=E47=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!iCdrD$K zG5_|ods<4~&00YzAk~y&5D*YzVq*XQ|HUyFoB#mD#l@6bIi!PX;F@LK0006!Nkl0;2HC8|}m^B8B`B!AQNTUGNz{rm(_p??CX zvlIaC6Y2~D4|;%_`fq?}2r$nd|Ibx<0`R6r0f#<+en-Gy6F(Rb|3(Hq)SnEvehlz3 zAgqgl(M326h%78oeKBVX0Cahk#td{q?r-k|2^r`etLr*IODPcp)1*$2qYsh73g|ll z`XZ+R)@TFlp?~zAOI6gNj~J*;UH?%b1GefHKqCeS*p&JzM`;Qe0HAG}*#5firX{f= zfTFw21sS}OH$ifMkC7-1YmxoC?AGcISe5^EG(*vF8om>*T)RF1yzh; zt!cTV2O+(G&5+ypj((JAy~vf55YsoMf6AF4M=6I0a(~&67V2{jS&){$0kI}N3?L5I z%XkvGd4^vG0t5muN5{Tyr#=i&`p~z5@kQtW`3o>?0f(^oF!SRMfGG%%6}bzro+B4g zu7Kf1uu#`mb zDE9+sqkn)&%@33Wh`CsU0A`U6hV}Pr5O5+mgKh#bgbrC$Hgmb=j=+ZnHWn1_1)PUT zskGk87@|>J@ZfMmqUa|3-kb+_=(a;mx!Nf?)kqZ|m+3?7X13M2EB;fcNc? z;iAT?4xTaHrw8a~rMQM}nHLZ14!}O+vRC%-`77)unrU09wRQ`@6$7RJeFHE(Q~tmD Y1JB|apKcbBZ2$lO07*qoM6N<$g0h%0CjbBd delta 715 zcmV;+0yO=;1=j_T7=Hu<00013M{Ml?001yhOjJdf(4eq*P+&kX@ZhL;SV-8okU%IP z$dGUl5D;KsVEFj>z%Uq?006+iz>rutpnzz48jSw{000SaNLh0L01m_e01m_fl`9S# z0006_NklljA6bJBAWks37S3s5>I_H{*DXNl}OMfPi2xnz!h!S&-7(7|I zP7w;mvO2)GV5urL1{S^pQV}B}AJ+9br4N z2o``of!?IO4S$@jlx&pkx{rfE>YBB0!rabK)Bo2Z1J4m)(T0o~dIImG5eS*kpsfLL z-p4i&QqtEwmhvg*9NR!hNADgAq5B@%C*LQu&bKu{`_|x14m>=9H8`K}A?OP62-cH# zYw_$N87hSX@-61;^Y;rgc+lbV=?8ZxO(2N8$P@fZo`2$fV$FhJNtKiv11L$+o$LPG zuz`>;d)jiIG814|+rAGYLxyXqAg@5`A5rf~tCy+Q~{yGB=K0%LI`76-_X4_Tt43a8PYyqPB(ziv1{kNEVW(XTJj4{<)?qH)p` xC)oI1mER`6K9ko4ASGu%NZAasHAT(;tKV+j^4uJA>WKgV002ovPDHLkV1jdfLW2MR diff --git a/graphics/pokemon/noctowl/normal.pal b/graphics/pokemon/noctowl/normal.pal index cf763b733f..0e4e0b0775 100644 --- a/graphics/pokemon/noctowl/normal.pal +++ b/graphics/pokemon/noctowl/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -176 120 80 -96 64 48 -240 224 168 -120 88 72 -216 184 144 -64 40 32 -200 144 112 +172 123 74 +98 65 49 +255 246 180 +123 90 74 +222 205 90 +65 41 32 +213 148 98 16 16 16 -96 96 96 -248 248 248 -192 48 24 -152 0 0 -192 192 192 -144 88 56 -160 128 104 +98 98 98 +255 255 255 +197 49 24 +156 0 0 +197 197 197 +148 90 57 +164 131 106 diff --git a/graphics/pokemon/quilava/anim_front.png b/graphics/pokemon/quilava/anim_front.png index 1c2709eb4fa1be8d3d810c929e6ce19bee38a4df..e65df16880e20c1a5699d66bad855c8b9e2be742 100644 GIT binary patch delta 974 zcmV;<12O!G2-pXZ7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!i!00945 z0RPnh|C|6AVuLY3YC)W=5D*Zk008*-__Ul-|L&yb&1#EcAP_J(9L-F=000A4NklT0Kzf_z|2l(lxI1bLezTzA(laU0LofpdA7j%T#V3K z2S9?Tbdq~L6QW*g!iJ$Uv-faBXb1o_`18{M5KVO@+kY7x5ZWZY=mC*{rm-+ShDGzO zG{6tpbzNOFx%xpb#JV!JX>sxSs}OEZKe8`-Oaehv^WC1QZ{#cJo~^x?92Ay1W( zr9hn1M}Nn(v;elXS~sN+JyZU1t;a?*)4p4M=jlq@8kjA&QuetsFk8i_yJesO+1Si& zeE_(rshty^$=`bGt+(F#y}G+b$g;azfST!^064+j0YC~^mm&8Q0GtfvP5qLhr3&f$ zK7f;x&z@LQ({}_;1bue=2EYa|Ca*gH&Ymgy-G3pd8vWYr_=Sa}=j?a~piG+`?-07^ zcmuGDj=Fh6Cmt>|`{=0i4rJ~H#Tp$;_RVit*}i<@V2zF;z-53)ugL<3?aP4BL`Sxe zH&na`x@d$oyRV22$jw@=MvN%&kCTcrSrB0*I>odPjv3!+WduFqciZnH5GGcwI45Hy~gAyK`$7 w-|5>l?cAgI&kKZyfSIMuC&IfxcZWT!xsF~+ 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 diff --git a/graphics/pokemon/quilava/front.png b/graphics/pokemon/quilava/front.png index 061f319982b80c36d2c45c9e24433d121e596235..65c45aedd235d390f444350dd9d0795fa0fdb45d 100644 GIT binary patch delta 527 zcmV+q0`UEb1=j?S7#0Wv0001;w}I>c0004VQb$4nuFf3kks&^R0o6%FK~z|U?UKQA z!ypVqEkK|NnE(IWA^|owIH7fW>3C1cn0>5PEX$)u|5R|-e;1%`0^m0QO5O1*Q2Gx6 zZ|8#yP{v#W-mfT4FaGNQ9~v$It<|VS_y~~kIe;FP0D_+Y=%hgjpeo?92X+_0D1ZV! z0Q(p%25e*|Fq2`XI@<`fH@>ws+oeSrFH6O>`Pgk}ezwIhIO zD1!!dX~3X!NC!B#BMVmfrS^}k0H^b!!#>g0~E&|Is=Ln930vEeB!!gPu z)H>N60uXL309JO{QSEZng7_1F5Vs-|0QIi1y++9Xs*JFI)-s?#Oxfhwp9$i(mat*i z$~zaKyV*Yn;G;wt5RFoGayd2c1^fvfAr`(`T{b!89)<| RiZK8H002ovPDHLkV1lIk=i>kX delta 578 zcmV-I0=@m$1c?QZ7zqRe00013M{MnpE2$Wzu3H1Po`Qf-;kopWdJxqO92?3!yl_IpB6f+VT;Q7n}kwKd82P**Z zPJFN%1+X(?v0D``A?AFNN(;nCJYs+GAtQu%wgUp*h_6>!gR_`Nt^_^==R$nEIyR>R zxDpOa8Q*h5yanJgF=HOQ;znW1H>pCT2?&VU8Gj8x#C-Q3V>S_Dc4>&?nGi{0BN}2v zCu#bl1d?f)#mgBQVss&z|1gajwy4aiS|(;zX$owSh#}Dr=P50`|dKEYq}W&S|GdI=9p0HOSL)eq1MNL}l@ zYMh>r*2N9HTj-mn@;nCzH7lW^1-;E99mxaz62&<9~7dMgTxeHa`*|Qb3Og zLzWOA2AG5-T?h~emyS|S5dfq#bd+;Wfj)>XSqhYIIWhq)eo2ss20oeBx& zM<4;zzRTq#Um*a(34mB1$n?^>eZ_*VYU|$sK+d)n8o>pSyP&of28;_@a)=Q?`;RS{ zf^L8r><5UtY4T0=l86(q+BSri%+7Uqrml!O2p&L}+CYb%HF+67^aJWFu2k7tbLvTI zlL=rWFn@aidKZl9P62YH`L==quDVD7&b{;w@a{!A%Oe{D|7m!oU`r@)C6LvKqy6Yv z2s6TGA5+K-fS? zh*&_#pn$l5Sorw(pm0by7!b(FzyJUM0002I*f2!^00TcsL_t(oh3%F>YZE~f$7kDt zUUKj?kv4d-)gB5ST(**ide}AF#6@~&r3H^dn|n!Nva}aZ?tiAI&`2`r2QXdmAQdVU zPaX=oJqt>|i*Gi`$$3-tAP9YsT>ig(Z)bMq{U2k09&pQ`;cp_pMCz7PK)@~-0NZ5~ z04@b^8w!js%+bK~JOY~=B*0cTz~x)(G~m_OU0#1l14=Xkth$3GOaQMISaqA$k?^2u zNWj=sGu|};Q-94Ul1Bz$Hi}{?>Cb8Pp2i(1J2W5zX#gBnl3~|0oJiSMHFOmi%hePh)t@#25`V415D?k~2=uXjFL^771dM(C zK9H?ObfNjHUai(+O}l9|&=f(jA2Hy)^Yp2B0FAc%jswYt%|E zhnhnJl^F%(X@L98b9|qE2SoA?-Q|7@$jej1Dlv-D@duM`;q^Xs4SL>LiO*>u{p>hS zi3D=#$A9S1abSf2a`^aibO=Cgq)P8B$M30bpMz%9b>R4v1d6!AHrzP}Vkf;2fiA$= zE(OS5gv|v6)kwXpEg)cD2T&iAhpKM?kOz_%5okl6zBOK`5}3}T2LJ`rdE~zD)6f6I zuxM)^#&y?%)HUs<)kFW64{4x?{*FhFP#tE4Lx0!TK=%fGdXWUm zag1j_^LPD(P(BiJr`s%F8TaTd0v*8n1Lf`~*#x1x=DdHRyg38(=J;i7|6QRy_qlX1%pmkS zyC_`>bobYSa_5Rz`_{a=IwRegi>1unX`s=#%o32DtkzglI_>}baSdf+30e5L3!D$g z1X+@_VsL*20L}=PamH+?% diff --git a/graphics/pokemon/sentret/front.png b/graphics/pokemon/sentret/front.png index 6505891305bda2599251b2511082a2c025447952..bdc69648941c47262c1557b30932bea69cb23499 100644 GIT binary patch delta 584 zcmV-O0=ND81l0tP7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!g~F(5ez z0AfKg5D*ZwAVJ106a5wEHM!# z7=~me00!a7Ny-TkP)ePXoO1$dFfK(3lFy7Rg3#GPInNUjED#nrnR^MK;1HQ9V0|bmB4v}ZO;j0#WdA(lc)A3Buy5QBLYzuq?c<~aNt|)8bF3>&xxYoqJ2&%ih8QME? zF#g>jfwuPyg#T@55O0RAfb#Dl>2g@F>q1(L_@9iuM1NQzfpHEBjRBAVd+qi(*$5Ia zEdgOQNboj$jIfZq+xi~?+1=Kl6`TTl3uD W6&P$@hKD`?00005+K-fS? zh*&_#pn$l5Sorw(pm0by7!b(FzyJUM0002I*f2!^00IR`L_t(YiJjEHZ_`i^2k=Y# zq%IjaY^jZyKw>~*v0jlIb+J{GU@^4_Bt|6YUQx-h%EI=XPJak)44&`^A5eo329M>OMT!GY1AvWDb>ssZ zBV*`=2W%Nr5r4^#vopI>O^K#5pqxBFLysmmh$~rlO<5mdNw@A-tcEy`Vl%fPBd%i? z80O7uqPd;nngGxpT0r*8*?`4(@e>rz1`Osrf7ZMzgntGApT8_<{N`K+pFVu!Dx?WK zOcgfW=XYYJ@hyUKo#FGblx4Mu)`%!Bhi=f-SH>X0k?bNKl9|K>`)#l?FuLGD^wZ3C$D0006$Nkl1JU?!Jy06TwrbK2=l)2VkW34fA~zG*U-ALflo%$Ezr1?sMjt$++TC@e?*KRlfU?m^8eKwNQ z7?H!l1PFmBa6qJ@oZ+|xKX9V#mkvC}4b@i?oO9?odhI2!d0qM3Ibe&W_#A**8~I)l zkXE9k0S~!GM}G(xz~SUm3e5yaiT&)0+v5>scBpoTA#we{Wwa9@1(Fk3BKtAdE`HCx z+yF;363Pta{G*mHcKO2KJxK$;{qB-q28fVvkX#=CNkBdrIh-H~?HO{P8wV8e4-XK# zcAgX3Gvq#D1AGaH8o(2fE6|z11U|`|zxrpCp0olgmw%`;Lv67(pw|cF5^HIs&ejZb zrxWb^aeGu)e7@a&EcP`#1kkOeT}bWHOmdzg+(*KgeC*<_E|6f0rNB_5UV6 zkfn?R{C_Dw7;E4&KNtcKQ-dE20*DSj=l}@C2Tgv^0T8ky_xM38q2PlPe!z3B{GhSB z!AE`|E2D1z9RQ&jXZ%3de_5Y<%PZgGQ+`m^{|-JV0OEun)b)P=K%Db~y8gE(AOPY6 zKN#A*^CJ}>WPnil!NB^jPaOE50))5xb^^TOgDn$)Ftq+dHT?|`uHb`HfN)I)5KJc1 aHT?h_Cm3ylTUh@90000sF5HLs(C}3cS;4rB0U{J7V zV3?qASRlZ#7)VG+`1ttv;7G{8z>qK~_*h7_NalzD000SaNLh0L01m_e01m_fl`9S# z0006_NklljA6vywFm?A&7YGSZb#j-5OfD|1{K!0KZE*_Zcg{_z9MkLfv z(5;rTL|w3yg_bV>BNao`fmq7Y6^X$WbMg&bo@157XUB|4)c^6`|K7Xz?kxWZsZ{BI z7X>JdgJrQY2iV?$VA}TltnYaPr?b^ybv@5xPhS_O0Jt~geeYl}bPEk|}gav z0%=@!bd2*?00K^NOf<-LVa~Lq0?ugfknFJM8p*yaid{EJAa^m%MVz*lphj2DC36}9+dHe5wH(yekiJt;fDgipc#HB0t|&8PLy%cIm_~c zsr=Sx$P|7sv%gMcoHakdiXXB+KG@`k$ryYUFz}k!{1En_F<1MnZ}0=+fl3DnVEo|+ zEy064U~KS1f(KMNf;rpZhXOpnm0Ijzbm1iYkVMA=1dL^@OKB~mRpvY%09i&j47iEX x4Fz~WlMs!g+YNaoYt3l;i%v~{iC4Pw`VGg%&$VZ&?2!Nf002ovPDHLkV1nQ*NG1RP diff --git a/graphics/pokemon/spinarak/front.png b/graphics/pokemon/spinarak/front.png index 36c6e8f60d4b4a33635a1a1b1ef8f90ccdb5654b..7af7440985f29889d6015110b5256cb7cada0c6f 100644 GIT binary patch delta 494 zcmVc0004VQb$4nuFf3k0000mP)t-s0I=u~5D+j( z5D*X$h~O}&@L*7|XkeJ2gK80k?bNKl9|K>`)#l?FuLGD^wZ3C$D0004cNklXL7=-&KJKw94+*x1;wkh2Pc$Nn~eXp<08A4c(pQF*>e zpcq9W07;rE!y`htu~GQ7LEyBr`5M7{&jILdM1XnQuy+9V)WTN)TQ&)!5R^BOY=A@0 z=z<^s;1Y6(>DK zlyVl^y)XKkuNS1j3E6Y1|14y?2kAL44K{E|ZMEuYk6s&&Ma@QM`30~$y#uICbe6C4 ke(&S`n=h29si}XdAGb^lLxd8GQ2+n{07*qoM6N<$g3P+(EdT%j delta 523 zcmV+m0`&d-1DFJm7=Hu<00013M{Ml?001yhOjJbxu;>sF5HLs(C}3cS;4rB0U{J7V zV3?qASRlZ#7)VG+`1ttv;7G{8z>qK~_*h7_NalzD000SaNLh0L01m_e01m_fl`9S# z0004wNkl|N?c?6G^|in*K!x8~Ovt?0zoG3B_=8|DcH*2f z8xlf56Izp|He?c><7!8zyHf$Z4o>w3S_oQvw0?nG0e|B%!P*EYH7rI|ot*&)=&Chg z*PkLiB1;FgqeKnG=rKY5mxWd8%%`d=<dEq2mO{h@l2eh4L%6-lkrvLx| N07*qoLmvXF diff --git a/graphics/pokemon/spinarak/normal.pal b/graphics/pokemon/spinarak/normal.pal index 22db1c2ce9..ccdc73a40d 100644 --- a/graphics/pokemon/spinarak/normal.pal +++ b/graphics/pokemon/spinarak/normal.pal @@ -4,16 +4,16 @@ JASC-PAL 0 176 232 16 16 16 48 72 16 -40 96 96 +16 16 16 136 224 48 168 240 96 80 176 104 96 152 160 -112 88 32 -192 176 24 -72 72 72 +131 106 41 +197 180 24 +106 106 115 248 248 248 -248 224 72 -200 192 192 -144 48 40 -248 88 72 +255 230 74 +189 197 197 +123 49 65 +238 90 90 diff --git a/graphics/pokemon/spinarak/shiny.pal b/graphics/pokemon/spinarak/shiny.pal index 970ece98de..9c966c9e6e 100644 --- a/graphics/pokemon/spinarak/shiny.pal +++ b/graphics/pokemon/spinarak/shiny.pal @@ -4,7 +4,7 @@ JASC-PAL 168 224 24 16 16 16 40 56 104 -32 56 96 +16 16 16 136 176 232 176 216 248 104 128 184 diff --git a/graphics/pokemon/togepi/anim_front.png b/graphics/pokemon/togepi/anim_front.png index 07d7f05b89cf35d9cf06b55e00767d79941f5244..9fc22b9f843f554675efb964b4e4e90c6393301b 100644 GIT binary patch delta 671 zcmV;Q0$}~11*-*+7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!h%#W7;6C}2`0Fb?~jT9Z>T@?N) z%7%eIa**ETOMm1K4b8ySt*zPfysoR-NsItsaexu7QtG85kzM5Ogi+c6-~^!KGX1-M z5)AMm0ML6F(CesejN0+{83jy2AEWhK!MlWQydH0BaR3O9f3y+z+l74meJuD76?O*v zp;P?$@i`>MfJEbd+(*s!#&(8fjqsV9IqT|I%O9w%t$(ept*x!Ct^XqaVTFL;t5zZK z($731>mD*8_J?!xL5#dF?9p8)9=tvJtKQ|o8o=6v>G$}*)?SDQe~Dk)vA-aF-|phyjB20HK5Q zt`DKKQ7!yN`-6H~hfzkyn|D@7t0UE8yiItPb!sQ8_tdI!J* z@H(`N1mG;3PJdVm4bR}3ylNxKD1{)?J+6{EhKM`N68nh#PxwB1a2ep$1NJ}TB@SID z-J%*@5Bg7+_rtF(W*5up0LM5R#tROZ-`%c1E@vD-9`Sk3pUw}23?tj5m^$<{Y~|47R68y3(SU2~)9H-A__B!5u`SvThol`B`ST>qw| z&;|dH(o1O{JKGu0puS^!tqKclx1C)Z4%yL8;h?Q-;Ag)msv4ySiU%eGQ2wZSK=DB5 zfV#4}XFVs=qj}Z?FW^q1ND;^HL5T}FWI;{p9yU2ZDIIjw(PaXLJh3P}AVweFrmmnt zP)gFnc0004VQb$4nuFf3k0000mP)t-sn9!h%#W7;6C{0hk)&kgO;!X#Di9=AH4AUW1u}VbFip{&fLEbgpuWTeit-pEc)IX~0s_f- zCWgXGgajDB%o#wCG`;}_W!VkqRewQ{G{Zpj;iFr?7Y_mXgE3OH!Ydp2E0kOVK5~#= z`CDi%7V5xdqJOpe`fjZiKZy|mkSTCO%egdDjZBgIG>lva1aAmBF4O<{%ix0B0736z zK`*1!F-ph#J1V#geT>>a3Em})u{~_9aRCeuKkA6{ejy*ej|KiP<>>$)I>ir<-ywAe zq88_IA1(O@`x(|X!`+)X+3H`*57o}j&d%@o0*n|8_YiIOdRqVh002ovPDHLkV1f-9 Bw0i&m delta 407 zcmV;I0cifE1Em9y7=Hu<00013M{Ml?001yhOjJdf(4dfTSO5S3@aVwEuyAllNbu00 zs30Kt`1p8;kkHuJNPxiDaA?3lK(MgDFkq;1gAIoO00A&bL_t(YiS3gyOT$1IhA+YH zm1^i1j_M#-NUvnKNyJfWgsut6_X~v1**=J+Ykz_u(Nz%Q>VHotrRh*`lEzgiv|a|c ze3>2ctnb6U?{OSsH8uYjMOT`tUM2L7E^hrQLGT+hJZx47hGjy>8B#Th5CR}{ff8DM zLka;D<+TH+pn7T_u}v_haN>`~N?G*6>O z&hAj6wIkr=9e=YT#|ZJ5IN}U3e#M7u;S$360^>KFVB*^472WJ{8vjf_lFuP=i_LtB z@3>6zH6^TGp7zh1B_+s?e4pl$@(FTfR-|7kDX6PL*zTwX#<iBx&GH^(N6|cy{s-N>`)zlFD0(UrW(GV*n(QE(!002ovPDHLkV1iR{ BzuW)- diff --git a/graphics/pokemon/togepi/normal.pal b/graphics/pokemon/togepi/normal.pal index 0fb20049a4..3d6967dcac 100644 --- a/graphics/pokemon/togepi/normal.pal +++ b/graphics/pokemon/togepi/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 112 88 +148 115 90 0 0 0 -240 232 192 -200 176 112 -112 72 72 -240 208 160 -168 32 32 -248 248 248 -120 136 144 -208 216 216 -72 128 192 -216 112 104 -192 64 64 -176 176 192 -48 96 168 +246 238 197 +205 156 115 +115 74 74 +246 213 164 +172 32 32 +255 255 255 +123 139 148 +213 222 222 +74 131 197 +222 115 106 +197 65 65 +180 180 197 +49 98 172 diff --git a/graphics/pokemon/togetic/anim_front.png b/graphics/pokemon/togetic/anim_front.png index 1079c2b014888720125726ee8bd7fef75f37be3f..c88c0e4d61ee613687dee1eb16870f3c32ad1ff2 100644 GIT binary patch delta 708 zcmV;#0z3VK2G9kN7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!hedxQV~ z{{R30ti`?6?(W_}IlUMNDU{|AV!hr$IlUMN000000000000000W3d{Q0006`NklgaHuL_?XI+k8Ne|Fe}ARy*zsc!Ey^oyz+9-- z%JAToO%EHW*!5~-|MIDzDm4t6s`C?x(JhE8vXa}NVtSE9gOE*|^rIkJn?UKABUC>O z;SqLMbdok8Vroz3)+&$@P;yn{NSJT zf^F!=L!PVPPx|AGEe$wygL?Y-c>~RR7^p)`A$hFWgCkqQX^Uw3NpB-6d|mS~%5mfm zHr>nSU|%`p1P(@)w^pw=UH&1Efgfwvr9YYq?3&<5l79z$PYDZPCygK#^E{XHa;*nF z(jkZ+5qQ9k9=!9%;KA(uL3r>mfVKq9 zV?mHzt%)B8Qzgnfc+FI&4+B2r4LW@o@F5EiXwnCcDo(e)6aeKs#oz-54+ecO_<;2O zoj%kHh6hF;3_sxTfG2){yMG?=0PgLcJ^d0J%hR$t)?@*%|H?kQY;8rrOr9glM4D-&1EiT~3Z5~2sV1YPue%GRW{9HsW zK5HZMNTu?_Y2luzuB{d@Ju7?7cR%?}%qCfgoCm|Ue=xzzz##AUzKegS5W|ojZ@D-PCHuwEFSu6T;pqDwEtAhI~A}sz96S? zjq>Kk`s5;DpyZfRF1RLj+S5<8*4;pT`VB7ul4H#cj9bu?_}DnjJ|ZB$9R?@@m2$aA z{V;w$6n}H)c~9Jb-qPvZXS3Y@<;yKBx|GiJ((u0vkW!h=_R@an2~iIo_b%#(bekhP z$RtIiY=g0E+CHbkYkf2i{%u0?mXE zj$Wc(U|>VfzeF$4P#7_o=i3eW5lxLu-OG8{cW^)9SlPEpFP`v0@hjbpM+_w0pZz7lKqh?0**`UL@rmU4}m_z!00Wbd01KtCW7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-sn9!hedxQV~ z{{R30ti`?6?(W_}IlUMNDU{|AV!hr$IlUMN000000000000000W3d{Q00048NklPxlo!B9$n_hX?Vzo#t=J#NV77^>8tq(d z=xG4NsRw4f^-Ce@T7ZDMA4qv0CZK|4V2vecb|TB?&GCC`vL1vRr3K*}A=UO`6?89;h> ziRji-s)iMP^ndjQnEqM4W1&FH>Cr_V89U4f|FfY-@r)j*LFhaG(mOZMVVAtu!C(6Q zsF5ZJ6QD=>?*mZx0)S8?Nk3cAZ;ZU)8Ca`T_cObkO08jMDL>>ijW%Al@f?FdOmXUe@(DuL4mw)6xHs-&Us=TKMRqid; znr>^*0SJh7Vah@Tb_`4seh>B21#sSi6)=+asxQ+LrQ5QHprRtQ!nZHxe$B#)|T^#jq=`}fhK?) z+9R$nHHSuOk%5N*GT<4&%N9Y(jGthAz0~uQ_)^95M_%)A7E?F8;v+WacS$$yZT@Nx zBm*3}PkOn^xi)SfqA2S(A}S4dlh_aPW3lc}o4p1=dpopAn*ku&bW|Kd(|J??7o*X? s%D&4k3c$4m^$vXP>JH%K(EsWB1{oqdE)waMqyPW_07*qoM6N<$g2NoedjJ3c diff --git a/graphics/pokemon/togetic/normal.pal b/graphics/pokemon/togetic/normal.pal index 0b17314592..951bc0f040 100644 --- a/graphics/pokemon/togetic/normal.pal +++ b/graphics/pokemon/togetic/normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -112 120 128 -248 248 248 +115 123 131 +255 255 255 0 0 0 -168 192 184 -208 232 232 -216 64 56 -184 24 8 -40 144 224 -16 96 184 -192 48 32 -136 16 16 +172 197 189 +213 238 238 +222 65 57 +189 24 8 +41 148 230 +16 98 189 +222 65 57 +189 24 8 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/totodile/anim_front.png b/graphics/pokemon/totodile/anim_front.png index 49e4fee75ad7f0ce5fcc5477e38bd98c3ab94b51..25e0a234e6d0854573fa83f9cf7ecfcbed86101d 100644 GIT binary patch delta 784 zcmV+r1MmEn2Ac+u7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-s(3rR}gT*mg zgKD(ql-2(b5D@?W|1nyFw6wH)7yz_NQq4gi=6idrgDL;TQn+YnIVFyW0007+Nkl5dmM*FUx}Dc8NftS0}DS0Sl=fp*6VVf_|?2tgW^CO1!C60jj_6LRbMGVtD}3 z4PDP|KLj8yl=PB5)DYH{58lfFSQbCL0gxOJ797CPOYWKPd^Af37XW_tpG*_NkMt?9 zE0CiOk?mcNA%BTrQ>icP=J5!DbDh;h(-gq>ZQu8eM?!GHB~z28wKtLPP4w22_KWGF z26bRRj$^l+^hj&U1Jlb@z@}FZu%A$DY^^443fQ!#&eK~v?SK-v-H&542hIT~v^8kj z_pLQ|;ItTAzhy91e0Fq}0X0N654K0j4@4v{MK*o!T7Tg}*d956nbl$MLvDme1%RSf z2YM6|f+8fYq+SvU3h2?1L9j@Y04LBzfSrW>|IiOY(gD<@x#AZ0^!91py0r}1;Cb^o!>41va|D>1psk= zcIKh7XG?r~k)54=0YLOe7}VE^^<3Hv%II5Sbjp2Qa|Fz3m0a8r; zIsO*`(l{Uh>|^|wYQjno3b3hHWAI|u>ds%S0}#`{-tPM1^wrAb1RR8z!-bHH0UZ#8 z@rUzQtHj_F``8}@r_#^f)6v<(kISau&{U-0GLo%$Uq?IczBS2Ao$>jxM*n3%@h*=000SaNLh0L01m_e01m_fl`9S# z0007vNkl!U-;?b=Ea8R>R%Wq%65^!G<=C3ai{2`dE+ zN)es`QP2b_&|4x(OM(0ZAU6oPJWD(P_YBNlKsNI1wFq=$SKi;vH#f8Le4f|De;RzJ zwOe-%eGXCLKEKm{1ORazpdb?34YW1rd#B*m5E}L-XXnRPS1thb%jx9B{_GQZ3_if# z;AV0W&)(1#N`Ij*PKHjP{TRRkXXlz$=wJ)L9G#p39Fu^G1XQ75M7~9iO~~-P3$Q<< z2nIUwy2co6_UxnF1n!za;vK!azC^%uI-Bie9!tF8^)!zFKbq|K4tq8KlIugP_J9Jm z9tJn_X|9*TG4ri{{CxgF=@N(jgaW+w;PvNc@W2A}$bW?yzI}?ocdM|y$@mb*M(Jf) z$~5ub6G@~}0OPVOfCt+%QiT~)*z<^wXuuyYmOrpjnsbwpWu}YeH=HMgoO3FLi0_Y~ z2Eg~=9Pc(*jesg4;`pcqV&0+@e0(nCft`h+dnqjuZ~;_)j5L)zU?!#C03#QbGz(jX z2AHZ!V}C*jM+$cPd#+T?-w1|p91=}5(ZpYhf5{(^%iCM?2Q;wq2lRGd^9M9=u<{4A z!n!}WBzE^7{(#!u>;51ncQ^Wj9J(f}a!|V){Xq`DMW}f&7XLbq0O;La*$vk0gkol zi*8(4d*A|C6vRDi545B;Sj2g@KmnEK=lW%YgG1`UmSS%#6}dXgk6R z;)cApd5~8A!E$t!2{ZULHc9R7#yq5hS!Kc`wE%|0!ZgvuPn#putVM$&YybcN07*qo JLc0004VQb$4nuFf3k0000mP)t-s(3rR}gT*mg zgKD(ql-2(b5D@?W|1nyFw6wH)7yz_NQq4gi=6idrgDL;TQn+YnIVFyW0004)Nklsx90aQ*2yg;z0_-I0`_n%O!2qaDbH_J8f#HQ3ck|B8U0`0AM*KlAtUqUE?!XXi z^RQC<0FX`2tXOm4N`AG_N5iBG`dWL;{<au&{U-0GLo%$Uq?IczBS2Ao$>jxM*n3%@h*=000SaNLh0L01m_e01m_fl`9S# z0004^Nkler5uJ~um`R@78{ZEMF{OgZOmdZ=h>S#y=QE`2? zu?ZlY251Dz6ay6lvv7c74`opA9-r;q-4y{a7rpN3O8U%};R5yMpnD#s*ZhROGUxlP zLZGq*Gmza?%*!fH&JQ+S} zlhM+*Il!qjuU?L@ngjgGm2KS~67ZQj%ug~d!q93n%6~FHj+_UkiLW)#$+8bfZ$4#R zgtZ@eJ&=pItiw~gGx<3 diff --git a/graphics/pokemon/totodile/normal.pal b/graphics/pokemon/totodile/normal.pal index bf7ef18aff..ce70fb2528 100644 --- a/graphics/pokemon/totodile/normal.pal +++ b/graphics/pokemon/totodile/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 208 152 184 -32 136 184 -40 88 128 -80 192 216 -152 224 248 +49 131 197 +49 90 131 +106 180 230 +148 213 255 16 16 16 -248 248 248 -64 64 72 -176 176 176 -120 24 0 -152 80 88 -200 64 32 -232 120 120 -144 128 32 -248 224 136 +255 255 255 +49 90 131 +180 180 180 +123 24 0 +180 74 82 +205 65 32 +230 123 123 +172 131 41 +255 197 82 184 104 104 diff --git a/graphics/pokemon/totodile/shiny.pal b/graphics/pokemon/totodile/shiny.pal index 6c3f512048..3bc0bc64c6 100644 --- a/graphics/pokemon/totodile/shiny.pal +++ b/graphics/pokemon/totodile/shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 168 248 216 16 16 16 248 248 248 -56 56 56 +24 104 72 176 176 176 24 72 128 136 64 64 diff --git a/graphics/pokemon/typhlosion/anim_front.png b/graphics/pokemon/typhlosion/anim_front.png index a4f46ae24aad76de64828e89b401310bdc5d6cc0..bc4b7c45cccb7b1e341e1e6429808cb640a11c3f 100644 GIT binary patch delta 1358 zcmV-U1+n^o3)Kpc7=H)@0001tU!Pb20004VQb$4nuFf3k0000mP)t-sn9!i!0094D z0RP?q|C|6pT9gPNT0w)Pq>D=b?v!d$DG(44|NsBh#d81v03bnXTV6U&000EjNkl{I|9|@c_avaH8EdwBlY6|NF~aAg4S#d{fw}!i)teq;jD4qH zOoPF{m*tf{0n)6-tnc+CFqQx;pVylVuo$&nO_VQ&#}t6)vZ(xVIx@cxFVYoHlmy*-?-qv*>{ zl2b_bz1z*{{f%JyApnZ;D`I?zJ2@5IS^vVdb^CvYm7EdWs;E&P5{Tj5EbElkCb zqQ@}EN+HZ!Ktu@b!SLDw2hv93tA(jFlHPX!M!bmuu4f|=Uc})19pGQYaMN~#2@6kv z=zk6%7;w`B0pNWm4D=xB3nAzpL_kdgB4ma;C4WG%5Q3HmC4#vibU;a@Owa(QPy1O- zLLtx*-@lYZ_zgESxFn9FJsHmON~yak6mj}Ur09EcB!v1ZM7{jqOaP6brw0juAG_(p{c!^P?#?}$D&Th& z_kX9h3u4*+vSrXt$x^k@8v^X77MisUF^q|4PTH)`s;LG50qkNMKvqpQ5Gd>fuq$7) zW05eZ+Ij#M+k8pqaxuBkYQ`(T5&&mkmlVbeIqO#}vPc}8Ah}wZl4k=9px((^tDQmF z)c{z?zZycr7&=IRGMKUE>Tx23q&w2@jDMNg1Wl=WEWKV8-}^WFaV$q8*UPqt{>?^+ zj-lkxJ@#)B;%?%Ka8Byq)c#Aq3wj2A2*v&lBjO?|{;?#J`!}hLq^=-@LH{Q0MUenr z>E9q>9lcGU_HTfPUi&Nkn|wcs3<>ejzhOpyVFeJoCy)J`har8>w&(uMJfZe)XnzDr zEfe+_A$`>`hHDq6ACF&k?%y0C7=z;QaL;V+dCwN8e?#{sB+wKW0tCL7Y8K)k3&1yz zZZX^m>1wOxkpTy8gxCXW0kvEVp0<@naQSNIo(UeWM|uqTa&;?u^W7HCL9vs^)k3K_ zC-rv=FAMj}N)`(*E{E<)aBnLAYk%*cuEcBxZoLEl$^un9Qt3b4!?_?G_pzL-d{n$Y*{vSga80dm{v@iqkFH%7D z`$f&|gI!DkxL!@ogDcdZ1ds@U`!DCU^2e9C>d}H+ncn&a>Bn5|`qDno4o7CVspHSv z?!hm}ovdi#afXH=0%G4lKDpcW!PC(C20cRD1zO)AKc%z}27QA<_}}e=KmF8s1H`>C QbpQYW07*qoM6N<$f~Tv9c>n+a delta 1401 zcmV-<1%~?73V;ic7=Hu<0000^sfSHnukCs~c1%5d-+$$9 zne!Wj)ctO^dw>3Ok*`rI0w+iH4&=LM2ge9(5^B3rk&}Z?_x!Zm^?f8-lu|igKRfB3 zcMc#A1eS1=Ro2ga|JSnfJ;3{%-`>6#%#m zGEw(g|EGHnFaWYm5Q+LBR%dw$SRw3!E1uN`B%)ac^r?&CNN2gx?~gyu`Y{53@Vu+6 zBD%F`5RWHFP<&nf7%)D6Sd!*~Hvs|9e^m3tN~YG$B$KgkfA1e@MAW?L<-pax?N2oT z^1X{}v42B<|G5SaAi_i0k8-I z(5MP{m#w||P0e*&C-W}`e_(HJIUK-u4YxH|4*=Y@LmeF5jxNP^JeVUb z2R({w$P?T3?DlpGnwax7ciY=;fk(l4V}Dv|4a~=OYY$9{>uOUi1NOYVUC-OiMwY$| z4se6ghGw3lEwhIH=LP&=ywtY|M>1x=8ca}WfllvU@O(>ASXv6c8;?83PeGk;Aw8V^PT39x#XRRTp_|dmrH>6Fax>D z5Zr@daFfzK@O79Zj0^XG!{$iOHv`ce7)?+KgeDQvRO}l>1acll{AO5UMXbr6>!%7Z zKDpyGj-M*PvdJy#P$xS#F=7j?0(S>Oi;)Vb?m!3L$t`jq>=moIUpz{Cb#lX>E_%Ij zfrgJ#1?zWi9>6+V^W+{YByUBHm3M%cCkfipm3$g={(2TMw-2koBmlfa^#-(okO1%w z(jNj6OX2^rcgP75P`m>M=(rXZ5o;e%^I^GEpUDwNS%v=q3k?MsD);c000000NkvXX Hu0mjfo?VG_ diff --git a/graphics/pokemon/typhlosion/back.png b/graphics/pokemon/typhlosion/back.png index 3252c26e906c07fc71b9d726ec69b149ed3b09b9..81bcbd42b6d14f5aaf013c92cc2613fba8c4ae0e 100644 GIT binary patch delta 746 zcmVc0004VQb$4nuFf3kks&{SuSrBfR9J=G*4wtD zAPffJ1_H8-EZ+ZZCkbbz>Y857VOEFcgrX)00Z7}q8XG0mzDqyKo(@2J_)g9f&qQC ztpses0GPZ8Ns*L)Ea#2BdyFfO71r~^>|@>!LrJkLnnsT^Ge z(_1K$)PdjtK+s3v(@3-j?EuQwlQ(Ry4yaffD1QUx+I0yk=MRiPX&&{T?XsNmbmS2X z?{xr8j#@l_pIPmn?@sioKof9m0ZkvOttUkDLGqt$d`1B$VSZui1uF9=(~_egdHmKv zU4@>%8Gu~cOnzJcHvp#!7f0ynGd;4Cr#o_f^>ibR7FC&ZS3xPrlv&z0K=j8d_Yo0A150J075A zi=gYkng@-?7-(^Dl8>MAxon>va9(!evVU5IwP32#@+(2#^A}?ABkJbx<#rBF#&Y$w zTnLZEZ43Dpc(;W6yqkbU`dtIPg;oA`1ZQ9&yjcP7f$s}=ZeS1LvIAc>P*$+t0QU{l z5zq}uaGP&4jC9^cFM&El*~oEaJgi`7A+C*w28LfoF*f7xfR0QfeF9uqRwtf-bw1o) cS^rY~0a;y2C;7b&_y7O^07*qoM6N<$f<0kRJOBUy delta 787 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 diff --git a/graphics/pokemon/xatu/front.png b/graphics/pokemon/xatu/front.png index 93c7947632917c03109708c89b8efe36b6a13592..e90c44fadf83ad6e80182169700b909ca0bab413 100644 GIT binary patch delta 576 zcmV-G0>Ay@1kD7H7=H)@0001;w}I>c0004VQb$4nuFf3k0000mP)t-s0I=vvltGl$ zK`Ck}w2L5fy+QxIF^gIN5D*am|NoSflu}YsgDC*CF#yfY&F(n>0ir$x0005YNkl6YOcXzLcVmAb{OqMxV1D z5WM#h+sT;dORj{p@BIV;pa~8aIWIYL1TBCGyaKQsfNp~LL6Eha1Vs%8pe{uSx(E*d z6I6i1Ujan`TtYwL82|(_nh4<$fFH#Z&_#F&u!E z|8V*X@!y4`3H0|F6MdB1hf*+jGC*ob9d^D=!andN79KoFcf0|BO3MRKo1g%kgQxUB z0f-cT0yHH6a1B|w1Bw$~4wD;zH1?BmJK9E+ay8P>(Vn0zx26F=Oz3>B#{u!{2sDiy z4JZ1mXmc7=Hu<00013M{Ml?001yhOjJbxu;@sTK#hp0P*6~SC;+f90LaM5=r{mYM@p#x00HeuL_t(YiQUt&OT$1E2JjOL z2HU~23K?9Cbhn7mRXNn9gOx7M5*?*~!D$CiYU_M0b~Xq_2Y;cpqK*#ME)E?`T?5hs zaS@EfOIqpBdvz5bA1Y zKq+l;n@HfPZj5uzuQ=~KC20f%7U#kyRP$6fen9650Do2h%A#XabqNWITmsS3hXEmk z;{(NwK8PY^i9W#UmI06z#GVfZOZZ<|>@Fb6&j`!?MSp=q$UHj!paY=9t)i%iibIxk zbU%UMaU*UV;OEm^@39A_)&S6ykJtPlL=CF9KVV6HqFT?%N4~H=*w7!A>j9?D zdw(VaV@`h>GR)tBapa-FkOqV6=9k^31^f9yo!85r*J70AU%a|14|DDW{WRurmC*Y2 jS)qIm7VY6*z+anhmK7jnEFVYx00000NkvXXu0mjfxeW=o diff --git a/graphics/pokemon/xatu/normal.pal b/graphics/pokemon/xatu/normal.pal index eb20bf6aea..05aeca9fc5 100644 --- a/graphics/pokemon/xatu/normal.pal +++ b/graphics/pokemon/xatu/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 0 176 232 -72 144 64 -144 208 64 -40 104 40 -176 136 32 -112 184 64 -248 184 48 -136 88 0 +74 148 65 +148 213 65 +41 106 41 +180 139 32 +115 189 65 +255 189 49 +139 90 0 16 16 16 -248 248 248 -144 144 144 -80 80 80 -128 40 0 -176 48 0 -200 200 200 -232 56 0 +255 255 255 +148 148 148 +82 82 82 +131 41 0 +180 49 0 +205 205 205 +238 57 0 From 8ccffa617aa0b335aca2a18225fa95bd5243033e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Feb 2023 19:47:44 +0100 Subject: [PATCH 147/290] fix createspriteontargets on electricy anim --- data/battle_anim_scripts.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 75a831a331..46c7d3fbca 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -24206,21 +24206,21 @@ WaterBubblesEffectLong: ElectricityEffect: playsewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET ElectricityEffectNoSound: - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 5, 0, 5, 0, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -5, 10, 5, 1, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 15, 20, 5, 2, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -15, -10, 5, 0, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 25, 0, 5, 1, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -8, 8, 5, 2, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, 2, -8, 5, 0, ANIM_TARGET delay 2 - createspriteontargets gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET + createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_TARGET return ElectricityEffect_OnTargets: From 41bf9ea63ce4ea5b348ab573fefbcd24d38517e2 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 26 Feb 2023 18:43:15 -0300 Subject: [PATCH 148/290] Removed trailing whitespaces --- asm/macros/battle_anim_script.inc | 6 +- asm/macros/battle_script.inc | 8 +- data/battle_anim_scripts.s | 152 +++++++++--------- data/battle_scripts_1.s | 18 +-- src/battle_anim.c | 42 ++--- src/battle_anim_ice.c | 2 +- .../pokemon_graphics/back_pic_coordinates.h | 2 +- .../pokemon_graphics/front_pic_coordinates.h | 132 +++++++-------- .../pokemon_graphics/shiny_palette_table.h | 2 +- src/debug.c | 2 +- src/easy_chat.c | 4 +- src/event_object_movement.c | 2 +- src/expansion_intro.c | 4 +- src/field_specials.c | 4 +- src/frontier_util.c | 2 +- src/mini_printf.c | 16 +- src/rom_header_gf.c | 4 +- src/trade.c | 4 +- test/ability_insomnia.c | 6 +- test/ability_water_absorb.c | 4 +- 20 files changed, 208 insertions(+), 208 deletions(-) diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc index 6ff3876906..85320bd3b8 100644 --- a/asm/macros/battle_anim_script.inc +++ b/asm/macros/battle_anim_script.inc @@ -270,7 +270,7 @@ .macro stopsound .byte 0x2f .endm - + @ same as createvisualtask except takes in battlerargindex, which is the battle anim arg index of the battler to loop through .macro createvisualtaskontargets addr:req, priority:req, battlerargindex:req, argv:vararg .byte 0x30 @@ -282,7 +282,7 @@ .2byte \argv .Lcreatetask_\@_2: .endm - + @ same as createsprite except takes in battlerargindex, which is the battle anim arg index of the battler to loop through .macro createspriteontargets template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg .byte 0x31 @@ -298,7 +298,7 @@ .2byte \argv .Lsprite_\@_2: .endm - + @ does not overwrite gBattleAnimArgs[battlerargindex], some sprite templates are too dependent on the value (e.g. heal block) .macro createspriteontargets_onpos template:req, anim_battler:req, subpriority_offset:req, battlerargindex:req, argv:vararg .byte 0x32 diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 66c60a7cf0..c96b5fdd2d 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1299,7 +1299,7 @@ .byte 0xfe .4byte \failInstr .endm - + .macro callnative func:req .byte 0xff .4byte \func @@ -1317,7 +1317,7 @@ .2byte \holdEffect .4byte \jumpInstr .endm - + .macro jumpifmorethanhalfHP battler:req, jumpInstr:req callnative BS_JumpIfMoreThanHalfHP .byte \battler @@ -1328,7 +1328,7 @@ .macro cancelmultiturnmoves battler:req various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm - + @ Stores Healing Wish effect. .macro storehealingwish battler:req various \battler, VARIOUS_STORE_HEALING_WISH @@ -1954,7 +1954,7 @@ .macro shellsidearmcheck various BS_ATTACKER, VARIOUS_SHELL_SIDE_ARM_CHECK .endm - + .macro jumpifrodaffected battler:req, jumpInstr:req various \battler, VARIOUS_JUMP_IF_ROD .4byte \jumpInstr diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 46c7d3fbca..cd011c0f46 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -12036,168 +12036,168 @@ ShellTrapUnleash: monbg ANIM_TARGET waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 delay 0x6 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapYellowImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x4 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x8 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0xc + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x10 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x14 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x2 - createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x18 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 - createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 + createsprite gShellTrapRedImpactTemplate, ANIM_ATTACKER, 2, 0x0, 0x0, 0x0, 0x2 delay 0x5 waitforvisualfinish call ShellTrapFireLaunch1 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 call ShellTrapFireLaunch2 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 delay 0x3 waitforvisualfinish clearmonbg ANIM_TARGET end ShellTrapFireLaunch1: - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 delay 0x3 return ShellTrapFireLaunch2: - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x0, 0x0, 0x0, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xfff6, 0x0, 0xfff6, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xa, 0x0, 0xa, 0x38, 0xfffc, 0x3, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0xfffc, 0x5, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xf, 0x0, 0xf, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0xffec, 0x0, 0xffec, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 - createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 - createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 + createsprite gShellTrapFireHitsTemplate, ANIM_ATTACKER, 40, 0x0, 0x14, 0x0, 0x14, 0x38, 0x4, 0x4, 0x1 + createvisualtaskontargets AnimTask_ShakeMon, 0x2, 0, ANIM_TARGET, 0x0003, 0x0000, 0x0006, 0x0001 playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER delay 0x3 return @@ -14367,7 +14367,7 @@ Move_SCORCHING_SANDS:: Move_JUNGLE_HEALING:: goto Move_AROMATHERAPY - + Move_SILK_TRAP:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_SPIDER_WEB @@ -14376,11 +14376,11 @@ Move_SILK_TRAP:: createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, FALSE waitforvisualfinish createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 10, 10, RGB_LIME_GREEN - monbg ANIM_ATK_PARTNER - waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 + monbg ANIM_ATK_PARTNER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER, 0x10 createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 waitforvisualfinish - clearmonbg ANIM_ATK_PARTNER + clearmonbg ANIM_ATK_PARTNER end Move_WICKED_BLOW:: diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 0d8f80f774..35d8db8ddf 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,7 +418,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP - + BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp attackcanceler @@ -461,7 +461,7 @@ BattleScript_EffectTeatime:: attackstring ppreduce jumpifteanoberry BattleScript_ButItFailed -@ at least one battler is affected +@ at least one battler is affected attackanimation waitanimation BattleScript_TeatimeLoop: @@ -561,7 +561,7 @@ BattleScript_AffectionBasedStatusHeal_Continue: BattleScript_ShellTrapSetUp:: printstring STRINGID_EMPTYSTRING3 waitmessage 0x1 - playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL + playanimation BS_ATTACKER, B_ANIM_SHELL_TRAP_SETUP, NULL printstring STRINGID_PREPARESHELLTRAP waitmessage B_WAIT_TIME_LONG end2 @@ -1428,7 +1428,7 @@ BattleScript_DoubleShockRemoveType:: printstring STRINGID_ATTACKERLOSTELECTRICTYPE waitmessage B_WAIT_TIME_LONG return - + BattleScript_EffectPurify: attackcanceler attackstring @@ -3342,7 +3342,7 @@ BattleScript_AbilityProtectsDoesntAffect: call BattleScript_AbilityProtectsDoesntAffectRet orhalfword gMoveResultFlags, MOVE_RESULT_FAILED goto BattleScript_MoveEnd - + BattleScript_InsomniaProtects: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp @@ -3435,7 +3435,7 @@ BattleScript_EffectFreezeHit:: BattleScript_EffectParalyzeHit:: setmoveeffect MOVE_EFFECT_PARALYSIS goto BattleScript_EffectHit - + BattleScript_EffectExplosion_AnimDmgRet: jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionAnimRet call BattleScript_PreserveMissedBitDoMoveAnim @@ -4255,7 +4255,7 @@ BattleScript_BattleScript_EffectParalyzeNoTypeCalc: resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd - + BattleScript_VoltAbsorbHeal: copybyte gBattlerAbility, gBattlerTarget tryhealquarterhealth BS_TARGET BattleScript_MonMadeMoveUseless @ Check if max hp @@ -7727,7 +7727,7 @@ BattleScript_GrudgeTakesPp:: printstring STRINGID_PKMNLOSTPPGRUDGE waitmessage B_WAIT_TIME_LONG return - + BattleScript_MagicCoatBounce:: attackstring ppreduce @@ -8009,7 +8009,7 @@ BattleScript_AftermathDmg:: waitmessage B_WAIT_TIME_LONG tryfaintmon BS_ATTACKER return - + BattleScript_DampPreventsAftermath:: pause B_WAIT_TIME_SHORT call BattleScript_AbilityPopUp diff --git a/src/battle_anim.c b/src/battle_anim.c index a7faec1fda..724587588f 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -447,14 +447,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - + if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { targets[1] = targets[0] ^ BIT_FLANK; numTargets++; } - + if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + targets[2] = gBattleAnimAttacker ^ BIT_FLANK; numTargets++; } break; @@ -463,14 +463,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) numTargets = 1; break; } - + return numTargets; } static s16 GetSubpriorityForMoveAnim(u8 argVar) { s16 subpriority; - + if (argVar & ANIMSPRITE_IS_TARGET) { argVar ^= ANIMSPRITE_IS_TARGET; @@ -493,7 +493,7 @@ static s16 GetSubpriorityForMoveAnim(u8 argVar) if (subpriority < 3) subpriority = 3; - + return subpriority; } @@ -519,7 +519,7 @@ static void Cmd_createsprite(void) gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); CreateSpriteAndAnimate( @@ -536,22 +536,22 @@ static void CreateSpriteOnTargets(const struct SpriteTemplate *template, u8 argV u8 targets[MAX_BATTLERS_COUNT]; int ntargets; s16 subpriority; - + for (i = 0; i < argsCount; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + subpriority = GetSubpriorityForMoveAnim(argVar); - + ntargets = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < ntargets; i++) { - + if (overwriteAnimTgt) gBattleAnimArgs[battlerArgIndex] = targets[i]; - + CreateSpriteAndAnimate( template, GetBattlerSpriteCoord(targets[i], BATTLER_COORD_X_2), @@ -575,13 +575,13 @@ static void Cmd_createspriteontargets_onpos(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, FALSE); } @@ -599,13 +599,13 @@ static void Cmd_createspriteontargets(void) argVar = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; argsCount = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + CreateSpriteOnTargets(template, argVar, battlerArgIndex, argsCount, TRUE); } @@ -656,21 +656,21 @@ static void Cmd_createvisualtaskontargets(void) taskPriority = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + battlerArgIndex = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; numArgs = sBattleAnimScriptPtr[0]; sBattleAnimScriptPtr++; - + // copy task arguments for (i = 0; i < numArgs; i++) { gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); sBattleAnimScriptPtr += 2; } - + numArgs = GetBattleAnimMoveTargets(battlerArgIndex, targets); - + for (i = 0; i < numArgs; i++) { gBattleAnimArgs[battlerArgIndex] = targets[i]; diff --git a/src/battle_anim_ice.c b/src/battle_anim_ice.c index 44c1a4f22c..e6a5607b5a 100644 --- a/src/battle_anim_ice.c +++ b/src/battle_anim_ice.c @@ -1289,7 +1289,7 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite) sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - + #if B_UPDATED_MOVE_DATA >= GEN_5 { s16 x, y; diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h index 8dbc2d2a98..5593e10a79 100644 --- a/src/data/pokemon_graphics/back_pic_coordinates.h +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -518,7 +518,7 @@ const struct MonCoords gMonBackPicCoords[] = [SPECIES_DARKRAI] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SHAYMIN] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 15 }, [SPECIES_ARCEUS] = ARCEUS_BACK_PIC_COORDS, -#endif +#endif #if P_GEN_5_POKEMON == TRUE [SPECIES_VICTINI] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 7 }, [SPECIES_SNIVY] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 11 }, diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h index a484b85966..ca880e7efc 100644 --- a/src/data/pokemon_graphics/front_pic_coordinates.h +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -920,7 +920,7 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_OVERQWIL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Megas + // Megas [SPECIES_VENUSAUR_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_CHARIZARD_MEGA_X] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CHARIZARD_MEGA_Y] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -974,11 +974,11 @@ const struct MonCoords gMonFrontPicCoords[] = #if P_GEN_6_POKEMON == TRUE [SPECIES_DIANCIE_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Special Mega + Primals + // Special Mega + Primals [SPECIES_RAYQUAZA_MEGA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KYOGRE_PRIMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_GROUDON_PRIMAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Alolan Forms + // Alolan Forms [SPECIES_RATTATA_ALOLAN] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, [SPECIES_RATICATE_ALOLAN] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, [SPECIES_RAICHU_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -997,7 +997,7 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_MUK_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, [SPECIES_EXEGGUTOR_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_MAROWAK_ALOLAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - // Galarian Forms + // Galarian Forms [SPECIES_MEOWTH_GALARIAN] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PONYTA_GALARIAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_RAPIDASH_GALARIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1042,15 +1042,15 @@ const struct MonCoords gMonFrontPicCoords[] = #if P_GEN_7_POKEMON == TRUE [SPECIES_DECIDUEYE_HISUIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Misc Forms - // Cosplay Pikachu + // Misc Forms + // Cosplay Pikachu [SPECIES_PIKACHU_COSPLAY] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_ROCK_STAR] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_BELLE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_POP_STAR] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_PH_D] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_LIBRE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, - // Cap Pikachu + // Cap Pikachu [SPECIES_PIKACHU_ORIGINAL_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_HOENN_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_SINNOH_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, @@ -1059,9 +1059,9 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_PIKACHU_ALOLA_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_PARTNER_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, [SPECIES_PIKACHU_WORLD_CAP] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 9 }, - // Pichu + // Pichu [SPECIES_PICHU_SPIKY_EARED] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, - // Unown + // Unown [SPECIES_UNOWN_B] = { .size = MON_COORDS_SIZE(24, 32), .y_offset = 16 }, [SPECIES_UNOWN_C] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 16 }, [SPECIES_UNOWN_D] = { .size = MON_COORDS_SIZE(32, 32), .y_offset = 16 }, @@ -1089,40 +1089,40 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_UNOWN_Z] = { .size = MON_COORDS_SIZE(24, 32), .y_offset = 16 }, [SPECIES_UNOWN_EMARK] = { .size = MON_COORDS_SIZE(24, 40), .y_offset = 15 }, [SPECIES_UNOWN_QMARK] = { .size = MON_COORDS_SIZE(24, 40), .y_offset = 13 }, - // Castform + // Castform [SPECIES_CASTFORM_SUNNY] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 9 }, [SPECIES_CASTFORM_RAINY] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 9 }, [SPECIES_CASTFORM_SNOWY] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 8 }, - // Deoxys + // Deoxys [SPECIES_DEOXYS_ATTACK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_DEOXYS_DEFENSE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_DEOXYS_SPEED] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 1 }, #if P_GEN_4_POKEMON == TRUE - // Burmy + // Burmy [SPECIES_BURMY_SANDY_CLOAK] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 12 }, [SPECIES_BURMY_TRASH_CLOAK] = { .size = MON_COORDS_SIZE(32, 56), .y_offset = 8 }, - // Wormadam + // Wormadam [SPECIES_WORMADAM_SANDY_CLOAK] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 10 }, [SPECIES_WORMADAM_TRASH_CLOAK] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 10 }, - // Cherrim + // Cherrim [SPECIES_CHERRIM_SUNSHINE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, - // Shellos + // Shellos [SPECIES_SHELLOS_EAST_SEA] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, - // Gastrodon + // Gastrodon [SPECIES_GASTRODON_EAST_SEA] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 8 }, - // Rotom + // Rotom [SPECIES_ROTOM_HEAT] = { .size = MON_COORDS_SIZE(56, 48), .y_offset = 10 }, [SPECIES_ROTOM_WASH] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_ROTOM_FROST] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, [SPECIES_ROTOM_FAN] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 8 }, [SPECIES_ROTOM_MOW] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 12 }, - // Origin Forme + // Origin Forme [SPECIES_DIALGA_ORIGIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_PALKIA_ORIGIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_GIRATINA_ORIGIN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Shaymin + // Shaymin [SPECIES_SHAYMIN_SKY] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 7 }, - // Arceus + // Arceus [SPECIES_ARCEUS_FIGHTING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ARCEUS_FLYING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ARCEUS_POISON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1142,42 +1142,42 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_ARCEUS_FAIRY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif #if P_GEN_5_POKEMON == TRUE - // Basculin + // Basculin [SPECIES_BASCULIN_BLUE_STRIPED] = { .size = MON_COORDS_SIZE(56, 40), .y_offset = 16 }, [SPECIES_BASCULIN_WHITE_STRIPED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 10 }, - // Darmanitan + // Darmanitan [SPECIES_DARMANITAN_ZEN_MODE] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 14 }, [SPECIES_DARMANITAN_ZEN_MODE_GALARIAN] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - // Deerling + // Deerling [SPECIES_DEERLING_SUMMER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, [SPECIES_DEERLING_AUTUMN] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, [SPECIES_DEERLING_WINTER] = { .size = MON_COORDS_SIZE(32, 48), .y_offset = 11 }, - // Sawsbuck + // Sawsbuck [SPECIES_SAWSBUCK_SUMMER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SAWSBUCK_AUTUMN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SAWSBUCK_WINTER] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - // Therian Forms + // Therian Forms [SPECIES_TORNADUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_THUNDURUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_LANDORUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Kyurem + // Kyurem [SPECIES_KYUREM_WHITE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_KYUREM_BLACK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Keldeo + // Keldeo [SPECIES_KELDEO_RESOLUTE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - // Meloetta + // Meloetta [SPECIES_MELOETTA_PIROUETTE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 2 }, - // Genesect + // Genesect [SPECIES_GENESECT_DOUSE_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_GENESECT_SHOCK_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_GENESECT_BURN_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, [SPECIES_GENESECT_CHILL_DRIVE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, #endif #if P_GEN_6_POKEMON == TRUE - // Greninja + // Greninja [SPECIES_GRENINJA_BATTLE_BOND] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 7 }, [SPECIES_GRENINJA_ASH] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Vivillon + // Vivillon [SPECIES_VIVILLON_POLAR] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_TUNDRA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_CONTINENTAL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1197,23 +1197,23 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_VIVILLON_JUNGLE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_FANCY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_VIVILLON_POKE_BALL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Flabébé + // Flabébé [SPECIES_FLABEBE_YELLOW_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_FLABEBE_ORANGE_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_FLABEBE_BLUE_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, [SPECIES_FLABEBE_WHITE_FLOWER] = { .size = MON_COORDS_SIZE(48, 56), .y_offset = 6 }, - // Floette + // Floette [SPECIES_FLOETTE_YELLOW_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_ORANGE_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_BLUE_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_WHITE_FLOWER] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 3 }, [SPECIES_FLOETTE_ETERNAL_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - // Florges + // Florges [SPECIES_FLORGES_YELLOW_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_FLORGES_ORANGE_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_FLORGES_BLUE_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_FLORGES_WHITE_FLOWER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Furfrou + // Furfrou [SPECIES_FURFROU_HEART_TRIM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_FURFROU_STAR_TRIM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_FURFROU_DIAMOND_TRIM] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, @@ -1223,41 +1223,41 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_FURFROU_LA_REINE_TRIM] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, [SPECIES_FURFROU_KABUKI_TRIM] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_FURFROU_PHARAOH_TRIM] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - // Meowstic + // Meowstic [SPECIES_MEOWSTIC_FEMALE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, - // Aegislash + // Aegislash [SPECIES_AEGISLASH_BLADE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Pumpkaboo + // Pumpkaboo [SPECIES_PUMPKABOO_SMALL] = { .size = MON_COORDS_SIZE(40, 40), .y_offset = 15 }, [SPECIES_PUMPKABOO_LARGE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 12 }, [SPECIES_PUMPKABOO_SUPER] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 10 }, - // Gourgeist + // Gourgeist [SPECIES_GOURGEIST_SMALL] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 5 }, [SPECIES_GOURGEIST_LARGE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, [SPECIES_GOURGEIST_SUPER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Xerneas + // Xerneas [SPECIES_XERNEAS_ACTIVE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Zygarde + // Zygarde [SPECIES_ZYGARDE_10] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_ZYGARDE_10_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 2 }, [SPECIES_ZYGARDE_50_POWER_CONSTRUCT] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ZYGARDE_COMPLETE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Hoopa + // Hoopa [SPECIES_HOOPA_UNBOUND] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif #if P_GEN_7_POKEMON == TRUE - // Oricorio + // Oricorio [SPECIES_ORICORIO_POM_POM] = { .size = MON_COORDS_SIZE(56, 56), .y_offset = 5 }, [SPECIES_ORICORIO_PAU] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 3 }, [SPECIES_ORICORIO_SENSU] = { .size = MON_COORDS_SIZE(64, 56), .y_offset = 4 }, - // Rockruff + // Rockruff [SPECIES_ROCKRUFF_OWN_TEMPO] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 11 }, - // Lycanroc + // Lycanroc [SPECIES_LYCANROC_MIDNIGHT] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, [SPECIES_LYCANROC_DUSK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - // Wishiwashi + // Wishiwashi [SPECIES_WISHIWASHI_SCHOOL] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 4 }, - // Silvally + // Silvally [SPECIES_SILVALLY_FIGHTING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_FLYING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_POISON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, @@ -1275,7 +1275,7 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_SILVALLY_DRAGON] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_DARK] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_SILVALLY_FAIRY] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Minior + // Minior [SPECIES_MINIOR_METEOR_ORANGE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_METEOR_YELLOW] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_METEOR_GREEN] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, @@ -1289,26 +1289,26 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_MINIOR_CORE_BLUE] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_CORE_INDIGO] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, [SPECIES_MINIOR_CORE_VIOLET] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 14 }, - // Mimikyu + // Mimikyu [SPECIES_MIMIKYU_BUSTED] = { .size = MON_COORDS_SIZE(48, 40), .y_offset = 12 }, - // Necrozma + // Necrozma [SPECIES_NECROZMA_DUSK_MANE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_NECROZMA_DAWN_WINGS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_NECROZMA_ULTRA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Magearna + // Magearna [SPECIES_MAGEARNA_ORIGINAL_COLOR] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, #endif #if P_GEN_8_POKEMON == TRUE - // Cramorant + // Cramorant [SPECIES_CRAMORANT_GULPING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CRAMORANT_GORGING] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Toxtricity + // Toxtricity [SPECIES_TOXTRICITY_LOW_KEY] = { .size = MON_COORDS_SIZE(48, 64), .y_offset = 2 }, - // Sinistea + // Sinistea [SPECIES_SINISTEA_ANTIQUE] = { .size = MON_COORDS_SIZE(40, 32), .y_offset = 17 }, - // Polteageist + // Polteageist [SPECIES_POLTEAGEIST_ANTIQUE] = { .size = MON_COORDS_SIZE(48, 48), .y_offset = 11 }, - // Alcremie + // Alcremie [SPECIES_ALCREMIE_RUBY_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_MATCHA_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_MINT_CREAM] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, @@ -1317,28 +1317,28 @@ const struct MonCoords gMonFrontPicCoords[] = [SPECIES_ALCREMIE_RUBY_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_CARAMEL_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, [SPECIES_ALCREMIE_RAINBOW_SWIRL] = { .size = MON_COORDS_SIZE(40, 56), .y_offset = 7 }, - // Eiscue + // Eiscue [SPECIES_EISCUE_NOICE_FACE] = { .size = MON_COORDS_SIZE(40, 64), .y_offset = 0 }, - // Indeedee + // Indeedee [SPECIES_INDEEDEE_FEMALE] = { .size = MON_COORDS_SIZE(40, 48), .y_offset = 9 }, - // Morpeko + // Morpeko [SPECIES_MORPEKO_HANGRY] = { .size = MON_COORDS_SIZE(32, 40), .y_offset = 14 }, - // Zacian + // Zacian [SPECIES_ZACIAN_CROWNED_SWORD] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, - // Zamazenta + // Zamazenta [SPECIES_ZAMAZENTA_CROWNED_SHIELD] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - // Eternatus + // Eternatus [SPECIES_ETERNATUS_ETERNAMAX] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 3 }, - // Urshifu + // Urshifu [SPECIES_URSHIFU_RAPID_STRIKE_STYLE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 0 }, - // Zarude + // Zarude [SPECIES_ZARUDE_DADA] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 2 }, - // Calyrex + // Calyrex [SPECIES_CALYREX_ICE_RIDER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_CALYREX_SHADOW_RIDER] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, [SPECIES_ENAMORUS_THERIAN] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, #endif - // Egg + // Egg [SPECIES_EGG] = { .size = MON_COORDS_SIZE(24, 24), .y_offset = 20 }, }; diff --git a/src/data/pokemon_graphics/shiny_palette_table.h b/src/data/pokemon_graphics/shiny_palette_table.h index 81bc45d4d9..5ad52f6dcb 100644 --- a/src/data/pokemon_graphics/shiny_palette_table.h +++ b/src/data/pokemon_graphics/shiny_palette_table.h @@ -1328,7 +1328,7 @@ const struct CompressedSpritePalette gMonShinyPaletteTable[] = SPECIES_SHINY_PAL(CALYREX_ICE_RIDER, gMonShinyPalette_CalyrexIceRider), SPECIES_SHINY_PAL(CALYREX_SHADOW_RIDER, gMonShinyPalette_CalyrexShadowRider), - + SPECIES_SHINY_PAL(ENAMORUS_THERIAN, gMonShinyPalette_CircledQuestionMark), //gMonShinyPalette_EnamorusTherian), #endif SPECIES_SHINY_PAL(EGG, gMonPalette_Egg), diff --git a/src/debug.c b/src/debug.c index 90081eb617..301bae51df 100644 --- a/src/debug.c +++ b/src/debug.c @@ -1255,7 +1255,7 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId) if (gTasks[taskId].data[3] <= 15 || gTasks[taskId].data[3] >= 20) StringCopyPadded(gStringVar1, sWeatherNames[gTasks[taskId].data[3]], CHAR_SPACE, 30); else - StringCopyPadded(gStringVar1, sText_WeatherNotDefined, CHAR_SPACE, 30); + StringCopyPadded(gStringVar1, sText_WeatherNotDefined, CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); diff --git a/src/easy_chat.c b/src/easy_chat.c index d08ea4b33d..6595e0a108 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -230,7 +230,7 @@ enum { PALTAG_TRIANGLE_CURSOR, PALTAG_RECTANGLE_CURSOR, PALTAG_MISC_UI, - PALTAG_RS_INTERVIEW_FRAME, + PALTAG_RS_INTERVIEW_FRAME, }; enum { @@ -240,7 +240,7 @@ enum { GFXTAG_START_SELECT_BUTTONS, GFXTAG_MODE_WINDOW, GFXTAG_RS_INTERVIEW_FRAME, - GFXTAG_BUTTON_WINDOW, + GFXTAG_BUTTON_WINDOW, }; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index ae48223c3a..e1a02e3ee5 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -499,7 +499,7 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = { {gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN}, {gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY}, #ifdef BUGFIX - {NULL, OBJ_EVENT_PAL_TAG_NONE}, + {NULL, OBJ_EVENT_PAL_TAG_NONE}, #else {}, // BUG: FindObjectEventPaletteIndexByTag looks for OBJ_EVENT_PAL_TAG_NONE and not 0x0. // If it's looking for a tag that isn't in this table, the game locks in an infinite loop. diff --git a/src/expansion_intro.c b/src/expansion_intro.c index 8fdb7c1cb8..e37ea4b2e6 100644 --- a/src/expansion_intro.c +++ b/src/expansion_intro.c @@ -33,10 +33,10 @@ #define DIZZY_ANIM_SPEED 4 #define DIZZY_STARS_SPEED 12 -enum +enum { EXPANSION_INTRO_BG2, - EXPANSION_INTRO_BG3 + EXPANSION_INTRO_BG3 }; enum diff --git a/src/field_specials.c b/src/field_specials.c index 3ae01543c3..3996b739ac 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1015,7 +1015,7 @@ static void PCTurnOnEffect(struct Task *task) if (task->tTimer == 6) { task->tTimer = 0; - + // Get where the PC should be, depending on where the player is looking. playerDirection = GetPlayerFacingDirection(); switch (playerDirection) @@ -1037,7 +1037,7 @@ static void PCTurnOnEffect(struct Task *task) // Update map PCTurnOnEffect_SetMetatile(task->tIsScreenOn, dx, dy); DrawWholeMapView(); - + // Screen flickers 5 times. Odd number and starting with the // screen off means the animation ends with the screen on. task->tIsScreenOn ^= 1; diff --git a/src/frontier_util.c b/src/frontier_util.c index 1863aa622e..0fe2c94ea0 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -497,7 +497,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZ }, }; -static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT][30] = +static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT][30] = { /* facility, mode, tier */ [FRONTIER_FACILITY_TOWER] = /* Tier: 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 */ diff --git a/src/mini_printf.c b/src/mini_printf.c index d96a9379a1..9fb4ecfac9 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -41,7 +41,7 @@ #ifndef NDEBUG -struct mini_buff +struct mini_buff { char *buffer, *pbuffer; u32 buffer_len; @@ -95,9 +95,9 @@ static s32 _putsAscii(char *s, s32 len, void *buf) s32 i; struct mini_buff *b; - if (!buf) + if (!buf) return len; - + b = buf; p0 = b->buffer; @@ -118,9 +118,9 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) s32 i; struct mini_buff *b; - if (!buf) + if (!buf) return len; - + b = buf; p0 = b->buffer; @@ -159,7 +159,7 @@ static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *bu } /* This builds the string back to front ... */ - do + do { s32 digit = value % radix; *(pbuffer++) = (digit < 10 ? '0' + digit : (uppercase ? 'A' : 'a') + digit - 10); @@ -243,7 +243,7 @@ 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; @@ -270,7 +270,7 @@ s32 mini_vpprintf(void* buf, const char *fmt, va_list va) ch=*(fmt++); } - switch (ch) + switch (ch) { case 0: goto end; diff --git a/src/rom_header_gf.c b/src/rom_header_gf.c index 118cc5e277..7b8822acc6 100644 --- a/src/rom_header_gf.c +++ b/src/rom_header_gf.c @@ -9,8 +9,8 @@ // The purpose of this struct is for outside applications to be // able to access parts of the ROM or its save file, like a public API. // In vanilla, it was used by Colosseum and XD to access pokemon graphics. -// -// If this struct is rearranged in any way, it defeats the purpose of +// +// If this struct is rearranged in any way, it defeats the purpose of // having it at all. Applications like PKHex or streaming HUDs may find // these values useful, so there's some potential benefit to keeping it. // If there's a compilation problem below, just comment out the assignment diff --git a/src/trade.c b/src/trade.c index 9186864fb3..1f9e688863 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1281,7 +1281,7 @@ static void Leader_HandleCommunication(void) if (sTradeMenu->playerSelectStatus == STATUS_READY && sTradeMenu->partnerSelectStatus == STATUS_READY) { - // Both players have selected a pokemon to trade + // Both players have selected a pokemon to trade sTradeMenu->callbackId = CB_SET_SELECTED_MONS; sTradeMenu->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; sTradeMenu->linkData[1] = sTradeMenu->cursorPosition; @@ -1900,7 +1900,7 @@ static void DrawSelectedMonScreen(u8 whichParty) StoreSpriteCallbackInData6(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]], SpriteCB_MonIcon); sTradeMenu->drawSelectedMonState[whichParty]++; Trade_MoveSelectedMonToTarget(&gSprites[sTradeMenu->partySpriteIds[selectedMonParty][partyIdx]]); - + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); diff --git a/test/ability_insomnia.c b/test/ability_insomnia.c index b9fe387532..9398bd30ab 100644 --- a/test/ability_insomnia.c +++ b/test/ability_insomnia.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents sleep") TURN { MOVE(opponent, MOVE_SPORE); } } SCENE { ABILITY_POPUP(player, ABILITY_INSOMNIA); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); STATUS_ICON(player, sleep: TRUE); @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents yawn") TURN { } } SCENE { ABILITY_POPUP(player, ABILITY_INSOMNIA); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); STATUS_ICON(player, sleep: TRUE); @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Insomnia prevents rest") TURN { MOVE(player, MOVE_REST); } } SCENE { ABILITY_POPUP(player, ABILITY_INSOMNIA); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_REST, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); STATUS_ICON(player, sleep: TRUE); diff --git a/test/ability_water_absorb.c b/test/ability_water_absorb.c index 1748ee7ff5..aaaa149ace 100644 --- a/test/ability_water_absorb.c +++ b/test/ability_water_absorb.c @@ -78,10 +78,10 @@ SINGLE_BATTLE_TEST("Water Absorb prevents Items from activating") ABILITY_POPUP(player, ABILITY_WATER_ABSORB); HP_BAR(player, hp: TEST_MAX_HP / 4 + 1); MESSAGE("Poliwag restored HP using its Water Absorb!"); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); } - + } } From 44d2cc7232e2c64866edbc832f417608056496cf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 09:11:25 +0100 Subject: [PATCH 149/290] Fix bugs related to Trainer Slide messages (#2699) * start working on trainer slides * use cmd->nextInstr --- data/battle_scripts_2.s | 26 ++++++++++++++++----- include/battle_message.h | 2 +- include/battle_scripts.h | 6 +++-- src/battle_main.c | 4 ++-- src/battle_message.c | 45 ++++++++++++++++++++++++++---------- src/battle_script_commands.c | 22 ++++++++++++------ 6 files changed, 75 insertions(+), 30 deletions(-) diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 9b26cbd0d7..21a12d8861 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -192,16 +192,30 @@ BattleScript_ActionWallyThrow: waitmessage B_WAIT_TIME_LONG end2 -BattleScript_TrainerSlideMsgRet:: +BattleScript_TrainerASlideMsgRet:: handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein 1 + trainerslidein B_POSITION_OPPONENT_LEFT handletrainerslidemsg BS_SCRIPTING, 1 waitstate - trainerslideout 1 - handletrainerslidemsg BS_SCRIPTING, 2 + trainerslideout B_POSITION_OPPONENT_LEFT waitstate + handletrainerslidemsg BS_SCRIPTING, 2 return -BattleScript_TrainerSlideMsgEnd2:: - call BattleScript_TrainerSlideMsgRet +BattleScript_TrainerASlideMsgEnd2:: + call BattleScript_TrainerASlideMsgRet + end2 + +BattleScript_TrainerBSlideMsgRet:: + handletrainerslidemsg BS_SCRIPTING, 0 + trainerslidein B_POSITION_OPPONENT_RIGHT + handletrainerslidemsg BS_SCRIPTING, 1 + waitstate + trainerslideout B_POSITION_OPPONENT_RIGHT + waitstate + handletrainerslidemsg BS_SCRIPTING, 2 + return + +BattleScript_TrainerBSlideMsgEnd2:: + call BattleScript_TrainerBSlideMsgRet end2 diff --git a/include/battle_message.h b/include/battle_message.h index 9f6905abd3..19f8bc4caf 100644 --- a/include/battle_message.h +++ b/include/battle_message.h @@ -237,7 +237,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst); void BattlePutTextOnWindow(const u8 *text, u8 windowId); void SetPpNumbersPaletteInMoveSelection(void); u8 GetCurrentPpToMaxPpState(u8 currentPp, u8 maxPp); -bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which); +u32 ShouldDoTrainerSlide(u32 battlerId, u32 which); // return 1 for TrainerA, 2 forTrainerB void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst); extern struct BattleMsgData *gBattleMsgDataPtr; diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 8c6b074c18..63c128ec5f 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -295,8 +295,10 @@ extern const u8 BattleScript_MoveEffectClearSmog[]; extern const u8 BattleScript_SideStatusWoreOffReturn[]; extern const u8 BattleScript_MoveEffectSmackDown[]; extern const u8 BattleScript_MoveEffectFlameBurst[]; -extern const u8 BattleScript_TrainerSlideMsgRet[]; -extern const u8 BattleScript_TrainerSlideMsgEnd2[]; +extern const u8 BattleScript_TrainerASlideMsgRet[]; +extern const u8 BattleScript_TrainerASlideMsgEnd2[]; +extern const u8 BattleScript_TrainerBSlideMsgRet[]; +extern const u8 BattleScript_TrainerBSlideMsgEnd2[]; extern const u8 BattleScript_MoveEffectFeint[]; extern const u8 BattleScript_ProteanActivates[]; extern const u8 BattleScript_DazzlingProtected[]; diff --git a/src/battle_main.c b/src/battle_main.c index 6588d3c5ee..96b2e90a5e 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3866,8 +3866,8 @@ void BattleTurnPassed(void) BattleScriptExecute(BattleScript_PalacePrintFlavorText); else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0) BattleScriptExecute(BattleScript_ArenaTurnBeginning); - else if (ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_LOW_HP)) - BattleScriptExecute(BattleScript_TrainerSlideMsgEnd2); + else if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_LAST_LOW_HP))) + BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); } u8 IsRunningFromBattleImpossible(void) diff --git a/src/battle_message.c b/src/battle_message.c index ec2527d846..4e49e39f12 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -3887,11 +3887,11 @@ static const struct TrainerSlide sTrainerSlides[] = */ }; -static u32 GetEnemyMonCount(bool32 onlyAlive) +static u32 GetEnemyMonCount(u32 firstId, u32 lastId, bool32 onlyAlive) { u32 i, count = 0; - for (i = 0; i < PARTY_SIZE; i++) + for (i = firstId; i < lastId; i++) { u32 species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES2, NULL); if (species != SPECIES_NONE @@ -3911,12 +3911,33 @@ static bool32 IsBattlerHpLow(u32 battler) return FALSE; } -bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) +u32 ShouldDoTrainerSlide(u32 battlerId, u32 which) { - s32 i; + u32 i, firstId, lastId, trainerId, retValue = 1; if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) || GetBattlerSide(battlerId) != B_SIDE_OPPONENT) - return FALSE; + return 0; + + // Two opponents support. + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + { + if (gBattlerPartyIndexes[battlerId] >= 3) + { + firstId = 3, lastId = PARTY_SIZE; + trainerId = gTrainerBattleOpponent_B; + retValue = 2; + } + else + { + firstId = 0, lastId = 3; + trainerId = gTrainerBattleOpponent_A; + } + } + else + { + firstId = 0, lastId = PARTY_SIZE; + trainerId = gTrainerBattleOpponent_A; + } for (i = 0; i < ARRAY_COUNT(sTrainerSlides); i++) { @@ -3926,28 +3947,28 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) switch (which) { case TRAINER_SLIDE_LAST_SWITCHIN: - if (sTrainerSlides[i].msgLastSwitchIn != NULL && GetEnemyMonCount(TRUE) == 1) + if (sTrainerSlides[i].msgLastSwitchIn != NULL && !CanBattlerSwitch(battlerId)) { gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastSwitchIn; - return TRUE; + return retValue; } break; case TRAINER_SLIDE_LAST_LOW_HP: if (sTrainerSlides[i].msgLastLowHp != NULL - && GetEnemyMonCount(TRUE) == 1 + && GetEnemyMonCount(firstId, lastId, TRUE) == 1 && IsBattlerHpLow(battlerId) && !gBattleStruct->trainerSlideLowHpMsgDone) { gBattleStruct->trainerSlideLowHpMsgDone = TRUE; gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgLastLowHp; - return TRUE; + return retValue; } break; case TRAINER_SLIDE_FIRST_DOWN: - if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(TRUE) == GetEnemyMonCount(FALSE) - 1) + if (sTrainerSlides[i].msgFirstDown != NULL && GetEnemyMonCount(firstId, lastId, TRUE) == GetEnemyMonCount(firstId, lastId, FALSE) - 1) { gBattleStruct->trainerSlideMsg = sTrainerSlides[i].msgFirstDown; - return TRUE; + return retValue; } break; } @@ -3955,5 +3976,5 @@ bool32 ShouldDoTrainerSlide(u32 battlerId, u32 trainerId, u32 which) } } - return FALSE; + return 0; } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 86db3c9948..84a28804f9 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -10109,7 +10109,8 @@ static void Cmd_various(void) VARIOUS_ARGS(u8 case_); if (cmd->case_ == 0) { - gBattleScripting.savedDmg = gBattlerSpriteIds[gActiveBattler]; + // Save sprite IDs, because trainer slide in will overwrite gBattlerSpriteIds variable. + gBattleScripting.savedDmg = (gBattlerSpriteIds[gActiveBattler] & 0xFF) | (gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)] << 8); HideBattlerShadowSprite(gActiveBattler); } else if (cmd->case_ == 1) @@ -10119,12 +10120,19 @@ static void Cmd_various(void) } else { - gBattlerSpriteIds[gActiveBattler] = gBattleScripting.savedDmg; - if (gBattleMons[gActiveBattler].hp != 0) + gBattlerSpriteIds[BATTLE_PARTNER(gActiveBattler)] = gBattleScripting.savedDmg >> 8; + gBattlerSpriteIds[gActiveBattler] = gBattleScripting.savedDmg & 0xFF; + if (IsBattlerAlive(gActiveBattler)) { SetBattlerShadowSpriteCallback(gActiveBattler, gBattleMons[gActiveBattler].species); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); } + i = BATTLE_PARTNER(gActiveBattler); + if (IsBattlerAlive(i)) + { + SetBattlerShadowSpriteCallback(i, gBattleMons[i].species); + BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[i]], i); + } } gBattlescriptCurrInstr = cmd->nextInstr; return; @@ -10132,11 +10140,11 @@ static void Cmd_various(void) case VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF: { VARIOUS_ARGS(); - if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_FIRST_DOWN)) + if ((i = ShouldDoTrainerSlide(gActiveBattler, TRAINER_SLIDE_FIRST_DOWN))) { gBattleScripting.battler = gActiveBattler; BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); return; } break; @@ -10144,11 +10152,11 @@ static void Cmd_various(void) case VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON: { VARIOUS_ARGS(); - if (ShouldDoTrainerSlide(gActiveBattler, gTrainerBattleOpponent_A, TRAINER_SLIDE_LAST_SWITCHIN)) + if ((i = ShouldDoTrainerSlide(gActiveBattler, TRAINER_SLIDE_LAST_SWITCHIN))) { gBattleScripting.battler = gActiveBattler; BattleScriptPush(cmd->nextInstr); - gBattlescriptCurrInstr = BattleScript_TrainerSlideMsgRet; + gBattlescriptCurrInstr = (i == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet); return; } break; From 919fb184fef007829b1aa242c5776ace52a240fc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 09:12:52 +0100 Subject: [PATCH 150/290] AI knows how to handle Illusion (#2726) * AI knows how to handle Illusion --- include/battle.h | 1 + src/battle_ai_util.c | 66 ++++++++++++++++++++++++++++++++++++++------ src/battle_util.c | 28 +++++++++++++++---- 3 files changed, 80 insertions(+), 15 deletions(-) diff --git a/include/battle.h b/include/battle.h index 6110413667..1ae49b1a2c 100644 --- a/include/battle.h +++ b/include/battle.h @@ -252,6 +252,7 @@ struct AI_SavedBattleMon u16 moves[MAX_MON_MOVES]; u16 heldItem; u16 species; + u8 types[3]; }; struct AiPartyMon diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 22e88aac4c..495e2ea1db 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -538,23 +538,73 @@ void SaveBattlerData(u8 battlerId) AI_THINKING_STRUCT->saved[battlerId].species = gBattleMons[battlerId].species; for (i = 0; i < 4; i++) AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; + AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; + AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; } } +static bool32 ShouldFailForIllusion(u16 illusionSpecies, u32 battlerId) +{ + u32 i, j; + + if (BATTLE_HISTORY->abilities[battlerId] == ABILITY_ILLUSION) + return FALSE; + + // Don't fall for Illusion if the mon used a move it cannot know. + for (i = 0; i < MAX_MON_MOVES; i++) + { + u16 move = BATTLE_HISTORY->usedMoves[battlerId][i]; + if (move == MOVE_NONE) + continue; + + for (j = 0; gLevelUpLearnsets[illusionSpecies][j].move != MOVE_UNAVAILABLE; j++) + { + if (gLevelUpLearnsets[illusionSpecies][j].move == move) + break; + } + // The used move is in the learnsets of the fake species. + if (gLevelUpLearnsets[illusionSpecies][j].move != MOVE_UNAVAILABLE) + continue; + + // The used move can be learned from Tm/Hm or Move Tutors. + if (CanLearnTeachableMove(illusionSpecies, move)) + continue; + + // 'Illegal move', AI won't fail for the illusion. + return FALSE; + } + + return TRUE; +} + void SetBattlerData(u8 battlerId) { if (!IsBattlerAIControlled(battlerId)) { - struct Pokemon *illusionMon; - u32 i; + u32 i, species, illusionSpecies; + + // Simulate Illusion + species = gBattleMons[battlerId].species; + illusionSpecies = GetIllusionMonSpecies(battlerId); + if (illusionSpecies != SPECIES_NONE && ShouldFailForIllusion(illusionSpecies, battlerId)) + { + // If the battler's type has not been changed, AI assumes the types of the illusion mon. + if (gBattleMons[battlerId].type1 == gSpeciesInfo[species].types[0] + && gBattleMons[battlerId].type2 == gSpeciesInfo[species].types[1]) + { + gBattleMons[battlerId].type1 = gSpeciesInfo[illusionSpecies].types[0]; + gBattleMons[battlerId].type2 = gSpeciesInfo[illusionSpecies].types[1]; + } + species = illusionSpecies; + } // Use the known battler's ability. if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) gBattleMons[battlerId].ability = BATTLE_HISTORY->abilities[battlerId]; // Check if mon can only have one ability. - else if (gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] == ABILITY_NONE - || gSpeciesInfo[gBattleMons[battlerId].species].abilities[1] == gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]) - gBattleMons[battlerId].ability = gSpeciesInfo[gBattleMons[battlerId].species].abilities[0]; + else if (gSpeciesInfo[species].abilities[1] == ABILITY_NONE + || gSpeciesInfo[species].abilities[1] == gSpeciesInfo[species].abilities[0]) + gBattleMons[battlerId].ability = gSpeciesInfo[species].abilities[0]; // The ability is unknown. else gBattleMons[battlerId].ability = ABILITY_NONE; @@ -567,10 +617,6 @@ void SetBattlerData(u8 battlerId) if (BATTLE_HISTORY->usedMoves[battlerId][i] == 0) gBattleMons[battlerId].moves[i] = 0; } - - // Simulate Illusion - if ((illusionMon = GetIllusionMonPtr(battlerId)) != NULL) - gBattleMons[battlerId].species = GetMonData(illusionMon, MON_DATA_SPECIES2); } } @@ -585,6 +631,8 @@ void RestoreBattlerData(u8 battlerId) gBattleMons[battlerId].species = AI_THINKING_STRUCT->saved[battlerId].species; for (i = 0; i < 4; i++) gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i]; + gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; + gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; } } diff --git a/src/battle_util.c b/src/battle_util.c index 0a00372c0d..e10c9dbcfa 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9817,6 +9817,18 @@ static void MulByTypeEffectiveness(u16 *modifier, u16 move, u8 moveType, u8 batt MulModifier(modifier, mod); } +static void TryNoticeIllusionInTypeEffectiveness(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u16 resultingModifier, u32 illusionSpecies) +{ + // Check if the type effectiveness would've been different if the pokemon really had the types as the disguise. + u16 presumedModifier = UQ_4_12(1.0); + MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, gSpeciesInfo[illusionSpecies].types[0], battlerAtk, FALSE); + if (gSpeciesInfo[illusionSpecies].types[1] != gSpeciesInfo[illusionSpecies].types[0]) + MulByTypeEffectiveness(&presumedModifier, move, moveType, battlerDef, gSpeciesInfo[illusionSpecies].types[1], battlerAtk, FALSE); + + if (presumedModifier != resultingModifier) + RecordAbilityBattle(battlerDef, ABILITY_ILLUSION); +} + static void UpdateMoveResultFlags(u16 modifier) { if (modifier == UQ_4_12(0.0)) @@ -9842,6 +9854,7 @@ static void UpdateMoveResultFlags(u16 modifier) static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities, u16 modifier) { + u32 illusionSpecies; u16 defAbility = GetBattlerAbility(battlerDef); MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type1, battlerAtk, recordAbilities); @@ -9851,15 +9864,18 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat && gBattleMons[battlerDef].type3 != gBattleMons[battlerDef].type1) MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, gBattleMons[battlerDef].type3, battlerAtk, recordAbilities); + if (recordAbilities && (illusionSpecies = GetIllusionMonSpecies(battlerDef))) + TryNoticeIllusionInTypeEffectiveness(move, moveType, battlerAtk, battlerDef, modifier, illusionSpecies); + if (gBattleMoves[move].split == SPLIT_STATUS && move != MOVE_THUNDER_WAVE) { modifier = UQ_4_12(1.0); - #if B_GLARE_GHOST <= GEN_3 - if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) - { - modifier = UQ_4_12(0.0); - } - #endif + #if B_GLARE_GHOST <= GEN_3 + if (move == MOVE_GLARE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST)) + { + modifier = UQ_4_12(0.0); + } + #endif } else if (moveType == TYPE_GROUND && !IsBattlerGrounded2(battlerDef, TRUE) && !(gBattleMoves[move].flags & FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING)) { From e537be76eae85f21c6cdac20028f1070bdf3c877 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Mon, 27 Feb 2023 00:17:07 -0800 Subject: [PATCH 151/290] Z-moves bypass protection (#2730) --- data/battle_scripts_1.s | 5 +++++ include/battle_scripts.h | 1 + include/constants/battle_string_ids.h | 3 ++- src/battle_message.c | 2 ++ src/battle_script_commands.c | 8 ++++++++ src/battle_util.c | 16 ++++++++++++++-- 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 35d8db8ddf..e8b751777b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -10330,3 +10330,8 @@ BattleScript_PokemonCantUseTheMove:: printstring STRINGID_BUTPOKEMONCANTUSETHEMOVE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd + +BattleScript_CouldntFullyProtect:: + printstring STRINGID_COULDNTFULLYPROTECT + waitmessage B_WAIT_TIME_LONG + return diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 63c128ec5f..0751ae8097 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -455,6 +455,7 @@ extern const u8 BattleScript_DampPreventsAftermath[]; extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; +extern const u8 BattleScript_CouldntFullyProtect[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index e561a9cb98..f3e702ec46 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -641,8 +641,9 @@ #define STRINGID_PKMNSABILITYPREVENTSABILITY 639 #define STRINGID_PREPARESHELLTRAP 640 #define STRINGID_SHELLTRAPDIDNTWORK 641 +#define STRINGID_COULDNTFULLYPROTECT 642 -#define BATTLESTRINGS_COUNT 642 +#define BATTLESTRINGS_COUNT 643 // 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_message.c b/src/battle_message.c index 4e49e39f12..29580ded00 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -776,9 +776,11 @@ static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_ATK_NAME_WITH static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WITH_PREFIX} gained strength\nfrom the fallen!"); static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); +static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, [STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 84a28804f9..2d9f6f6c18 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1591,6 +1591,14 @@ static void Cmd_attackcanceler(void) return; } + // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in CalcFinalDmg) + if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(gBattlerTarget)) + { + BattleScriptPush(cmd->nextInstr); + gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; + return; + } + for (i = 0; i < gBattlersCount; i++) { if ((gProtectStructs[gBattlerByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) diff --git a/src/battle_util.c b/src/battle_util.c index e10c9dbcfa..1625ff919c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8243,9 +8243,15 @@ bool32 IsBattlerProtected(u8 battlerId, u16 move) return FALSE; } - if (move == MOVE_TEATIME) + if (move == MOVE_TEATIME) { - return FALSE; + return FALSE; + } + + // Z-Moves and Max Moves bypass protection + if (gBattleStruct->zmove.active) + { + return FALSE; } // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. @@ -9632,6 +9638,12 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move MulModifier(&finalModifier, UQ_4_12(0.25)); } + // Z-Moves and Max Moves bypass Protect and do 25% of their original damage + if (gBattleStruct->zmove.active && IS_BATTLER_PROTECTED(battlerDef)) + { + MulModifier(&finalModifier, UQ_4_12(0.25)); + } + // attacker's abilities switch (abilityAtk) { From 468625ed1dc3c079710ec6c57d92a2d0f31e49eb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 10:32:45 +0100 Subject: [PATCH 152/290] fit long z-moves names on battle textbox --- src/battle_bg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_bg.c b/src/battle_bg.c index e56884b55d..0ed1eec2e7 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -185,7 +185,7 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] = .bg = 0, .tilemapLeft = 2, .tilemapTop = 55, - .width = 12, //for z move names + .width = 16, //for z move names .height = 2, .paletteNum = 5, .baseBlock = 0x0300, From 3338a6b7861436dd664c349408cc8ba3f0c0a229 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 12:31:29 +0100 Subject: [PATCH 153/290] add messages for stockpile effects wear off --- asm/macros/battle_script.inc | 6 ++++ data/battle_scripts_1.s | 15 +++++++++ include/battle_scripts.h | 1 + include/constants/battle.h | 3 +- include/constants/battle_string_ids.h | 3 +- src/battle_message.c | 2 ++ src/battle_script_commands.c | 46 +++++++++++++++++++++------ 7 files changed, 65 insertions(+), 11 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index c96b5fdd2d..3419e2e560 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1317,6 +1317,12 @@ .2byte \holdEffect .4byte \jumpInstr .endm + + .macro dostockpilestatchangeswearoff, battler:req, statChangeInstr:req + callnative BS_DoStockpileStatChangesWearOff + .byte \battler + .4byte \statChangeInstr + .endm .macro jumpifmorethanhalfHP battler:req, jumpInstr:req callnative BS_JumpIfMoreThanHalfHP diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e8b751777b..d7b597c53f 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5570,6 +5570,21 @@ BattleScript_EffectStockpileSpDef:: BattleScript_EffectStockpileEnd: stockpile 1 goto BattleScript_MoveEnd + +BattleScript_MoveEffectStockpileWoreOff:: + dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown + printstring STRINGID_STOCKPILEDEFFECTWOREOFF + waitmessage B_WAIT_TIME_SHORT + return + +BattleScript_StockpileStatChangeDown: + statbuffchange MOVE_EFFECT_AFFECTS_USER, BattleScript_StockpileStatChangeDown_Ret + setgraphicalstatchangevalues + playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 + printfromtable gStatDownStringIds + waitmessage B_WAIT_TIME_LONG +BattleScript_StockpileStatChangeDown_Ret: + return BattleScript_EffectSpitUp:: attackcanceler diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 0751ae8097..f2821af059 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -456,6 +456,7 @@ extern const u8 BattleScript_HealingWishActivates[]; extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_CouldntFullyProtect[]; +extern const u8 BattleScript_MoveEffectStockpileWoreOff[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/include/constants/battle.h b/include/constants/battle.h index c24178cd08..b6eef02830 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -372,8 +372,9 @@ #define MOVE_EFFECT_TRAP_BOTH 70 #define MOVE_EFFECT_DOUBLE_SHOCK 71 #define MOVE_EFFECT_ROUND 72 +#define MOVE_EFFECT_STOCKPILE_WORE_OFF 74 -#define NUM_MOVE_EFFECTS 73 +#define NUM_MOVE_EFFECTS 75 #define MOVE_EFFECT_AFFECTS_USER 0x4000 #define MOVE_EFFECT_CERTAIN 0x8000 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f3e702ec46..1bd82023ed 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -642,8 +642,9 @@ #define STRINGID_PREPARESHELLTRAP 640 #define STRINGID_SHELLTRAPDIDNTWORK 641 #define STRINGID_COULDNTFULLYPROTECT 642 +#define STRINGID_STOCKPILEDEFFECTWOREOFF 643 -#define BATTLESTRINGS_COUNT 643 +#define BATTLESTRINGS_COUNT 644 // 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_message.c b/src/battle_message.c index 29580ded00..74423781e1 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -777,9 +777,11 @@ static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_ATK_NAME_WIT static const u8 sText_PrepareShellTrap[] = _("{B_ATK_NAME_WITH_PREFIX} set a shell trap!"); static const u8 sText_ShellTrapDidntWork[] = _("{B_ATK_NAME_WITH_PREFIX}'s shell trap didn't work!"); static const u8 sText_CouldntFullyProtect[] = _("{B_DEF_NAME_WITH_PREFIX} couldn't fully protect\nitself and got hurt!"); +static const u8 sText_StockpiledEffectWoreOff[] = _("{B_ATK_NAME_WITH_PREFIX}'s stockpiled\neffect wore off!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_STOCKPILEDEFFECTWOREOFF - BATTLESTRINGS_TABLE_START] = sText_StockpiledEffectWoreOff, [STRINGID_COULDNTFULLYPROTECT - BATTLESTRINGS_TABLE_START] = sText_CouldntFullyProtect, [STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN - BATTLESTRINGS_TABLE_START] = sText_AttackerGainedStrengthFromTheFallen, [STRINGID_ABILITYWEAKENEDFSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2d9f6f6c18..023548208e 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2890,6 +2890,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_KNOCK_OFF: case MOVE_EFFECT_SMACK_DOWN: case MOVE_EFFECT_REMOVE_STATUS: + case MOVE_EFFECT_STOCKPILE_WORE_OFF: gBattleStruct->moveEffect2 = gBattleScripting.moveEffect; gBattlescriptCurrInstr++; return; @@ -5609,6 +5610,15 @@ static void Cmd_moveend(void) case MOVE_EFFECT_KNOCK_OFF: effect = TryKnockOffBattleScript(gBattlerTarget); break; + case MOVE_EFFECT_STOCKPILE_WORE_OFF: + if (gDisableStructs[gBattlerAttacker].stockpileCounter != 0) + { + gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + effect = TRUE; + BattleScriptPush(gBattlescriptCurrInstr); + gBattlescriptCurrInstr = BattleScript_MoveEffectStockpileWoreOff; + } + break; case MOVE_EFFECT_SMACK_DOWN: if (!IsBattlerGrounded(gBattlerTarget) && IsBattlerAlive(gBattlerTarget)) { @@ -11651,10 +11661,7 @@ static void Cmd_stockpiletobasedamage(void) if (!(gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0)) { - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; - // Restore stat changes from stockpile. - gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; - gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; + gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF; } gBattlescriptCurrInstr = cmd->nextInstr; } @@ -11689,14 +11696,10 @@ static void Cmd_stockpiletohpheal(void) gBattleMoveDamage *= -1; gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter; - gDisableStructs[gBattlerAttacker].stockpileCounter = 0; + gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF; gBattlescriptCurrInstr = cmd->nextInstr; gBattlerTarget = gBattlerAttacker; } - - // Restore stat changes from stockpile. - gBattleMons[gBattlerAttacker].statStages[STAT_DEF] -= gDisableStructs[gBattlerAttacker].stockpileDef; - gBattleMons[gBattlerAttacker].statStages[STAT_SPDEF] -= gDisableStructs[gBattlerAttacker].stockpileSpDef; } } @@ -16136,6 +16139,31 @@ void BS_JumpIfHoldEffect(void) } } +void BS_DoStockpileStatChangesWearOff(void) +{ + NATIVE_ARGS(u8 battler, const u8 *statChangeInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gDisableStructs[battler].stockpileDef != 0) + { + SET_STATCHANGER(STAT_DEF, abs(gDisableStructs[battler].stockpileDef), TRUE); + gDisableStructs[battler].stockpileDef = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = cmd->statChangeInstr; + } + else if (gDisableStructs[battler].stockpileSpDef) + { + SET_STATCHANGER(STAT_SPDEF, abs(gDisableStructs[battler].stockpileSpDef), TRUE); + gDisableStructs[battler].stockpileSpDef = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = cmd->statChangeInstr; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + static bool32 CriticalCapture(u32 odds) { #if B_CRITICAL_CAPTURE == TRUE From 5a745020eefe7e2ae9e25fada11e92800ced4374 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 16:27:58 +0100 Subject: [PATCH 154/290] add tests for stockpile swallow spit up --- src/battle_message.c | 8 +- test/move_effect_stockpile.c | 252 +++++++++++++++++++++++++++++++++++ test/test_battle.h | 2 +- 3 files changed, 257 insertions(+), 5 deletions(-) create mode 100644 test/move_effect_stockpile.c diff --git a/src/battle_message.c b/src/battle_message.c index 74423781e1..997a6ae099 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -177,8 +177,8 @@ static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\na static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!"); static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down."); static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); -static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!"); -static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nSTOCKPILE any more!"); +static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} stockpiled\n{B_BUFF1}!"); +static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can't\nstockpile any more!"); static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can't\nsleep in an UPROAR!"); static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!"); static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!"); @@ -360,8 +360,8 @@ static const u8 sText_SunlightFaded[] = _("The sunlight faded."); static const u8 sText_StartedHail[] = _("It started to hail!"); static const u8 sText_HailContinues[] = _("Hail continues to fall."); static const u8 sText_HailStopped[] = _("The hail stopped."); -static const u8 sText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!"); -static const u8 sText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!"); +static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!"); +static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!"); static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!"); static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!"); static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!"); diff --git a/test/move_effect_stockpile.c b/test/move_effect_stockpile.c new file mode 100644 index 0000000000..1e62f766d7 --- /dev/null +++ b/test/move_effect_stockpile.c @@ -0,0 +1,252 @@ +#include "global.h" +#include "test_battle.h" + +// These tests cover all 3 effects: Stockpile, Spit up and Swallow. +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STOCKPILE].effect == EFFECT_STOCKPILE); + ASSUME(gBattleMoves[MOVE_SWALLOW].effect == EFFECT_SWALLOW); + ASSUME(gBattleMoves[MOVE_SPIT_UP].effect == EFFECT_SPIT_UP); +} + +SINGLE_BATTLE_TEST("Stockpile's count can go up only to 3") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, MOVE_STOCKPILE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 2!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 3!"); + + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet can't stockpile any more!"); + } +} + +#define MAX_HP_TEST 400 +SINGLE_BATTLE_TEST("Spit Up and Swallow don't work if used without Stockpile") +{ + u32 move; + PARAMETRIZE {move = MOVE_SWALLOW ;} + PARAMETRIZE {move = MOVE_SPIT_UP ;} + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {HP(10), MaxHP(MAX_HP_TEST) ;} + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_STOCKPILE); } + TURN { MOVE(player, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_SWALLOW) + MESSAGE("But it failed to swallow a thing!"); + else + MESSAGE("But it failed to spit up a thing!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_SPIT_UP) { + HP_BAR(opponent); + } + else { + HP_BAR(player); + } + } +} + +SINGLE_BATTLE_TEST("Spit Up's power raises depending on Stockpile's count", s16 damage) +{ + u8 count; + PARAMETRIZE { count = 1;} + PARAMETRIZE { count = 2;} + PARAMETRIZE { count = 3;} + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count != 1){ + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count == 3) { + TURN { MOVE(player, MOVE_STOCKPILE); } + } + } + TURN { MOVE(player, MOVE_SPIT_UP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + if (count != 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 2!"); + if (count == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 3!"); + } + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIT_UP, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(3.0), results[2].damage); + } +} + +SINGLE_BATTLE_TEST("Swallow heals HP depending on Stockpile's count", s16 hpHeal) +{ + u8 count; + PARAMETRIZE { count = 1;} + PARAMETRIZE { count = 2;} + PARAMETRIZE { count = 3;} + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {HP(1), MaxHP(MAX_HP_TEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count != 1){ + TURN { MOVE(player, MOVE_STOCKPILE); } + if (count == 3) { + TURN { MOVE(player, MOVE_STOCKPILE); } + } + } + TURN { MOVE(player, MOVE_SWALLOW); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 1!"); + if (count != 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 2!"); + if (count == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, player); + MESSAGE("Wobbuffet stockpiled 3!"); + } + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_SWALLOW, player); + HP_BAR(player, captureDamage: &results[i].hpHeal); + } FINALLY { + EXPECT_EQ(results[0].hpHeal, -(MAX_HP_TEST / 4)); + EXPECT_EQ(results[1].hpHeal, -(MAX_HP_TEST / 2)); + EXPECT_EQ(results[2].hpHeal, -(MAX_HP_TEST - 1)); + } +} + +SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsical, s16 dmgSpecial) +{ + u16 move; + PARAMETRIZE {move = MOVE_STOCKPILE;} + PARAMETRIZE {move = MOVE_CELEBRATE;} + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_GUST); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + if (move == MOVE_STOCKPILE) { + MESSAGE("Wobbuffet stockpiled 1!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Wobbuffet's defense rose!"); + MESSAGE("Wobbuffet's sp. defense rose!"); + } + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player, captureDamage: &results[i].dmgPyhsical); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); + HP_BAR(player, captureDamage: &results[i].dmgSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[0].dmgPyhsical, Q_4_12(1.5), results[1].dmgPyhsical); + EXPECT_MUL_EQ(results[0].dmgSpecial, Q_4_12(1.5), results[1].dmgSpecial); + } +} + +DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up or Swallow", s16 dmgPyhsicalBefore, s16 dmgPhysicalAfter, s16 dmgSpecialBefore, s16 dmgSpecialAfter) +{ + u8 count; + u16 move; + PARAMETRIZE {count = 1, move = MOVE_SPIT_UP;} + PARAMETRIZE {count = 2, move = MOVE_SWALLOW;} + PARAMETRIZE {count = 3, move = MOVE_SPIT_UP;} + GIVEN { + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + PLAYER(SPECIES_WOBBUFFET) {Speed(4); HP(MAX_HP_TEST - 1); MaxHP(MAX_HP_TEST); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft, criticalHit:FALSE); MOVE(opponentRight, MOVE_GUST, criticalHit:FALSE, target:playerLeft);} + TURN { MOVE(playerLeft, MOVE_STOCKPILE);} + if (count != 1) { + TURN { MOVE(playerLeft, MOVE_STOCKPILE);} + if (count == 3) { + TURN { MOVE(playerLeft, MOVE_STOCKPILE);} + } + } + TURN { MOVE(playerLeft, move, target:opponentLeft); MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft, criticalHit:FALSE); MOVE(opponentRight, MOVE_GUST, target:playerLeft, criticalHit:FALSE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerLeft, captureDamage: &results[i].dmgPyhsicalBefore); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentRight); + HP_BAR(playerLeft, captureDamage: &results[i].dmgSpecialBefore); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, playerLeft); + if (count != 1) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, playerLeft); + if (count == 3) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOCKPILE, playerLeft); + } + } + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (count == 1) { + MESSAGE("Wobbuffet's defense fell!"); + } + else if (count == 2) { + MESSAGE("Wobbuffet's defense harshly fell!"); + } + else { + MESSAGE("Wobbuffet's defense severely fell!"); + } + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (count == 1) { + MESSAGE("Wobbuffet's sp. defense fell!"); + } + else if (count == 2) { + MESSAGE("Wobbuffet's sp. defense harshly fell!"); + } + else { + MESSAGE("Wobbuffet's sp. defense severely fell!"); + } + MESSAGE("Wobbuffet's stockpiled effect wore off!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft); + HP_BAR(playerLeft, captureDamage: &results[i].dmgPhysicalAfter); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponentRight); + HP_BAR(playerLeft, captureDamage: &results[i].dmgSpecialAfter); + } FINALLY { + EXPECT_MUL_EQ(results[0].dmgPyhsicalBefore, UQ_4_12(1.0), results[0].dmgPhysicalAfter); + EXPECT_MUL_EQ(results[0].dmgSpecialBefore, UQ_4_12(1.0), results[0].dmgSpecialAfter); + EXPECT_MUL_EQ(results[1].dmgPyhsicalBefore, UQ_4_12(1.0), results[1].dmgPhysicalAfter); + EXPECT_MUL_EQ(results[1].dmgSpecialBefore, UQ_4_12(1.0), results[1].dmgSpecialAfter); + EXPECT_MUL_EQ(results[2].dmgPyhsicalBefore, UQ_4_12(1.0), results[2].dmgPhysicalAfter); + EXPECT_MUL_EQ(results[2].dmgSpecialBefore, UQ_4_12(1.0), results[2].dmgSpecialAfter); + } +} + diff --git a/test/test_battle.h b/test/test_battle.h index 806e7947e1..16918251b1 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -433,7 +433,7 @@ // NOTE: If the stack is too small the test runner will probably crash // or loop. #define BATTLE_TEST_STACK_SIZE 1024 -#define MAX_QUEUED_EVENTS 16 +#define MAX_QUEUED_EVENTS 25 enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES }; From 930a88b0e2b8d28b4b463d3050a31182d41b3e96 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 27 Feb 2023 18:00:32 +0100 Subject: [PATCH 155/290] z status moves did not work properly --- src/battle_util.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 1625ff919c..8436cb5e25 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1774,7 +1774,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].tauntTimer != 0 && IS_MOVE_STATUS(move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gActiveBattler].tauntTimer != 0 && IS_MOVE_STATUS(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1789,7 +1789,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gActiveBattler].throatChopTimer != 0 && gBattleMoves[move].flags & FLAG_SOUND) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1804,7 +1804,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && GetImprisonedMovesCount(gActiveBattler, move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1819,7 +1819,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && IsGravityPreventingMove(move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsGravityPreventingMove(move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1834,7 +1834,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && IsHealBlockPreventingMove(gActiveBattler, move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsHealBlockPreventingMove(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -1849,7 +1849,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (!gBattleStruct->zmove.active && IsBelchPreventingMove(gActiveBattler, move)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsBelchPreventingMove(gActiveBattler, move)) { gCurrentMove = move; if (gBattleTypeFlags & BATTLE_TYPE_PALACE) @@ -3547,7 +3547,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_DISABLED: // disabled move - if (gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE) { gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3559,7 +3559,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_HEAL_BLOCKED: - if (gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE; gBattleScripting.battler = gBattlerAttacker; @@ -3583,7 +3583,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_TAUNTED: // taunt - if (gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3594,7 +3594,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_IMPRISONED: // imprisoned - if (GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove)) { gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); @@ -3758,7 +3758,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_THROAT_CHOP: - if (gDisableStructs[gBattlerAttacker].throatChopTimer && gBattleMoves[gCurrentMove].flags & FLAG_SOUND) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].throatChopTimer && gBattleMoves[gCurrentMove].flags & FLAG_SOUND) { gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE; CancelMultiTurnMoves(gBattlerAttacker); From 1a2504d5ee460b28c7413f7cadb57dee7a88ae38 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 27 Feb 2023 18:29:29 +0100 Subject: [PATCH 156/290] forgot disable --- 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 8436cb5e25..721113b8b7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1743,7 +1743,7 @@ u8 TrySetCantSelectMoveBattleScript(void) u32 holdEffect = GetBattlerHoldEffect(gActiveBattler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[gActiveBattler]; - if (gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gActiveBattler].disabledMove == move && move != MOVE_NONE) { gBattleScripting.battler = gActiveBattler; gCurrentMove = move; From 21ca6defa705132b6d8bb14501f42ddb9a27a75c Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 27 Feb 2023 18:39:17 +0100 Subject: [PATCH 157/290] forgot torment --- 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 721113b8b7..7a530197d5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1759,7 +1759,7 @@ u8 TrySetCantSelectMoveBattleScript(void) } } - if (move == gLastMoves[gActiveBattler] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT)) + if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && move == gLastMoves[gActiveBattler] && move != MOVE_STRUGGLE && (gBattleMons[gActiveBattler].status2 & STATUS2_TORMENT)) { CancelMultiTurnMoves(gActiveBattler); if (gBattleTypeFlags & BATTLE_TYPE_PALACE) From be8479371343528d67d203ab117ef9cc86a2c061 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 27 Feb 2023 12:47:35 -0500 Subject: [PATCH 158/290] Let scaninc/preproc ignore empty asm files --- tools/preproc/asm_file.cpp | 4 +++- tools/scaninc/asm_file.cpp | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index af16e232d3..04a7410e00 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -41,6 +41,8 @@ AsmFile::AsmFile(std::string filename) : m_filename(filename) if (m_size < 0) FATAL_ERROR("File size of \"%s\" is less than zero.\n", filename.c_str()); + else if (m_size == 0) + return; // Empty file m_buffer = new char[m_size + 1]; @@ -73,7 +75,7 @@ AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) AsmFile::~AsmFile() { - delete[] m_buffer; + if (m_size > 0) delete[] m_buffer; } // Removes comments to simplify further processing. diff --git a/tools/scaninc/asm_file.cpp b/tools/scaninc/asm_file.cpp index 109e604a22..d2cc624ee5 100644 --- a/tools/scaninc/asm_file.cpp +++ b/tools/scaninc/asm_file.cpp @@ -36,6 +36,11 @@ AsmFile::AsmFile(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]; std::rewind(fp); @@ -51,7 +56,7 @@ AsmFile::AsmFile(std::string path) AsmFile::~AsmFile() { - delete[] m_buffer; + if (m_size > 0) delete[] m_buffer; } IncDirectiveType AsmFile::ReadUntilIncDirective(std::string &path) From c92a65dc40977fc9ffafafb2a87c91b2981018f4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 21:09:02 +0100 Subject: [PATCH 159/290] Add config for stockpile raising def stats --- data/battle_scripts_1.s | 5 +++++ include/config/battle.h | 3 ++- test/move_effect_stockpile.c | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index d7b597c53f..eea0bccaca 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -5550,6 +5550,9 @@ BattleScript_EffectStockpile:: waitanimation printfromtable gStockpileUsedStringIds waitmessage B_WAIT_TIME_LONG + .if B_STOCKPILE_RAISES_DEFS < GEN_4 + goto BattleScript_EffectStockpileEnd + .endif jumpifmovehadnoeffect BattleScript_EffectStockpileEnd jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_EffectStockpileDef jumpifstat BS_ATTACKER, CMP_EQUAL, STAT_SPDEF, MAX_STAT_STAGE, BattleScript_EffectStockpileEnd @@ -5572,9 +5575,11 @@ BattleScript_EffectStockpileEnd: goto BattleScript_MoveEnd BattleScript_MoveEffectStockpileWoreOff:: + .if B_STOCKPILE_RAISES_DEFS >= GEN_4 dostockpilestatchangeswearoff BS_ATTACKER, BattleScript_StockpileStatChangeDown printstring STRINGID_STOCKPILEDEFFECTWOREOFF waitmessage B_WAIT_TIME_SHORT + .endif return BattleScript_StockpileStatChangeDown: diff --git a/include/config/battle.h b/include/config/battle.h index a8f4a3e8b4..8fdf596cc3 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -96,7 +96,8 @@ #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. #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. + // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon +#define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. // Ability settings #define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. diff --git a/test/move_effect_stockpile.c b/test/move_effect_stockpile.c index 1e62f766d7..0530355efb 100644 --- a/test/move_effect_stockpile.c +++ b/test/move_effect_stockpile.c @@ -148,6 +148,7 @@ SINGLE_BATTLE_TEST("Stockpile temporarily raises Def and Sp.Def", s16 dmgPyhsica PARAMETRIZE {move = MOVE_STOCKPILE;} PARAMETRIZE {move = MOVE_CELEBRATE;} GIVEN { + ASSUME(B_STOCKPILE_RAISES_DEFS >= GEN_4); ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); PLAYER(SPECIES_WOBBUFFET) {Speed(2); } @@ -183,6 +184,7 @@ DOUBLE_BATTLE_TEST("Stockpile's Def and Sp.Def boost is lost after using Spit Up PARAMETRIZE {count = 2, move = MOVE_SWALLOW;} PARAMETRIZE {count = 3, move = MOVE_SPIT_UP;} GIVEN { + ASSUME(B_STOCKPILE_RAISES_DEFS >= GEN_4); ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); PLAYER(SPECIES_WOBBUFFET) {Speed(4); HP(MAX_HP_TEST - 1); MaxHP(MAX_HP_TEST); } From 501cff84b946d78d26819f9fac4a9783f768a995 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Feb 2023 18:09:54 -0300 Subject: [PATCH 160/290] Removed unused single-frame front pics --- graphics/pokemon/abomasnow/front.png | Bin 1055 -> 0 bytes graphics/pokemon/abra/front.png | Bin 635 -> 0 bytes graphics/pokemon/absol/front.png | Bin 903 -> 0 bytes graphics/pokemon/accelgor/front.png | Bin 681 -> 0 bytes graphics/pokemon/aegislash/blade/front.png | Bin 914 -> 0 bytes graphics/pokemon/aegislash/front.png | Bin 882 -> 0 bytes graphics/pokemon/aerodactyl/front.png | Bin 905 -> 0 bytes graphics/pokemon/aggron/front.png | Bin 1131 -> 0 bytes graphics/pokemon/aipom/front.png | Bin 628 -> 0 bytes graphics/pokemon/alakazam/front.png | Bin 932 -> 0 bytes graphics/pokemon/alomomola/front.png | Bin 588 -> 0 bytes graphics/pokemon/altaria/front.png | Bin 786 -> 0 bytes graphics/pokemon/amaura/front.png | Bin 519 -> 0 bytes graphics/pokemon/ambipom/front.png | Bin 970 -> 0 bytes graphics/pokemon/amoonguss/front.png | Bin 752 -> 0 bytes graphics/pokemon/ampharos/front.png | Bin 684 -> 0 bytes graphics/pokemon/anorith/front.png | Bin 669 -> 0 bytes graphics/pokemon/arbok/front.png | Bin 800 -> 0 bytes graphics/pokemon/arcanine/front.png | Bin 1107 -> 0 bytes graphics/pokemon/arceus/front.png | Bin 1079 -> 0 bytes graphics/pokemon/archen/front.png | Bin 645 -> 0 bytes graphics/pokemon/archeops/front.png | Bin 1091 -> 0 bytes graphics/pokemon/ariados/front.png | Bin 794 -> 0 bytes graphics/pokemon/armaldo/front.png | Bin 1121 -> 0 bytes graphics/pokemon/aromatisse/front.png | Bin 765 -> 0 bytes graphics/pokemon/aron/front.png | Bin 466 -> 0 bytes graphics/pokemon/articuno/front.png | Bin 1038 -> 0 bytes graphics/pokemon/audino/front.png | Bin 633 -> 0 bytes graphics/pokemon/aurorus/front.png | Bin 900 -> 0 bytes graphics/pokemon/avalugg/front.png | Bin 837 -> 0 bytes graphics/pokemon/axew/front.png | Bin 511 -> 0 bytes graphics/pokemon/azelf/front.png | Bin 643 -> 0 bytes graphics/pokemon/azumarill/front.png | Bin 664 -> 0 bytes graphics/pokemon/azurill/front.png | Bin 525 -> 0 bytes graphics/pokemon/bagon/front.png | Bin 525 -> 0 bytes graphics/pokemon/baltoy/front.png | Bin 472 -> 0 bytes graphics/pokemon/banette/front.png | Bin 701 -> 0 bytes graphics/pokemon/barbaracle/front.png | Bin 1215 -> 0 bytes graphics/pokemon/barboach/front.png | Bin 479 -> 0 bytes graphics/pokemon/basculin/front.png | Bin 588 -> 0 bytes graphics/pokemon/bastiodon/front.png | Bin 864 -> 0 bytes graphics/pokemon/bayleef/front.png | Bin 710 -> 0 bytes graphics/pokemon/beartic/front.png | Bin 858 -> 0 bytes graphics/pokemon/beautifly/front.png | Bin 833 -> 0 bytes graphics/pokemon/beedrill/front.png | Bin 840 -> 0 bytes graphics/pokemon/beheeyem/front.png | Bin 667 -> 0 bytes graphics/pokemon/beldum/front.png | Bin 488 -> 0 bytes graphics/pokemon/bellossom/front.png | Bin 518 -> 0 bytes graphics/pokemon/bellsprout/front.png | Bin 479 -> 0 bytes graphics/pokemon/bergmite/front.png | Bin 502 -> 0 bytes graphics/pokemon/bibarel/front.png | Bin 669 -> 0 bytes graphics/pokemon/bidoof/front.png | Bin 518 -> 0 bytes graphics/pokemon/binacle/front.png | Bin 726 -> 0 bytes graphics/pokemon/bisharp/front.png | Bin 894 -> 0 bytes graphics/pokemon/blastoise/front.png | Bin 988 -> 0 bytes graphics/pokemon/blaziken/front.png | Bin 888 -> 0 bytes graphics/pokemon/blissey/front.png | Bin 797 -> 0 bytes graphics/pokemon/blitzle/front.png | Bin 569 -> 0 bytes graphics/pokemon/boldore/front.png | Bin 686 -> 0 bytes graphics/pokemon/bonsly/front.png | Bin 479 -> 0 bytes graphics/pokemon/bouffalant/front.png | Bin 803 -> 0 bytes graphics/pokemon/braixen/front.png | Bin 745 -> 0 bytes graphics/pokemon/braviary/front.png | Bin 973 -> 0 bytes graphics/pokemon/breloom/front.png | Bin 789 -> 0 bytes graphics/pokemon/bronzong/front.png | Bin 859 -> 0 bytes graphics/pokemon/bronzor/front.png | Bin 434 -> 0 bytes graphics/pokemon/budew/front.png | Bin 439 -> 0 bytes graphics/pokemon/buizel/front.png | Bin 613 -> 0 bytes graphics/pokemon/bulbasaur/front.png | Bin 519 -> 0 bytes graphics/pokemon/buneary/front.png | Bin 522 -> 0 bytes graphics/pokemon/bunnelby/front.png | Bin 654 -> 0 bytes graphics/pokemon/burmy/front.png | Bin 488 -> 0 bytes graphics/pokemon/burmy/sandy_cloak/front.png | Bin 454 -> 0 bytes graphics/pokemon/burmy/trash_cloak/front.png | Bin 508 -> 0 bytes graphics/pokemon/butterfree/front.png | Bin 790 -> 0 bytes graphics/pokemon/cacnea/front.png | Bin 642 -> 0 bytes graphics/pokemon/cacturne/front.png | Bin 837 -> 0 bytes graphics/pokemon/camerupt/front.png | Bin 918 -> 0 bytes graphics/pokemon/carbink/front.png | Bin 616 -> 0 bytes graphics/pokemon/carnivine/front.png | Bin 788 -> 0 bytes graphics/pokemon/carracosta/front.png | Bin 920 -> 0 bytes graphics/pokemon/carvanha/front.png | Bin 666 -> 0 bytes graphics/pokemon/cascoon/front.png | Bin 554 -> 0 bytes graphics/pokemon/caterpie/front.png | Bin 496 -> 0 bytes graphics/pokemon/celebi/front.png | Bin 510 -> 0 bytes graphics/pokemon/chandelure/front.png | Bin 673 -> 0 bytes graphics/pokemon/chansey/front.png | Bin 591 -> 0 bytes graphics/pokemon/charizard/front.png | Bin 1007 -> 0 bytes graphics/pokemon/charmander/front.png | Bin 577 -> 0 bytes graphics/pokemon/charmeleon/front.png | Bin 758 -> 0 bytes graphics/pokemon/chatot/front.png | Bin 552 -> 0 bytes graphics/pokemon/cherubi/front.png | Bin 432 -> 0 bytes graphics/pokemon/chesnaught/front.png | Bin 1048 -> 0 bytes graphics/pokemon/chespin/front.png | Bin 575 -> 0 bytes graphics/pokemon/chikorita/front.png | Bin 503 -> 0 bytes graphics/pokemon/chimchar/front.png | Bin 611 -> 0 bytes graphics/pokemon/chimecho/front.png | Bin 482 -> 0 bytes graphics/pokemon/chinchou/front.png | Bin 644 -> 0 bytes graphics/pokemon/chingling/front.png | Bin 447 -> 0 bytes graphics/pokemon/cinccino/front.png | Bin 769 -> 0 bytes graphics/pokemon/clamperl/front.png | Bin 645 -> 0 bytes graphics/pokemon/clauncher/front.png | Bin 604 -> 0 bytes graphics/pokemon/clawitzer/front.png | Bin 956 -> 0 bytes graphics/pokemon/claydol/front.png | Bin 934 -> 0 bytes graphics/pokemon/clefable/front.png | Bin 639 -> 0 bytes graphics/pokemon/clefairy/front.png | Bin 528 -> 0 bytes graphics/pokemon/cleffa/front.png | Bin 398 -> 0 bytes graphics/pokemon/cloyster/front.png | Bin 861 -> 0 bytes graphics/pokemon/cobalion/front.png | Bin 877 -> 0 bytes graphics/pokemon/cofagrigus/front.png | Bin 981 -> 0 bytes graphics/pokemon/combee/front.png | Bin 491 -> 0 bytes graphics/pokemon/combusken/front.png | Bin 721 -> 0 bytes graphics/pokemon/conkeldurr/front.png | Bin 915 -> 0 bytes graphics/pokemon/corphish/front.png | Bin 744 -> 0 bytes graphics/pokemon/corsola/front.png | Bin 575 -> 0 bytes graphics/pokemon/cottonee/front.png | Bin 480 -> 0 bytes graphics/pokemon/cradily/front.png | Bin 860 -> 0 bytes graphics/pokemon/cranidos/front.png | Bin 579 -> 0 bytes graphics/pokemon/crawdaunt/front.png | Bin 989 -> 0 bytes graphics/pokemon/cresselia/front.png | Bin 838 -> 0 bytes graphics/pokemon/croagunk/front.png | Bin 597 -> 0 bytes graphics/pokemon/crobat/front.png | Bin 677 -> 0 bytes graphics/pokemon/croconaw/front.png | Bin 668 -> 0 bytes graphics/pokemon/crustle/front.png | Bin 841 -> 0 bytes graphics/pokemon/cryogonal/front.png | Bin 1100 -> 0 bytes graphics/pokemon/cubchoo/front.png | Bin 521 -> 0 bytes graphics/pokemon/cubone/front.png | Bin 495 -> 0 bytes graphics/pokemon/cyndaquil/front.png | Bin 540 -> 0 bytes graphics/pokemon/darkrai/front.png | Bin 786 -> 0 bytes graphics/pokemon/darmanitan/front.png | Bin 822 -> 0 bytes graphics/pokemon/darmanitan/zen_mode/front.png | Bin 572 -> 0 bytes graphics/pokemon/darumaka/front.png | Bin 529 -> 0 bytes graphics/pokemon/dedenne/front.png | Bin 637 -> 0 bytes graphics/pokemon/deerling/front.png | Bin 525 -> 0 bytes graphics/pokemon/deino/front.png | Bin 520 -> 0 bytes graphics/pokemon/delcatty/front.png | Bin 747 -> 0 bytes graphics/pokemon/delibird/front.png | Bin 717 -> 0 bytes graphics/pokemon/delphox/front.png | Bin 1009 -> 0 bytes graphics/pokemon/deoxys/attack/front.png | Bin 936 -> 0 bytes graphics/pokemon/deoxys/defense/front.png | Bin 822 -> 0 bytes graphics/pokemon/deoxys/front.png | Bin 877 -> 0 bytes graphics/pokemon/deoxys/speed/front.png | Bin 925 -> 0 bytes graphics/pokemon/dewgong/front.png | Bin 643 -> 0 bytes graphics/pokemon/dewott/front.png | Bin 575 -> 0 bytes graphics/pokemon/dialga/front.png | Bin 1149 -> 0 bytes graphics/pokemon/diancie/front.png | Bin 812 -> 0 bytes graphics/pokemon/diggersby/front.png | Bin 839 -> 0 bytes graphics/pokemon/diglett/front.png | Bin 371 -> 0 bytes graphics/pokemon/ditto/front.png | Bin 343 -> 0 bytes graphics/pokemon/dodrio/front.png | Bin 944 -> 0 bytes graphics/pokemon/doduo/front.png | Bin 603 -> 0 bytes graphics/pokemon/donphan/front.png | Bin 878 -> 0 bytes graphics/pokemon/doublade/front.png | Bin 904 -> 0 bytes graphics/pokemon/dragalge/front.png | Bin 850 -> 0 bytes graphics/pokemon/dragonair/front.png | Bin 727 -> 0 bytes graphics/pokemon/dragonite/front.png | Bin 974 -> 0 bytes graphics/pokemon/drapion/front.png | Bin 1069 -> 0 bytes graphics/pokemon/dratini/front.png | Bin 476 -> 0 bytes graphics/pokemon/drifblim/front.png | Bin 753 -> 0 bytes graphics/pokemon/drifloon/front.png | Bin 460 -> 0 bytes graphics/pokemon/drilbur/front.png | Bin 672 -> 0 bytes graphics/pokemon/drowzee/front.png | Bin 632 -> 0 bytes graphics/pokemon/druddigon/front.png | Bin 960 -> 0 bytes graphics/pokemon/ducklett/front.png | Bin 497 -> 0 bytes graphics/pokemon/dugtrio/front.png | Bin 587 -> 0 bytes graphics/pokemon/dunsparce/front.png | Bin 624 -> 0 bytes graphics/pokemon/duosion/front.png | Bin 498 -> 0 bytes graphics/pokemon/durant/front.png | Bin 526 -> 0 bytes graphics/pokemon/dusclops/front.png | Bin 857 -> 0 bytes graphics/pokemon/dusknoir/front.png | Bin 907 -> 0 bytes graphics/pokemon/duskull/front.png | Bin 509 -> 0 bytes graphics/pokemon/dustox/front.png | Bin 799 -> 0 bytes graphics/pokemon/dwebble/front.png | Bin 524 -> 0 bytes graphics/pokemon/eelektrik/front.png | Bin 684 -> 0 bytes graphics/pokemon/eelektross/front.png | Bin 942 -> 0 bytes graphics/pokemon/eevee/front.png | Bin 535 -> 0 bytes graphics/pokemon/egg/front.png | Bin 318 -> 0 bytes graphics/pokemon/ekans/front.png | Bin 593 -> 0 bytes graphics/pokemon/electabuzz/front.png | Bin 830 -> 0 bytes graphics/pokemon/electivire/front.png | Bin 1066 -> 0 bytes graphics/pokemon/electrike/front.png | Bin 551 -> 0 bytes graphics/pokemon/electrode/front.png | Bin 472 -> 0 bytes graphics/pokemon/elekid/front.png | Bin 609 -> 0 bytes graphics/pokemon/elgyem/front.png | Bin 506 -> 0 bytes graphics/pokemon/emboar/front.png | Bin 1166 -> 0 bytes graphics/pokemon/emolga/front.png | Bin 648 -> 0 bytes graphics/pokemon/empoleon/front.png | Bin 867 -> 0 bytes graphics/pokemon/entei/front.png | Bin 1022 -> 0 bytes graphics/pokemon/escavalier/front.png | Bin 840 -> 0 bytes graphics/pokemon/espeon/front.png | Bin 616 -> 0 bytes graphics/pokemon/espurr/front.png | Bin 492 -> 0 bytes graphics/pokemon/excadrill/front.png | Bin 905 -> 0 bytes graphics/pokemon/exeggcute/front.png | Bin 636 -> 0 bytes graphics/pokemon/exeggutor/front.png | Bin 916 -> 0 bytes graphics/pokemon/exploud/front.png | Bin 1135 -> 0 bytes graphics/pokemon/farfetchd/front.png | Bin 752 -> 0 bytes graphics/pokemon/fearow/front.png | Bin 1025 -> 0 bytes graphics/pokemon/feebas/front.png | Bin 592 -> 0 bytes graphics/pokemon/fennekin/front.png | Bin 655 -> 0 bytes graphics/pokemon/feraligatr/front.png | Bin 982 -> 0 bytes graphics/pokemon/ferroseed/front.png | Bin 470 -> 0 bytes graphics/pokemon/ferrothorn/front.png | Bin 895 -> 0 bytes graphics/pokemon/finneon/front.png | Bin 469 -> 0 bytes graphics/pokemon/flaaffy/front.png | Bin 655 -> 0 bytes graphics/pokemon/flabebe/front.png | Bin 760 -> 0 bytes graphics/pokemon/flareon/front.png | Bin 726 -> 0 bytes graphics/pokemon/fletchinder/front.png | Bin 663 -> 0 bytes graphics/pokemon/fletchling/front.png | Bin 423 -> 0 bytes graphics/pokemon/floatzel/front.png | Bin 873 -> 0 bytes graphics/pokemon/floette/front.png | Bin 624 -> 0 bytes graphics/pokemon/florges/front.png | Bin 947 -> 0 bytes graphics/pokemon/flygon/front.png | Bin 949 -> 0 bytes graphics/pokemon/foongus/front.png | Bin 389 -> 0 bytes graphics/pokemon/forretress/front.png | Bin 824 -> 0 bytes graphics/pokemon/fraxure/front.png | Bin 778 -> 0 bytes graphics/pokemon/frillish/front.png | Bin 645 -> 0 bytes graphics/pokemon/froakie/front.png | Bin 561 -> 0 bytes graphics/pokemon/frogadier/front.png | Bin 699 -> 0 bytes graphics/pokemon/froslass/front.png | Bin 658 -> 0 bytes graphics/pokemon/furfrou/dandy_trim/front.png | Bin 732 -> 0 bytes .../pokemon/furfrou/debutante_trim/front.png | Bin 760 -> 0 bytes graphics/pokemon/furfrou/diamond_trim/front.png | Bin 740 -> 0 bytes graphics/pokemon/furfrou/front.png | Bin 751 -> 0 bytes graphics/pokemon/furfrou/heart_trim/front.png | Bin 785 -> 0 bytes graphics/pokemon/furfrou/kabuki_trim/front.png | Bin 787 -> 0 bytes graphics/pokemon/furfrou/la_reine_trim/front.png | Bin 716 -> 0 bytes graphics/pokemon/furfrou/matron_trim/front.png | Bin 728 -> 0 bytes graphics/pokemon/furfrou/pharaoh_trim/front.png | Bin 742 -> 0 bytes graphics/pokemon/furfrou/star_trim/front.png | Bin 790 -> 0 bytes graphics/pokemon/furret/front.png | Bin 658 -> 0 bytes graphics/pokemon/gabite/front.png | Bin 866 -> 0 bytes graphics/pokemon/gallade/front.png | Bin 767 -> 0 bytes graphics/pokemon/galvantula/front.png | Bin 759 -> 0 bytes graphics/pokemon/garbodor/front.png | Bin 1047 -> 0 bytes graphics/pokemon/garchomp/front.png | Bin 1024 -> 0 bytes graphics/pokemon/gardevoir/front.png | Bin 740 -> 0 bytes graphics/pokemon/gastly/front.png | Bin 601 -> 0 bytes graphics/pokemon/gastrodon/east_sea/front.png | Bin 637 -> 0 bytes graphics/pokemon/gastrodon/front.png | Bin 614 -> 0 bytes graphics/pokemon/genesect/front.png | Bin 828 -> 0 bytes graphics/pokemon/gengar/front.png | Bin 702 -> 0 bytes graphics/pokemon/geodude/front.png | Bin 510 -> 0 bytes graphics/pokemon/gible/front.png | Bin 630 -> 0 bytes graphics/pokemon/gigalith/front.png | Bin 925 -> 0 bytes graphics/pokemon/girafarig/front.png | Bin 833 -> 0 bytes graphics/pokemon/giratina/front.png | Bin 1271 -> 0 bytes graphics/pokemon/giratina/origin/front.png | Bin 1283 -> 0 bytes graphics/pokemon/glaceon/front.png | Bin 602 -> 0 bytes graphics/pokemon/glalie/front.png | Bin 879 -> 0 bytes graphics/pokemon/glameow/front.png | Bin 729 -> 0 bytes graphics/pokemon/gligar/front.png | Bin 851 -> 0 bytes graphics/pokemon/gliscor/front.png | Bin 940 -> 0 bytes graphics/pokemon/gloom/front.png | Bin 657 -> 0 bytes graphics/pokemon/gogoat/front.png | Bin 1032 -> 0 bytes graphics/pokemon/golbat/front.png | Bin 782 -> 0 bytes graphics/pokemon/goldeen/front.png | Bin 710 -> 0 bytes graphics/pokemon/golduck/front.png | Bin 756 -> 0 bytes graphics/pokemon/golem/front.png | Bin 886 -> 0 bytes graphics/pokemon/golett/front.png | Bin 804 -> 0 bytes graphics/pokemon/golurk/front.png | Bin 1142 -> 0 bytes graphics/pokemon/goodra/front.png | Bin 856 -> 0 bytes graphics/pokemon/goomy/front.png | Bin 439 -> 0 bytes graphics/pokemon/gorebyss/front.png | Bin 646 -> 0 bytes graphics/pokemon/gothita/front.png | Bin 495 -> 0 bytes graphics/pokemon/gothitelle/front.png | Bin 873 -> 0 bytes graphics/pokemon/gothorita/front.png | Bin 648 -> 0 bytes graphics/pokemon/gourgeist/front.png | Bin 861 -> 0 bytes graphics/pokemon/gourgeist/large/front.png | Bin 982 -> 0 bytes graphics/pokemon/gourgeist/small/front.png | Bin 909 -> 0 bytes graphics/pokemon/gourgeist/super/front.png | Bin 988 -> 0 bytes graphics/pokemon/granbull/front.png | Bin 791 -> 0 bytes graphics/pokemon/graveler/front.png | Bin 747 -> 0 bytes graphics/pokemon/greninja/ash/front.png | Bin 791 -> 0 bytes graphics/pokemon/greninja/front.png | Bin 899 -> 0 bytes graphics/pokemon/grimer/front.png | Bin 665 -> 0 bytes graphics/pokemon/grotle/front.png | Bin 922 -> 0 bytes graphics/pokemon/groudon/front.png | Bin 1228 -> 0 bytes graphics/pokemon/grovyle/front.png | Bin 876 -> 0 bytes graphics/pokemon/growlithe/front.png | Bin 631 -> 0 bytes graphics/pokemon/grumpig/front.png | Bin 896 -> 0 bytes graphics/pokemon/gulpin/front.png | Bin 416 -> 0 bytes graphics/pokemon/gurdurr/front.png | Bin 844 -> 0 bytes graphics/pokemon/gyarados/front.png | Bin 1211 -> 0 bytes graphics/pokemon/happiny/front.png | Bin 470 -> 0 bytes graphics/pokemon/hariyama/front.png | Bin 911 -> 0 bytes graphics/pokemon/haunter/front.png | Bin 589 -> 0 bytes graphics/pokemon/hawlucha/front.png | Bin 792 -> 0 bytes graphics/pokemon/haxorus/front.png | Bin 979 -> 0 bytes graphics/pokemon/heatmor/front.png | Bin 887 -> 0 bytes graphics/pokemon/heatran/front.png | Bin 938 -> 0 bytes graphics/pokemon/heliolisk/front.png | Bin 596 -> 0 bytes graphics/pokemon/helioptile/front.png | Bin 519 -> 0 bytes graphics/pokemon/heracross/front.png | Bin 724 -> 0 bytes graphics/pokemon/herdier/front.png | Bin 678 -> 0 bytes graphics/pokemon/hippopotas/front.png | Bin 554 -> 0 bytes graphics/pokemon/hippowdon/front.png | Bin 944 -> 0 bytes graphics/pokemon/hitmonchan/front.png | Bin 730 -> 0 bytes graphics/pokemon/hitmonlee/front.png | Bin 666 -> 0 bytes graphics/pokemon/hitmontop/front.png | Bin 817 -> 0 bytes graphics/pokemon/ho_oh/front.png | Bin 1280 -> 0 bytes graphics/pokemon/honchkrow/front.png | Bin 811 -> 0 bytes graphics/pokemon/honedge/front.png | Bin 699 -> 0 bytes graphics/pokemon/hoopa/front.png | Bin 768 -> 0 bytes graphics/pokemon/hoopa/unbound/front.png | Bin 1287 -> 0 bytes graphics/pokemon/hoothoot/front.png | Bin 548 -> 0 bytes graphics/pokemon/hoppip/front.png | Bin 529 -> 0 bytes graphics/pokemon/horsea/front.png | Bin 452 -> 0 bytes graphics/pokemon/houndoom/front.png | Bin 866 -> 0 bytes graphics/pokemon/houndour/front.png | Bin 570 -> 0 bytes graphics/pokemon/huntail/front.png | Bin 934 -> 0 bytes graphics/pokemon/hydreigon/front.png | Bin 1074 -> 0 bytes graphics/pokemon/hypno/front.png | Bin 821 -> 0 bytes graphics/pokemon/igglybuff/front.png | Bin 407 -> 0 bytes graphics/pokemon/illumise/front.png | Bin 646 -> 0 bytes graphics/pokemon/infernape/front.png | Bin 943 -> 0 bytes graphics/pokemon/inkay/front.png | Bin 579 -> 0 bytes graphics/pokemon/ivysaur/front.png | Bin 737 -> 0 bytes graphics/pokemon/jellicent/front.png | Bin 807 -> 0 bytes graphics/pokemon/jigglypuff/front.png | Bin 478 -> 0 bytes graphics/pokemon/jirachi/front.png | Bin 625 -> 0 bytes graphics/pokemon/jolteon/front.png | Bin 651 -> 0 bytes graphics/pokemon/joltik/front.png | Bin 403 -> 0 bytes graphics/pokemon/jumpluff/front.png | Bin 698 -> 0 bytes graphics/pokemon/jynx/front.png | Bin 724 -> 0 bytes graphics/pokemon/kabuto/front.png | Bin 445 -> 0 bytes graphics/pokemon/kabutops/front.png | Bin 834 -> 0 bytes graphics/pokemon/kadabra/front.png | Bin 917 -> 0 bytes graphics/pokemon/kakuna/front.png | Bin 451 -> 0 bytes graphics/pokemon/kangaskhan/front.png | Bin 974 -> 0 bytes graphics/pokemon/karrablast/front.png | Bin 506 -> 0 bytes graphics/pokemon/kecleon/front.png | Bin 722 -> 0 bytes graphics/pokemon/keldeo/front.png | Bin 778 -> 0 bytes graphics/pokemon/kingdra/front.png | Bin 788 -> 0 bytes graphics/pokemon/kingler/front.png | Bin 805 -> 0 bytes graphics/pokemon/kirlia/front.png | Bin 528 -> 0 bytes graphics/pokemon/klang/front.png | Bin 796 -> 0 bytes graphics/pokemon/klefki/front.png | Bin 712 -> 0 bytes graphics/pokemon/klink/front.png | Bin 516 -> 0 bytes graphics/pokemon/klinklang/front.png | Bin 1034 -> 0 bytes graphics/pokemon/koffing/front.png | Bin 657 -> 0 bytes graphics/pokemon/krabby/front.png | Bin 652 -> 0 bytes graphics/pokemon/kricketot/front.png | Bin 564 -> 0 bytes graphics/pokemon/kricketune/front.png | Bin 772 -> 0 bytes graphics/pokemon/krokorok/front.png | Bin 741 -> 0 bytes graphics/pokemon/krookodile/front.png | Bin 1152 -> 0 bytes graphics/pokemon/kyogre/front.png | Bin 1029 -> 0 bytes graphics/pokemon/kyurem/black/front.png | Bin 1228 -> 0 bytes graphics/pokemon/kyurem/front.png | Bin 949 -> 0 bytes graphics/pokemon/kyurem/white/front.png | Bin 1260 -> 0 bytes graphics/pokemon/lairon/front.png | Bin 877 -> 0 bytes graphics/pokemon/lampent/front.png | Bin 508 -> 0 bytes graphics/pokemon/landorus/front.png | Bin 1025 -> 0 bytes graphics/pokemon/landorus/therian/front.png | Bin 1053 -> 0 bytes graphics/pokemon/lanturn/front.png | Bin 680 -> 0 bytes graphics/pokemon/lapras/front.png | Bin 779 -> 0 bytes graphics/pokemon/larvesta/front.png | Bin 541 -> 0 bytes graphics/pokemon/larvitar/front.png | Bin 454 -> 0 bytes graphics/pokemon/latias/front.png | Bin 752 -> 0 bytes graphics/pokemon/latios/front.png | Bin 942 -> 0 bytes graphics/pokemon/leafeon/front.png | Bin 737 -> 0 bytes graphics/pokemon/leavanny/front.png | Bin 671 -> 0 bytes graphics/pokemon/ledian/front.png | Bin 738 -> 0 bytes graphics/pokemon/ledyba/front.png | Bin 674 -> 0 bytes graphics/pokemon/lickilicky/front.png | Bin 741 -> 0 bytes graphics/pokemon/lickitung/front.png | Bin 787 -> 0 bytes graphics/pokemon/liepard/front.png | Bin 783 -> 0 bytes graphics/pokemon/lileep/front.png | Bin 677 -> 0 bytes graphics/pokemon/lilligant/front.png | Bin 887 -> 0 bytes graphics/pokemon/lillipup/front.png | Bin 524 -> 0 bytes graphics/pokemon/linoone/front.png | Bin 617 -> 0 bytes graphics/pokemon/litleo/front.png | Bin 577 -> 0 bytes graphics/pokemon/litwick/front.png | Bin 394 -> 0 bytes graphics/pokemon/lombre/front.png | Bin 618 -> 0 bytes graphics/pokemon/lopunny/front.png | Bin 783 -> 0 bytes graphics/pokemon/lotad/front.png | Bin 492 -> 0 bytes graphics/pokemon/loudred/front.png | Bin 937 -> 0 bytes graphics/pokemon/lucario/front.png | Bin 671 -> 0 bytes graphics/pokemon/ludicolo/front.png | Bin 1035 -> 0 bytes graphics/pokemon/lugia/front.png | Bin 946 -> 0 bytes graphics/pokemon/lumineon/front.png | Bin 650 -> 0 bytes graphics/pokemon/lunatone/front.png | Bin 585 -> 0 bytes graphics/pokemon/luvdisc/front.png | Bin 334 -> 0 bytes graphics/pokemon/luxio/front.png | Bin 676 -> 0 bytes graphics/pokemon/luxray/front.png | Bin 832 -> 0 bytes graphics/pokemon/machamp/front.png | Bin 1013 -> 0 bytes graphics/pokemon/machoke/front.png | Bin 787 -> 0 bytes graphics/pokemon/machop/front.png | Bin 568 -> 0 bytes graphics/pokemon/magby/front.png | Bin 477 -> 0 bytes graphics/pokemon/magcargo/front.png | Bin 915 -> 0 bytes graphics/pokemon/magikarp/front.png | Bin 676 -> 0 bytes graphics/pokemon/magmar/front.png | Bin 919 -> 0 bytes graphics/pokemon/magmortar/front.png | Bin 1087 -> 0 bytes graphics/pokemon/magnemite/front.png | Bin 417 -> 0 bytes graphics/pokemon/magneton/front.png | Bin 850 -> 0 bytes graphics/pokemon/magnezone/front.png | Bin 869 -> 0 bytes graphics/pokemon/makuhita/front.png | Bin 615 -> 0 bytes graphics/pokemon/malamar/front.png | Bin 979 -> 0 bytes graphics/pokemon/mamoswine/front.png | Bin 1036 -> 0 bytes graphics/pokemon/manaphy/front.png | Bin 545 -> 0 bytes graphics/pokemon/mandibuzz/front.png | Bin 859 -> 0 bytes graphics/pokemon/manectric/front.png | Bin 789 -> 0 bytes graphics/pokemon/mankey/front.png | Bin 620 -> 0 bytes graphics/pokemon/mantine/front.png | Bin 636 -> 0 bytes graphics/pokemon/mantyke/front.png | Bin 545 -> 0 bytes graphics/pokemon/maractus/front.png | Bin 885 -> 0 bytes graphics/pokemon/mareep/front.png | Bin 593 -> 0 bytes graphics/pokemon/marill/front.png | Bin 547 -> 0 bytes graphics/pokemon/marowak/front.png | Bin 610 -> 0 bytes graphics/pokemon/marshadow/front.png | Bin 627 -> 0 bytes graphics/pokemon/marshtomp/front.png | Bin 665 -> 0 bytes graphics/pokemon/masquerain/front.png | Bin 791 -> 0 bytes graphics/pokemon/mawile/front.png | Bin 764 -> 0 bytes graphics/pokemon/medicham/front.png | Bin 658 -> 0 bytes graphics/pokemon/meditite/front.png | Bin 602 -> 0 bytes graphics/pokemon/meganium/front.png | Bin 852 -> 0 bytes graphics/pokemon/meloetta/front.png | Bin 626 -> 0 bytes graphics/pokemon/meowstic/female/front.png | Bin 668 -> 0 bytes graphics/pokemon/meowstic/front.png | Bin 729 -> 0 bytes graphics/pokemon/meowth/front.png | Bin 620 -> 0 bytes graphics/pokemon/mesprit/front.png | Bin 690 -> 0 bytes graphics/pokemon/metagross/front.png | Bin 904 -> 0 bytes graphics/pokemon/metang/front.png | Bin 816 -> 0 bytes graphics/pokemon/metapod/front.png | Bin 412 -> 0 bytes graphics/pokemon/mew/front.png | Bin 525 -> 0 bytes graphics/pokemon/mewtwo/front.png | Bin 847 -> 0 bytes graphics/pokemon/mienfoo/front.png | Bin 563 -> 0 bytes graphics/pokemon/mienshao/front.png | Bin 781 -> 0 bytes graphics/pokemon/mightyena/front.png | Bin 820 -> 0 bytes graphics/pokemon/milotic/front.png | Bin 936 -> 0 bytes graphics/pokemon/miltank/front.png | Bin 771 -> 0 bytes graphics/pokemon/mime_jr/front.png | Bin 564 -> 0 bytes graphics/pokemon/minccino/front.png | Bin 613 -> 0 bytes graphics/pokemon/minun/front.png | Bin 454 -> 0 bytes graphics/pokemon/misdreavus/front.png | Bin 587 -> 0 bytes graphics/pokemon/mismagius/front.png | Bin 727 -> 0 bytes graphics/pokemon/moltres/front.png | Bin 869 -> 0 bytes graphics/pokemon/monferno/front.png | Bin 777 -> 0 bytes graphics/pokemon/mothim/front.png | Bin 716 -> 0 bytes graphics/pokemon/mr_mime/front.png | Bin 780 -> 0 bytes graphics/pokemon/mudkip/front.png | Bin 539 -> 0 bytes graphics/pokemon/muk/front.png | Bin 738 -> 0 bytes graphics/pokemon/munchlax/front.png | Bin 575 -> 0 bytes graphics/pokemon/munna/front.png | Bin 430 -> 0 bytes graphics/pokemon/murkrow/front.png | Bin 529 -> 0 bytes graphics/pokemon/musharna/front.png | Bin 636 -> 0 bytes graphics/pokemon/natu/front.png | Bin 381 -> 0 bytes graphics/pokemon/nidoking/front.png | Bin 1016 -> 0 bytes graphics/pokemon/nidoqueen/front.png | Bin 859 -> 0 bytes graphics/pokemon/nidoran_f/front.png | Bin 489 -> 0 bytes graphics/pokemon/nidoran_m/front.png | Bin 519 -> 0 bytes graphics/pokemon/nidorina/front.png | Bin 663 -> 0 bytes graphics/pokemon/nidorino/front.png | Bin 691 -> 0 bytes graphics/pokemon/nincada/front.png | Bin 563 -> 0 bytes graphics/pokemon/ninetales/front.png | Bin 874 -> 0 bytes graphics/pokemon/ninjask/front.png | Bin 791 -> 0 bytes graphics/pokemon/noctowl/front.png | Bin 702 -> 0 bytes graphics/pokemon/noibat/front.png | Bin 687 -> 0 bytes graphics/pokemon/noivern/front.png | Bin 972 -> 0 bytes graphics/pokemon/nosepass/front.png | Bin 516 -> 0 bytes graphics/pokemon/numel/front.png | Bin 541 -> 0 bytes graphics/pokemon/nuzleaf/front.png | Bin 661 -> 0 bytes graphics/pokemon/octillery/front.png | Bin 645 -> 0 bytes graphics/pokemon/oddish/front.png | Bin 454 -> 0 bytes graphics/pokemon/omanyte/front.png | Bin 497 -> 0 bytes graphics/pokemon/omastar/front.png | Bin 863 -> 0 bytes graphics/pokemon/onix/front.png | Bin 832 -> 0 bytes graphics/pokemon/oshawott/front.png | Bin 469 -> 0 bytes graphics/pokemon/pachirisu/front.png | Bin 531 -> 0 bytes graphics/pokemon/palkia/front.png | Bin 1243 -> 0 bytes graphics/pokemon/palpitoad/front.png | Bin 630 -> 0 bytes graphics/pokemon/pancham/front.png | Bin 491 -> 0 bytes graphics/pokemon/pangoro/front.png | Bin 895 -> 0 bytes graphics/pokemon/panpour/front.png | Bin 650 -> 0 bytes graphics/pokemon/pansage/front.png | Bin 625 -> 0 bytes graphics/pokemon/pansear/front.png | Bin 591 -> 0 bytes graphics/pokemon/paras/front.png | Bin 582 -> 0 bytes graphics/pokemon/parasect/front.png | Bin 659 -> 0 bytes graphics/pokemon/patrat/front.png | Bin 600 -> 0 bytes graphics/pokemon/pawniard/front.png | Bin 584 -> 0 bytes graphics/pokemon/pelipper/front.png | Bin 774 -> 0 bytes graphics/pokemon/persian/front.png | Bin 769 -> 0 bytes graphics/pokemon/petilil/front.png | Bin 468 -> 0 bytes graphics/pokemon/phanpy/front.png | Bin 461 -> 0 bytes graphics/pokemon/phantump/front.png | Bin 570 -> 0 bytes graphics/pokemon/phione/front.png | Bin 510 -> 0 bytes graphics/pokemon/pichu/front.png | Bin 445 -> 0 bytes graphics/pokemon/pidgeot/front.png | Bin 949 -> 0 bytes graphics/pokemon/pidgeotto/front.png | Bin 694 -> 0 bytes graphics/pokemon/pidgey/front.png | Bin 549 -> 0 bytes graphics/pokemon/pidove/front.png | Bin 483 -> 0 bytes graphics/pokemon/pignite/front.png | Bin 745 -> 0 bytes graphics/pokemon/pikachu/front.png | Bin 587 -> 0 bytes graphics/pokemon/piloswine/front.png | Bin 624 -> 0 bytes graphics/pokemon/pineco/front.png | Bin 544 -> 0 bytes graphics/pokemon/pinsir/front.png | Bin 851 -> 0 bytes graphics/pokemon/piplup/front.png | Bin 491 -> 0 bytes graphics/pokemon/plusle/front.png | Bin 487 -> 0 bytes graphics/pokemon/politoed/front.png | Bin 720 -> 0 bytes graphics/pokemon/poliwag/front.png | Bin 540 -> 0 bytes graphics/pokemon/poliwhirl/front.png | Bin 715 -> 0 bytes graphics/pokemon/poliwrath/front.png | Bin 779 -> 0 bytes graphics/pokemon/ponyta/front.png | Bin 658 -> 0 bytes graphics/pokemon/poochyena/front.png | Bin 563 -> 0 bytes graphics/pokemon/porygon/front.png | Bin 490 -> 0 bytes graphics/pokemon/porygon2/front.png | Bin 480 -> 0 bytes graphics/pokemon/porygon_z/front.png | Bin 564 -> 0 bytes graphics/pokemon/primeape/front.png | Bin 823 -> 0 bytes graphics/pokemon/prinplup/front.png | Bin 665 -> 0 bytes graphics/pokemon/probopass/front.png | Bin 842 -> 0 bytes graphics/pokemon/psyduck/front.png | Bin 495 -> 0 bytes graphics/pokemon/pumpkaboo/front.png | Bin 586 -> 0 bytes graphics/pokemon/pumpkaboo/large/front.png | Bin 607 -> 0 bytes graphics/pokemon/pumpkaboo/small/front.png | Bin 554 -> 0 bytes graphics/pokemon/pumpkaboo/super/front.png | Bin 634 -> 0 bytes graphics/pokemon/pupitar/front.png | Bin 509 -> 0 bytes graphics/pokemon/purrloin/front.png | Bin 529 -> 0 bytes graphics/pokemon/purugly/front.png | Bin 942 -> 0 bytes graphics/pokemon/pyroar/front.png | Bin 1049 -> 0 bytes graphics/pokemon/quagsire/front.png | Bin 621 -> 0 bytes graphics/pokemon/question_mark/circled/front.png | Bin 397 -> 0 bytes graphics/pokemon/question_mark/double/front.png | Bin 306 -> 0 bytes graphics/pokemon/quilava/front.png | Bin 599 -> 0 bytes graphics/pokemon/quilladin/front.png | Bin 710 -> 0 bytes graphics/pokemon/qwilfish/front.png | Bin 537 -> 0 bytes graphics/pokemon/raichu/front.png | Bin 805 -> 0 bytes graphics/pokemon/raikou/front.png | Bin 968 -> 0 bytes graphics/pokemon/ralts/front.png | Bin 445 -> 0 bytes graphics/pokemon/rampardos/front.png | Bin 1006 -> 0 bytes graphics/pokemon/rapidash/front.png | Bin 1012 -> 0 bytes graphics/pokemon/raticate/front.png | Bin 718 -> 0 bytes graphics/pokemon/rattata/front.png | Bin 528 -> 0 bytes graphics/pokemon/rayquaza/front.png | Bin 1030 -> 0 bytes graphics/pokemon/regice/front.png | Bin 919 -> 0 bytes graphics/pokemon/regigigas/front.png | Bin 1198 -> 0 bytes graphics/pokemon/regirock/front.png | Bin 1049 -> 0 bytes graphics/pokemon/registeel/front.png | Bin 899 -> 0 bytes graphics/pokemon/relicanth/front.png | Bin 742 -> 0 bytes graphics/pokemon/remoraid/front.png | Bin 568 -> 0 bytes graphics/pokemon/reshiram/front.png | Bin 1053 -> 0 bytes graphics/pokemon/reuniclus/front.png | Bin 720 -> 0 bytes graphics/pokemon/rhydon/front.png | Bin 976 -> 0 bytes graphics/pokemon/rhyhorn/front.png | Bin 681 -> 0 bytes graphics/pokemon/rhyperior/front.png | Bin 1213 -> 0 bytes graphics/pokemon/riolu/front.png | Bin 537 -> 0 bytes graphics/pokemon/roggenrola/front.png | Bin 387 -> 0 bytes graphics/pokemon/roselia/front.png | Bin 680 -> 0 bytes graphics/pokemon/roserade/front.png | Bin 672 -> 0 bytes graphics/pokemon/rotom/fan/front.png | Bin 699 -> 0 bytes graphics/pokemon/rotom/front.png | Bin 457 -> 0 bytes graphics/pokemon/rotom/frost/front.png | Bin 691 -> 0 bytes graphics/pokemon/rotom/heat/front.png | Bin 644 -> 0 bytes graphics/pokemon/rotom/mow/front.png | Bin 672 -> 0 bytes graphics/pokemon/rotom/wash/front.png | Bin 756 -> 0 bytes graphics/pokemon/rufflet/front.png | Bin 608 -> 0 bytes graphics/pokemon/sableye/front.png | Bin 606 -> 0 bytes graphics/pokemon/salamence/front.png | Bin 1073 -> 0 bytes graphics/pokemon/samurott/front.png | Bin 992 -> 0 bytes graphics/pokemon/sandile/front.png | Bin 480 -> 0 bytes graphics/pokemon/sandshrew/front.png | Bin 582 -> 0 bytes graphics/pokemon/sandslash/front.png | Bin 792 -> 0 bytes graphics/pokemon/sawk/front.png | Bin 835 -> 0 bytes graphics/pokemon/sawsbuck/front.png | Bin 728 -> 0 bytes graphics/pokemon/scatterbug/front.png | Bin 428 -> 0 bytes graphics/pokemon/sceptile/front.png | Bin 936 -> 0 bytes graphics/pokemon/scizor/front.png | Bin 958 -> 0 bytes graphics/pokemon/scolipede/front.png | Bin 954 -> 0 bytes graphics/pokemon/scrafty/front.png | Bin 719 -> 0 bytes graphics/pokemon/scraggy/front.png | Bin 502 -> 0 bytes graphics/pokemon/scyther/front.png | Bin 758 -> 0 bytes graphics/pokemon/seadra/front.png | Bin 607 -> 0 bytes graphics/pokemon/seaking/front.png | Bin 883 -> 0 bytes graphics/pokemon/sealeo/front.png | Bin 717 -> 0 bytes graphics/pokemon/seedot/front.png | Bin 449 -> 0 bytes graphics/pokemon/seel/front.png | Bin 622 -> 0 bytes graphics/pokemon/seismitoad/front.png | Bin 977 -> 0 bytes graphics/pokemon/sentret/front.png | Bin 597 -> 0 bytes graphics/pokemon/serperior/front.png | Bin 902 -> 0 bytes graphics/pokemon/servine/front.png | Bin 562 -> 0 bytes graphics/pokemon/seviper/front.png | Bin 835 -> 0 bytes graphics/pokemon/sewaddle/front.png | Bin 482 -> 0 bytes graphics/pokemon/sharpedo/front.png | Bin 695 -> 0 bytes graphics/pokemon/shaymin/front.png | Bin 502 -> 0 bytes graphics/pokemon/shaymin/sky/front.png | Bin 722 -> 0 bytes graphics/pokemon/shedinja/front.png | Bin 668 -> 0 bytes graphics/pokemon/shelgon/front.png | Bin 627 -> 0 bytes graphics/pokemon/shellder/front.png | Bin 514 -> 0 bytes graphics/pokemon/shellos/east_sea/front.png | Bin 507 -> 0 bytes graphics/pokemon/shellos/front.png | Bin 469 -> 0 bytes graphics/pokemon/shelmet/front.png | Bin 537 -> 0 bytes graphics/pokemon/shieldon/front.png | Bin 502 -> 0 bytes graphics/pokemon/shiftry/front.png | Bin 918 -> 0 bytes graphics/pokemon/shinx/front.png | Bin 523 -> 0 bytes graphics/pokemon/shroomish/front.png | Bin 450 -> 0 bytes graphics/pokemon/shuckle/front.png | Bin 598 -> 0 bytes graphics/pokemon/shuppet/front.png | Bin 472 -> 0 bytes graphics/pokemon/sigilyph/front.png | Bin 905 -> 0 bytes graphics/pokemon/silcoon/front.png | Bin 533 -> 0 bytes graphics/pokemon/simipour/front.png | Bin 829 -> 0 bytes graphics/pokemon/simisage/front.png | Bin 922 -> 0 bytes graphics/pokemon/simisear/front.png | Bin 873 -> 0 bytes graphics/pokemon/skarmory/front.png | Bin 952 -> 0 bytes graphics/pokemon/skiddo/front.png | Bin 625 -> 0 bytes graphics/pokemon/skiploom/front.png | Bin 463 -> 0 bytes graphics/pokemon/skitty/front.png | Bin 607 -> 0 bytes graphics/pokemon/skorupi/front.png | Bin 664 -> 0 bytes graphics/pokemon/skrelp/front.png | Bin 563 -> 0 bytes graphics/pokemon/skuntank/front.png | Bin 838 -> 0 bytes graphics/pokemon/slaking/front.png | Bin 969 -> 0 bytes graphics/pokemon/slakoth/front.png | Bin 567 -> 0 bytes graphics/pokemon/sliggoo/front.png | Bin 568 -> 0 bytes graphics/pokemon/slowbro/front.png | Bin 894 -> 0 bytes graphics/pokemon/slowking/front.png | Bin 845 -> 0 bytes graphics/pokemon/slowpoke/front.png | Bin 534 -> 0 bytes graphics/pokemon/slugma/front.png | Bin 470 -> 0 bytes graphics/pokemon/slurpuff/front.png | Bin 620 -> 0 bytes graphics/pokemon/smeargle/front.png | Bin 717 -> 0 bytes graphics/pokemon/smoochum/front.png | Bin 483 -> 0 bytes graphics/pokemon/sneasel/front.png | Bin 677 -> 0 bytes graphics/pokemon/snivy/front.png | Bin 487 -> 0 bytes graphics/pokemon/snorlax/front.png | Bin 799 -> 0 bytes graphics/pokemon/snorunt/front.png | Bin 509 -> 0 bytes graphics/pokemon/snover/front.png | Bin 694 -> 0 bytes graphics/pokemon/snubbull/front.png | Bin 594 -> 0 bytes graphics/pokemon/solosis/front.png | Bin 413 -> 0 bytes graphics/pokemon/solrock/front.png | Bin 922 -> 0 bytes graphics/pokemon/spearow/front.png | Bin 561 -> 0 bytes graphics/pokemon/spewpa/front.png | Bin 497 -> 0 bytes graphics/pokemon/spheal/front.png | Bin 476 -> 0 bytes graphics/pokemon/spinarak/front.png | Bin 508 -> 0 bytes graphics/pokemon/spinda/front.png | Bin 624 -> 0 bytes graphics/pokemon/spiritomb/front.png | Bin 766 -> 0 bytes graphics/pokemon/spoink/front.png | Bin 486 -> 0 bytes graphics/pokemon/spritzee/front.png | Bin 549 -> 0 bytes graphics/pokemon/squirtle/front.png | Bin 528 -> 0 bytes graphics/pokemon/stantler/front.png | Bin 806 -> 0 bytes graphics/pokemon/staraptor/front.png | Bin 781 -> 0 bytes graphics/pokemon/staravia/front.png | Bin 590 -> 0 bytes graphics/pokemon/starly/front.png | Bin 532 -> 0 bytes graphics/pokemon/starmie/front.png | Bin 831 -> 0 bytes graphics/pokemon/staryu/front.png | Bin 588 -> 0 bytes graphics/pokemon/steelix/front.png | Bin 1016 -> 0 bytes graphics/pokemon/stoutland/front.png | Bin 1000 -> 0 bytes graphics/pokemon/stunfisk/front.png | Bin 586 -> 0 bytes graphics/pokemon/stunky/front.png | Bin 579 -> 0 bytes graphics/pokemon/sudowoodo/front.png | Bin 651 -> 0 bytes graphics/pokemon/suicune/front.png | Bin 1061 -> 0 bytes graphics/pokemon/sunflora/front.png | Bin 652 -> 0 bytes graphics/pokemon/sunkern/front.png | Bin 402 -> 0 bytes graphics/pokemon/surskit/front.png | Bin 428 -> 0 bytes graphics/pokemon/swablu/front.png | Bin 519 -> 0 bytes graphics/pokemon/swadloon/front.png | Bin 510 -> 0 bytes graphics/pokemon/swalot/front.png | Bin 696 -> 0 bytes graphics/pokemon/swampert/front.png | Bin 933 -> 0 bytes graphics/pokemon/swanna/front.png | Bin 673 -> 0 bytes graphics/pokemon/swellow/front.png | Bin 731 -> 0 bytes graphics/pokemon/swinub/front.png | Bin 370 -> 0 bytes graphics/pokemon/swirlix/front.png | Bin 534 -> 0 bytes graphics/pokemon/swoobat/front.png | Bin 889 -> 0 bytes graphics/pokemon/sylveon/front.png | Bin 769 -> 0 bytes graphics/pokemon/taillow/front.png | Bin 522 -> 0 bytes graphics/pokemon/talonflame/front.png | Bin 1002 -> 0 bytes graphics/pokemon/tangela/front.png | Bin 642 -> 0 bytes graphics/pokemon/tangrowth/front.png | Bin 967 -> 0 bytes graphics/pokemon/tapu_bulu/front.png | Bin 932 -> 0 bytes graphics/pokemon/tapu_fini/front.png | Bin 939 -> 0 bytes graphics/pokemon/tapu_koko/front.png | Bin 1101 -> 0 bytes graphics/pokemon/tapu_lele/front.png | Bin 845 -> 0 bytes graphics/pokemon/tauros/front.png | Bin 842 -> 0 bytes graphics/pokemon/teddiursa/front.png | Bin 508 -> 0 bytes graphics/pokemon/tentacool/front.png | Bin 634 -> 0 bytes graphics/pokemon/tentacruel/front.png | Bin 927 -> 0 bytes graphics/pokemon/tepig/front.png | Bin 487 -> 0 bytes graphics/pokemon/terrakion/front.png | Bin 960 -> 0 bytes graphics/pokemon/throh/front.png | Bin 793 -> 0 bytes graphics/pokemon/thundurus/front.png | Bin 1035 -> 0 bytes graphics/pokemon/thundurus/therian/front.png | Bin 1061 -> 0 bytes graphics/pokemon/timburr/front.png | Bin 576 -> 0 bytes graphics/pokemon/tirtouga/front.png | Bin 540 -> 0 bytes graphics/pokemon/togekiss/front.png | Bin 636 -> 0 bytes graphics/pokemon/togepi/front.png | Bin 421 -> 0 bytes graphics/pokemon/togetic/front.png | Bin 478 -> 0 bytes graphics/pokemon/torchic/front.png | Bin 464 -> 0 bytes graphics/pokemon/torkoal/front.png | Bin 1043 -> 0 bytes graphics/pokemon/tornadus/front.png | Bin 1004 -> 0 bytes graphics/pokemon/tornadus/therian/front.png | Bin 997 -> 0 bytes graphics/pokemon/torterra/front.png | Bin 1119 -> 0 bytes graphics/pokemon/totodile/front.png | Bin 538 -> 0 bytes graphics/pokemon/toxicroak/front.png | Bin 794 -> 0 bytes graphics/pokemon/tranquill/front.png | Bin 612 -> 0 bytes graphics/pokemon/trapinch/front.png | Bin 433 -> 0 bytes graphics/pokemon/treecko/front.png | Bin 607 -> 0 bytes graphics/pokemon/trevenant/front.png | Bin 969 -> 0 bytes graphics/pokemon/tropius/front.png | Bin 968 -> 0 bytes graphics/pokemon/trubbish/front.png | Bin 490 -> 0 bytes graphics/pokemon/turtwig/front.png | Bin 552 -> 0 bytes graphics/pokemon/tympole/front.png | Bin 449 -> 0 bytes graphics/pokemon/tynamo/front.png | Bin 353 -> 0 bytes graphics/pokemon/typhlosion/front.png | Bin 813 -> 0 bytes graphics/pokemon/tyranitar/front.png | Bin 874 -> 0 bytes graphics/pokemon/tyrantrum/front.png | Bin 1032 -> 0 bytes graphics/pokemon/tyrogue/front.png | Bin 537 -> 0 bytes graphics/pokemon/tyrunt/front.png | Bin 672 -> 0 bytes graphics/pokemon/umbreon/front.png | Bin 533 -> 0 bytes graphics/pokemon/unfezant/front.png | Bin 840 -> 0 bytes graphics/pokemon/unown/b/front.png | Bin 355 -> 0 bytes graphics/pokemon/unown/c/front.png | Bin 395 -> 0 bytes graphics/pokemon/unown/d/front.png | Bin 352 -> 0 bytes graphics/pokemon/unown/e/front.png | Bin 325 -> 0 bytes .../pokemon/unown/exclamation_mark/front.png | Bin 294 -> 0 bytes graphics/pokemon/unown/f/front.png | Bin 364 -> 0 bytes graphics/pokemon/unown/front.png | Bin 337 -> 0 bytes graphics/pokemon/unown/g/front.png | Bin 359 -> 0 bytes graphics/pokemon/unown/h/front.png | Bin 424 -> 0 bytes graphics/pokemon/unown/i/front.png | Bin 305 -> 0 bytes graphics/pokemon/unown/j/front.png | Bin 334 -> 0 bytes graphics/pokemon/unown/k/front.png | Bin 347 -> 0 bytes graphics/pokemon/unown/l/front.png | Bin 315 -> 0 bytes graphics/pokemon/unown/m/front.png | Bin 414 -> 0 bytes graphics/pokemon/unown/n/front.png | Bin 379 -> 0 bytes graphics/pokemon/unown/o/front.png | Bin 417 -> 0 bytes graphics/pokemon/unown/p/front.png | Bin 312 -> 0 bytes graphics/pokemon/unown/q/front.png | Bin 320 -> 0 bytes graphics/pokemon/unown/question_mark/front.png | Bin 332 -> 0 bytes graphics/pokemon/unown/r/front.png | Bin 313 -> 0 bytes graphics/pokemon/unown/s/front.png | Bin 363 -> 0 bytes graphics/pokemon/unown/t/front.png | Bin 316 -> 0 bytes graphics/pokemon/unown/u/front.png | Bin 391 -> 0 bytes graphics/pokemon/unown/v/front.png | Bin 349 -> 0 bytes graphics/pokemon/unown/w/front.png | Bin 355 -> 0 bytes graphics/pokemon/unown/x/front.png | Bin 337 -> 0 bytes graphics/pokemon/unown/y/front.png | Bin 347 -> 0 bytes graphics/pokemon/unown/z/front.png | Bin 324 -> 0 bytes graphics/pokemon/ursaring/front.png | Bin 918 -> 0 bytes graphics/pokemon/uxie/front.png | Bin 611 -> 0 bytes graphics/pokemon/vanillish/front.png | Bin 606 -> 0 bytes graphics/pokemon/vanillite/front.png | Bin 440 -> 0 bytes graphics/pokemon/vanilluxe/front.png | Bin 826 -> 0 bytes graphics/pokemon/vaporeon/front.png | Bin 695 -> 0 bytes graphics/pokemon/venipede/front.png | Bin 505 -> 0 bytes graphics/pokemon/venomoth/front.png | Bin 736 -> 0 bytes graphics/pokemon/venonat/front.png | Bin 610 -> 0 bytes graphics/pokemon/venusaur/front.png | Bin 1187 -> 0 bytes graphics/pokemon/vespiquen/front.png | Bin 809 -> 0 bytes graphics/pokemon/vibrava/front.png | Bin 679 -> 0 bytes graphics/pokemon/victini/front.png | Bin 552 -> 0 bytes graphics/pokemon/victreebel/front.png | Bin 801 -> 0 bytes graphics/pokemon/vigoroth/front.png | Bin 787 -> 0 bytes graphics/pokemon/vileplume/front.png | Bin 704 -> 0 bytes graphics/pokemon/virizion/front.png | Bin 745 -> 0 bytes graphics/pokemon/vivillon/archipelago/front.png | Bin 1025 -> 0 bytes graphics/pokemon/vivillon/continental/front.png | Bin 1004 -> 0 bytes graphics/pokemon/vivillon/elegant/front.png | Bin 1035 -> 0 bytes graphics/pokemon/vivillon/fancy/front.png | Bin 1080 -> 0 bytes graphics/pokemon/vivillon/front.png | Bin 953 -> 0 bytes graphics/pokemon/vivillon/garden/front.png | Bin 1010 -> 0 bytes graphics/pokemon/vivillon/high_plains/front.png | Bin 971 -> 0 bytes graphics/pokemon/vivillon/jungle/front.png | Bin 923 -> 0 bytes graphics/pokemon/vivillon/marine/front.png | Bin 996 -> 0 bytes graphics/pokemon/vivillon/meadow/front.png | Bin 1017 -> 0 bytes graphics/pokemon/vivillon/modern/front.png | Bin 1049 -> 0 bytes graphics/pokemon/vivillon/monsoon/front.png | Bin 909 -> 0 bytes graphics/pokemon/vivillon/ocean/front.png | Bin 1050 -> 0 bytes graphics/pokemon/vivillon/poke_ball/front.png | Bin 1029 -> 0 bytes graphics/pokemon/vivillon/polar/front.png | Bin 976 -> 0 bytes graphics/pokemon/vivillon/river/front.png | Bin 941 -> 0 bytes graphics/pokemon/vivillon/sandstorm/front.png | Bin 958 -> 0 bytes graphics/pokemon/vivillon/savanna/front.png | Bin 1025 -> 0 bytes graphics/pokemon/vivillon/sun/front.png | Bin 1019 -> 0 bytes graphics/pokemon/vivillon/tundra/front.png | Bin 947 -> 0 bytes graphics/pokemon/volbeat/front.png | Bin 746 -> 0 bytes graphics/pokemon/volcanion/front.png | Bin 1042 -> 0 bytes graphics/pokemon/volcarona/front.png | Bin 927 -> 0 bytes graphics/pokemon/voltorb/front.png | Bin 380 -> 0 bytes graphics/pokemon/vullaby/front.png | Bin 673 -> 0 bytes graphics/pokemon/vulpix/front.png | Bin 633 -> 0 bytes graphics/pokemon/wailmer/front.png | Bin 619 -> 0 bytes graphics/pokemon/wailord/front.png | Bin 776 -> 0 bytes graphics/pokemon/walrein/front.png | Bin 954 -> 0 bytes graphics/pokemon/wartortle/front.png | Bin 780 -> 0 bytes graphics/pokemon/watchog/front.png | Bin 668 -> 0 bytes graphics/pokemon/weavile/front.png | Bin 743 -> 0 bytes graphics/pokemon/weedle/front.png | Bin 451 -> 0 bytes graphics/pokemon/weepinbell/front.png | Bin 594 -> 0 bytes graphics/pokemon/weezing/front.png | Bin 934 -> 0 bytes graphics/pokemon/whimsicott/front.png | Bin 706 -> 0 bytes graphics/pokemon/whirlipede/front.png | Bin 671 -> 0 bytes graphics/pokemon/whiscash/front.png | Bin 815 -> 0 bytes graphics/pokemon/whismur/front.png | Bin 509 -> 0 bytes graphics/pokemon/wigglytuff/front.png | Bin 670 -> 0 bytes graphics/pokemon/wingull/front.png | Bin 468 -> 0 bytes graphics/pokemon/wobbuffet/front.png | Bin 653 -> 0 bytes graphics/pokemon/woobat/front.png | Bin 541 -> 0 bytes graphics/pokemon/wooper/front.png | Bin 475 -> 0 bytes graphics/pokemon/wormadam/front.png | Bin 561 -> 0 bytes graphics/pokemon/wormadam/sandy_cloak/front.png | Bin 586 -> 0 bytes graphics/pokemon/wormadam/trash_cloak/front.png | Bin 532 -> 0 bytes graphics/pokemon/wurmple/front.png | Bin 595 -> 0 bytes graphics/pokemon/wynaut/front.png | Bin 489 -> 0 bytes graphics/pokemon/xatu/front.png | Bin 589 -> 0 bytes graphics/pokemon/xerneas/active/front.png | Bin 931 -> 0 bytes graphics/pokemon/yamask/front.png | Bin 440 -> 0 bytes graphics/pokemon/yanma/front.png | Bin 681 -> 0 bytes graphics/pokemon/yanmega/front.png | Bin 779 -> 0 bytes graphics/pokemon/yveltal/front.png | Bin 1154 -> 0 bytes graphics/pokemon/zangoose/front.png | Bin 767 -> 0 bytes graphics/pokemon/zapdos/front.png | Bin 910 -> 0 bytes graphics/pokemon/zebstrika/front.png | Bin 864 -> 0 bytes graphics/pokemon/zekrom/front.png | Bin 1055 -> 0 bytes graphics/pokemon/zigzagoon/front.png | Bin 651 -> 0 bytes graphics/pokemon/zoroark/front.png | Bin 862 -> 0 bytes graphics/pokemon/zorua/front.png | Bin 547 -> 0 bytes graphics/pokemon/zubat/front.png | Bin 557 -> 0 bytes graphics/pokemon/zweilous/front.png | Bin 778 -> 0 bytes graphics/pokemon/zygarde/10_percent/front.png | Bin 776 -> 0 bytes graphics/pokemon/zygarde/complete/front.png | Bin 1259 -> 0 bytes graphics/pokemon/zygarde/front.png | Bin 1030 -> 0 bytes 816 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 graphics/pokemon/abomasnow/front.png delete mode 100644 graphics/pokemon/abra/front.png delete mode 100644 graphics/pokemon/absol/front.png delete mode 100644 graphics/pokemon/accelgor/front.png delete mode 100644 graphics/pokemon/aegislash/blade/front.png delete mode 100644 graphics/pokemon/aegislash/front.png delete mode 100644 graphics/pokemon/aerodactyl/front.png delete mode 100644 graphics/pokemon/aggron/front.png delete mode 100644 graphics/pokemon/aipom/front.png delete mode 100644 graphics/pokemon/alakazam/front.png delete mode 100644 graphics/pokemon/alomomola/front.png delete mode 100644 graphics/pokemon/altaria/front.png delete mode 100644 graphics/pokemon/amaura/front.png delete mode 100644 graphics/pokemon/ambipom/front.png delete mode 100644 graphics/pokemon/amoonguss/front.png delete mode 100644 graphics/pokemon/ampharos/front.png delete mode 100644 graphics/pokemon/anorith/front.png delete mode 100644 graphics/pokemon/arbok/front.png delete mode 100644 graphics/pokemon/arcanine/front.png delete mode 100644 graphics/pokemon/arceus/front.png delete mode 100644 graphics/pokemon/archen/front.png delete mode 100644 graphics/pokemon/archeops/front.png delete mode 100644 graphics/pokemon/ariados/front.png delete mode 100644 graphics/pokemon/armaldo/front.png delete mode 100644 graphics/pokemon/aromatisse/front.png delete mode 100644 graphics/pokemon/aron/front.png delete mode 100644 graphics/pokemon/articuno/front.png delete mode 100644 graphics/pokemon/audino/front.png delete mode 100644 graphics/pokemon/aurorus/front.png delete mode 100644 graphics/pokemon/avalugg/front.png delete mode 100644 graphics/pokemon/axew/front.png delete mode 100644 graphics/pokemon/azelf/front.png delete mode 100644 graphics/pokemon/azumarill/front.png delete mode 100644 graphics/pokemon/azurill/front.png delete mode 100644 graphics/pokemon/bagon/front.png delete mode 100644 graphics/pokemon/baltoy/front.png delete mode 100644 graphics/pokemon/banette/front.png delete mode 100644 graphics/pokemon/barbaracle/front.png delete mode 100644 graphics/pokemon/barboach/front.png delete mode 100644 graphics/pokemon/basculin/front.png delete mode 100644 graphics/pokemon/bastiodon/front.png delete mode 100644 graphics/pokemon/bayleef/front.png delete mode 100644 graphics/pokemon/beartic/front.png delete mode 100644 graphics/pokemon/beautifly/front.png delete mode 100644 graphics/pokemon/beedrill/front.png delete mode 100644 graphics/pokemon/beheeyem/front.png delete mode 100644 graphics/pokemon/beldum/front.png delete mode 100644 graphics/pokemon/bellossom/front.png delete mode 100644 graphics/pokemon/bellsprout/front.png delete mode 100644 graphics/pokemon/bergmite/front.png delete mode 100644 graphics/pokemon/bibarel/front.png delete mode 100644 graphics/pokemon/bidoof/front.png delete mode 100644 graphics/pokemon/binacle/front.png delete mode 100644 graphics/pokemon/bisharp/front.png delete mode 100644 graphics/pokemon/blastoise/front.png delete mode 100644 graphics/pokemon/blaziken/front.png delete mode 100644 graphics/pokemon/blissey/front.png delete mode 100644 graphics/pokemon/blitzle/front.png delete mode 100644 graphics/pokemon/boldore/front.png delete mode 100644 graphics/pokemon/bonsly/front.png delete mode 100644 graphics/pokemon/bouffalant/front.png delete mode 100644 graphics/pokemon/braixen/front.png delete mode 100644 graphics/pokemon/braviary/front.png delete mode 100644 graphics/pokemon/breloom/front.png delete mode 100644 graphics/pokemon/bronzong/front.png delete mode 100644 graphics/pokemon/bronzor/front.png delete mode 100644 graphics/pokemon/budew/front.png delete mode 100644 graphics/pokemon/buizel/front.png delete mode 100644 graphics/pokemon/bulbasaur/front.png delete mode 100644 graphics/pokemon/buneary/front.png delete mode 100644 graphics/pokemon/bunnelby/front.png delete mode 100644 graphics/pokemon/burmy/front.png delete mode 100644 graphics/pokemon/burmy/sandy_cloak/front.png delete mode 100644 graphics/pokemon/burmy/trash_cloak/front.png delete mode 100644 graphics/pokemon/butterfree/front.png delete mode 100644 graphics/pokemon/cacnea/front.png delete mode 100644 graphics/pokemon/cacturne/front.png delete mode 100644 graphics/pokemon/camerupt/front.png delete mode 100644 graphics/pokemon/carbink/front.png delete mode 100644 graphics/pokemon/carnivine/front.png delete mode 100644 graphics/pokemon/carracosta/front.png delete mode 100644 graphics/pokemon/carvanha/front.png delete mode 100644 graphics/pokemon/cascoon/front.png delete mode 100644 graphics/pokemon/caterpie/front.png delete mode 100644 graphics/pokemon/celebi/front.png delete mode 100644 graphics/pokemon/chandelure/front.png delete mode 100644 graphics/pokemon/chansey/front.png delete mode 100644 graphics/pokemon/charizard/front.png delete mode 100644 graphics/pokemon/charmander/front.png delete mode 100644 graphics/pokemon/charmeleon/front.png delete mode 100644 graphics/pokemon/chatot/front.png delete mode 100644 graphics/pokemon/cherubi/front.png delete mode 100644 graphics/pokemon/chesnaught/front.png delete mode 100644 graphics/pokemon/chespin/front.png delete mode 100644 graphics/pokemon/chikorita/front.png delete mode 100644 graphics/pokemon/chimchar/front.png delete mode 100644 graphics/pokemon/chimecho/front.png delete mode 100644 graphics/pokemon/chinchou/front.png delete mode 100644 graphics/pokemon/chingling/front.png delete mode 100644 graphics/pokemon/cinccino/front.png delete mode 100644 graphics/pokemon/clamperl/front.png delete mode 100644 graphics/pokemon/clauncher/front.png delete mode 100644 graphics/pokemon/clawitzer/front.png delete mode 100644 graphics/pokemon/claydol/front.png delete mode 100644 graphics/pokemon/clefable/front.png delete mode 100644 graphics/pokemon/clefairy/front.png delete mode 100644 graphics/pokemon/cleffa/front.png delete mode 100644 graphics/pokemon/cloyster/front.png delete mode 100644 graphics/pokemon/cobalion/front.png delete mode 100644 graphics/pokemon/cofagrigus/front.png delete mode 100644 graphics/pokemon/combee/front.png delete mode 100644 graphics/pokemon/combusken/front.png delete mode 100644 graphics/pokemon/conkeldurr/front.png delete mode 100644 graphics/pokemon/corphish/front.png delete mode 100644 graphics/pokemon/corsola/front.png delete mode 100644 graphics/pokemon/cottonee/front.png delete mode 100644 graphics/pokemon/cradily/front.png delete mode 100644 graphics/pokemon/cranidos/front.png delete mode 100644 graphics/pokemon/crawdaunt/front.png delete mode 100644 graphics/pokemon/cresselia/front.png delete mode 100644 graphics/pokemon/croagunk/front.png delete mode 100644 graphics/pokemon/crobat/front.png delete mode 100644 graphics/pokemon/croconaw/front.png delete mode 100644 graphics/pokemon/crustle/front.png delete mode 100644 graphics/pokemon/cryogonal/front.png delete mode 100644 graphics/pokemon/cubchoo/front.png delete mode 100644 graphics/pokemon/cubone/front.png delete mode 100644 graphics/pokemon/cyndaquil/front.png delete mode 100644 graphics/pokemon/darkrai/front.png delete mode 100644 graphics/pokemon/darmanitan/front.png delete mode 100644 graphics/pokemon/darmanitan/zen_mode/front.png delete mode 100644 graphics/pokemon/darumaka/front.png delete mode 100644 graphics/pokemon/dedenne/front.png delete mode 100644 graphics/pokemon/deerling/front.png delete mode 100644 graphics/pokemon/deino/front.png delete mode 100644 graphics/pokemon/delcatty/front.png delete mode 100644 graphics/pokemon/delibird/front.png delete mode 100644 graphics/pokemon/delphox/front.png delete mode 100644 graphics/pokemon/deoxys/attack/front.png delete mode 100644 graphics/pokemon/deoxys/defense/front.png delete mode 100644 graphics/pokemon/deoxys/front.png delete mode 100644 graphics/pokemon/deoxys/speed/front.png delete mode 100644 graphics/pokemon/dewgong/front.png delete mode 100644 graphics/pokemon/dewott/front.png delete mode 100644 graphics/pokemon/dialga/front.png delete mode 100644 graphics/pokemon/diancie/front.png delete mode 100644 graphics/pokemon/diggersby/front.png delete mode 100644 graphics/pokemon/diglett/front.png delete mode 100644 graphics/pokemon/ditto/front.png delete mode 100644 graphics/pokemon/dodrio/front.png delete mode 100644 graphics/pokemon/doduo/front.png delete mode 100644 graphics/pokemon/donphan/front.png delete mode 100644 graphics/pokemon/doublade/front.png delete mode 100644 graphics/pokemon/dragalge/front.png delete mode 100644 graphics/pokemon/dragonair/front.png delete mode 100644 graphics/pokemon/dragonite/front.png delete mode 100644 graphics/pokemon/drapion/front.png delete mode 100644 graphics/pokemon/dratini/front.png delete mode 100644 graphics/pokemon/drifblim/front.png delete mode 100644 graphics/pokemon/drifloon/front.png delete mode 100644 graphics/pokemon/drilbur/front.png delete mode 100644 graphics/pokemon/drowzee/front.png delete mode 100644 graphics/pokemon/druddigon/front.png delete mode 100644 graphics/pokemon/ducklett/front.png delete mode 100644 graphics/pokemon/dugtrio/front.png delete mode 100644 graphics/pokemon/dunsparce/front.png delete mode 100644 graphics/pokemon/duosion/front.png delete mode 100644 graphics/pokemon/durant/front.png delete mode 100644 graphics/pokemon/dusclops/front.png delete mode 100644 graphics/pokemon/dusknoir/front.png delete mode 100644 graphics/pokemon/duskull/front.png delete mode 100644 graphics/pokemon/dustox/front.png delete mode 100644 graphics/pokemon/dwebble/front.png delete mode 100644 graphics/pokemon/eelektrik/front.png delete mode 100644 graphics/pokemon/eelektross/front.png delete mode 100644 graphics/pokemon/eevee/front.png delete mode 100644 graphics/pokemon/egg/front.png delete mode 100644 graphics/pokemon/ekans/front.png delete mode 100644 graphics/pokemon/electabuzz/front.png delete mode 100644 graphics/pokemon/electivire/front.png delete mode 100644 graphics/pokemon/electrike/front.png delete mode 100644 graphics/pokemon/electrode/front.png delete mode 100644 graphics/pokemon/elekid/front.png delete mode 100644 graphics/pokemon/elgyem/front.png delete mode 100644 graphics/pokemon/emboar/front.png delete mode 100644 graphics/pokemon/emolga/front.png delete mode 100644 graphics/pokemon/empoleon/front.png delete mode 100644 graphics/pokemon/entei/front.png delete mode 100644 graphics/pokemon/escavalier/front.png delete mode 100644 graphics/pokemon/espeon/front.png delete mode 100644 graphics/pokemon/espurr/front.png delete mode 100644 graphics/pokemon/excadrill/front.png delete mode 100644 graphics/pokemon/exeggcute/front.png delete mode 100644 graphics/pokemon/exeggutor/front.png delete mode 100644 graphics/pokemon/exploud/front.png delete mode 100644 graphics/pokemon/farfetchd/front.png delete mode 100644 graphics/pokemon/fearow/front.png delete mode 100644 graphics/pokemon/feebas/front.png delete mode 100644 graphics/pokemon/fennekin/front.png delete mode 100644 graphics/pokemon/feraligatr/front.png delete mode 100644 graphics/pokemon/ferroseed/front.png delete mode 100644 graphics/pokemon/ferrothorn/front.png delete mode 100644 graphics/pokemon/finneon/front.png delete mode 100644 graphics/pokemon/flaaffy/front.png delete mode 100644 graphics/pokemon/flabebe/front.png delete mode 100644 graphics/pokemon/flareon/front.png delete mode 100644 graphics/pokemon/fletchinder/front.png delete mode 100644 graphics/pokemon/fletchling/front.png delete mode 100644 graphics/pokemon/floatzel/front.png delete mode 100644 graphics/pokemon/floette/front.png delete mode 100644 graphics/pokemon/florges/front.png delete mode 100644 graphics/pokemon/flygon/front.png delete mode 100644 graphics/pokemon/foongus/front.png delete mode 100644 graphics/pokemon/forretress/front.png delete mode 100644 graphics/pokemon/fraxure/front.png delete mode 100644 graphics/pokemon/frillish/front.png delete mode 100644 graphics/pokemon/froakie/front.png delete mode 100644 graphics/pokemon/frogadier/front.png delete mode 100644 graphics/pokemon/froslass/front.png delete mode 100644 graphics/pokemon/furfrou/dandy_trim/front.png delete mode 100644 graphics/pokemon/furfrou/debutante_trim/front.png delete mode 100644 graphics/pokemon/furfrou/diamond_trim/front.png delete mode 100644 graphics/pokemon/furfrou/front.png delete mode 100644 graphics/pokemon/furfrou/heart_trim/front.png delete mode 100644 graphics/pokemon/furfrou/kabuki_trim/front.png delete mode 100644 graphics/pokemon/furfrou/la_reine_trim/front.png delete mode 100644 graphics/pokemon/furfrou/matron_trim/front.png delete mode 100644 graphics/pokemon/furfrou/pharaoh_trim/front.png delete mode 100644 graphics/pokemon/furfrou/star_trim/front.png delete mode 100644 graphics/pokemon/furret/front.png delete mode 100644 graphics/pokemon/gabite/front.png delete mode 100644 graphics/pokemon/gallade/front.png delete mode 100644 graphics/pokemon/galvantula/front.png delete mode 100644 graphics/pokemon/garbodor/front.png delete mode 100644 graphics/pokemon/garchomp/front.png delete mode 100644 graphics/pokemon/gardevoir/front.png delete mode 100644 graphics/pokemon/gastly/front.png delete mode 100644 graphics/pokemon/gastrodon/east_sea/front.png delete mode 100644 graphics/pokemon/gastrodon/front.png delete mode 100644 graphics/pokemon/genesect/front.png delete mode 100644 graphics/pokemon/gengar/front.png delete mode 100644 graphics/pokemon/geodude/front.png delete mode 100644 graphics/pokemon/gible/front.png delete mode 100644 graphics/pokemon/gigalith/front.png delete mode 100644 graphics/pokemon/girafarig/front.png delete mode 100644 graphics/pokemon/giratina/front.png delete mode 100644 graphics/pokemon/giratina/origin/front.png delete mode 100644 graphics/pokemon/glaceon/front.png delete mode 100644 graphics/pokemon/glalie/front.png delete mode 100644 graphics/pokemon/glameow/front.png delete mode 100644 graphics/pokemon/gligar/front.png delete mode 100644 graphics/pokemon/gliscor/front.png delete mode 100644 graphics/pokemon/gloom/front.png delete mode 100644 graphics/pokemon/gogoat/front.png delete mode 100644 graphics/pokemon/golbat/front.png delete mode 100644 graphics/pokemon/goldeen/front.png delete mode 100644 graphics/pokemon/golduck/front.png delete mode 100644 graphics/pokemon/golem/front.png delete mode 100644 graphics/pokemon/golett/front.png delete mode 100644 graphics/pokemon/golurk/front.png delete mode 100644 graphics/pokemon/goodra/front.png delete mode 100644 graphics/pokemon/goomy/front.png delete mode 100644 graphics/pokemon/gorebyss/front.png delete mode 100644 graphics/pokemon/gothita/front.png delete mode 100644 graphics/pokemon/gothitelle/front.png delete mode 100644 graphics/pokemon/gothorita/front.png delete mode 100644 graphics/pokemon/gourgeist/front.png delete mode 100644 graphics/pokemon/gourgeist/large/front.png delete mode 100644 graphics/pokemon/gourgeist/small/front.png delete mode 100644 graphics/pokemon/gourgeist/super/front.png delete mode 100644 graphics/pokemon/granbull/front.png delete mode 100644 graphics/pokemon/graveler/front.png delete mode 100644 graphics/pokemon/greninja/ash/front.png delete mode 100644 graphics/pokemon/greninja/front.png delete mode 100644 graphics/pokemon/grimer/front.png delete mode 100644 graphics/pokemon/grotle/front.png delete mode 100644 graphics/pokemon/groudon/front.png delete mode 100644 graphics/pokemon/grovyle/front.png delete mode 100644 graphics/pokemon/growlithe/front.png delete mode 100644 graphics/pokemon/grumpig/front.png delete mode 100644 graphics/pokemon/gulpin/front.png delete mode 100644 graphics/pokemon/gurdurr/front.png delete mode 100644 graphics/pokemon/gyarados/front.png delete mode 100644 graphics/pokemon/happiny/front.png delete mode 100644 graphics/pokemon/hariyama/front.png delete mode 100644 graphics/pokemon/haunter/front.png delete mode 100644 graphics/pokemon/hawlucha/front.png delete mode 100644 graphics/pokemon/haxorus/front.png delete mode 100644 graphics/pokemon/heatmor/front.png delete mode 100644 graphics/pokemon/heatran/front.png delete mode 100644 graphics/pokemon/heliolisk/front.png delete mode 100644 graphics/pokemon/helioptile/front.png delete mode 100644 graphics/pokemon/heracross/front.png delete mode 100644 graphics/pokemon/herdier/front.png delete mode 100644 graphics/pokemon/hippopotas/front.png delete mode 100644 graphics/pokemon/hippowdon/front.png delete mode 100644 graphics/pokemon/hitmonchan/front.png delete mode 100644 graphics/pokemon/hitmonlee/front.png delete mode 100644 graphics/pokemon/hitmontop/front.png delete mode 100644 graphics/pokemon/ho_oh/front.png delete mode 100644 graphics/pokemon/honchkrow/front.png delete mode 100644 graphics/pokemon/honedge/front.png delete mode 100644 graphics/pokemon/hoopa/front.png delete mode 100644 graphics/pokemon/hoopa/unbound/front.png delete mode 100644 graphics/pokemon/hoothoot/front.png delete mode 100644 graphics/pokemon/hoppip/front.png delete mode 100644 graphics/pokemon/horsea/front.png delete mode 100644 graphics/pokemon/houndoom/front.png delete mode 100644 graphics/pokemon/houndour/front.png delete mode 100644 graphics/pokemon/huntail/front.png delete mode 100644 graphics/pokemon/hydreigon/front.png delete mode 100644 graphics/pokemon/hypno/front.png delete mode 100644 graphics/pokemon/igglybuff/front.png delete mode 100644 graphics/pokemon/illumise/front.png delete mode 100644 graphics/pokemon/infernape/front.png delete mode 100644 graphics/pokemon/inkay/front.png delete mode 100644 graphics/pokemon/ivysaur/front.png delete mode 100644 graphics/pokemon/jellicent/front.png delete mode 100644 graphics/pokemon/jigglypuff/front.png delete mode 100644 graphics/pokemon/jirachi/front.png delete mode 100644 graphics/pokemon/jolteon/front.png delete mode 100644 graphics/pokemon/joltik/front.png delete mode 100644 graphics/pokemon/jumpluff/front.png delete mode 100644 graphics/pokemon/jynx/front.png delete mode 100644 graphics/pokemon/kabuto/front.png delete mode 100644 graphics/pokemon/kabutops/front.png delete mode 100644 graphics/pokemon/kadabra/front.png delete mode 100644 graphics/pokemon/kakuna/front.png delete mode 100644 graphics/pokemon/kangaskhan/front.png delete mode 100644 graphics/pokemon/karrablast/front.png delete mode 100644 graphics/pokemon/kecleon/front.png delete mode 100644 graphics/pokemon/keldeo/front.png delete mode 100644 graphics/pokemon/kingdra/front.png delete mode 100644 graphics/pokemon/kingler/front.png delete mode 100644 graphics/pokemon/kirlia/front.png delete mode 100644 graphics/pokemon/klang/front.png delete mode 100644 graphics/pokemon/klefki/front.png delete mode 100644 graphics/pokemon/klink/front.png delete mode 100644 graphics/pokemon/klinklang/front.png delete mode 100644 graphics/pokemon/koffing/front.png delete mode 100644 graphics/pokemon/krabby/front.png delete mode 100644 graphics/pokemon/kricketot/front.png delete mode 100644 graphics/pokemon/kricketune/front.png delete mode 100644 graphics/pokemon/krokorok/front.png delete mode 100644 graphics/pokemon/krookodile/front.png delete mode 100644 graphics/pokemon/kyogre/front.png delete mode 100644 graphics/pokemon/kyurem/black/front.png delete mode 100644 graphics/pokemon/kyurem/front.png delete mode 100644 graphics/pokemon/kyurem/white/front.png delete mode 100644 graphics/pokemon/lairon/front.png delete mode 100644 graphics/pokemon/lampent/front.png delete mode 100644 graphics/pokemon/landorus/front.png delete mode 100644 graphics/pokemon/landorus/therian/front.png delete mode 100644 graphics/pokemon/lanturn/front.png delete mode 100644 graphics/pokemon/lapras/front.png delete mode 100644 graphics/pokemon/larvesta/front.png delete mode 100644 graphics/pokemon/larvitar/front.png delete mode 100644 graphics/pokemon/latias/front.png delete mode 100644 graphics/pokemon/latios/front.png delete mode 100644 graphics/pokemon/leafeon/front.png delete mode 100644 graphics/pokemon/leavanny/front.png delete mode 100644 graphics/pokemon/ledian/front.png delete mode 100644 graphics/pokemon/ledyba/front.png delete mode 100644 graphics/pokemon/lickilicky/front.png delete mode 100644 graphics/pokemon/lickitung/front.png delete mode 100644 graphics/pokemon/liepard/front.png delete mode 100644 graphics/pokemon/lileep/front.png delete mode 100644 graphics/pokemon/lilligant/front.png delete mode 100644 graphics/pokemon/lillipup/front.png delete mode 100644 graphics/pokemon/linoone/front.png delete mode 100644 graphics/pokemon/litleo/front.png delete mode 100644 graphics/pokemon/litwick/front.png delete mode 100644 graphics/pokemon/lombre/front.png delete mode 100644 graphics/pokemon/lopunny/front.png delete mode 100644 graphics/pokemon/lotad/front.png delete mode 100644 graphics/pokemon/loudred/front.png delete mode 100644 graphics/pokemon/lucario/front.png delete mode 100644 graphics/pokemon/ludicolo/front.png delete mode 100644 graphics/pokemon/lugia/front.png delete mode 100644 graphics/pokemon/lumineon/front.png delete mode 100644 graphics/pokemon/lunatone/front.png delete mode 100644 graphics/pokemon/luvdisc/front.png delete mode 100644 graphics/pokemon/luxio/front.png delete mode 100644 graphics/pokemon/luxray/front.png delete mode 100644 graphics/pokemon/machamp/front.png delete mode 100644 graphics/pokemon/machoke/front.png delete mode 100644 graphics/pokemon/machop/front.png delete mode 100644 graphics/pokemon/magby/front.png delete mode 100644 graphics/pokemon/magcargo/front.png delete mode 100644 graphics/pokemon/magikarp/front.png delete mode 100644 graphics/pokemon/magmar/front.png delete mode 100644 graphics/pokemon/magmortar/front.png delete mode 100644 graphics/pokemon/magnemite/front.png delete mode 100644 graphics/pokemon/magneton/front.png delete mode 100644 graphics/pokemon/magnezone/front.png delete mode 100644 graphics/pokemon/makuhita/front.png delete mode 100644 graphics/pokemon/malamar/front.png delete mode 100644 graphics/pokemon/mamoswine/front.png delete mode 100644 graphics/pokemon/manaphy/front.png delete mode 100644 graphics/pokemon/mandibuzz/front.png delete mode 100644 graphics/pokemon/manectric/front.png delete mode 100644 graphics/pokemon/mankey/front.png delete mode 100644 graphics/pokemon/mantine/front.png delete mode 100644 graphics/pokemon/mantyke/front.png delete mode 100644 graphics/pokemon/maractus/front.png delete mode 100644 graphics/pokemon/mareep/front.png delete mode 100644 graphics/pokemon/marill/front.png delete mode 100644 graphics/pokemon/marowak/front.png delete mode 100644 graphics/pokemon/marshadow/front.png delete mode 100644 graphics/pokemon/marshtomp/front.png delete mode 100644 graphics/pokemon/masquerain/front.png delete mode 100644 graphics/pokemon/mawile/front.png delete mode 100644 graphics/pokemon/medicham/front.png delete mode 100644 graphics/pokemon/meditite/front.png delete mode 100644 graphics/pokemon/meganium/front.png delete mode 100644 graphics/pokemon/meloetta/front.png delete mode 100644 graphics/pokemon/meowstic/female/front.png delete mode 100644 graphics/pokemon/meowstic/front.png delete mode 100644 graphics/pokemon/meowth/front.png delete mode 100644 graphics/pokemon/mesprit/front.png delete mode 100644 graphics/pokemon/metagross/front.png delete mode 100644 graphics/pokemon/metang/front.png delete mode 100644 graphics/pokemon/metapod/front.png delete mode 100644 graphics/pokemon/mew/front.png delete mode 100644 graphics/pokemon/mewtwo/front.png delete mode 100644 graphics/pokemon/mienfoo/front.png delete mode 100644 graphics/pokemon/mienshao/front.png delete mode 100644 graphics/pokemon/mightyena/front.png delete mode 100644 graphics/pokemon/milotic/front.png delete mode 100644 graphics/pokemon/miltank/front.png delete mode 100644 graphics/pokemon/mime_jr/front.png delete mode 100644 graphics/pokemon/minccino/front.png delete mode 100644 graphics/pokemon/minun/front.png delete mode 100644 graphics/pokemon/misdreavus/front.png delete mode 100644 graphics/pokemon/mismagius/front.png delete mode 100644 graphics/pokemon/moltres/front.png delete mode 100644 graphics/pokemon/monferno/front.png delete mode 100644 graphics/pokemon/mothim/front.png delete mode 100644 graphics/pokemon/mr_mime/front.png delete mode 100644 graphics/pokemon/mudkip/front.png delete mode 100644 graphics/pokemon/muk/front.png delete mode 100644 graphics/pokemon/munchlax/front.png delete mode 100644 graphics/pokemon/munna/front.png delete mode 100644 graphics/pokemon/murkrow/front.png delete mode 100644 graphics/pokemon/musharna/front.png delete mode 100644 graphics/pokemon/natu/front.png delete mode 100644 graphics/pokemon/nidoking/front.png delete mode 100644 graphics/pokemon/nidoqueen/front.png delete mode 100644 graphics/pokemon/nidoran_f/front.png delete mode 100644 graphics/pokemon/nidoran_m/front.png delete mode 100644 graphics/pokemon/nidorina/front.png delete mode 100644 graphics/pokemon/nidorino/front.png delete mode 100644 graphics/pokemon/nincada/front.png delete mode 100644 graphics/pokemon/ninetales/front.png delete mode 100644 graphics/pokemon/ninjask/front.png delete mode 100644 graphics/pokemon/noctowl/front.png delete mode 100644 graphics/pokemon/noibat/front.png delete mode 100644 graphics/pokemon/noivern/front.png delete mode 100644 graphics/pokemon/nosepass/front.png delete mode 100644 graphics/pokemon/numel/front.png delete mode 100644 graphics/pokemon/nuzleaf/front.png delete mode 100644 graphics/pokemon/octillery/front.png delete mode 100644 graphics/pokemon/oddish/front.png delete mode 100644 graphics/pokemon/omanyte/front.png delete mode 100644 graphics/pokemon/omastar/front.png delete mode 100644 graphics/pokemon/onix/front.png delete mode 100644 graphics/pokemon/oshawott/front.png delete mode 100644 graphics/pokemon/pachirisu/front.png delete mode 100644 graphics/pokemon/palkia/front.png delete mode 100644 graphics/pokemon/palpitoad/front.png delete mode 100644 graphics/pokemon/pancham/front.png delete mode 100644 graphics/pokemon/pangoro/front.png delete mode 100644 graphics/pokemon/panpour/front.png delete mode 100644 graphics/pokemon/pansage/front.png delete mode 100644 graphics/pokemon/pansear/front.png delete mode 100644 graphics/pokemon/paras/front.png delete mode 100644 graphics/pokemon/parasect/front.png delete mode 100644 graphics/pokemon/patrat/front.png delete mode 100644 graphics/pokemon/pawniard/front.png delete mode 100644 graphics/pokemon/pelipper/front.png delete mode 100644 graphics/pokemon/persian/front.png delete mode 100644 graphics/pokemon/petilil/front.png delete mode 100644 graphics/pokemon/phanpy/front.png delete mode 100644 graphics/pokemon/phantump/front.png delete mode 100644 graphics/pokemon/phione/front.png delete mode 100644 graphics/pokemon/pichu/front.png delete mode 100644 graphics/pokemon/pidgeot/front.png delete mode 100644 graphics/pokemon/pidgeotto/front.png delete mode 100644 graphics/pokemon/pidgey/front.png delete mode 100644 graphics/pokemon/pidove/front.png delete mode 100644 graphics/pokemon/pignite/front.png delete mode 100644 graphics/pokemon/pikachu/front.png delete mode 100644 graphics/pokemon/piloswine/front.png delete mode 100644 graphics/pokemon/pineco/front.png delete mode 100644 graphics/pokemon/pinsir/front.png delete mode 100644 graphics/pokemon/piplup/front.png delete mode 100644 graphics/pokemon/plusle/front.png delete mode 100644 graphics/pokemon/politoed/front.png delete mode 100644 graphics/pokemon/poliwag/front.png delete mode 100644 graphics/pokemon/poliwhirl/front.png delete mode 100644 graphics/pokemon/poliwrath/front.png delete mode 100644 graphics/pokemon/ponyta/front.png delete mode 100644 graphics/pokemon/poochyena/front.png delete mode 100644 graphics/pokemon/porygon/front.png delete mode 100644 graphics/pokemon/porygon2/front.png delete mode 100644 graphics/pokemon/porygon_z/front.png delete mode 100644 graphics/pokemon/primeape/front.png delete mode 100644 graphics/pokemon/prinplup/front.png delete mode 100644 graphics/pokemon/probopass/front.png delete mode 100644 graphics/pokemon/psyduck/front.png delete mode 100644 graphics/pokemon/pumpkaboo/front.png delete mode 100644 graphics/pokemon/pumpkaboo/large/front.png delete mode 100644 graphics/pokemon/pumpkaboo/small/front.png delete mode 100644 graphics/pokemon/pumpkaboo/super/front.png delete mode 100644 graphics/pokemon/pupitar/front.png delete mode 100644 graphics/pokemon/purrloin/front.png delete mode 100644 graphics/pokemon/purugly/front.png delete mode 100644 graphics/pokemon/pyroar/front.png delete mode 100644 graphics/pokemon/quagsire/front.png delete mode 100644 graphics/pokemon/question_mark/circled/front.png delete mode 100644 graphics/pokemon/question_mark/double/front.png delete mode 100644 graphics/pokemon/quilava/front.png delete mode 100644 graphics/pokemon/quilladin/front.png delete mode 100644 graphics/pokemon/qwilfish/front.png delete mode 100644 graphics/pokemon/raichu/front.png delete mode 100644 graphics/pokemon/raikou/front.png delete mode 100644 graphics/pokemon/ralts/front.png delete mode 100644 graphics/pokemon/rampardos/front.png delete mode 100644 graphics/pokemon/rapidash/front.png delete mode 100644 graphics/pokemon/raticate/front.png delete mode 100644 graphics/pokemon/rattata/front.png delete mode 100644 graphics/pokemon/rayquaza/front.png delete mode 100644 graphics/pokemon/regice/front.png delete mode 100644 graphics/pokemon/regigigas/front.png delete mode 100644 graphics/pokemon/regirock/front.png delete mode 100644 graphics/pokemon/registeel/front.png delete mode 100644 graphics/pokemon/relicanth/front.png delete mode 100644 graphics/pokemon/remoraid/front.png delete mode 100644 graphics/pokemon/reshiram/front.png delete mode 100644 graphics/pokemon/reuniclus/front.png delete mode 100644 graphics/pokemon/rhydon/front.png delete mode 100644 graphics/pokemon/rhyhorn/front.png delete mode 100644 graphics/pokemon/rhyperior/front.png delete mode 100644 graphics/pokemon/riolu/front.png delete mode 100644 graphics/pokemon/roggenrola/front.png delete mode 100644 graphics/pokemon/roselia/front.png delete mode 100644 graphics/pokemon/roserade/front.png delete mode 100644 graphics/pokemon/rotom/fan/front.png delete mode 100644 graphics/pokemon/rotom/front.png delete mode 100644 graphics/pokemon/rotom/frost/front.png delete mode 100644 graphics/pokemon/rotom/heat/front.png delete mode 100644 graphics/pokemon/rotom/mow/front.png delete mode 100644 graphics/pokemon/rotom/wash/front.png delete mode 100644 graphics/pokemon/rufflet/front.png delete mode 100644 graphics/pokemon/sableye/front.png delete mode 100644 graphics/pokemon/salamence/front.png delete mode 100644 graphics/pokemon/samurott/front.png delete mode 100644 graphics/pokemon/sandile/front.png delete mode 100644 graphics/pokemon/sandshrew/front.png delete mode 100644 graphics/pokemon/sandslash/front.png delete mode 100644 graphics/pokemon/sawk/front.png delete mode 100644 graphics/pokemon/sawsbuck/front.png delete mode 100644 graphics/pokemon/scatterbug/front.png delete mode 100644 graphics/pokemon/sceptile/front.png delete mode 100644 graphics/pokemon/scizor/front.png delete mode 100644 graphics/pokemon/scolipede/front.png delete mode 100644 graphics/pokemon/scrafty/front.png delete mode 100644 graphics/pokemon/scraggy/front.png delete mode 100644 graphics/pokemon/scyther/front.png delete mode 100644 graphics/pokemon/seadra/front.png delete mode 100644 graphics/pokemon/seaking/front.png delete mode 100644 graphics/pokemon/sealeo/front.png delete mode 100644 graphics/pokemon/seedot/front.png delete mode 100644 graphics/pokemon/seel/front.png delete mode 100644 graphics/pokemon/seismitoad/front.png delete mode 100644 graphics/pokemon/sentret/front.png delete mode 100644 graphics/pokemon/serperior/front.png delete mode 100644 graphics/pokemon/servine/front.png delete mode 100644 graphics/pokemon/seviper/front.png delete mode 100644 graphics/pokemon/sewaddle/front.png delete mode 100644 graphics/pokemon/sharpedo/front.png delete mode 100644 graphics/pokemon/shaymin/front.png delete mode 100644 graphics/pokemon/shaymin/sky/front.png delete mode 100644 graphics/pokemon/shedinja/front.png delete mode 100644 graphics/pokemon/shelgon/front.png delete mode 100644 graphics/pokemon/shellder/front.png delete mode 100644 graphics/pokemon/shellos/east_sea/front.png delete mode 100644 graphics/pokemon/shellos/front.png delete mode 100644 graphics/pokemon/shelmet/front.png delete mode 100644 graphics/pokemon/shieldon/front.png delete mode 100644 graphics/pokemon/shiftry/front.png delete mode 100644 graphics/pokemon/shinx/front.png delete mode 100644 graphics/pokemon/shroomish/front.png delete mode 100644 graphics/pokemon/shuckle/front.png delete mode 100644 graphics/pokemon/shuppet/front.png delete mode 100644 graphics/pokemon/sigilyph/front.png delete mode 100644 graphics/pokemon/silcoon/front.png delete mode 100644 graphics/pokemon/simipour/front.png delete mode 100644 graphics/pokemon/simisage/front.png delete mode 100644 graphics/pokemon/simisear/front.png delete mode 100644 graphics/pokemon/skarmory/front.png delete mode 100644 graphics/pokemon/skiddo/front.png delete mode 100644 graphics/pokemon/skiploom/front.png delete mode 100644 graphics/pokemon/skitty/front.png delete mode 100644 graphics/pokemon/skorupi/front.png delete mode 100644 graphics/pokemon/skrelp/front.png delete mode 100644 graphics/pokemon/skuntank/front.png delete mode 100644 graphics/pokemon/slaking/front.png delete mode 100644 graphics/pokemon/slakoth/front.png delete mode 100644 graphics/pokemon/sliggoo/front.png delete mode 100644 graphics/pokemon/slowbro/front.png delete mode 100644 graphics/pokemon/slowking/front.png delete mode 100644 graphics/pokemon/slowpoke/front.png delete mode 100644 graphics/pokemon/slugma/front.png delete mode 100644 graphics/pokemon/slurpuff/front.png delete mode 100644 graphics/pokemon/smeargle/front.png delete mode 100644 graphics/pokemon/smoochum/front.png delete mode 100644 graphics/pokemon/sneasel/front.png delete mode 100644 graphics/pokemon/snivy/front.png delete mode 100644 graphics/pokemon/snorlax/front.png delete mode 100644 graphics/pokemon/snorunt/front.png delete mode 100644 graphics/pokemon/snover/front.png delete mode 100644 graphics/pokemon/snubbull/front.png delete mode 100644 graphics/pokemon/solosis/front.png delete mode 100644 graphics/pokemon/solrock/front.png delete mode 100644 graphics/pokemon/spearow/front.png delete mode 100644 graphics/pokemon/spewpa/front.png delete mode 100644 graphics/pokemon/spheal/front.png delete mode 100644 graphics/pokemon/spinarak/front.png delete mode 100644 graphics/pokemon/spinda/front.png delete mode 100644 graphics/pokemon/spiritomb/front.png delete mode 100644 graphics/pokemon/spoink/front.png delete mode 100644 graphics/pokemon/spritzee/front.png delete mode 100644 graphics/pokemon/squirtle/front.png delete mode 100644 graphics/pokemon/stantler/front.png delete mode 100644 graphics/pokemon/staraptor/front.png delete mode 100644 graphics/pokemon/staravia/front.png delete mode 100644 graphics/pokemon/starly/front.png delete mode 100644 graphics/pokemon/starmie/front.png delete mode 100644 graphics/pokemon/staryu/front.png delete mode 100644 graphics/pokemon/steelix/front.png delete mode 100644 graphics/pokemon/stoutland/front.png delete mode 100644 graphics/pokemon/stunfisk/front.png delete mode 100644 graphics/pokemon/stunky/front.png delete mode 100644 graphics/pokemon/sudowoodo/front.png delete mode 100644 graphics/pokemon/suicune/front.png delete mode 100644 graphics/pokemon/sunflora/front.png delete mode 100644 graphics/pokemon/sunkern/front.png delete mode 100644 graphics/pokemon/surskit/front.png delete mode 100644 graphics/pokemon/swablu/front.png delete mode 100644 graphics/pokemon/swadloon/front.png delete mode 100644 graphics/pokemon/swalot/front.png delete mode 100644 graphics/pokemon/swampert/front.png delete mode 100644 graphics/pokemon/swanna/front.png delete mode 100644 graphics/pokemon/swellow/front.png delete mode 100644 graphics/pokemon/swinub/front.png delete mode 100644 graphics/pokemon/swirlix/front.png delete mode 100644 graphics/pokemon/swoobat/front.png delete mode 100644 graphics/pokemon/sylveon/front.png delete mode 100644 graphics/pokemon/taillow/front.png delete mode 100644 graphics/pokemon/talonflame/front.png delete mode 100644 graphics/pokemon/tangela/front.png delete mode 100644 graphics/pokemon/tangrowth/front.png delete mode 100644 graphics/pokemon/tapu_bulu/front.png delete mode 100644 graphics/pokemon/tapu_fini/front.png delete mode 100644 graphics/pokemon/tapu_koko/front.png delete mode 100644 graphics/pokemon/tapu_lele/front.png delete mode 100644 graphics/pokemon/tauros/front.png delete mode 100644 graphics/pokemon/teddiursa/front.png delete mode 100644 graphics/pokemon/tentacool/front.png delete mode 100644 graphics/pokemon/tentacruel/front.png delete mode 100644 graphics/pokemon/tepig/front.png delete mode 100644 graphics/pokemon/terrakion/front.png delete mode 100644 graphics/pokemon/throh/front.png delete mode 100644 graphics/pokemon/thundurus/front.png delete mode 100644 graphics/pokemon/thundurus/therian/front.png delete mode 100644 graphics/pokemon/timburr/front.png delete mode 100644 graphics/pokemon/tirtouga/front.png delete mode 100644 graphics/pokemon/togekiss/front.png delete mode 100644 graphics/pokemon/togepi/front.png delete mode 100644 graphics/pokemon/togetic/front.png delete mode 100644 graphics/pokemon/torchic/front.png delete mode 100644 graphics/pokemon/torkoal/front.png delete mode 100644 graphics/pokemon/tornadus/front.png delete mode 100644 graphics/pokemon/tornadus/therian/front.png delete mode 100644 graphics/pokemon/torterra/front.png delete mode 100644 graphics/pokemon/totodile/front.png delete mode 100644 graphics/pokemon/toxicroak/front.png delete mode 100644 graphics/pokemon/tranquill/front.png delete mode 100644 graphics/pokemon/trapinch/front.png delete mode 100644 graphics/pokemon/treecko/front.png delete mode 100644 graphics/pokemon/trevenant/front.png delete mode 100644 graphics/pokemon/tropius/front.png delete mode 100644 graphics/pokemon/trubbish/front.png delete mode 100644 graphics/pokemon/turtwig/front.png delete mode 100644 graphics/pokemon/tympole/front.png delete mode 100644 graphics/pokemon/tynamo/front.png delete mode 100644 graphics/pokemon/typhlosion/front.png delete mode 100644 graphics/pokemon/tyranitar/front.png delete mode 100644 graphics/pokemon/tyrantrum/front.png delete mode 100644 graphics/pokemon/tyrogue/front.png delete mode 100644 graphics/pokemon/tyrunt/front.png delete mode 100644 graphics/pokemon/umbreon/front.png delete mode 100644 graphics/pokemon/unfezant/front.png delete mode 100644 graphics/pokemon/unown/b/front.png delete mode 100644 graphics/pokemon/unown/c/front.png delete mode 100644 graphics/pokemon/unown/d/front.png delete mode 100644 graphics/pokemon/unown/e/front.png delete mode 100644 graphics/pokemon/unown/exclamation_mark/front.png delete mode 100644 graphics/pokemon/unown/f/front.png delete mode 100644 graphics/pokemon/unown/front.png delete mode 100644 graphics/pokemon/unown/g/front.png delete mode 100644 graphics/pokemon/unown/h/front.png delete mode 100644 graphics/pokemon/unown/i/front.png delete mode 100644 graphics/pokemon/unown/j/front.png delete mode 100644 graphics/pokemon/unown/k/front.png delete mode 100644 graphics/pokemon/unown/l/front.png delete mode 100644 graphics/pokemon/unown/m/front.png delete mode 100644 graphics/pokemon/unown/n/front.png delete mode 100644 graphics/pokemon/unown/o/front.png delete mode 100644 graphics/pokemon/unown/p/front.png delete mode 100644 graphics/pokemon/unown/q/front.png delete mode 100644 graphics/pokemon/unown/question_mark/front.png delete mode 100644 graphics/pokemon/unown/r/front.png delete mode 100644 graphics/pokemon/unown/s/front.png delete mode 100644 graphics/pokemon/unown/t/front.png delete mode 100644 graphics/pokemon/unown/u/front.png delete mode 100644 graphics/pokemon/unown/v/front.png delete mode 100644 graphics/pokemon/unown/w/front.png delete mode 100644 graphics/pokemon/unown/x/front.png delete mode 100644 graphics/pokemon/unown/y/front.png delete mode 100644 graphics/pokemon/unown/z/front.png delete mode 100644 graphics/pokemon/ursaring/front.png delete mode 100644 graphics/pokemon/uxie/front.png delete mode 100644 graphics/pokemon/vanillish/front.png delete mode 100644 graphics/pokemon/vanillite/front.png delete mode 100644 graphics/pokemon/vanilluxe/front.png delete mode 100644 graphics/pokemon/vaporeon/front.png delete mode 100644 graphics/pokemon/venipede/front.png delete mode 100644 graphics/pokemon/venomoth/front.png delete mode 100644 graphics/pokemon/venonat/front.png delete mode 100644 graphics/pokemon/venusaur/front.png delete mode 100644 graphics/pokemon/vespiquen/front.png delete mode 100644 graphics/pokemon/vibrava/front.png delete mode 100644 graphics/pokemon/victini/front.png delete mode 100644 graphics/pokemon/victreebel/front.png delete mode 100644 graphics/pokemon/vigoroth/front.png delete mode 100644 graphics/pokemon/vileplume/front.png delete mode 100644 graphics/pokemon/virizion/front.png delete mode 100644 graphics/pokemon/vivillon/archipelago/front.png delete mode 100644 graphics/pokemon/vivillon/continental/front.png delete mode 100644 graphics/pokemon/vivillon/elegant/front.png delete mode 100644 graphics/pokemon/vivillon/fancy/front.png delete mode 100644 graphics/pokemon/vivillon/front.png delete mode 100644 graphics/pokemon/vivillon/garden/front.png delete mode 100644 graphics/pokemon/vivillon/high_plains/front.png delete mode 100644 graphics/pokemon/vivillon/jungle/front.png delete mode 100644 graphics/pokemon/vivillon/marine/front.png delete mode 100644 graphics/pokemon/vivillon/meadow/front.png delete mode 100644 graphics/pokemon/vivillon/modern/front.png delete mode 100644 graphics/pokemon/vivillon/monsoon/front.png delete mode 100644 graphics/pokemon/vivillon/ocean/front.png delete mode 100644 graphics/pokemon/vivillon/poke_ball/front.png delete mode 100644 graphics/pokemon/vivillon/polar/front.png delete mode 100644 graphics/pokemon/vivillon/river/front.png delete mode 100644 graphics/pokemon/vivillon/sandstorm/front.png delete mode 100644 graphics/pokemon/vivillon/savanna/front.png delete mode 100644 graphics/pokemon/vivillon/sun/front.png delete mode 100644 graphics/pokemon/vivillon/tundra/front.png delete mode 100644 graphics/pokemon/volbeat/front.png delete mode 100644 graphics/pokemon/volcanion/front.png delete mode 100644 graphics/pokemon/volcarona/front.png delete mode 100644 graphics/pokemon/voltorb/front.png delete mode 100644 graphics/pokemon/vullaby/front.png delete mode 100644 graphics/pokemon/vulpix/front.png delete mode 100644 graphics/pokemon/wailmer/front.png delete mode 100644 graphics/pokemon/wailord/front.png delete mode 100644 graphics/pokemon/walrein/front.png delete mode 100644 graphics/pokemon/wartortle/front.png delete mode 100644 graphics/pokemon/watchog/front.png delete mode 100644 graphics/pokemon/weavile/front.png delete mode 100644 graphics/pokemon/weedle/front.png delete mode 100644 graphics/pokemon/weepinbell/front.png delete mode 100644 graphics/pokemon/weezing/front.png delete mode 100644 graphics/pokemon/whimsicott/front.png delete mode 100644 graphics/pokemon/whirlipede/front.png delete mode 100644 graphics/pokemon/whiscash/front.png delete mode 100644 graphics/pokemon/whismur/front.png delete mode 100644 graphics/pokemon/wigglytuff/front.png delete mode 100644 graphics/pokemon/wingull/front.png delete mode 100644 graphics/pokemon/wobbuffet/front.png delete mode 100644 graphics/pokemon/woobat/front.png delete mode 100644 graphics/pokemon/wooper/front.png delete mode 100644 graphics/pokemon/wormadam/front.png delete mode 100644 graphics/pokemon/wormadam/sandy_cloak/front.png delete mode 100644 graphics/pokemon/wormadam/trash_cloak/front.png delete mode 100644 graphics/pokemon/wurmple/front.png delete mode 100644 graphics/pokemon/wynaut/front.png delete mode 100644 graphics/pokemon/xatu/front.png delete mode 100644 graphics/pokemon/xerneas/active/front.png delete mode 100644 graphics/pokemon/yamask/front.png delete mode 100644 graphics/pokemon/yanma/front.png delete mode 100644 graphics/pokemon/yanmega/front.png delete mode 100644 graphics/pokemon/yveltal/front.png delete mode 100644 graphics/pokemon/zangoose/front.png delete mode 100644 graphics/pokemon/zapdos/front.png delete mode 100644 graphics/pokemon/zebstrika/front.png delete mode 100644 graphics/pokemon/zekrom/front.png delete mode 100644 graphics/pokemon/zigzagoon/front.png delete mode 100644 graphics/pokemon/zoroark/front.png delete mode 100644 graphics/pokemon/zorua/front.png delete mode 100644 graphics/pokemon/zubat/front.png delete mode 100644 graphics/pokemon/zweilous/front.png delete mode 100644 graphics/pokemon/zygarde/10_percent/front.png delete mode 100644 graphics/pokemon/zygarde/complete/front.png delete mode 100644 graphics/pokemon/zygarde/front.png diff --git a/graphics/pokemon/abomasnow/front.png b/graphics/pokemon/abomasnow/front.png deleted file mode 100644 index eec72b6476714d1e0606024f2a509c454a32b482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1055 zcmV+)1mOFLP)9o#F_PvKqI(3uc+H zNi2dMfE6fXS9wH0>Wi!c1cl%SvJ`88x1Wj7fLIz}5(EJOjLd(*x`B6(luf0zv`=Tr zjF>s(`_qFe-aUSM0M!FJ%N|G?c>H%=eEItAL1DyBz^nrp!sF||*KePm6jo+iZ~}zR zCc*pr&#<|F!YYXdz`{s6R{8#kGX3+PJi(|_kAP{7U>8yhqrU2Z&;r&<uwNS}b}}CU39fY?jqyO} zipyb=8jw(Q0EH?bmU0*)=DU)#2Ln*3YgLUxI4sZ09atX)>|u}bs0{j;Wev&#YL7cv zjT}&n^EDOEB(bB0*EB%Rgb$u%O!wCUbzM?NFq$msviQ*n0BMg=m!_Z*J(if?Kc<}X zW09!S01eH8FSxzl-vb7s$#*k9^}YWA$OFzjSER!fUY_hPbrN&eb&n2M12@6Zej8}u z&UH`EU%LCZJ)qQ0@X7#O@DqSR(8XvPx|N8#J68xdIsw7}dUzFGd&Kr`lml*s2<)&E zE5uc+0q@kX3j!{?3!;HHZ98{|?}&>(^fq$b8X$GsmXGF|eIUSnL)y0eK*8N##$)d= zT^2gHTQqf2IopWRN#z49hdZSiym-9{>Mi9ai-MMr+ zemc&9MkDol9XazeF$S1O`Lgq>W#RF3oC8&5&ii~gqy2oGgbow+FgbbdT|HdOp8@P7 Z{s%K!sBYKLaJv8i002ovPDHLkV1ip1;79-f diff --git a/graphics/pokemon/abra/front.png b/graphics/pokemon/abra/front.png deleted file mode 100644 index 0880fbb48e8abee9b1f5371d6cb5c0da7731d493..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmV->0)+jEP)Px#Fi=cXMVQc_SU3oHU>N`ADOx!Q&AlM@_N1tY7_5US5D*Z9VhGT%P_Uqw00000 z0000003H!9f&c&k`AI}UR9J=WR?%|9FbE5_2`2mh|DA-BwAs>b9iI&mxdJO9ffT8=w)B2dDnpAX9&?JIR*PLD3h+8-394y*1n@n9pAKL|pK}5z z;jn*C3IKr~2vld!5lm8#1d=7NBVM&637(Hof*~gXCny`<^%_C-1K#ok>H{ApcsdJk zF*1QSwJWV?vS+~DTdodQ5omyUCfvREG)3#~DBziJUpgYk(12OM0C4kV;kPBlKu~MW z$Ks9eAWBJqapqJ`WCKMyk!}Y0I0~@oLL3AwI;t&F{)abv?l>F)NgSnABy#x&37hA! z1UE{lK_HKYkoO!|DNp#dmn_bqYfI_dq83|^>caZvji95Vv30=X^C^X~Uu1X{t3?7L zu|EdOkT67@FtFvY7_aeJ1Pb`I*3E_b#Bkz-(6qRBVzp9?ufs{l{kUuR>ix`1QfOF* zRaDd91O^O#QkU zm5xz&F2M_Hb}tsr65mDxCv>KDl zahLE8CqSWX_!k7z?^eNb{^%YA>wl%1xf`~^_d(zR&)+RX$|~{_oXBgiJMQ>Ud;`Bc V5mG14{Br;R002ovPDHLkV1n`m6GH$1 diff --git a/graphics/pokemon/absol/front.png b/graphics/pokemon/absol/front.png deleted file mode 100644 index 0026dd2744c458f2bada1dacfaeaaae48c600665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 903 zcmV;219<$2P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_Fi3D1AUJ4vut->d5D*Z6kg)jp_*h_g zsIcJ3;P`krIM6si;E0d_000000C3OUCIA2c32;bRa{vGi!vFvd!vV){sAK>D0^mtR zK~zY`&6K}y(?Ar*uaS(hUeX8wOXDO+MJ(yLVovK0l^9%t3#^dm7`z9a!PjNppMu9gD(k{UINqTjp?iD4q3Ngvjxh9bT;ry($r^G@u9 zR!qV6rc#WWMppo84p=Dyek5s8skSE#YW7(v$^nK6P+9`YPTTC$XQ6)(1Bymzg-BMg z=jw|Pn1j(nL}}5?Y&0G+F;G9u0jx93Q=!?>+4^}mSD$nMzzj>FR5E_@>6faOK3*VT z_sANcc>eNGfBt)W4F2@WD|(-^?RVcXrnjhWgAd}nE3SqafQz!GAF@^m^lZ6liwHt& zYr4)VHrN1Ttk_^x!o76QkLr5MMj(J-y6kEap(9+Xw>XS_2)H#{_9QX0YxX&Z03!tW zsTjl0Bx#sfW$=B>079bQ%~s09MuKlI0Dv5z2+@x`3t+ej2x9*v2N3ft27*Xrl3z8` zO#oiR-#nniz&Nms7${_bu?dqf1>Z9WeoWV>W<;=v3t$uiPM78Zcn@9#C@^uH-YS4` zZA^b00mW+vEeCM8o}jp8gx$*lU%*$O6IgH;0z|R0fIIhz&Hd3#EC#;gthA#j<_6)! z8r_P~TEG>3H5B&DWE{N}0EhA%SHbd9Ky{wJHDm#Cfsd9odL55rfp$x8((U0ChcLvs zf>%upRN5_`07~;Q3M3ElPAEp3lVpLn9>Giogcr#!6DVspyE8)qGE0HCV0|wgkm#Pd zSuJ9f*A7y_x)9$$y659)C#k={j-h^BT?OQX3e8=p9`W1-lbTZE{8fYS%>cTT2KkE_ dIA~~qz*t~_xVXsp`1k+-00000u>SKj0006s zNkl7$U_)=bLBYB^#%Fe2mrj9UB3aCh-dGz zF2vGi@sa$6c$f$a&|d<47W6auejZrC8omm0fyeW}kNXXXX8;Gzr|d7+6mbb-a4o>M zHAQ#;_s#;Wo}wy(JBH2_1G(J;QM3^TfDRxP?mt(beu4o!7`Jqdm^Ur%-H90jc*|gj z*ccE{4FND}J!eTkdIEf)&h@c@(Hn>UlL5Rr+>Nef?K@Dd4(#f^d1~JP5>qo=rKg8> zF5H0deQI%w7$iEAMn4*`4NdsvH-~tnFx6UORb1V}E~qS6EU*fxY8 z@t3(uZ|lxIPJcq(igD#czx*i{su_**P-~5G6T<~(?oE-bcVR)cgG5(VG$H0@nX2Sz zqKj>#=d)u`xSee14 zk+&_KDYei#MluMiZ`qXz2m?BVs{KBl8iobuvP3Ju0#31l&I5LO!v9_q!R7$IZS#{2>=UMCj-CM0!S`{%^<-I_! P00000NkvXXu0mjfHoh}U diff --git a/graphics/pokemon/aegislash/blade/front.png b/graphics/pokemon/aegislash/blade/front.png deleted file mode 100644 index 288bdf5eb07bb229b95896e4759cf4ed60d100a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmV;D18w|?P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NH{R);D8Vi5cv4`kbqFIpjapD0_#ac zK~zY`rPaT0+CUTsa3c>{W2Z8U6A8CKM=KX%N}UdoI&@8%4&59p7j-OF^HRy4GQ@0M zs?ssaP^nwj4wWnhmSaF2Sh%6e7|DM_-}wg+FfhamhWq$^-`&9>&0m|+>Z|nhvEa#C zV3@0cx(3LH>%i+ZKs`Eg9|synbv4*q14?g?YVVeJsYtSsfYOp3Q#a*mm7bZBx}=C& zkqIFUv$Sk2)UCZk!#F0p%fPPs3;{jctt|yrjG*qRTMXoV$7f|Klg4?Tb{WPAgZ=5Y9AZ7X}yI2 z@zVOGC@p+;17I#B3zct9P7r|4dH+F3UJ=3ZZxeXLIUmD=0y&`W?FQ#VMHz6uxsZ^8 z0H0PXiq3~K2{Yiw7$7n#MrC_iVlpWKf)P%ktr~{I|IW7{fW=3^eL$dYkIe#LZ;yfz z9~vS=DF7}Xjs{rcq7GEgGqA@Qpq4Sjw*n4>MbHwUjum_x=Nc3M%^s_U&LG0Y;1Fb8 zS~K7P7g1-d7mPu)QUnac)gx;(f}jsUF)&;U1^|BFW9c44x0CJFPt6vfE=GZQdImm+ z;Wsm1r{SqVfrHN&vsnf%uP?82;EolgJisr5&dSOZK*vm%fx29yWn80n9ojWzOUfc3 zOo2w-fkp!{1KbR%_Y&{|w|4^Q!B7CdZ`7!kf#x+_CIBZvsXbOK2L2Y_I%x}16BAN! zLn(Dx)MI_N?@+2wK$wD-0MyodzTeZR=CCwDYIbv=(WFElz}Bde7m&NnP8fc{n>YcE z-3P)n9M1~KVe=~NUQNKxT|^keMal}Kpeewge+jt9@d(HBGhzZHB7hSUiP#bAP0o-h zNHTU}tc>U7^rxGGP6nJfoPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NH{R);D8Vi5cv4`kbqFIpjapD0?SE6 zK~zY`rIj&j+dve@Wp2nCDMf)06@0BtN5wCW;?(XC=+HGS9lFUP7rHeS?JaT_E$VCv z_879c-=IUmWbh&nMuV2zP%?BV=ri=41c@bE@{n7E^?rW;_x|s6rxe$=QoU-=9t%9# z2vD;c&^7?%bQAD;1E8IqIgbO{v{4NlZUAcU&YJJbt5g+2Q=nEdF>RYP8tmLuw2~xR zod7`Ftd)78?Hry``W9McKudd$06T9rOMwPTFsJXV2gs3aeQt7qCaec6*WoXM3+^(@ zT^9%L!k6!Fe(*L}9M%YM*CcHO+z%$P_^L?y?&Zhvg?o*(<(ex3GV96L=4Jaj%eNws zVz^Gs`-DXSWy=f0c@`;%WC^w|Lmr0vd^zVmAphqrX50(+!%xbph=u&tROOsc)!SKC zH8%?>JZ(1&<3(SUDKPF9s&uE+n|Yx|>-#q{UTA~xuBLn6{?1#rUcZs?qT4Xl>IjGf zoz~}8K|qd|Oesom(V~ck@IQ)(L#768Y= zG7xlibOCTHa9c+J0N>?+o^}z29G#pWF(VoW!7@Og6ZBM^)C^}4-mC$FA@q#F%o76~ zSFESN7#^G;NFNA}E_kzq#|s3803$yK^kOdq27I7KBdOpo84&=)UOW)qoC|#HjB+K& ztrqyZT!_dKLU1lRW7*~s&_Q1A$0H_&n3%_kNb1q;SO;vnNm%M-82^y-E2|OcI^hNm2p) z{==Ro|0=E=NYv!6yacI{BzMXNp!!aGRh>Yl*l_PE#R?VWKaZa^mB7k;-~a#s07*qo IM6N<$f{(d>WdHyG diff --git a/graphics/pokemon/aerodactyl/front.png b/graphics/pokemon/aerodactyl/front.png deleted file mode 100644 index 36181a6c2647821628baa8a187460d60ceb4522b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmV;419tq0P)Px#Fi=cXMVQc_b7F%*F=D;F-kgi9b5fL)V$H0B-VhKF`1tt9$jC8sDT5$E%{fZu zi=0R}P+abmL;wH-2T4RhR9J=WmfMn}FbqVoY(Ow1|Npt$EnzT3BxL4wwNqP_m_E_n zblsmVrSvy|-hB%Jh{5$MAS@JeC?mTuJeAz&uN;sp?B?W7{~BP2D9G_R zbH3bs&lX2+h?3{Rt5DisW|y@g-_D!~}DII~Q|*UMh@0JkFk%5Zny_#r2bo zjU4qwtGX983t~W^aCMpzM^`*CTLyM@pzL^Gh!7z2&ujn&Azlr3;d`~MJTnpfNjCcG zfYeF-eYsS3_E0T=UE1b?k*qsE$dNw+jKbem_9Fho^@aMkauxvDvlfIHMbe`F_K@%C z=>iaVR+nXAs~EszGXFp6JKveQJOF?T=>+)bfD`c8LPH9;g==B%IN$_@{$T_H_PMwR z=-4F7~4X8)~|;jMAnkC*SI@}PbZb0Agyalb%p6%O7+QktI6 z<+)58W^T6@AnR~>x%{3x)h5je>KT2&a_lLv=H{&p^IzZ0E`S{{&8WdNbM}wx$@Ffk zlC)%zX>*ezbVWyIC(FTs(gHjli$>a;RIPVv#{APZoU#%2?0G_xHh?`epN2MG2ON`c zNzv{|@Z@qCr8D5P2`R^4gOqJq%9<+sf91Ybo|z=~r6cNedhLY!h2BTcv9#f=>RSBu zlU@Lv5q_@})g!OL-I3Zf(gNiEOjeDct91V)7cbG5fJ2|+J+-@d|GOrLFPRmfhqnLT fh`PSm{#*ACzvCQxV@xm!00000NkvXXu0mjfS3#;J diff --git a/graphics/pokemon/aggron/front.png b/graphics/pokemon/aggron/front.png deleted file mode 100644 index 0d59202cac6fe3b5e7960ab4637955b5c40884a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1131 zcmV-x1eE)UP)NU=R=x`1tt9$jG3esHmu@Xu$Z0h=^!tXi!i{pfEt-P*A|g$N&HU0yY6Z00009 za7bBm000ie000ie0hKEb8vpZS9P)qXc9uA;j7few^TB^19a-%;&uSJ%YXO1XBokdJG^U zV|)f%z;ByQYJtExp9LJ=@R0c}WWbn5=SL!@AyH{T;ryQ(NfNTjr1M z4sz|1gU+9vhxsLi$i{Qo22RPIzTE;=#O+ud02ho;-V!i>lF~*djbV&d{h>Mq;7*tpG6PS80!c0!_7%YXTZE zx->;0=-~0)Q&`|es;Cr7y}CHHQwC_>JwHE%q%l^ba^3`7JB6+>KR^FR8X;Elp`1&I zb-NNc%%2~V0?bB9Q7+KvgHpNr27c$H(I{Andt=Pucw@+tA~!~ZR6=fKyXEGygSLWb zU^JIXNjYe((An29$pk=vvQ*VZRdx;=F4lkdPkm64D9iamQ7PdU7$kWEFxs#&0dxp} zxB?|-ufW;jgH~Tyyaj}knnWlyEcP+Z?lX$cP;UW=gNnkm009O~m}?;WJ!+OxwWNLx z;fjiYVXg(xL7h;~B{qS@m~t#~5X-WxP>%7}O@+FVrsjx2k-KvOmZ;(|i7P}j`>CSV z0BLed0zPUb8Fe3YB$j61@xJZ4TQ17-4+21QFxn>7UN9`@|CV#Af(ozE#1`1~y!Lc9 z8odCT94PBT@9MBsvmQkRlvS)$WjjYc7N%d0KHW2_YW*!po2Sr>_S|n__`cm0V1FVymLxecA7&2G(?m) zQV$GFI!dm@!TQlM(Ckv}=;JC@6wodV3|Pab5i0-y002ovPDHLkV1lRt2P6Oh diff --git a/graphics/pokemon/aipom/front.png b/graphics/pokemon/aipom/front.png deleted file mode 100644 index 227584fcba5155b39b249447cd50654ddb926ee1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)%N6(~`Jp=R)^mx5VcL$UBwd}>HlmRTqyo1T|;>EppOTCvDPadoT z;xzvB8S(OX!4bW6AKXrSbcA?*zBtL>b}Rsd@t3cNAC4C%+qMcO;$S&Je74jb9@>0> z+xo|3@=xXEFA!&E@FcR!)!&&q4rA; z+$=vOffddGGMtkESOY`+Mgntfnq!*k5a9dB{M^(hf!`9XfNh~~igDZHaZ`s}v_uHi z(gy2Vo|nJmlGFTWKwA%iqQ?PHRoC=N);?l!-4I}Q0`Yl6z^Vp{hJ;@Ly)qkBksF@| zhFF$`o>ydn3`e7~Y*^c2k>>By49OBKWq4+=hEuS7W-!_}Pe{`k?D`2sdW+0xHSPx#Fi=cXMVQc_a99Zc?kUy15D*X$|MskdVhB<(2-UPww1X*FSXlV@_^`03*x1-$ zU|3Kv2=q0UPXGV|B1uF+R9J=Gm)n}_AP9wnk~m51`@im9EHH=Gw3(T!*|})@sp}UI zAsvSQ^bz?jApMdcDPIxp87C=a?ay42UjV&@lCQwePwtr@-O+0kp4JM+UIyO*&WkC( zZ$JRBT*Sg2^7{sO5VE+i$-kqg36jQfr1JX)5McTsd|Pk1==$-XzYmy7$vOR4KTTir zEOa5I9{{E=JkkPp)R%HcU*_5LXMkh_%<~-t0JEeXzzFk4LerlJt|#CFVOgeWp4DB> zn_eA|J`$F-f-p^L3SCM=wPTRv(BXC9VLCpccr(hfb0$({&${{DcfLgsnoWen2$N^yN zmEb@@X?6wJ0)x0meKDB zdqFw96z{jvzTf;`@D}BtS(d{L323rnrC_-Run}din)$p?SwwKc__`wC^}-ggo$~^o zW?K=#_%(pH&p6#+FTFB$TAS7}Z5)3d31poux z3kJLsd;~NCAj(=mf?{Sa5)tqtl$2813PutrFe?oilEIA1Dg?gMPa+zgOLbK`KqBZ+ zJ18v>Tj&r41KI)Sn>?3yU|y zIx8GVPa#MQ`iuY(%OW1)UJ}<#Y zsH?c|L@m{onp#nd0SxkfcYiN*_o|#%0Py|KgV&qEux*0yjHoI(;?Pa8RJz_u9WbaU z{UL(!7qYWh{v5<^nwu;HGD^<|a+hOdGlMX&Uo{!T_!b6g!XX*~VDDfHP?O-7*RK87 a0sjF#_MWw|1T;hd0000e%4xM**=wiD87jD*y zL2l%9Q!CubbmkaZK{?ZTw`$NhMtM(&G|CX**eLfrPaI>EX|BAzhceYj7y=lZw0nK` zs7JbM(m7A=bEyn66Z5&ZZxYtE_h~*q^Tt~M4;{RddcaBA-vYcLy;q-M*{Bb{d+j=4 zdC47b_@N$n_f`6>lUY5`SW5Y8>2KLh6Zu0)|4*&XUa8;C?R~w0r6!IrKI3(1coGPx zS_4Rc4qPy0f-DX2oB$D`7ZqJ;E#VOp0O0lkqRRbJ#&Y2#K(vxUR8GM)TFFI=5+IV& z2Mqlc&^0asKh+Cxo~&3HlpHLb0raz2#3cu&S2ACaR&K3zSO9`DU_nSv zpyaSg;13X?reyc zD>32x%R!E4r`rzS-cuVdHv+#J+~KbaIb`wdxcKtk@FUS5yFwfn2ztGvX;-OBeqbZP zh$vWCN?lCpfN`7Lo{BL$64e83mW~|QE}cbg^_#JtToc!3$H$j7D>v8Fe}(LmY)6%` QfdBvi07*qoM6N<$f-Y`fxc~qF diff --git a/graphics/pokemon/amaura/front.png b/graphics/pokemon/amaura/front.png deleted file mode 100644 index c9dbac51806a800a2b1ce0c2e8dbc076c0e1bd21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)C(lJZJKokJrH-xt93n7S32_?HdN*$YW z28=j{bZn{|c5^BH0TJ9q3Ki{uhwfnW+Wjn~j~JE-}q=X3AzJdP8W5jO)=7LJXl4z03mCEiD=MAxhD~lE92P z1%aRjUG5lV2akjevdDD+~!gBCKejIf=<(m_Y@U(nb;!X8lU2OcP8 z?cgayUJ&s0eT?Y&h5@by{s@%uxJ7-Rc!H5Ke~&HrjA=1~cvIl}nOgOEaQya;ZfF6x zjL~nK@-T1%4cds2u>d&k5YNu600009 za7bBm000ie000ie0hKEb8vp=%n7*9}+vTu+mV8(Sj@3 ztuhe@6~P2K1Y%%l+SL*U*^by;6a#QeOkzxdZ}p=aPX2j{SDk6gqdWDwqsWSZcVQ)GW)&CC3JE z?LJt@^^lHAU{@>5E5zj>QK4D0=8I0pZ;w+8ID|n9QLa?#7{Kp#{q}4Dh({z+7%&$F zq=(kIcAE?aNggT_fvX0D0>Pzifu+C{dnzw@pL>LzET5KK*pP7 zvkHhc@EX>C5<+<@0#~SXtdAw|UZ0w7r$|QEVS;c%`GpGa&hTVD{e6&U8bE^=01|)T ze*pN^I*@O-W0P@%MWEF};0%E~Wp^~Q03L-F|MU2psc_T&W!q&R0CsZL`8>oPWETGq zFaSu1=6?76A5z-=Uj*36&*S62U!TZK+DkkKX1IiZIzRsnd0t&|Zvnu+%{{1&%k5#_ zw?2@*lZ>#W8)uMbD!2p$eLYF_(M(FfC>vnJl!TcW6__d(dM}4x=yas>KqTXAZjS|~ z!M=*%_CRE6Vk$FLDWC@3QzP!FB8+F{Hj}|TPiP)d9+17^ONY8`FP~OCMeM7rrkc z&)sEdG+F|ahP6*N!|UKxx8-t}oD6CKeH5#cyhOnOX`KX1^m|giR?7sG8pC2Q&udB~ saJeBx@o`uhUZS)C%T2`YYBMY2A5ZsmC&DIe)&Kwi07*qoM6N<$f+t|B4gdfE diff --git a/graphics/pokemon/amoonguss/front.png b/graphics/pokemon/amoonguss/front.png deleted file mode 100644 index baec9f8dda240cbdce4ba40bd6f665a4e1e9f638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 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 diff --git a/graphics/pokemon/archen/front.png b/graphics/pokemon/archen/front.png deleted file mode 100644 index ebd166254a3791fd74ebc35ab5afa33edaed5e81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)XxLClFo5uoKtKQh0N~)@n3$+AP?$J4I8Z<+xR6lr$Y1~f00000AY3z%0006I zNklT4iYaBiqq8?TF594sZ*EqC}t-c(xI3T z(AJOOp*YY;Ll+H^yn2c5yYxnEF3md#>7L&`&wH;VgkI`@Ep5<0tdq0LLxg4$ zgI*rm&xkjn6$=c!qIXP2*v)mt0&Zy)aEVK-AfO+9Z=ciW`=WFOtO9!Xyq(qzknXw$ zxw*DW;8@Ca12iVY(`WOr1Tb|!)(z0q2%t9%!*UhBHyQ>An^VSq0UF0f(*U6nV@xJ! z>csr~j6zlHZX^x>7y8tZ{hDJ3YC85GgQAbuuEvo=ETiF$gU4W_QV4OajzNaC8LRT5 zNC8+UmOnCyPMW~?osdAcM@XD(QJl>k>WpQltccF+Jjmjs#uKzYT7+g-o&{`(u#jVYpy8Y5 zG;rX-)vLE0C!dpDKB4XZlw--vIQq1@2MF6e6wFM{>ty8(!Z2(Nyv$LTuP108!k^>{ f_!s@9{>l0Y&>z>6RWPCn00000NkvXXu0mjfpkgA0 diff --git a/graphics/pokemon/archeops/front.png b/graphics/pokemon/archeops/front.png deleted file mode 100644 index bbbf6e3a24f99a8d0bcf740d4f16d608d655b611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmV-J1ibr+P)ygfxyrK?^zcq4mCa)7MBf91)(~W;LbR`0{H4wLy>MGDM?q zjxR4ID;MQ$evyD8aVi6&EB0yqYBzCn!0M;9OP4I45@?F9iSpfUvv#t)*|?j}sRNkr zXU9mizUjStx3*ITo-Vw_+-o3(k(~%JwEklCt0l=<37KNZsKFR0olK*q$*yI|&NQom z`4ws~u*(}Z=n80B-*sKf&W^!cFp9K^ybYx*B8BUkS&0VAFY`QGQnZZ0E!so|4~}_W zV_{*wIPE#57ArA?YzHs^fa^|=01Bw_$pV0*iuUjf;7F{%5mJGD7=_>*8FGz<(RfUU z`$)))UDXVR=;@@FI-(VRxc$yYM7Wn+ySiAJ zSb_DR8z})w_%rZXB>Q`LIZr1w1iUZ0`VCXb-+%D8u=6*_G4ni1otdZ; z=y!Pim%o8vYuc+7bxdqfC&E|Cp_`2xc>ba30|(nB?)QkM-*6Wo@Nihy@{`~nuGSnk zgXN0SA9Mrq<-?lK2U@RxFL0(!(@;qV3P3T>*AKwVnwgCjLwprH0eE)Eyu2{cuBN&0 za)7_(PJ-DPy@W*5s)^T+{`wSi5vtTE5OFA==j_}j$#d-P44w`WoT~0@S~!^X`X`#W)gf1wBuF`A4#{A=XinR+es|Db{t3Oc#`_Dgo%@OEZZ_f zWT=xfuK-?X!*6}ba?#RV@ysiLJyS)kQ*~Sww*#C3sG6n@xTz(pXJ112R5io_-U`*K z&@GQT3!R94?fl*XP#cOb0WJ{0pC``&!;9eyX^d;`rTza`{0oV+eI7|VPx#Fi=cXMVQc_YEl^g-a!BW0L8RQoLa@bgXUr}oQog;#X&*;T1x+mb82d8y}iBv z|No010PJxlz5oCMm`OxIR9J=WmeF$SAPhu}1qK{D|NpsnSAy71ASIKhI}^RMX}!m* zML?$MSHF5w?pyu*CBe<|E#M8o4Y+#;7;*ra!AtPo51 zL_djV-Z|&h3PAsf9xWs9yxv#_@IDBfd;)N{TB>)l<~&XiTG&_s@B{R#q+x<=ZY}_n zn0^(JzX&1~;IR(QjpBl@-z@M9w<*TUyuKV+2-XOb-2-i@8IfK4J!)OH`yfg%-ce+zuq9 z-kuf-5;;O5MN|^Pi=;-lp-9Rpz_goO#I9m&5A$9c&@^+Ivx=%H>%u&Dxv(VLR z0Nw&TT8CWYV+E$%o+Q!J#_C8Jd;3!zD*$5))oj>$|e0`AZz!oSa@AUo>$(6D-w}(-jV|JWWq1#9$Ok8 z8wB|C1rWo1Rb|FliY}k6q?#uIKXJNV3AzHVu!(dLf@FW@}1=Jzf_t$Ybte-`4esH_rv6m3R z-T>$d*rhMs?+NGu7cxNm)_Np{avb)rSv5o>Tl2qu>|3-**Wu`QoG$uXz|{5jtN*wD Y0h3%DfRC8XYXATM07*qoM6N<$f^2JN^8f$< diff --git a/graphics/pokemon/armaldo/front.png b/graphics/pokemon/armaldo/front.png deleted file mode 100644 index 2ab629340582eed5407715f2b897b56c76e28a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1121 zcmV-n1fKheP)05Nr_k;Jo z_wMdd)BgW3472p#)rzq)V4Wes;l5U3hAabY%0AkC%t6#19QVoqI#?GEj{uzR;J91n zOh0}$Ipdob&b@nfPzrqUY;w-02&}J_RX`KnZ_YQTuN}jHQeD&O*XLUo;PP8^P5Zch z1^_A`w*fWc1GvgU;O<{#K!sVBQb9z_JClo2Vx6JhhzNN&otA9ml}7gzG-9v4F?jj9 zM4z60$RUnnZ+Cq9Q%QoY>0{qRUBqF346kl_&?j$?=3Xq^IQkI=(;F`D0*s%}M?xtt zg7I%RT~4Nbcr@Qu2*i9mc$u|RM@lb%&FR}0o%z$A5(xDF$lI+SV0X-7z4>O`i9W9i zHHzC5e*Pi#p!=p)gM-54#<;V?SPOv&`ngNp=T`s{DZp9?kkemtmvv#*tO9`gK?X3_ z3rT-4$$D8AyjJH$Bl|DB_8x1AmH=bp^f=q5?u(NG*qXi>iyho08_gE&&q&?|-EW`l z7R$~4^F&~U(M*Vt#6_R#?U8RTTiHyK9VTX6DIi{0IRCcGSIul%$y_9JDrHc$mMNTW z(I+qgSR?5q+?Fh$uuM_QUs=VLT|?R==`3sn9#G!Mfr`w5Jtlk9u#HYR zDsq_qR#;0)07;si1rRB>p<2|akJ*=sZaI_Lo$gbiq1<`sxm0FVN+W^##dLsAN` zFf|<$kc>mU8$#&K_Gb%WcNL`^W~T1Qo{<7N>Jmcm;)r#U*p@J)#A*UHR6eeB)R(}Q zvpAG&NUK)!(nurohmNV{3F_bo zb7D+jIQ7Fr?!FIbuogIq=pYQEO07emyVpkg2WSh@h63Ezxe%0I1Kia3vYrcIkoQOO zo$uw)UHL*g!>e6p@!hfWNp%I-QmSh+9WTU_qveM{=O=ivuk9kWx7zbBPVgta0bGUt n1YmIMcO?xROZ9)#|7-jW4NY_bf|jV800000NkvXXu0mjfzkm$V diff --git a/graphics/pokemon/aromatisse/front.png b/graphics/pokemon/aromatisse/front.png deleted file mode 100644 index 3fcd8c4f6ce9e8a8ed8e8fc142e45eed1b4597da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 765 zcmVPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_h%ji-ILJs4IQYn50001xcu3&r@R+E; zC^$e^APDFv82I@3xL|njh^TNlNTk~WLjV8(32;bRa{vGi!vFvd!vV){sAK>D0#->x zK~zY`&6F{3(@+q{U0L2agBjRz&SP$D!Pp@~XFG6;qSP7s6{^Y=E2^m2GeG7F#NMTR z1jfqaYle!^uT#cE+;igK_`Sf|OPtv6e)<3J{4RE$RKT<5g_%FVPV?f>B%;P*6k06Y z{{y_LnL|FcTJ%H5WyTeb+qD62`=S8|)1iARD(^_F&n*BZ6~JGw`<=unq1#8{Bax4> z-|d45;4xw+<|70+1{;8<=%WsJ2^PS`ZFD#vm~FBIzxjweHUY=u90M`N7ZE%sQ(z#% zvonnIIM1Whra+^2xz2K2P6LaAGaCNT+0Wn4M^j6Q41B%$mgg7Ox1%p<;FuEN%}$1& z@(;hpqbUHH8qu5C3FQ?)sqH>QVm2N!@N>)-wk}*8*8qW~iv#dq-3)WOy1ub@ji%DX90W>WHK>o*z6+&fSAd`=mJB2aTYQb3ku7?M0hm7 z2|*?!3=9SS+dRZ-AXG^j$mV7Vp;GGiM5$8V=^7Hl;Ye+w?4gi`MHH@TK=ruEHsGSz z=2h{6ftH8Y1WJ+yu)s+JkS4Ht-vE{suv^568Ui+;X%I^bko^VjgcZ2o0+AK)q*^17 zC2xdW8f|#;UMkHzKJeVEfyIu6UMZQG*T8(o!;_mRWy)JQmy9f$7Q8gyASpkmSg$p6 zyhJs?Q^^2PYqMxw26v|cb6(bUENg(wq1HaSj)Fac!Xeuegb6OKr~rGUTx*grkn90G vApUI%`|=DVN%grGpbh5yJIHxj;W&Q)6sU?$$WW@(00000NkvXXu0mjfuzXkF diff --git a/graphics/pokemon/aron/front.png b/graphics/pokemon/aron/front.png deleted file mode 100644 index 72b0da8ec8602a6495225f164be4d29294e60e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 466 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU1Vm(9xNxIm!VC)w zj~_pN2nYxyBqSJQ%*fdBBOoB5pkjiB1xPOhIQ{A70J1m>JR*x382FBWFymBhK4}I9 zMh{OH#}JRsx0g2N9dh7dd*Iw_!eDn5j5DM%hhHNr?Z#s=I+~ zatr;#)z@A*dVOn9Yk2*~zZ=(F*}Cp)yQ#$Ad-ARpAzB~5J#X0(%DC3{uk<@%UgqNW zjH`QoPhnU4)+j0%@Q*>R!REk@sVi*~43a18J|(gs)!~oRG2x_nk6Hi73lvY9%W%wA z;WD%4(Tdw&IT^Gbv)__s?6R12?}bB{Ip2X@d-vy|LwwR0EU z5W2G7)_~^WvyGiNBn}bWwl|^&83cSd( z-?rc4<1(h0^2n3rU+>Rv-F%08->OOdzm_{`-rxGqy_QM3Gye6RqX{;kAoq0jb6Mw< G&;$UFTEF7} diff --git a/graphics/pokemon/articuno/front.png b/graphics/pokemon/articuno/front.png deleted file mode 100644 index 71b411a3806c3b9cf5693270a8fe4dab43026943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmV+p1o8WcP)Px#Fi=cXMVQc_AX1!^#s4XDy?dnp5D*XuFi;?fu$0CB`1ts^C^%X<7_^jgi)vEH z;P}AE$j7YVhX4Qrj7da6R9J=Gmg{n(Fbstew&bLS^!?vx~{)x1X@?>fZs9#g}AO;2NNibfEL0qWU(-WYIqw! zji;E#m=*&bb6NX4nf zp?N^3dc_fRwm>2R0QE`#<^eXhh8_Tkq8gP_3;5{46`+OEqbMXvB7CTOy9e~vwao`_ zDK~-Deu2?vD0EYGiJ1>AVxnFuWp=0o1LT}fXUGe-|}8eMd(-W&Q! z59O=~A2e=4vtTy1Xl+plG02kloY^IUYApu9h0BJwatc&;sYASPxd3om%h)1JbAV>N zSgB)Hr%W#TAV?kbWuRWWz|6H-ZAJy?ECw&MD*i=qW*!Vd@ZCm%{-raDy0JQrhjQU{u*Mk8N{NBu5VKl$%+i!4y5fB!>eQcnKwSq0? zII;m=4{`au+5nLiLWZ%>y{ZYfha+^_3Ja2H32gxCfSY4$6ZBD~98eVSfLsBS>Tx;w z!u0BmMpjV{0AZTF@>El?GurroNeY1Y27uWa@mO&K@F^YO1Ya`%L2mhB%rGFN>3;@@ z%2S^Z%s_xphf}D8Nf0sk4-a6r8?+34d20YRr_+pQbwkQ{rb?Jp!4<&F^8U3^qN73P zA-n|GD?=R!I;BWv1{A>6w`PK72MO+7fNXzGkWiAl7rl6?^xfhB#O#Ey-rDh@7r6jb z@AXzUQ+Ws{N64VYNvgB+FyFbz&4OO-4lqJ0d(qV16{LVt;JjzA7Y&AVmnD@KkwR{Z zEN-f26gRHeSY;kng47oegHwgLlZ=NeH-C7`xp{6*+wEfqq&5>gY5P`lrz|wI^LE&*(5LD@0_b^9UhsFiy?my}aoz+U?*6Ci5BB&Yyr&{KqW}N^07*qo IM6N<$f`*RZwg3PC diff --git a/graphics/pokemon/audino/front.png b/graphics/pokemon/audino/front.png deleted file mode 100644 index 5aad0eb990cb18921e998f01e1d5f89fa678edc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmV-<0*3vGP)KlRs~pKp4ia3IpmCkgCqSC%0<~Lpo%z zDuOI;wftJhTP<@%*`f|!5i!vX+4BjEqD=W7`BHrkjm#GO{wI!Rs09A&@mR>6==6~q?@0C{;t+6FbC0#_+0Sf|foij@(pnxAm zIAz(KI$DZBwFm0D!ol$nYp|h`8YJ7Fp#Z0009I zNkl0!*fgF8EuMM^t^cuH?z)r0h5mvR zF)9on3WJsYjdcW?vl-MsBZr>6Pm+_`vD*m}2fdHJ_thskgb-qo{|vj6|FEn#0mE|L zPA%Z5Y0L3m1-eq-^}NG30I7Rkw^lcB-cY*NHLRK%HUhTN54*NoC2(=aP`YP1uIpB8 z5bzysfR7r0I2YeO@K3r%?MB`u)63hv70|5$gZZ7{qwBmtwcD-xyWai7@LU0|RgJK7 z*PFfn3FkUyjm1tc;*U8{7t+{|0Qlt!@G9FhTnYeJ;q|NgwD(|4A@J5fwZt(1)c~Gp zO)G7W^C+)yV7b+8;IcUK*BM{*md~`uZa;gj+vN!aOj{IyLVyPFVW2{KaVBa25s)Tj z>OREFg#>KeLcxOi_>mrt7t@8h4^|mqP1aBz{Yk&m)o1iGz68w*hPSzxgBHkwlz6f0ZTZme=VuXfPI29eEn+v z9Td<)hsEy>ar#1tujQPefh8;+4y=BZrfDdOzyMedOyIo#BUPh7G?E<1=#&P71kzMq z&o$8)CkW=LlDG>{Ve^r{v6U`k|O1UV~IhD;M!V1CaP|WS;2(FTxP?Z+= z6|&Waznj}MQcajfc_pk6&ek0}HO;mJ#^ZRZ@<}8V>jLOunlw#d{5i{fNC1WaLh!<& zU#O4xpEOmh~nUl)%vn*edH}BrUPorxIvG z5-_q^Kpc}C*g`TW>%H1Z#Un@4im%X!6 zpY;72$o7*I{%qovl9EsBMT~I|;Izi~{TErL_(}uB_Q@~!8T;P#*J?D%fqMW4pGkGn zS1%C_`AYf{q+{&Ku3=ZF=SM(6%28saSmst|!3jz_b*!F@&c}GR0VE%mZ#g>b5K!k3 z4JDUZ0b~V`iAq~0gry3W93?4;*}lClFk&`EN=70P!+4KCZkL#53$z%4%9(o_ ztdvvlDUQWe%A*ie1m#9RSQ1#yQkWW7>{la@Zy^?I5=b9IVX8T*xl&H06eHj{K+*_- ziiV+5jb2vieP)y_C zSrUG}{dGZ?cbW=D4(9^!JQUJX2qvx`??MH(no*?_Fn}cyjhrI=r=h;O{Xy-r6^*7N zN5{ax17`uLIU&HqJw$QAY0=fX974tluOA*LFVD2L>`K@E1p5*DI=K^Us;c3A%W&j5A=Ss}C|F=PI6xo}5D<8va9C(q$N&KN`1r7}&|m-nfY5Nz=%A30XfQZ9DP7FL00009 za7bBm000ie000ie0hKEb8vpK)Ui&(Fc1ddSR!HslQuB$5>@&Fk=(MB zibzc?28fXA%NTWVJa(mHSGK-IS0uV+WegiD>e6;Bc4wbE!qAg4-KV?XmSWF4)!)_C zkv{1@xIxfz0}`>GdqBqxNOS}QQOgAgjk+#Cf{u>B&{L2girB~jbid1bI3P^-V?6=` zEyh?J(ou|UFdzhIV}R&BEm9B|nCJynLNjrRf;bej#Wi3VD;h$woKp<=pzCq@hE6a* z+`P_1fowPcI$MAXKte@!Yd^)=eP#pV_7F4& z`TWy-kDx?iUZi|N+esh5K4LSeKL+nF31A@0XkD+QF!y0y03ee(Qvf9h>xf*b4ejwt zZUJ(8h}>sNrsl%<9yteBN>u;_SN5FSQUkp~p#YSU3iLNcRupO{^$>|f@I0=jdz}OQ z_x!5Zd;SiYZ$MeBy>po2k5rl-)RAY-s8jvN`UMB5hsKOzB31wZ002ovPDHLkV1h9+ B(a`_^ diff --git a/graphics/pokemon/azelf/front.png b/graphics/pokemon/azelf/front.png deleted file mode 100644 index 67d155bbf05858848b02e0717b11f0c69162ca0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)&aFD2oKtMo15KLo!0006G zNklfbrq`{JRJGG!TqGZhIh2w`hUh!O_ds;ywfH z9DK_2VZt^MJo>Sn4<8l@*F<=h=km$r$wgnjpngqcuN3NZcT&8f?4 zXRj1dLzpO`4CvLG?9qjPMxg?Lm1UXu7K|6=HQxl$rJmS|vYG+YBqG-b0=P+BM%2dHDW ztWsEHMg_IV+`xsnSuz%zi!me7Y`nueJUW1}5StO~lI!vk9icE|fQ}d;C(shJJtX(N ziEtN{<KRwWZrX17=CceR_j7W!8yKz8VJ24V4FpIkpMGXUFV%`15G_a;l d|E%)wqhFiH`v-&k+w=ec002ovPDHLkV1oSaCd&W- diff --git a/graphics/pokemon/azumarill/front.png b/graphics/pokemon/azumarill/front.png deleted file mode 100644 index 6513b5f21158679d520762f5df4977250c2d7530..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)@KF;BdJ35D*ZU00_t^0O(KvP_Xd$`1q(WAb7~==zw^@z|h#>_)xIWg+-F100009 za7bBm000ie000ie0hKEb8vpY0AwmX0N^;l5vSvTk_Uk4C#;4VLZo8=6J(t_peaItWk@x%kE+RL0bu*+q_gHC z1SEBpmZf=K3;|5!S~pD`FjY4V7?1ig0#%(eV!EqaR;093kAI!O80ZRXut zfdLX7^b@{)?7CmuCwPA92g$sPeBAEpr|V}ZB7lo0=U!0$BH;XGFpHgpwh0+cYqh^t zz7ya&;T4BBcm7AHZND;IU1?o|2M8cSpQQ;W6C&(D{uC1csn%xI)*`7rAaie8O{?xB y)v!0t8cV}-czLP${sfK=62QpxF2@aIoO;_%J|N000000000000000`Pjt80004) zNklXidA+2^4hF!f{CO?nnwyiZ0+v zDm)exx;nsA04`|GjwHQTiE=8Basd9jIUrRnpl#q|t>0+%St_$mUE4rO85zJ#p*7n; zlR{<20VF2B?|X6;L`{!6(7u(m>Q*5DLs0im>BX_RQU=%t zVg}Y2p;GN3xu0R9NsNt>z@EU!Z++)~0o)dF`9jD(akziig$Gu2)?euh>2hXHb23a% P00000NkvXXu0mjfF{SxfN)Ug=-_-xU)_zHf=P&>0004) zNklU8MrUky>+5bOxbqRHc{)0fhmS7^#N@@@qmzdhblFQLq9{las4?eO(EXVc7+US_0PtQM z(e6>!1Y1mOZqAR%po^#yWf#w1G5K2kEtJ|zl2J^?NAtQ$o>irIRs>4lsyK*f)B?Z` zWLjLt9OuE5BU={cVaDsw?twalJm(&NV$jQ{Yvzm=s6@rHz)S*MV$S3#!#M)AkNll^ z#f(ZU*ZC83=mKxaGPhs_K**QLYuw`;gDg#7?Tdkc9pxxZ$BtnHWRz0z3V~V_*#6b= z0?s04W3%d_3xJx=i`Q`sXHinWdymQBe_gRApX>&skEI(_Pr-+=S&sDshj*q$htK_S P00000NkvXXu0mjfM}qut diff --git a/graphics/pokemon/baltoy/front.png b/graphics/pokemon/baltoy/front.png deleted file mode 100644 index c1bdd8e9060fbfebad9a6fd83e852b125567e586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU2nYxy1Oz;Iuwupp zj{^r18X6K7C^+13NchlD0aS$s0w#4yFfcGCd%8G=cyzvSTx;RCNrl_ks=Y6I^dcD5~eswh{M{pBe~p~R(@bL|DL9`ghk85CJUA6e-(L~y)X zC10JePK0;O=aPM=zjwWP__eOg@_laXA#UdLzvn3Lil6K-rQZIl;5xCZ44W6-eZHmt z zx0GqhN^{4Zovoc^TCAJiE<3B^Bk#>HTlCvqvGfaWo4bVEtKaBIpMDZyu>q;i|WrbJK-c)I$z JtaD0e0s!`^$2$N3 diff --git a/graphics/pokemon/banette/front.png b/graphics/pokemon/banette/front.png deleted file mode 100644 index 48a48753ec095bba1390349f14fa0b724006b2ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmV;u0z&<80Ok=4Zc-%~KS3n+PKqPxWL(f?OYL|6?!UJ>LY`oB1_yxN0ieUf0|Nf!fPgQe z{{n_wh>1J^1Y8dGhY81t9Ywk$j&tOQ;qPFsHgj5NT#c__>(9nO0`M;BvQyqO4d zUe@@pa7vc!IXKLR0uZ8li}CM|$)3J)VU za1{WJTeF<^J(Zu2K02Zm7=22VMecolCxi_~4FsmD1p9(O&<6OYAJ9m6`u4jk0Bu5Z zb$X-z81EwZ{7ozs&~E}mDYQj6PM4|zcG{@%JT2nK-O}!0UWoc?buO}eo2~DDuWyzS zNfaQ$8gX%109b(#s)3pln#=SmTc;`5synIj4Iq-om@e{2$dmds9sD08+LODFaZSL& zrcvg^!&@mO>lIuqDTxJakd!M;>lF|Pz)Jwaq+ID3m{+SHyjYEA@-RZ|hdoNfC=gk0 z6`;<8Ar15ec9axAP<)Ro0#x5W?IVCFMBNSPUOSZ*s9rHWU$qL+QP$mFI~5a@HGq73 zzmZjisREK6aFyrxIM|AW#cXW_0Tg?Eo97v+1&yS(f`DZ4d5*CmM#O5-BuM*w{l}0f z0UhkPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_U~o{-=&%qF5TLk_Fdz_kU@%xnAn1Tl zuuv$Nps@J(_<(?bP>86=*yt!&c#*H_cmMzZ32;bRa{vGi!vFvd!vV){sAK>D1Qdb=TnguCJ2Oh@+pD^-4bKRY+-L;Y;aw2AHYX!pjCVjX8B!n?>B=rZ{pyzE80Qe$}wt(^4v>i!1eVP93Mb8R=I!3T( zEnhx2F#uXt%j(teh`K?n2=L1q$mmCQBLMCUdz%22z6C(hidrEn4ims{&!fOK20&7* zvqsS(XRu=8uYPhOkvB1M^ODlA8pJS!!mQJ`Q9!j?okCJ=+&7GS>_FyvgpgPbBq(w8 z6uJBT?q}@u^HPs?x>8I`n;d+4)uZ$pI}f*?H>tZ*L>3|4_Eqb<4#af);XQghYsXBe9mLp(Phl%N=Df^Gl*H=6Y`KVy!21bX%)!d2*T!$QCKA`!cJrvb6nhs8 zdGmbY#-?j8RO6gBMX4&s-1kOku@E;otQ?7tatwHHG?0x8x#s$tOT0a0t8xy%pA%a{N$oL6&SV33eunu&y21 z#!YzTliBzdT=2(30Z2y|xd6yEeq8~TvB)|M)46c7s0l#Uv-@ZFp^L|pipaxkj#zLf zO;4o&IIK2SK~;Q)D*n98JU;*~b?B9HwpMUfF+KmDK^#5CeD_Z=FTiGK3Y%u8Qo0C% zQkZL$tpT8Kdeu3lA`^i0!iT3EK!4RT>vpNyl)ejq5v5_GL<5$y>t1H!7VRPrfD)xa zuamT@6a#E{@`ynUR@sG)4#VEsMF_np5hPOGZU(PA_LsO>!g#8RA)6c?RF*5)GIfXqh8yyw|zYW<@I=9 z321}X_&VGLT$NxysAmgDdw`AtI-yR$Pr)v5vj)Z(?*XE=sz|8 z*E;TB4cR=&61LK8>spzaGd3SiV`-DHY_V`W6L`kC5G4R)kN}(hh;Fg5wxNp$IrId) zgHjBO8Q%n=LC$#>`$C9iyo3^Bu{0bI;f_a&p3oYJawJG@oaq7r&sXLv<{KPt{(~Bz z9zdPTDclxc<`EkLX^!{=!YaTblQ!a{dT$X@ScD${ko*Az)q4q4_WQ4S!2YD;)-Nc) VcVM9k{0#sA002ovPDHLkV1n(5%q9Q; diff --git a/graphics/pokemon/basculin/front.png b/graphics/pokemon/basculin/front.png deleted file mode 100644 index ac3f6ded33d072854c411366f815e21aea2346fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)BjE6vt1d*>#ejxLNFz(n2%kp1*+8mqL>c&0u|iLga5ysgT8!yt)+1 zlcqoxx08kp$*loH`=xScl~{^pX>B2Y(DeV^dw;!q5@XN$e`R<0y(7kk9e`n4fRP=v z0nQ7s{Wic2K*G4UJE;#a8XX6%0APSSfxU@<5#o54KMAAgvp^g&(d=4z3*N z4hdhSf9RIz#|)3fK^3q-9$ZAT@2i);X-S$8KD_?)X!nEwJPD`$e3h<&ZvsG0H-HNe z;QKJ?XCE)mG_ddhoHy|XuslFK;W5$m{gRdo5A}^4@taBn50O*xigHDC<>5Op;&zod z)zRpu38>)`fXdA9dv<8g&tym4P=={&OMWWt4&BfNl^lHmt}NQ=+`<_ zsy@rVz%tJ$Cr!wwfR!s%b|F%#;BZ*5I-rbhO%3f|5BUBQfN@pom-h8#GHYvLO5)C( zM{N9d_`WGna5E{{xcC<5W;zz4gtotc75LI`{Y`kT+>Tf);lQBHHyhXiFt-b^I{at- an|c7KCb6SKP)oA_0000aCjgnFu<5t_|SN0U_c-sAh0+{`1tq$0000000000dt9vs00009 za7bBm000ie000ie0hKEb8vpKl)rD&P!Pu*$?e>${oGKdypRq|q%ZBz z$xfbW)a^AshE8?WScokW!lhfJNIck>=twGxP-Zs%Iqvz@X?~b8BXL8c=05&@@6LB| zod2;H@Rxk889okdH(xluBmXS6%{wlW7`kD#SdH^ej439=z_3*%03b4ag$e9)u`U4~ zWtBm22z=ec#fKOocxxUpE`{=|08_-ASoI(awFqDpa5ZA)S*Qfa1N4{`M&@s_*5(}8 z`CudxtN?b5g{o@Wj0>U^Knk@C)O9h2s}VUw83|psR{%RFng*5d4iv+9(Ss>FLJQ>iP>s-k zkjOH)f0PccC$7l;FT zp7V@0uCKL4VudoaCLjdWcuGQh8TeYiw*U>sZlBu#0}PB6&oZq)T930CSYV@(OH-l{ zf`}#&Hxn|N?Bdi~3>x`cQ=SB`Kwj&cn2huZez!oELyrKzxg)QiNhwqK#1cJ*7%y!X z-6rhcp$hnqFV}l8?K3sOz8))9?tf4G&jKoameu=BlF_fx7oslZ4MU>7Ywcv=WgMM-Qa-$|1%cXw*o3FG-Cq0RmzI0>YwZ-)jpmErE?r#G73V+yWpo$=q$xt%sl2@ qw0L6$SPHk>;_{Kak$F7-55{jCUIV%;860K+0000xpGAS diff --git a/graphics/pokemon/bayleef/front.png b/graphics/pokemon/bayleef/front.png deleted file mode 100644 index 864172795c4c0f8ad9a17b90ce0a3012e3c3e512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)Px#Fi=cXMVQc_DN+bhdkBlYF>0I;5D*ZggBWU30QTle-n}XR|NsC0i>xsK)r(SM zVq(R`#dRr);s5{wL`g(JR9J=WRtaw7Fbs^OQZ(Jv|9@^d)Mf7?4y6JMEKnlIVPuBG zL!=&$U;9TEnk`~uO6eoQ0?`Z@kkqU&#OS6tgJH2*a54OWP8tYJ1o1ZcE+!``cG;kq5kr~6|bK3Gc$96fyV`H0RYc=Q{$~wi3A48U`{HkC6mCVNm;I#DtYV9S;H<&Cwf2G!1ehpk&Y7dC;+* zh5$Xx=6)uRbR_`8%u2RyoCvHamm~2yobq=K z0t^;MFuaNwqmi`5UNfLyAUnV}DC~L^iw0pN!_xXX3hZ-DgAqhHCMqHbKq+Op&8Xc6 zVyNQDX6qmjd%w-6X-4?XuThZUbD1*t_+AC8VC)5jXB%_*zMhuBP}WIHUWFS2zimlV z%VUxZxCZbZ4�jjjTF10^fmP5jjUb@b~pQ<7>gQoQ&TV;7q`|V_Np!SMZ`huoX@O zB$@h0)nvo#3ti~VznaxPlw;6XsgarpXx_Wh_0Phu;! sIQCxFi`e#cSGMU}+C>ie9sjrX4Yzq6HIOAH9{>OV07*qoM6N<$g2j_N)c^nh diff --git a/graphics/pokemon/beartic/front.png b/graphics/pokemon/beartic/front.png deleted file mode 100644 index 18d3083c2f21dd9f25b4a1a3ca46a00fe9377a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)5kS_y#319$1m<6B!6p+lH$B=xZB4*D+NFTRL04oc4IRVT&f$#A3 z_v-=>yZ4JbP5|wM9)84*fUXFPn*)*M)%W7u7kBLdJTyyG<-P`pAfVA;WeL^I5Q=T- z7Z2{2bC+HNtrD3R_}FW#fva<80ya(C62Sv}TUzZm-o78tlw?=!QY5F@_2&)%>)N;ETploE^`S~iCa&FaO+YpA1on0%qChG5p1LZ0Vmd~o*S$iWv($a_d>z$w)9-mkB4wZ2ApXR4| z#KHq$bW!gVaK1JRAL-LU`Er}nO568XuROqI1+bQ&KgD_neG0>6?O8*_{&VWsDzGsf zDQnzo(LB)$A@+}rrp5YmnkORWgLm~mFcIQ2z|_kQsgE8Q>eqnaOMqw{o|6y|XFZTj z0XAL&LWmPs28#5i(XkOB+*B~t2HnPc0JIWv256fwQyD@S)G&040I;{fuupp1ka6Yn zs~I4rmnfx@ay1R8)Z1evg>OcU0Qw6UnXI^!)(=&Tysqvh5!ZZ^C;?(M1<)qX6Uvr? z909Bbu*)_y!UOtNZuF*X53ng9tR;Ft4*<52nzy&?4c!H|Im_Gilm@b1PLo~Z6gP6Y k*39BO5Cr)q==AQzKX2p8rf0FOWdHyG07*qoM6N<$f>Y3O`v3p{ diff --git a/graphics/pokemon/beautifly/front.png b/graphics/pokemon/beautifly/front.png deleted file mode 100644 index 41d5bc0ca9fd9ac44c64ab9b68384d0b6c68b43b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P)`rg!pc5Qto(p;Rl3 zxq{IOc_8v3x641xMd0p{s9DDdlYRXoQ8X`5-+AQ?X6 z0IvynG$EF>-T^o?dDZFxR-_TQ`1zQC13OY_)F4%0vW~#H0owLdy1!ZP6+jIc7CxMB zU5i<5+u8t4v>3X50Kl0S_Jo+(!9FqC)Z@VEiT!H~gCR0dvt;TuTlSt})7d*W5DdP-ffolUeyRK0mQ2b9|tRl~l3JK+_() zd?$A&V1#JRANW74WoGu7`B~`{tif)57@DoI;SQL%`+58ye-pm}e?czPY5L(>00000 LNkvXXu0mjft4)Rv diff --git a/graphics/pokemon/beedrill/front.png b/graphics/pokemon/beedrill/front.png deleted file mode 100644 index e1f22b5a7df5112be77fb053b151371b1eba8d90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmV-O1GoH%P)Px#Fi=cXMVQc_i+hy4ti}KT{}>n;-p%$>T6=>^0Oph+|MsN+%}SgA2-O%d|CDO9 zVi4%y`0Kw0-~a#u#z{m$R9J=Wm+N-oFbsr|J+XsB^Zt+9kz^%-C6_IG&i<)Sfi`$P zk1i4PcKcobV~NNoJ0<0uE+UZf>rRzteOx2x_9ui&vp-!TAlYHd-iEeAE^^l^$qXYEegh6A7Xh_&IkfHJnNB~5fkTiz0H4*vw3Kc@0eJb; zwV{(AZDji^lTl@;1f%srwc3qSRC&P*Y8%R=+1I8JtL_c z1<}i%hxfG)#E{~1A$BT3Ay!nr)c1fuNa#ykudS$sC68^FU`bo^5-4qLhSTfFrW|(x z&ooUWx*JWx+|$qwEIbp+N>D#tPr^kD(G3xhmWC-*!bJ-mA-Dc@pN_IN-pbh$tw?0020!AmGRVN@}SY0006e zNklyy>8nu5XWgKT8s`>l0JZsG6QI;Ny$aVlIH{{I=FEN6fMv}D)a&^puRv+ z?LmiROh%8H62C&%JVBB7=uzz?lWMo3w-NW_ef~+t{yQ5b$*_MPV2Fq$z!WE8fc$WX z%WwisK#nF1xCrNns}QjNH^7vDU=g|m5P29FK?ShjLqH8s&oJ1=C>2sv1mLp(z(sjd z(jY=@jD)UhNq`Ol<)Q{rX$S$P5)~|{l|T)VuK5REflg-u0P3_9C8RO{?9m(?0HGXz z1hgdJq|6EM=P)JJupo-e*XW+$l%R$V@P*Ko=m44n@O(D}DOyOb7w*2zjR!DJaL%5t z@kQZDk()-Tys_#KmCw)S&)cuqwCyJ~_wPGCZQnHQ7oyPm{EVs3ZA%e8s(_y{+aNX# zdJFiSWvvj4%izOdY;5iN_-Y8a%<=f!Ko0iqo^Q{w2*!wC-eiDP>j2&Z9-V)@m6>#smOHwQ*KWzQL50Wc{gou1<`zoh7cY2Ac!ak zm?sAVlF4QIIP)DumAu6SM&-+00009 za7bBm000ie000ie0hKEb8vpK(y>m%Fc1dd5RnHs*X>LWJ3IIZ8l87y zawS6WBsiF@lg8&+!F9C z-JdxDppqfdcQp!0iF0>RBO(A?C4k0#B|#xg=20X-#`fBkB4C~Xd2pAY0xnYkXRg|S z#WHn9!@L;4gc1~U#N>14W}_$=;1&6)DD2HcqYZiFVIC6&KXzMHlec}SxNpELS=mAg^5vJ<)ACA>)>6et$~?**t%K90FrX e?AspeAJi8QgIb-LTB!*D0000N diff --git a/graphics/pokemon/bellossom/front.png b/graphics/pokemon/bellossom/front.png deleted file mode 100644 index c0b1a0e3d349ad0ca1e83ca22ce6a76bd6a32e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)VuSQ{EgJv|Dxyu|*vSI`$b5?h zI5UA6%$rt~4=Nr)p#2TyRGuffG@M1JLn(ouw1Z5U;GKO|ri z^DvmvN0$_!0(hUX^2e8oj{#5(7}FS=;X2Tv$`~6nHh%+3m?u2xaRh;m9x#6aK5;8_ zgr@HMQzKyWX(JSf3-I3bxM~8xTYxqP`B0EIJb%)`1_y;^*p0R|*PocUrTdzzhOV)$ z`dSXx#~g%iDTsou6>!y^2ms)ZRupoXj0&ZH%0&NzmhqSI4Qhm(ygdC9>;M1&07*qo IM6N<$f>f>Fe*gdg diff --git a/graphics/pokemon/bellsprout/front.png b/graphics/pokemon/bellsprout/front.png deleted file mode 100644 index 492c8b29f84e579956baf1ef4e328b429fe53d27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)Px#Fi=cXMVQc_lxji$|NsB)q*^%u=DmaX`1lYI5Rhm`jO* zou)f??))7mxq?3)-g`$@{vlyQuo)^Z0-M2k-+3P_2Ir4h1nvtbJ_HO45DUznU=y^} z5rawK&g~lnDTNn&n4f1>oHHh1o|As_i$oViGp1S~ugpRMOF0ip- z+t@&m)e*7eN|(#$iHKp_7#2uA7qHSAep!pLfO-BIN3siC8GXDa5Cs|koGG>&*+;*%31}A- zgSsEQG4Rny>NY^VSPV@;dj6%jD~5Qy6w3?c6ME!@(2sG|^L@ZTZwEfq!<{?-F5g+! V6l#AzCnNv>002ovPDHLkV1gMF diff --git a/graphics/pokemon/bergmite/front.png b/graphics/pokemon/bergmite/front.png deleted file mode 100644 index 8526648893b707672a5416d98855aa32246126ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 502 zcmVKl0QzvFc`%>SfZ;f7RJ0}h&t98GLk?zDDjSTY7eJhV(nI02LPE-yWCf{D%H&_Z_xwFGcGRC0?*gLp zF2L__a4tIlkreF?vK`=#RAIZrX*&=LPpL+aG~EM1BM^x+l5PtS3mHiy%@#4>0ZH>c zIe-{m^EJ3vjc5a0Yhpc`7m)-N;n|d&t}Ic(VFahA@KOybzzt_~jyO~(;Yb^EMgu5) zz^Up8DIf*>5)igfvM`SRi;%$T(QcdSBfCg3ye3wS+q5ZDrTIYs1XA^U+4;n9W63EP?LPq%_qa4^IXLnO$vaIOQz-_^L s*865uFfziAPBi)ZFHJknkNUs*1`{x0%0DD=RR91007*qoM6N<$f=vF@#sB~S diff --git a/graphics/pokemon/bibarel/front.png b/graphics/pokemon/bibarel/front.png deleted file mode 100644 index 1963eb81a15eb27c87f86af86bef21cb8688af3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 669 zcmV;O0%HA%P)vXnf53%*2IiEvhAan~~nsWL#5 zzy*Rx6jCV_=PuyX2myss3sHaKU2(3^G4Tpfi0hgG)8_BbeIQ~0%et;V^14i}u%rqZ z+O>TefQbq$P}!#r0HxhfZyVr|cVLA?PpwBtEO2XpbVi(ikEH(ryx^$?A`8rE&kj*v z0%ZoABh|KrvOc&#WB{|4oMO)3;c(=hT$8rZ^aSu)>!Ysgi34PSXrjhNs;!PLATnzY zAZr2rrv;|8Gk}Z|b7^WgO$5PgE6q%5xJw{Rqz%lb9iXicLL-@2D^T<+M9@{yOW+5b z1VQElCc}U-K<6jU?Q5gvrs&1_-#f*XTAG`p7iXZW_~MYr%`_?H%LceOB1RmO=52$- z{dh1s(19i$v?obV@{AIBfZ#l9G^gFrfqk~)oByo8jJgo)m@6$V00000NkvXXu0mjf D^6n{O diff --git a/graphics/pokemon/bidoof/front.png b/graphics/pokemon/bidoof/front.png deleted file mode 100644 index 299e487496b35074c4c259ab5ea37f2c5c7ee895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 518 zcmV+h0{Q)kP)_?fcWUR`1tr(Kq%-~NXWQ=$iTpWfPer100000C3yzh0004z zNklqq#FNWFJ&P`+S3z+EG!8A9z`YjyX z_y7)m82?x7atB>p9Qqa#-jDZx_Xij|>7>8P_mBHdjNUOn3W4Z|A0P(O?jgQU0SLQ> zxCM~K$bh`vpW+}JC@vWzznFFaE>h+IL!=!5J=mjqQ(X{rkeLb4?X#lLt_D)c&11M2 zQv3cKnFb&%!22zi&Gwhn+9efSR(INJIBQWsHL9x3c#S-42QC&BX|rrff?pf{Wc;Fm z#~l#t0i%P9vDCoBEp?!`neoJ|II31k?W#>vvjxCvph#=IWtw0DOkkki-;~pF diff --git a/graphics/pokemon/binacle/front.png b/graphics/pokemon/binacle/front.png deleted file mode 100644 index c3d184282424c553acd14b445be04204af3118d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_U~o{NxR4MK5YXtbNH8Gyh%l&NAb4mv zSV$=N`1rW6sL0spP>84~Sa_JAu>Sj=L;wH)32;bRa{vGi!vFvd!vV){sAK>D0xwBK zK~zY`?bI=A+dvct@Dn0?O%QXH?P z1k|yFe1OvJ>amkgOCXbV9ZI)?`py?hEuC%XR_Hq;8}qyWyJuvPf3}P}>wvWmRPEKE z`gg!^)Z3;6-txwVZyUZIR6GSd1xm9T+iIKZRV64-Vz&JGSFZ0$u-L_L>_0%=uUdw` z5P*$|+ro=s6L-H}t61(LAXVR<18iKc)wegTox&WZ0y4OMw--cl%_;)VM}Q|YgRnCQ zyC?0!3~pk-3AA7+$rC*W}nhi72JjRIVo2YJFDOT zKnKjWqk=b*3pmn&_%?VWNiOU)Akl)WmzTtG9CDZ>?}!d0$yNKyG<5)$gC`R<{S5Hz z;}Q@fU|#`1`{y?SVlfl!2H;o=8qgDrP1pp%Ctbh~5R5Z6V>i85OcU`q$NdN<(}|d| z?`5zzWBE_UWD~4w4M_7e&js!l-o(dr{c@a8bBH%pZoD0E)y%JU<6S? zN>UI{+m_k1O`1bWCIl*okPW@%QV0q35XgqTiiNQDXd!ex2<`S_R!=>-+k=pv+CM<> z;G0Q`k$KVYVMutNeLv>CnIU9SckhgUED&7xmd1pYz=2z-iO!bEqb-;c@ z2u)>{WCqk0rVeaBBx~ut6&WDeMgX?Gw36ENdZx^v?O;GAv+Q}^5k#uk3)301RRYEQ(rD2Q~m0#1RL82~pMo zDpFT*{4LL6BZRO!8bGY=t@!-s#ZUnZX%}_2q8GnR(w_zp?w+Ot((?8#QFJO=5{>%Y zNhUB`UNawvs?gds>-FmSNBPHIuQ1@kv^3!MvDe!h4qkct15P;9q=kS+q=%T@^hE7;>5SKZfCnf8_fLppzf71T0rM2|UaBeSHHYKnKIMD2ku> zeZ32Y1Hjw`DMV4kk90ef1OvA9nY&+kez&396~M!xEu^{}14ObES$3Io7=+i@Bvh=O zv(<7wygn=MB4-9dfbRq=g~OU7&h-$60|QVbMluj$fTTc-HVh#QNFm@HDH4E=sJK;_ zm+(3YFb^bKab0uX7MDU)uri6Y*j+F$?VW%-Xqm+7th(lpaxVO0p=A=b*lv?qR{F%D z%qkLsS=l6MzT*e5k$f}`e{06db|{?O1I{+)0S2Z=CJ zt6wKH_Ya^UEwnWy1<(T(oKFRek~+|II#5)Tz#7=~B{fr4K(;syV56JQ_#Z&a$b&YK z0)WVKBxT>cbj(KIU2rf03vL5 U2QzyUR{#J207*qoM6N<$f_wgiLI3~& diff --git a/graphics/pokemon/blastoise/front.png b/graphics/pokemon/blastoise/front.png deleted file mode 100644 index 0419463d831cd9a62caa1dad906739d0a06c4f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmV<210(#2P)Px#Fi=cXMfkw@AY!ZtIbxKo=30x*N=ixq007O+)mk|il$4Z)}mwJ6ZT_ZF+4uhtYz5v+p97IJ1nkWG|=PwABTsd@8$uxVfEN&)2 z*o+S3@hXa9uu#`pN}g;m+XF=N2s?M7{QN*@R70PqsR0C`Kc9_Y<0Sz4Ah>>-9ME2S zAYAGz3GTn^wPn9#YpE0h(xtwbM`7XrXd3#-%ESUPhiappW-#;?goxi7V3@4J8$~;a zWj!xIL4QGk5Bi^==i{LQgCH37&OEkbf+WMYG?I`a02ss81I5sgiVD9(LOCrX!O8m5 z7%|8ZK!T{Dp?fZyz%}q9Z%=SR=H<5wB#diArwOdoT!_~*(2+42^vj~HobHW4Pk`Fy z0HY0IGJbLMVZ}(o64pCH-78cBfaXDpd|RHl%gB+|bjpm(jWBx^`Eo{}0OSqe1&nQ) zUB3}*Bg`{jPpJlA3jsw~XAxQ~^)!3{@Tr0@q8f_H#HL?9%VJ>_Qk@ek?h{OXhgt{N z&Dm_B&sN)7!8FbZn9Zg9GRPa5V_daUaY>6 zE(xw*Pf)FO32|@3;(89FYrr-=v25lM*Ea$FpPODT63LDFdW2XPMi;hGB3FbM6T36W z=AFeXbHGUqk)7cNU@^z^3xL`|ALH~U1l#EW*m4*V_JMq!Lo=0~UaYnhwn6H%^rjK4 z-v)=sl=w}@N8k!L9jGgy-6z-M$NB(GqrTYX70&_9_6^7Fz3E{W1nmSnHmvn5VB}t3 z5+ByyeA+F3DsZ=79t;jZ>^+XNZn4`-ax!_f)0H;|3o?aaAkk^czw4zJ0q|#l@^b1Q zAKd4EyT{uFu19`H{$BrRw>`h*eDZ_h)QRlU?|u~R33qA!H|-Dho-q2w-JUoA0000< KMNUMnLSTYCZ_E_{ diff --git a/graphics/pokemon/blaziken/front.png b/graphics/pokemon/blaziken/front.png deleted file mode 100644 index 5336ff9b32db68f59e18fee8538437f0b4ffa6f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmV-;1Bd*HP)5WujIkbq$DU|{%wVBp}eU{FYaC@A>YU?_Od;Gj^ThKoke?izaJQPedjL57OD8a;a1B z8Io>|EvPffpuuZ~P>-!!lrdEdaiK1iLqbElb}{}EHWW&FVDO~H8M>#W9gQKqlbpzj z?((L?_w)a~CkcQ%wW0%INdRC=djO<$?7psV9f(2Bb<>aWmKeNp-#Iyqg%R4Wo8Eoi z!&@%|V5Mp7HBRan*MuP5{B9p(VH3Hz_w@%2sEX#4_nN;nC%0J^MNj}U2)l2wDB{#t z3mChtswm>4YTGH=~Hw_cNxF3)957(X5GCnMNW_+LeQ)FIVqrk-_ zr(spg8ylDL7{$q_5ai#GpRE#Jch0QJ2AT#jFul$Jkb4+^84b$re0WvKLG)I^77DCAEECI>%JOom;il#YE-B zKuZmQ!%GMQpy7l)R3T990s{?BLMEduO!i2{w+gAMr^qz(X$uzBDwYXRCi zpo40V(__v+%F=-ZZ5whT7|68g3y{KblRz25EX=d-(72iR9w0C~3_lABhFmbrk`X)6 z9)#0FAtX!2H(7KTlRaYaWOz=pBR&X!RtD#bQxXt81pPsDTCVHxp8R8= z&jCtw9|g}CxYt8^Mq7;M(f?-sK1oDK1QCJ|h{5>!u0UYENL9{5kX%I4Z}thNOzaUi zi@;a}0E$5JQQg*Tz*{3OrB4PFjIV^?dOn(w(E}}jqATPIJpgDep3;ArtunJ-6TY7S O0000t zkx)AEz6M0Be>S=};B-f}h1+M~+~`O2O9*vhH^D$(4Hh~_X4M(>6E9WjqZp{?$PxJw{elRiBQXaIm&cRgS3rO<FUvhKQZf&&)EI1EV{Be?`2SVp#`tb*U$P9<{EqUOYF;v!HUu+LXr`V$3^J>{NlLk}93F0rpIK0uaOa zVYS&ZWS2>^Y3eI+_-BftTe}ovy^P{g7x|4-3wH&Sv@@f+?l>J?LDpp}Ng2KfxbbG4 zu3Kqz`HJ3X1%c$)du6>3y&%|e2z$lh1His?+@KBnF9WXR00000NkvXXu0mjfDo$$5 diff --git a/graphics/pokemon/blitzle/front.png b/graphics/pokemon/blitzle/front.png deleted file mode 100644 index 8eb3033d290a05df2509099286b5d44831bd92c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)b@6|IP5{fmCOWl+ZfQ&bv@MH? zMhE~Bh}IxrODv+B(TMn?EYT*xd3hG?f&rfYA^E+fPNteGT^HXKt+NKhO0b4 z7Q&MVrrbW%*(`*m2&#s^r}C5DrwmqO2!8solq*a+OzxWI^(_P^025|>W5&(EM*)>^ zW-xH$=Y<4nSMf28@10&sK;8T?4Du!lW?MkjHGI(dtBL}eMG`E&fV553BhYiYaS6~{ zI(?Z03uP{p+Pf0L=wk&u&Fn%3PL0;xGZMl(HtF!&z)r?r_Jx65LScnb00000NkvXX Hu0mjfWCZe_ diff --git a/graphics/pokemon/boldore/front.png b/graphics/pokemon/boldore/front.png deleted file mode 100644 index d5fef1c2fb1adb273549bf5325674d6653be663a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W^mP)cS5ctSI000000000000000rX_OD0006x zNkl87-7!g@Eh}K>PrE z=@s?T9(!zGuH#Tb5}>Gu-qu1W&U~I3kHE5C)_+>gnfQh4{T;aO?Ku#f4%T~Cjf<}J z>hlROTy4Q}bs|B!?nPXvhE99OfnJWIC=ho#JxmezGB6NPSA^5$=1kpbPOv|Og1#EcH97Pd_X|_40KDtVGtVv1Q{uVtZgPQ^&kTj9EeIae7qx7@=lL{gy3lE zK$e2%02Eb9b`Z25p{2(ZFM@F@bKu~lWLwYVB=tLbhyVp9-OXtW=&~=@EA|I~WI3>b zFa&nem-h?S8qZ{QW2L+tfB{z9qs%6H#^&WBptF_Gc;8Moh08iDUCe? z_AOwIX)@pKnsMCs>?+Vnl6Q>2bVUXQU`;W{cJNs6!PYp(+8Wnj@t+_DQ@9bdz0(dufS1NNB;FY8~|Z&dP@ U^fL$9LjV8(07*qoM6N<$g2+uI{Qv*} diff --git a/graphics/pokemon/bonsly/front.png b/graphics/pokemon/bonsly/front.png deleted file mode 100644 index 328a0b031557350796c9484731e133777bed74fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcmV<50U-W~P)3f0000000000&@H0-0004M zNkl!LzBM}(B`-QX=eZ5ah$XMq#&^Sm(kctxRWS~Fa86Jdf?Uu#L?Ia%wiD+++ZsH z0|eZw=jXZNdVe(ylF_zf~$Vj=`LJyeCEnpR>Pb~S%iFl-f`j(^c`&s=g^e_D*;|C zKx4LsmzDur^WJg$gn|7*0EQ9$=JmcCq zYW@7hoVTDVuVk|!q6Ps@%503pR22X!A-F76fpYqVF59*(DhSj{S41`b>`e878{`o^ zQPmL8D$m3(&~N%m+8kVO81O|DE@rVH^ZAaNFv!3Px#Fi=cXMVQc_F)1KQK`{UT07@|!lxi_*N-3O!TK3hP|HVrG_RXw|DLFYoYHD+w zq@=y1do%4XmH+?(p-DtRR9J=Wmg{zdAP|Jbfd!41_kY{&1(YU=Ci&U!IZaWVk6~HR zuKSPwXoYhw|9q(K``&)g0r*5-LNDGTu%H51)4f5cN3SUG95*L$KoAchgd2zxxr7kH z72#aY9=-;sg^O&q05*v>z%^3vn{do&t80Kic5(%9u4LgufURWUnmSpIb3iWWOkh17 z*OcY(nIoHncceCrK+Nz5dsH3*UVXsDlp-@Q3<&&B=7D4Ys>bJTq~!22fn-6$K#3s) zc)nBsrC@4iN;m5dlAlHn(jG3W5lXm7Z}t+|H(8hvPUvFH)I7;wEQBy^-8M z0zhXV0CoUzQ}jv@8jCU5b1&uWat;bWFJb`{cbwGR^_)ZJ5Ut}eaBCpaCE3nvXK*AU zBcQGXsR1VFm{Bb7Qx9Fpy$Zx3-(|U41TUj273Fe3%YgIDYQoFGK*U`S{*lO%-iF=? zuwN60gQLX?a}#74VTVXlsyGK7?#JqRX0Y^rpN8 zplP0`X^ zlg;V8 zh|mUTf7CqdpLjs6mj~MKc~IQP;I{y0WU2?EEztk~002ovPDHLkV1jA@ZxH|h diff --git a/graphics/pokemon/braixen/front.png b/graphics/pokemon/braixen/front.png deleted file mode 100644 index bb090c9d17130421d7a70441ec0f921e9f45f453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVl&H6ae5uCkDh4T$-ti4-a88Tqd8x>Pt zjinGm?%fJa0W(d#PK4YCgiCqJ4aO1xvDZNhZWkD1>ds3*cC(0n8tk14-4P#4j^*bI z$C`0g)Np$8|JXF*9P0}(8O1Dn!da9JVA!VCBAmEyv$Q4u|r2Oy}0p!k6pOu=~ z8ayJmQ9M6^`ZL|U{D>7O3N=;BWVkX`0Nx74d8G7B!n63#R#sQBTR;STp{V-=EKy=n|hqsfR!uFc3lW0c( ztUeB)#yY-rA+YBSz@{Kh^8o3@iP8Y;kOIAfPZX5D*YRFd$G+aG;QA;NalU$f#gYAgHLYFfd5Cm=NgDSQuca9S=K&000A6 zNklK2q*(aRk~!rCt78%(h(7K ze?S!prbbaZL`}N%Phj+tiV4NZ!c-{?Rd#w`|H3A2nnMD?``ml)&UYa6h>?9zO=Xry z=HGKONYNeuvSb}8B%^4lWF$*SLjanh$y%~rFk1r1%S1^6gx+L2S|UUduk5`LS8pKz zG?FLs`oiK|-7@L{uoeeWGU&`;7J?EYMI(9?kclbu2J-+Yp^>K%B1KH*>Y^lMV3Low zkPAWshSpsm4}i8FF%bSR8cnbj86@5!Rq%B;0xT8)xe(}<``xur@?Fjd!$6-@&(-16~EI8AKq2Apz&sq8&jGB3uGvoYSL=i0VLuK)6k& z8GSqo0GT;pnI@cu$n(K?4ZFuCOb9D_BPT41dUO|zxwx|T=}FEnF@I8#+3h!jgJY4Q z1_`18od@i#@a@4sl)!7*OlS~k&=bJH=TZx2WrD+sktOuXe7k?t?uv^DzYqZ6 zwH3RF9?Lz+BPj> zOoN=IPQIgPLg%~$r^L4HAy$i6(EnR`ioxQ+yx7% z{diw~*W-ssvi)J0&J7I$PiNUaiezS~sPKTQU9MrY2|5J|P$5wq&|fl{ODoR4k2c3P$1 z{6Dva7E;wYrOQ@{T4R>r0Lwi$^yOBm@o{1$IEZ16B^~L;s5)uVM4;r|_p~#T5_Kfz vyC2RdSr55${b3-z`yaq)Jgf&*9zFg7V3TszoGV|-00000NkvXXu0mjf@yoJ@ diff --git a/graphics/pokemon/breloom/front.png b/graphics/pokemon/breloom/front.png deleted file mode 100644 index ebfe14335fd80493d91b4c76d8bf455fbee50c52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)%{dnXmNGYNfy|> zg-9PI-u|BJW`Uf<8hl-*vUWcHnVsGJt!bYcmi6UaTDK@2TW9h^ioq(W(b<0Okw0FU!570NOlx5n{o49sB?C&25nKp;y-*wDeX z9ThMaB}SZD2oQ%-=X4xf6aZ^9({$HyPg;<%EN2?vhdLdz&T&aVhVHV6#lO__K$gg> zpM;GdQ+pWfWRpCXAIdq$iJC7YvE^waJy3vMnF%QYJZ-kk+cgGTAxeRxT6_Q-rHMyz zz-e#FL$hv{ZNL<75dwfjBdG#!z;;4JuxXmx9ov8p4)YN3p;_Oz0V8CDPF{}RZ>CKJ zQM7>Trz?Ek%fr{(RlU9!hgOA~V2Z%x{^532ol-82Ex-tadG-Dw@bNwjav_ebNg7X6 zrvfGqQ)iK9_(qgnf60008! zNklzv2Nl(5QYtsA7B>nDY+}y3AS|Z?jY%nHq-`Xi9}}u+aygQAzz*#x-wT? z%CnRd+oidR=9)C{P&aE6FvQSj3MBM@^Uv(gELhfu3t)%!O1l#t(isoxgXRJM_E}J` zeLtY9i4Z}(ya+TaZ6(BBpwjMoB9HS@gBpxGD*#G?78nhYKFV9T$n-woKETG7=t3W$ zC0Mh(Ng+5i5SS2MEJ04d0Mg=Qq1q+4c>z>`g;v#AsPWl56Kb*xjnEz#K=j7#7hAwTfOJ5_3?$q5}n{7hyOLFDOsz|E%hJDE8mU@#8f z0S%+y-6u0JKyfk>Z~88`1Nh%-twnIB6}o%hQwFmWYqF$@Ts;3KhM=-PdTv~Z?JK;BAG7j}4ryfoH9!~fRB4AMo0-OoyDvI^f=2dGP&h&nh1@U@<<0czhA8zAYyL{W$HzXYs@ zUFA8DJ#mxnTrC%|*6T@C8P6R|dj!PJ^~-V#I8M3wGUTSXVqYJw|IK6lWNjRDngNlz zT14#e=ogjnw}H%V5Ucs}<>B!LvnC50%kys|REsaK2}4cysCNM4H`3nn^DCnRrfIPP zU17eYRqf4}<^r-PJ}a7|8)m@OLahL46+>b+w^8bt;wD^cJ7kt%YsAbTl~#GkRr>ya l6-fr}zVy6bc~Jha@gG_F2dcwaM6mz>002ovPDHLkV1nu-eKG(5 diff --git a/graphics/pokemon/bronzor/front.png b/graphics/pokemon/bronzor/front.png deleted file mode 100644 index 71a928cc3b4eb57eb080293c7aa092c0e10a6acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU2v~S%G%S#asBlI6o;(2RME|%GLtz7v*TEdSz3|4Eha^^2Ryq+!nY?LSKgtbhjO&cAR9k1)V-2S|t z_pE^z6Gw&=n}ge>Od(x0DTjxZPdwTtRv3S-o2Sb7Yr)L5DyQO{HVJ&;kqQ>sEuFBT zfzM|CoXgXhrnTGNoBlL9Zu;E^aW!D$z9Pn1X>+q`i zmZWD`t;_d=8|0(5B#A7Ww4&5wYnw@u>_Lu5Zsl#BauYdprDD9>(Xcz z-MqtxkA1DabXob0#QMn@bC)M3|L+c5`+3UVd$XL*#QneY=J(oXZ@%;2-Cf7feAw%n T_xrcAK*8(j>gTe~DWM4fPIt4| diff --git a/graphics/pokemon/budew/front.png b/graphics/pokemon/budew/front.png deleted file mode 100644 index 09a81838ad521b7139b39e69d9172dc17e84892c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)rkPr|MI9Mon&{&Xw0Ql%=;J7#-P)IO%U`UW~pvZXGcz^%^00000(3CI70003( zNklT8qs!y5NOw^JfzM@1jY&!XKw}W7*(p|@C6B9 z0RFkUJMVR_%3bgAefL?G9p|cltQz~p_e75bm=K*I84z|mT?+68^92zx5+W2K0fe3} z#4Ryn6m!p~fC)g{3|k}s&+!-sTn;b*;;QNlBA@`LZ~YnJ*CP%w5m2)gARztOI3Skf zFi*B47@`3%-%Gj0OL9o0l&?I-BKS<+TVjIUgPo8jaw8caHS6%WkrsG|CI&p&0crMu z0h5>MK1nmRj@jiBgW{xiE2R!O1{}K)V)sQKoAG;McxNs)*E!K#}R@q{+88!RsEkc^W(J5xz~la8af$nyMB|V= zz}_OpgC%0n2t4}bPl2ciWR3I182Hq@CFBCn&J+hgf5GAEfl^#>WrqM*#n@jxh`VNdMcl5Lljwg$naj@jlr)0UR>L6s=r~vWWIgYs`$Vt$q%W3Oq1iV0;bGGDr)Swv&gUyO#=b3;v+FxqReH=87E546|}0 zxyoEXhX|b0(qpal4oG0zwV{egKo`iN61DNFO2JnnIt5zZ4jw4QIK{LDIFLw?*pL`VNH~y?fat(5aByJIu&4kq`1ttvXkef)5Xi{LzVcSI0004! zNkl>OK`Sl9-wDcaBxU_ zFW}H@Lcys|kVmj%9Q8{P9PXl%gV6u_|K+>y4q{om?DFT?`>k(~>T=)r4jX>6UD;m* zLB~0(2G|FI?|24acgq1maCz)^jDTNvXPD{mDF~dSa{~}FArdtdTj1*>I2QuA5=jYK zhAkr@CcqP=(vuSCXWZfd5L?i3TAmqjkpKe6@jY#c`fx6A$(xT6gigx@>R9MkC{Q*EoD3pMK>Bopw8d@=env~K6 z>S+m7+O~_LF!a`VOxxBd#_5C@f4v$Zmc3fNn7Z#&e7wuQ$R}NMz((YrPQm~H002ov JPDHLkV1fcf<@f*q diff --git a/graphics/pokemon/buneary/front.png b/graphics/pokemon/buneary/front.png deleted file mode 100644 index efb01359d430686eef174527feb68c84ec0fd73f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522 zcmV+l0`>igP)Kls!(vKoEr;$ubQEwiSA>A-%m4v?=^k zPz8D7HZjUZqC(d|r-KvX=*)%&z>H1lN7`%8_&13;utWF*#E zej+8LI?WR?fg}O(cK|UWPPJCjkdaoo2#l0cQUU>qI+Fk|9Eann1gro+2DS%);C0t7 zeh9pw2za-@0Bl6x3-(V%G4(3;nPC42&{QyIt69@7VFj@c-Bta0C|MzK57AZ`ltcw3hm>oZVYr*B4Asz z5>X7Rgkr(_w968JtEO+E46{ku&N%>@gidXMi|}njeyR*RW3^0mp63%5`25wSic25` zYS5_wMAW7*5uR9@NOf|?#B}Ke4|Fs^mkGc!%N94W6k!Z~y#Fs&AI(&0&kY^^$^ZZW M07*qoM6N<$g7?VM)c^nh diff --git a/graphics/pokemon/bunnelby/front.png b/graphics/pokemon/bunnelby/front.png deleted file mode 100644 index d307c4ff339e397a4f9fdd1f4e51012b9694ad68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 654 zcmV;90&)F`P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NGK4Xa5!*KAOHXWI5;@4u&8)IQ1F0| zh=_Q|z`*$U_)sVi00000000000Pv%<@c;k-32;bRa{vGi!vFvd!vV){sAK>D0q03X zK~zY`)zv>w+%OaX@E0lBNmAI8>leu7gv1uWoMd$=Lo5X*)ZF7v>?imFy>!NjV)Y|* zg#kVtwz*@-<(V!WYA=!f%X|Kp82(A|4nFCQ5+{g~bQ112hr6&|n&?^#!-i@00irb9 z13K)kElN$@1G??&_HknB5QG|R8{^!R0q~M(lIAn>804cMjd!gSNOa?|1vmOBoDF9= zHE&^U0N%vM_+$TABAno^H}BgA3{hO-1uzmHpRyB+}$A8jKGyx;6+Fk?ept}SRr zfyuqxr~<@o^K&GF4Y6$A!Fm(`N7XzOP%WF$3;;e?{VxeszZnl;#YRHVKS%&d^s+2_ zRRAqoTqrVtEbb<0&gKHX;c-_qJ zp0WH+fH@*_&eQL3p}SX%93xtQR0a?nuY?Y;paApP>l0%InF8RPo#*+C?)NkEiN=oI zJex#W>WBcBhmwcfbsiRavsDq4BtU^&)%0$NRfW7mPA!$+c0zUnFQ{|t%d(#9)vl>w za*1|3$RSvuPd2#{T+I#m;Q-u#M-uo-a@DFw`bOf4u?t0i-Yh%OeHHzG$YcEz_u>;e o0z1_g%G7lrz+7J;{AUH=4IMb8qS!f~0RR9107*qoM6N<$f}F?}k^lez diff --git a/graphics/pokemon/burmy/front.png b/graphics/pokemon/burmy/front.png deleted file mode 100644 index 20e449da87023f317b15367182a1bed485d385ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmVP)Px#Fi=cXMVQc_DJd~pT3R_dL4$*P5D*YCN;!L+N>Xz{|J6#Iiz$n0N@7Ymz?f(N z000000AYRq&j0`cW=TXrR9J=WmO*yIFbG5~p+PwI{m)wl#rq(ZHSe{}WYL zLB&S^Nv&rjzuI6vZUK(+=>@53<+oZ>Yg{R)iJO(?8@ZJ3&LgBRe*S%EKu>n*FFbE!@E z05?L;k2HbBBJnQ=0!_WaT{!*a0hrS#qCVCHAWRfW2_t&`sN#2k8ZB%(Rl~>#Lgo!? z1)>P%HZ~;H#aKdS*GO&2{850#k4AdU5@25y3-A%7Tfk$g4rJ0`HlB+Bog^b$Rc($n(Chjjsk!1f8+UTY#ItV}QpN;NiqMzAOJF ez468yKgJ)>QVk14g6d2F0000Px#Fi=cXMVQc_DJe08gnK$VLRwl{5D*ZAb7R)Ub7N9ct(0^B)=Hd=DPwDEgp7>v z*pL7K0Co9!vH$=9L`g(JR9J=WmBE(7AP7aHAWEYD|GNdP?Q~WHta>JIe{WvEnB%zf z4M{1;=a>KxV}gVb;*SInGhjw60UmP36cD5!FC)a@F-R#UK%HU0fH{Yjkb=C95FoOH zqs;hukS_@X74#HpyoMytCy8GmaFr1HcxsiEXRg#7yuxx7)D^p-DXu#Jb{Uk%wFK}9 z=)AHvI4{%+Y&FR4uA&9X`K(Y)%WRBi0Ud%g@Ck%1^BB5#nIS1U1+)ZgF~|;>SZUV7 zIH$-KLtD=z;=04!j1}HlYcy5B{)s;ge-_{vy?(~l;J1JmZ#awiQ_#E8wk_bG{qD6( z9kW1AqGZ+Yql1|j0r3vZ0%Q{$MWNpNOJn4xK;C|=_S(mKHOmxWyynM_-%}w5d42Nq w-xc2RTxR{#J207*qoM6N<$g8Y)j&j0`b diff --git a/graphics/pokemon/burmy/trash_cloak/front.png b/graphics/pokemon/burmy/trash_cloak/front.png deleted file mode 100644 index 39004627d58c86ade363eca822cd7d42837a1fe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVCl(9|%K@f)b0_U}2;tO2v0StE%G}j12 zVtEO)-z0&HVpvZiV=h@{S$A zi36yC1Ms@82=N&Y)T15`G^0~~LwJ?(05tdwqTvAQ9mhFzLSQp^p`)b-F<(ODdCvN^ z1kPEY837y8YmMS5cUeaYD_k%mCTKM!{V^`%3qw#N0$e80RfsPHP+$@Qv=N6C@cfp* z`kLMmllX$4k_dhKpnO9)Jo|E0mzk|p317CZu3c+mgyr2 zh*T=2(vLO;^o^zUEZq_j{Lf8gHQN#c{9QJfTi}lPb^M+1a|2`yAjC~I6g8rQu&d>m y?6_A@4J6Uwdrj$=b9O}LFZd_MJVFltzv>H*2b_BARaB7x0000Px#Fi=cXMVQc_0000nF;ZGebAyAu?(Y9{VywNr=H_C9Vlg@YoU|}7P~I^yQhUW} zz0L6W_`V=PJpcd#lu1NER9J=Wmf4o0FbqVa#ViT%|DQW5$p!;Xpr_B7mx&&7dP!ZE zOETv1_||_=^jkguk{~|?5bXq;0lEhwMl}F*&kC`!Cfx{ST?5~8K%695t%M9PBRBP$ zf*|EDdn5M@D03nFP!9m)R!J+sSx-?deS+FP!UEMkN(m8mX-gdu#3IlFqbfzZ|CV@0 zo|7C~gA64A>K4uhD!Ibw5fF>}CvrR*Smgq_$3T|dtR37T&({pu)Y$%U2z)6Q+qzYT zpRXxP%m54fA+SD_9aJG+8L$zW*-sG~2}iL5%@4&312F7E2nW_kQr4^%lTGurJzC_G<;_(LIS9xCO8fp`Qb=_ybk$?%w_y7O^`I9pa0006F zNkl1gK4Yg=M!cqO-U(DNa={py$tEmD5dw=E!+e3Qpk%P>vb@l{g} zu)bxQed{hU`f`9;lUvieLo{xrzN&Zeiz9qAR9yyCZsx!TsB4p%EnR|kgCAX-U97d4 zEw7>bWZlK-_g@;auW|r>PB6V#*U%4SetGoaTvQmq1i1_-vl0GLnun});6GY~pES(! z6!J{%@UZuuT8HeD&~vE3&{<5Wp0~Q~%iG;WEM%*~LZe9;QhUs{#;P zBwTDE3d;6zRdUSd0ncZkVmca*GafO-in{|eOwoth0!2HL1@~fzFvsd1$Z?WzrP_&x z_RwFBy@6Yc^g7OWiPzJ&^MKIz{IfIQA@{gK!;1R=IREDQTfp-?E=n9LM0H&BcR<;3 zxj2(H7Qi58x=0#89mYF=vRcd(qIWhcgq|l1Dx%8vQ2`G?A#I4gC2!jsfYkV3ErZQB z!+{l#4cpng&<;Ns8^dA%P`w8j9CXxpw@IJgZYPc&`lPLI7p)!{$@@aYzed6J-b#8a cPWlh@8)LrHxxuZae*gdg07*qoM6N<$f`9oT1ONa4 diff --git a/graphics/pokemon/cacturne/front.png b/graphics/pokemon/cacturne/front.png deleted file mode 100644 index 0e7587f6f71cfb7e9cc51fe314d8b02999be9282..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmV-L1G@Z)P)Px#Fi=cXMF6nqAW{Gj5D<&KVq&yvN^=k~lu{UKAWEcCq}6kaYB^F;QufUNd!%B$ z?t^G(XsAn`4FCWF!%0LzR9J}}A6>v@`@!tPz1*XZ}(Hp_}`HmOh?*YWw4n%GMCV$5Vv&(>A z3Dg(BPlVY!8@>>(AY_vl12)8fKSd^){qvasVFNf1p;u1{aLhhO{j&!+J^~BsDS?xL zVuAA=fmtQz-hcxsi7<6~a2WKQU_Vbh>kfpEi3@!&9wa0SxNkmCExO@&s+nui`^SfR zy_!oJ0%nW;>;DU{_zM86MKc|c81;HZYT5#HqA7@%4PZtFF!@3V66u3+{bnjRLE|ac z(6!|+o8dHV(nRP0latfxtsLH4Bo4KQ=kMG*w-95UZAzhIMBis4zd^m)!g+!nEHPRL z(jK@rcf%P<_wETI`e4f1iXlv@R=aef@)ZHzfJ*Z;eOGtvQR29agmo};NH7fvECtFb ztP?nQpPO9G$4y=g4@-ukWoQ1bD$RS+s?!LIjqq;RiP6Rev93WKvg@KQi|Yv)n|`wu z(dc6%&jCz&w-KUPPe4WR&)5NS#N$c@!jgJg2E>|8$aC`^(E{?DCX=c3Nxy`ymaxv= znb5spC73knmwheb2w=!#KaDA4J~$fiem%R5^(AAD^2v$GWqSgOw?7U8sI_D*;n`0= zYpzMBtDaFiKMp#6$@!{h>iJ7uZ9e2~ymnbEiOKVyy>8nu5XU7z2r^c(vvm=rxKoFSNjqe*T_VzCpjI>%NL<6#R3NA!GVLme zMEU@(^8|s{0?m-AL;3_=vl$uv3_X&vY{O3G_6%4M|G)d-@hHRi*UYwU{dh|Ea8Pd= zCdRh?VvBBiZp#bmhKUez{cV7Q!PhtT5-hnbKmx9T1Y$4P7GW<*pa|DQNf%?(d+6N!NFiZvBn(s@F&DMsJX>=sP3B!3edJ0ENBbdDggS z6lrq}FdHAC1vWxqMmZf`q@1k*^n~{cRO>n@WRyyTiq#ZD8qq9s_Y>deR2!q>Y$4|W zM}4x10xyvGY*7xu+DbcPL<-gE-;_=^HS&%WNmdO-(E z?+N_IS2sBn0fCFVTPzDDra}Rh zYy@06u$Sb$Ujo-EyaJRt3V5A-0D!}}Y40UqdJ1sw9RLJlOo*)jvXPFkP+?PrntQ7R z5QWkL)c zOGmJfvgphp+7bMARIs#c1d)1O4M#{dV2J_fWN~o_AuR~303hU`MYA;RSC_X#=8yf3 zJXtwfD#XdG^Eh7x=JT2QOvqcWhJbWtr22eV0H}NR07*qoM6N<$f=C>g-~a#s diff --git a/graphics/pokemon/carbink/front.png b/graphics/pokemon/carbink/front.png deleted file mode 100644 index 31db1394a04c4605e4c1251a5ebf14cc470a2613..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_5D*YJKv-yCh={1j`1tsUfS|zO_!wBI zpqR)2p!j%*uvozG*x1D0l`T` zK~zY`?UTQ5+b|G^X{DPN(?QaqODYBKY@PqWgMp%A(FbTRMQe0Oh#s`J0f+8}Jr)L1 z@BzAH^3cFT&^O3Z1kMuZT|!Ek!jp#1{sH3heLRXsQtYw|AK7Ww4~tN{Hh4DQ`g)`Syd1;)EzLWY-ti2ct5Fi7|wfvOCfy8xhqQLi83Fm{NWYfku!c!%yILcC}A9#%Q|>V_F3Os2Sfbnvzx@@QgVSkf&PMG^jHq^+HL{$=WT z@h=b#$=a1S-mkpSXM~9}hIs3iDhl`+2rbgy05@0wYdfJp7 diff --git a/graphics/pokemon/carnivine/front.png b/graphics/pokemon/carnivine/front.png deleted file mode 100644 index 2d26ac90484e7a138ab95f414b790075cbb49da8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmV+v1MB>WP)0|5)00009 za7bBm000ie000ie0hKEb8vpKls#+PKp4j_gCO22A-ADq@kJtZzGg6< z93G|dW-E6%j!UN`yP@VhrbDpk6yk<(cnUNWJOzvgb5jOyqFcA*8}vi;xpQ7^t5cUk z{ve<2|4+}`okYls{y#0bs8`v(>#L6^G|0PNxWMOy)4-~gTuppvv3~@GsLvQ;J^YA0(7Pi ze@fUCQ0D;UnJSzDPRJkyfL+P`S)VwePd$tRUTs%Of4&PRThU0ILAi*WFLZ_tLv5)|v*efQpMw+wI* zUGj2cRK5308+T~Dy@Cn6w-?bD$ZIviLy=R8v0)Kcn}e4VKk-(M0rDRwO{Im{VT|<| zQ>776B!>j};Q7YCPJd~I7Gv66!z$Skxf9~laKKO&H|h22O;c+lLpE z5k_a%tLbezX&P^As0}RG8MC3fn$|t8xwmQB9GME38Zu@ZYUti@jK${qdL+`{>Es(k zmMD#tCHi{YLtgcm8j(*wCyk09IXz~j&P)nr3H+t2#1Z`ba|No7z`smc2sE`)NEG{8 zW4tauZ-Fn45Eb{kEwC*NqwS2lydwS6cby}WJnoty?tId1LESw)mz|{ZWZwnOMojl; zxeZYRb`vR&o*k-(gv$dCVWUctgkmqf)O526hJSYo>|j(Yy_m?n^B`U_q%4>I#`7QCgNDgH}S%mlxE}c5M+}@+3MIpv|40SWf~q+Sav*C)$ zM@WF6dW6n>upUbB-Ok#fS|oxW{{LLaqekPud#tnf_nW|&r#}pK0tkdiHQ~egQJ^~! ziIbuLw4`@r-wcJ}|c|OUY2+ z0b1yBpYI4@JM*$4+y|(D!P%BTgzqN3)dU`UOb9*1s^3$kp6>LAZ{Lh%;6&fB8Y2X_*A`Jke4Od0q$x*h&zmR9zMu!NfvnM z#IQ<3bgL|qqy`iovtaU#UduwL`6f!!Czeh*6XS?+&Y3G&Pl-qa^)L&4%o~9icSix| z5gWxrUID~g0az0=<2?2Z#wJ-D^H>8(4H#|(G$x#X(rXmSvP=VCNqvEhnT_F?eDWu* zmH{835vEB=GNr+-WT@h?xF|SK@IXlTfPkR5(BNozEuB^X0006d zNklljA6aZjb9x`;XQ4$dtGa!V7g02p!2pPRw;mmAVcMBbmq7bVpED^GY zE|ygxcR=cx>n|XpBglir!q6YUP+;IU@Ltj?6hAvN;tg5emwWHtoln#Lx6rqNTRr^k zRf8tx^lo*9XC|tk8aVDYFxGmyQw#LKZ~`4GX)^*yZjYNXXk)L9ISJbCuJk& zf(zc4LIP++#5kIQbJvkVKrWnCfUzT`FzE_wAf@!N!ngu70R%O`+66Gi7N~Kxg_{9z z_m~#Gl0=hj(Mh0#EXy9pG;p)T@jC$0$fJQu9L&QKLX?}>IliM#{Z&3oJ+Hitol~XG zI#+=6a*5@MQcIO(dnjyT4$Fl)J5h`DNgYsXG3%ySqXcyGgTi<>?4CoB)U-^^vNma} z<=_1Y`5zyL-_9plVp-g`qc4YpuStt@JhjbE494Z?-o?fHhfmqz zAht0t*o~bsHoDAz$d8H`BeIG6U=*JV zAS*HF)QuV<00Lk_90dSx|C3w;YSK^xw!U9riTPU+Xz*1PE5IVMgl2f_3KJvZCbdz6FT-IsLQo8%15-uSS$bf&c&j07*qoM6N<$f-pHR Awg3PC diff --git a/graphics/pokemon/cascoon/front.png b/graphics/pokemon/cascoon/front.png deleted file mode 100644 index 54081095cc1deb0a0233ffc294993765e17e75d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eMAP)Klud5JFc5|FbAcG8UQ-LAc1MMqeUeEI zKrnl|!BV$9LRY9)=qbA9avg_|#tsmvYaUWicpvZ07!=RD>#mFP=YyMYegVh_H?I>w zxVh93|9vaH418Q|Sf7BtBNPs>T(v{M+$V&X0JkBi4dE9r6adz%P>e=c)+RUwA;cDn z*loZFvGPJ*3ZpFn7y%e@_Jsh*GxHf4V#$`AeJsf#LSGMo0EasR7_m@3(ah>tK%XEu zmQbziArb`kt-TWkK$R$a&_F@C>jL(`5pWg>GUx(?s1a}ryhT;kq6dnq8UY*-*eu&6 zcmZ!Nki@`+c=~LQffto@fkyydZVrbB^bu&rK!dwIe;s1{IibiZ>l9I82OLj;)Xo-R zs&oeV`|;SI4U%eY9rQZYib}}z_m2jALx46wqTWZGC7J?7C)E;PiZLWfm(Li+1={3l zyizSCjyPi+qTw7&8n?aBQ~!+Ft1x3LgV=wB0g=c?Nvf{-I0uV!=Hxnxvs*68uc8T{ sxmn;@kAN$HoEjpZ0KC~0aMwTe3mnFKW-vkq!TPx#Fi=cXMVQc_dpSz~dqMxSIsZXHAbU!z_CWvu02o?9YSl3@tU>nfi`Bh@dxJ_y z$SCmWh*r%*X8-^JZb?KzR9J=WmBE&SFbGABnm`Eo|KFVlQIE@@yN>U)UG-jpkak(V zeEIU_my=R@$FJL(-l)>PLXeTP?fYXxDJg9b&;!9RppzXubDYnGU|3h+RI9`d0)fSF zM50~fQp}JXZ>?$6Aaw`^-$^wl$X<7HzP8?pf+cXhr4c<5h;5OK7KnOSz&6I3S=^v1 zLZPE%E+)VNh$#f28ZmG!;wWku!GT5uRIP=KN7LXl$zkYyO5g`683J+~pBSd`Sc@sc zc&?!qm{jT^(8(I^d zxGn*vp?p?0I|Nh>ntTkDuj{}(Spvq0mtAJ^9@MV`V>bgA%Symqf(2{A%FNes%<&DU z2Hv^=kGln4W;1{86Au*d*lut;zqz}VpU_}H+(Sorw(*yxaGaDcF|xWE7a+u^;70004r zNklUGFkJg~GyDQLkDAmW&zIQP#G(#^S3>`-3N zp>&YmHz=W#gR9_VKY<|l8N8(HyJXa%Z@A_Cc<&`I7l3{I+px-cpq5vHH8Rszz>c!= z#akHF4Y_V|^gI~4bdLisDR2Xp>kdfJ^L8CHAbaRkqPoCX7P$5-mQQwh1F-p9yyhu*B>~u# zcpc%#IpUHA5X8E=l%J6i=<2ewX(@VJDR`FsxUEdzR7-=71}}y@wDkyQ{mZRs1hDaG zDet9flzwPXm?$OXc3Jw4-)YfQIu;jSQxkw;TP^$-f4VVE0d`ZZFmfEz-EgW^rG*aa zRXE^ah>zomssu9%aEUlVR=0g9P%Z447|T&8Og9f;ECv>18KA&iCWP=!yVQRMQ5lMw zs2IViXn=IHdPsdVGe8=4F39;u0mz*EKK?9z0f7a0C)k8Z2><{907*qoM6N<$g5vSy Avh;J^|uIxbT!6 zf8+xwcqIo2CYXF=y~+qno&!>M}hmE$FReiQEP$Z0+1a6PB*#p$qjs& zJOEh-451sOW3O(6ZOVf0PK%cYNRxF*LuL%{xD5Ti7wg#Y^I&2BmkkO zI|%vHReSHXp76!wrK#!+czrhuKACPr1B~ez@|OgBHTBv8W*MSvoQoDv0QGjq7o0E5 zyYN*pJ!=7mf_-dvTke2OTQ)%YjbwmHt=Pwt1FEU1|Kzg10w0p=Bem?Kl1QdtgW~r!Olr}4aj8rLtJnY{JUOgZ70Z@?I=3r?7rUe1E(-x4W zR6+)TWbCQ17FNMpNI~ut^?>$3`nZ~}Ly`ozYp(ww?Uqc@c%YiTktG>Z)QzDmZ4rpf z%uN6`TG5$%fNPSLcJpguctwDjzaUBk|Ak$frQ5NUSy#N68s$<$t=d0`^jk#oC^qPD zYy~=iZqW)aM05ZPdu(U2yVbn3M03u10`8OfJjo(Njs)CQgj8DvseSDNjtT09LK>ot-z?I%S69!a1B-pBbs^=Kv9b|FZr9yxOI*YZ7_s00000NkvXX Hu0mjfU1=^z diff --git a/graphics/pokemon/chansey/front.png b/graphics/pokemon/chansey/front.png deleted file mode 100644 index 4dd2e2fe277c4fa97cf22d424880f6c735a28520..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0Px#Fi=cXMVQc_=6i#SK|%lK=Ks~+i$Ou|dwcezocQ?o5D*ZHK|%JUw5+6ab81TF z-n{?-016DnX8-^J%}GQ-R9J=WmFseZAPh!@8YD%1|HoYt!bJq6+rNG@9e28(V+d|o zmN#$SOhjqQ*R)bUD@A?f@U+h=QGZr2o_L=L0|4~-2?H2oqC>BZ3=N(n!M1JOce>vO z%uX5P=@hz=Z^yN~Jam!-l(ORA%SCGFDIoJowbswy_`gl+gqwjCe)UT3l#8wmzDXND zt6>Q1&pZ{ZOPKz#MMEus)B)YxLK2W8Y?f&(L3)5#LS;Y5KyK6OKr|q>AD`9$((RT5 z5TWx576t>!(cI3G_w`@5)PE_DpAx9lxNOk!zCn-A0u|qf(%>AT3B79Lbq7>ZMS*j^ zRb9LiP!Fy`7t-f1EvO%#_({RK?)!dU!MtGKt+o5nC}2)NxV7hb-1#X%;JqLj+&6+V z3*4L_8jkZ6J{a63qv@OlDMy75`9(Xo(vP+fK*c*8p0}D`SCb9?b1m?5ra$0CV5A88 zPx#Fi=cXMVQc_=s+NVFc|Ql5a_U2_~2;GQb7<95blF12tZIEaFEEz$oTm90D$=J z-h1w}S{KMs&Hw-dZAnByR9Ju>x8(zOR_A; zvP{Q1zx?@F*H!-h53n`>(N|)dzTO&vety0o*z|S1{oYC#a)tSGJ^Ol2FaS6ua&PoL z8uG~^{WXGKLrRH7n{>QD5V7jju7nT(MW}`35PioN0jX9ODFLWHJg5Z#S%<-92shXO zX5cq=f|9H6GL#`{o#yUYa1uFUsO+;)$ z)1LtM5uoAcTnWv>t<5+9MhmhzIX8kwrv&;Kkb6K7N===UXnAa3ioOTPS0_NR*aJEX zZh+_rP%;gBGzYi=VlNfpB(4j~klIJJ*z~dv4*>)~OO6>!N6-^61F$eqzmh3pyuD0_l}T7 ze3C>IfD)pkoB&Elbwp37h)CeQq!#%ex#Gaw`T|FjtL$!0QrMbZ8pac)Pr(P2AqJ+ z9)7r5V16C}*eR-F0!S7kVMEAI1{Po5lJuAnB##?eNqewI19eArfg>R5QW8~9+ADpc z=Nw?k4E-CxvqwDZ1E9BQDa1>?1B?&|eK!J2W$D)@^;oo0-`}()Xx>6Aqd>YrvN(`#vpor0T^$8_8Z57z}JK}&3`BrLV6p+ zCTE82>2L;?s(uZSzPN3)O`Ib1ZyW&oh8>g5u36aM5wJ{4Mei;fZ~HsIOLIGD-|1fg d+Vv*x{sPnANiW%&oW%eD002ovPDHLkV1ht2y4C;y diff --git a/graphics/pokemon/charmander/front.png b/graphics/pokemon/charmander/front.png deleted file mode 100644 index eb0a9590d997ad1972569ca6df798dcc42e722bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Kl)p~HFc8Lrr3?*|9Wqv`-G!w{!4$Cr zJ0Y^@k^v#LGp|s@3$T@`Yw6OpeFm0-IvNQv<7eQUq@X%>gqRrm4gI70x&h#D;O+tCW5C})qYCIlk{@7f5^YF8Xav9X#)8Jo1O)7|ha-A&=5nU-ZK;5n2|yjC)Y?*3;6MYV zuhDrmUIIl8WN|Ng1K_m;+BN{<>Z1Tyz7Ru91Mj*C#BBCQu`aQMWiqfv(*p3OQWCb= zg^e{=)e0%^NU4Ds)*>z5O?kHfaDt^J0RV9(B?Z4^a%D5W4~EDjg@tD?ElXT`1}t+4 zAIu&HKzoH^%ZQ2+h1uG+8RqKk=Wi8t-XXpa`PXoG??_Qfh?<*jtH0|D|BQmCgt?59 P00000NkvXXu0mjfSg-s? diff --git a/graphics/pokemon/charmeleon/front.png b/graphics/pokemon/charmeleon/front.png deleted file mode 100644 index bdbd577e223dc1dafe79c248e29923195ab60363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 758 zcmVCl)Y}#P!z`xi6v*m$qSH#2S|GR01>g> z0SPhW+JHb}uup^l$%8)#OR`k7%neQ1BN|?SH|Ug^EoEV?x_~-{bL|jcf2c)bgR@*+ z|9|&<-E$4_ui5RJfaXm=<*(v*{sg)v1WBw@xpUp=Dq}kx*fK_5X9SSg+H4hkSUAt* zy@GBQXcN$>vg+?z6f5VV#kvh9doj_?5VxB3j1GZ?PEP`wT5CsRQnP$SbR|$5 z!DO>n(XkMFGSJf60Hc|aL=F+j$MZA=t={NT2I>jAdXnRd$TS@Z(C*%2Q2QKU?3k*& z|K)=<+ya%lw%cd$e$K5pHv(Rcjw~DXqgh-SJrK$Ou5NNUnU(Ezj|Zz0AR>9M@}>J$JqzNC%5 zS`Eqok7jwJpYvV`Fr-ovef7;K0F(reg#J1Pf?|v@bszC8cCh+h0;oT^iLaK=V&F?Igz;7<2=tY5)KL07*qoM6N<$f*`n4j{pDw diff --git a/graphics/pokemon/chatot/front.png b/graphics/pokemon/chatot/front.png deleted file mode 100644 index 41d53718e40c13f920c10f42b2e692c821bf50ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmV+@0@wYCP){kjNk~cqm}7pok#w&_Ezy5C8xG^cvp800009 za7bBm000ie000ie0hKEb8vpK(=kuNKoke?yV?)XcNUF?g=ZNZpkZTZ z$w4#`l1k5=MEU_-bR}`%D>N>|xELoBwoXPybTCc^23LoE2CoETQhH@Fao}yu|JV24 zU4f8I{oA7J05jG!u$^_Fv<_hY42D?B6%t_X5N1h{(}E(Gz)^$B0$7T-0Ssnsxhg=n zZ7eaX<~J08*>)9~DLkEJ0*VK=9N!cMX(+&=ngXDac?z}!-GaymH6eKRj)>(`#8zKG zW=?i5P!zD#3M$zbO)syQR{)S5JOvmI{3e)z5)6m#PA>tTV#M%z0CK|b3T8?i4O{>o z1V4v>^mXd)IhT1&>?JKIFee4dXMwDK55kdrVpS^zG|`np2rmpD6R`5hH6ib~n*#_6 zUwAeDI1D3$0^-UC(ZosFf0y}9w10~hPwz+w*C*|dP&SC7F|NkRLFeqTY)D diff --git a/graphics/pokemon/cherubi/front.png b/graphics/pokemon/cherubi/front.png deleted file mode 100644 index 75b735e577a52abc12330650baf50d8562f71a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)Px#Fi=cXMVQc_Ide*L%~~-*Qc|Q!L6kud5D;oPN~}R@-eQA;F;YP>G5?FK|Ns90 z000000Dk#~b^rhYE=fc|R9J=WlslrsAPfYp2=oEx{?~mHCXTyEyq1ld6f-Oc`#5%X zc6LGm%fIlK1#p>v%?tx#R&?`jKrFQ;73C`^Sd0Bku~xv&q2>*MNS_h~CZDQcq2h|- zx%d^smHNq|pjIM6%nPOgh^~K>7975Ep&O$t?+lDf$jm8>J>HxE5Qs%pCB8miKx0Ax zIuN>Q#=vq8zBOYE>fL?4Yj78==Xt8*9v6sS4T2TK1u}W>-9^+k!9f8V2MKh!>&6kt670000 diff --git a/graphics/pokemon/chesnaught/front.png b/graphics/pokemon/chesnaught/front.png deleted file mode 100644 index 5e2191810666df6fa503c6b6459e53712e4252c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmV+z1n2vSP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nqa9}tP5D@6tn6RK|_y9;?ATTJXAaFn+ z`0(hsxUl&6_-J5YI3NfZcn}yk7)j)R&j0`b32;bRa{vGi!vFvd!vV){sAK>D193@2 zK~zY`y_CO;+ej40$I}OAY{Rwkv-T`cuoroJ%QaV6n&#Stb^7GIffOkWS#>tJ5*%(0 zuFw)#P`APm$bVt8mD8Ajnr%!P?UKf%S>@?Ryq09P%rp{upZUJ;)69G17p~ItLtokB zE7cFhyL*5rN|c1M4-_Oy)qQ|83KCV(B^e-=C^42gV$N zmq-XSkQImk!Gx6fFpv282O~m{q`EoNs%S9LJvw_GNfZSTF!X5Ka1cqD zLKq|uG;o{fHDigMkOhF&W55{3fRsuB(9J)wM&lyRQ7Z@#R#R$O9$Ty1cP(JjZbwVmLS-p5`qIX#GFHunYB* z!5iyh0J!!mQS}er+w0}E^GY1O8A0>CDzl|h34DIzd2nhTS#5uHfdFK3sMS*ss9J8Cvg=$Pl2m))g85!4GYowIJM_{rYe+Lhm<6vWr&|d4xvL@R}5)JRm51a7o z!gC2&_#F)Nzt~#VI0d$ot##)(OHU!ZX-&9`Kd2o^Shq=%hm93}aGW{1qOQd~PwiKH za2|F^LMwEf#ifg{%Q@h`s@Du4t*f6&%3F*(3orWZu*A6MM%R%qq9k{51$cy)^Q3H! z#2h432wlWU?$N^c|5}dcCWe78=dO&~o;y(z1Yn^}Juf*|+T%+X`exKr)N`()9Mt9r zqylvTT$O!nAKU<*+p#8uu6cWv3Y4&W4SFxec_SB*nyKAkbbB@(8FRz2`X3L;}z$3hu5A-t(lTnVF0itaZA7 z@hD3Hx@#Gl84^^oN)E`b-FGC}(*QfHP-i=Zg8&thJp#oM_00E$tR+C7vEqnY&t{){ z{RF5Tn6uC9wf(u5oEtTL-_Oq|8cm$^TJ%=P)P8|dO9bnr9yE)|jHu7cp!KNmRi|M7qC-6fW_&_BucegWKhfL$vAMhvUXc&r41 znhhQUVqi9?p$HoSTF@cC3V_OVfq@Gh8wi?_13?+lBfxX30R&Kly%P1dd)fe1Be31W z0|4mi0?G(?=a78r61eUV8Ub_}V=JI7pd#GeGbyvQ0imXVlAGMfOT;va^nksa4J9HD zeIsy-S9pu)N1-0rd%Q=ar!WCYdvlEKjX6N;`Sq!_F}yGUR#K!Ki%c4URV;OLVVJ^N z!UWYajcG9~IM3)D!f^I`oBEKHCDO=`>bfDI!Q3Kq!T5?PV@->hBu>M|=UM>;49`Ki&_(Px#Fi=cXMZm!LVv8w3Vi<$wF>16a0000%S{Q?rQq}g0?*GNK&1%KP#sB~RVnJHP zDJkxId!eI)&;S4dbxA})R9J=WmFbSdAPj^H37BxC@Bg-I15IjMtG4a%?9H$TZvn86102od_v{EwfWHaw5&+ik z8+HKz=fd6(LV%|y85Tc~-?9Oa^Ww+xbAnJ9fqyB9kY^V{{vevbK8ffHp-eUfP{xv1 tVVP{O71B3xONvpDyq)Eq|Iwqr(hp}L7YaO8YDxeA002ovPDHLkV1jkE-dq3x diff --git a/graphics/pokemon/chimchar/front.png b/graphics/pokemon/chimchar/front.png deleted file mode 100644 index 1a0e606a875800d070872c5ba861a693630224f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)U~u3_An4doBL$@Y00009 za7bBm000ie000ie0hKEb8vpKlreA9KorL>STP&Y#VxSg%8k36=S!sGBL1r33C_PYvy}bsdN99 zb;JAV{r`G?XF~3DD>ZHc?saYe!nV84gd6aLa9bGQmD^%VFjtEPWi04B>Mdpz;Q$w+ zX9%=~wlrMSUR=>qsNCVJnWW?%E|`hBPiQY0)&qM z0p_|3Mh9|wWCa$d8fy5WOT9pVj{y49>Ad>9m{>zjR|fdHS{Bpq2=L1U__7b*8uq@ zz+XG@4&d2j6JU+>$dcVbV9o~^K)irb6X6^M;y}iGWWD}}gz#8@#N+4R&W{nG5s|cv zf)~dZhzIWwxgXKs^3o1?p&7=kP3g-Ey9GBl;-PL0=-dBRz(gcly_^qPk=;QabiAG3 z6CU;Kcgxo>_E@;hw^?ZYUiXXYh{Uwtg_v3azbF#o#VNoH0aQNrb5&IJOzm1jWC)S7l1%Y*7xMrB002ovPDHLkV1hKEd@3lb^u<`J8zvj z0j)b%#zilYN#|Xj^AH5QT+Z{D!@r5BltV_q0eXZSkPd9?noF0f^;iL5DZyPRfwY3a zBPpFBIH~~9DwVl2!>mjR2pEXXp{6ECOnw6=dLfh#Px#Fi=cXMVQc_T64uIQj}_>=Eal%|IJdA&E^OxS^xk5gJM!rDH#9mgXXj;d%fng z0000006bctF#rGp0!c(cR9J=WmQk~#APj|XA~C_@{{Nr5C!kgYTfO_T51yHJT07@! z5<=kT=h378R0J{e@6AKeZx|tnjN?eEYML3h?IJLjubFX!Q0x+?-7}->gkl$&s;406 zRsZV+dzuci{UU0qhBi zWmOjt4IrKQ-vA|AT12@agp>kg9{{@Ab1p|hbbIXiSAbT) eJbLu#oBjecxDhjJT)jR30000Px#Fi=cXMVQc_YB@2iQZeRYQq|S=q@>LN003fAO8?bby_`z_=9GhKO8@`=00000 z0000002iZ0<^TWzJxN4CR9J=Wl-q8^APfa#12zu(|KD4iP14XxZBKZr#CeFck!E~> z?6$3}to#}xn!`Dz2?OOkB_IyLz+(eZDw#;={w5(yk;G2038FgW1(G@t_SVGs~= ztOXEI%K0`!tRT)sequ&J_FRHKklzgcyI?CWD1(3r;a!mU6vRB4nGoLB=zA--ZVGxY zLm(<%RXSg=`rRPaqkf{^3(mVityYWm!Sj2}dU-YGC%oCd*PiCP5V(A+`|EWWDvmpU z7gR<0KK*|2)gW3`t$qnIgPKhXzVX!%gP2&=k%t7Eh*X&oxZym$lQ--j)!MPU6IWBH zhi2B=u|4r0J?Ke^pp4bALNgh$R3md!H)CKkW$C>ibCf{1 zJwSl`%HA<{Y*7xnhX!o;-skQ}z9$LsTGyMS!x!S~-?!26QAZ78iXW}@DC$WcNYoj{ z4>x)O9uWX25{`vf>i}`P07cFi2sS$89e_(5j_AwjZ6I(VD$(Nt@U-HWfMh?QT#rqM zY0?2?xd!^&U&;>f;XC&rU_ihZ1|~kBo&h!g+6CtGvdkIK4oEt{_e*MWOnGf=V#B@_Tx9>80J%_``qu?K{3U7WH_`8_BqWqlyfFgtliz-f=2 zEo$LcXmt9>z{z`1Wnnvj$nNy&o`A;(+Ji-Zk3v|~E9woa2bfvx0zqn*1z$#?^D$!6 z(KBpJ0{j74AufG=G^8wy$m%2c%bHNa@E= z`aq6c(W{*;q(Tm$oEa@si%lGiJb?5lGGs*pWr|HL0y@yMA(l?WZTjvR*XPz^OvG>t z+{CU8135WH0F6VqwKTw(3k(|uDo_R)5Zj>$2^dgI0>G3&Zo6c=_1wmzMbtx_@<_{U z4K!OItjVPe%~JBa#XbQ+y)#uyL4XnAQcAuDH&NEKCL(0>4#vhz$06MmCAW3@Pv(VE zPNkfLraRNLQqCGvkG<-1ow4*w`^10r*Sh`z9BdF#=@JN=00000NkvXXu0mjfWX4fJ diff --git a/graphics/pokemon/clamperl/front.png b/graphics/pokemon/clamperl/front.png deleted file mode 100644 index dab2d9881d398721004ea079608d459c81721767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)4NLX-~(CB!W_^7D3*!YmZ_y7O^2`FcF0006I zNklljA6bJB2l!5idVJ{{QvvsI*D33G}EUw}p6*`0@7t|3fcV#fbbyZIw z5#R%u8<-e~?h~M9MatsLB@*`;IM))SXEz%XL;s`SFYn#E$R^}E|7W1SwYg5|-A(n1 z>r!Zwig^{V7#lzX4QQ7B9KiB$0C3X*)uxcDL2V0>0l3U51Gn6Pp@2Vx9*)a^HR(`> zh+`MA<21}IeL~+uHo`o+4&2t)tv<%TQGn96-eC=NoNcB9VvW`Wn;Z=r8mRZyXL#sq zpkl6f$i|E=gAVg9gIyh<7QbBrx*<-dZ*%ZW2NU%$;!`1J@575lG*HV#^m%@!1P@9M zsl@Y;e{$zSh!08DLIKYk2RjptBF>M6h`3yZ*wL5RX?1xL@n||#EQx}`J=J<$|1gPG zoJSc~ksA5dQilD|x@suJ1+M?H}?x z%&-d$GErwQEC6QuKnwSj3uCN44co43l-CKlM{NLV*RQIR8l`~uL4WDihtLM8Vc7xy fh)u=o{Nwxv2%Yeb6H8b~00000NkvXXu0mjf%5)== diff --git a/graphics/pokemon/clauncher/front.png b/graphics/pokemon/clauncher/front.png deleted file mode 100644 index ade9f6518cd4eee7dcf205ea8e3067cd9a41a9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 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 ZegM+EDV{HN^O*nu002ovPDHLkV1f;T6JP)U diff --git a/graphics/pokemon/clefairy/front.png b/graphics/pokemon/clefairy/front.png deleted file mode 100644 index 4e959bd4ee1661acb40f00ad356e9af4f2159404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)Px#Fi=cXMVQc_oKjNedwc)Yy>m)AS}`D;gL4oN5dW;Kl$4bJ|NrhmIh2%?usA3H z0000001HTVg#Z8nj!8s8R9J=WmD^&2APhhaktIO;|G&Fja9-+4Tpwp1>ZP7TND!y# zjyvwSBNPDe37!%nURTT-#-j(Uf8;#o^ZX?-rwI@@hHUpm5fI3e88K}HNhZ^I8Vkgb zl~ObT@NzB&;jam-i0nsZ9iJja$eH`FdO)&Y7J=|#LF#!g0=dH={CEZ`FkV-H^F4z^ zu>@rKaUYx&abBmO8RW>i^2&E=IYlmNkdD4L6f>n1P|d`^R`G82Q`FR z?8(-e4o+0bFTEGQ!!G`2xw!;p!ci4yD|ns>MvHlG*zstB0WXH#EY?W6E(t#{ zXaXrBfL{b07n~Y6EI2o?2{^*5;HY5dAtrDGA81QJc9po`H7LlN0bVV{gWc$m0vsKq zcll%z;()XY!nhhr=?MIZm(8)3{uL2JQQbAcwD}0heyX}_{81MArrmMJe~xe1MG@Wc STVEjn0000k44ofy`glX(f`7zFr)xX!q+ zU`0T{|Ep*JFIjT7xj9KeqS(uDP7;TJfWXmi%^yF000n_kbAal>K=H#l4xl+ao-U3d z5v^~hob5ZTz|->DzF^zi-}~QH%_)g~+A{laoQ;=*)0yRrJlmsJU(MPY=Hhbw&zT}t z!8*1_N)1=vNPm~Od}xi3PIGpM|!`QQy$?c429XIm^{a=m}{~o4yHiig(IK2K?cAWsj36X!|3q!c{ zYU(BSeA^+vG-Q?g?d}SDSC@dRS`9rJ1&dik z?y(6sa{k*Rl<_!COsVC!3ctfcg|~0|MNgmdKI;Vst0EPx#Fi=cXMVQc_ds2hdz3!}gy-FZb5D*Z>#l=BELHPLil$4ZWVq#J$T7z1oYC(gf zd%bvIuqFZdegFUh+et)0R9J=8m+5xmFbstwTP6z)@Bg@?-Ofzxko4E6r!5D#A6M3r zFinpF;F&JuDdVr?DL)6O{IQ70EWgm}DDD-m9(67;RtYAU z1p{!2`aQ`B(_7}(yb)ug;3Q(QvJr*=eggw23PrV`dIIp%S9%7N@|KX60@r6fD~*u> zmm9%m%9LQ8_qP!n12#bNpPvedsmx8=|1;p&8X&y^mO`iCgetBJFZ2m&3E04{dIm57 z%t1bv3qXp*fKMF2M*&1g&0wC$jX(gdz_K`CVL&vrm7-Hev!DP&EM@r!z%~>xq4Zh_ z1Hi_^#9MPv08qmZdJzmjsmCEGz*1mse;Oo3A$S*kZkp_gmy@1iA?>jj=y(WeZvjkAyA zzVD@|fy4+LR#7*nEfhlRA}_vIWu1(6n(r>QFxyHho7cbqBL|HILoj7sbruaU^*5SY zkfWM;E7LD+Rr_H>tMW+gCMn}cTyS$0NV2x1UL{j+Xi6Q6lsMa z0CP*=et5+wYh2vzqBJD91?t;6Nz@V0-2Dv+ny(h!0i1lni(3Uv!mc6E-fsEn6}$rQ zT-fcx0Z^LPhx$oY8$uUw9lAWwieZ2|Ulc&Tm<0gu0;CZpzgU+^EZj4YFdlH~ba}t` nO(&Wa>>gk+z!&jc`M<;;R}3JN3>kC)00000NkvXXu0mjfOviQ7 diff --git a/graphics/pokemon/cobalion/front.png b/graphics/pokemon/cobalion/front.png deleted file mode 100644 index c57b709d3636a42cad563edf9610e031d3f1e311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1CsoSP)SWr+<7^tvlXlVHO_=vE;FnEZ-*yvzjV7R!rG50?X0008` zNklrqz4vpX`0C?a#~Z9C^cXAf&>j%C=|kh)g_iBLk1g6 zUcp6*#KTc=xFtieOIj!dL%}aNWN>J1>LLzi$kw6py-Ta!cfI?D`?&Z2@!tP?_q}86 zzZGWwOIaW&?yW~q3un9&MCMVCc_*OcO3cRwIZz^g7Nc<%;eHk)afSN;k>~vYb>pOlx^Y?w-7?+rsu|wj>LHsgJy)-_>_+ksonQml$1}IS{75k$LtLMr&cRGW9$7RDS?>)phl>C2K#DRdk&ZX0J`}~7y;pMF>RV>Ljr0l z=V3KtStpjm#a{qa{)qFmMeF}#Akb`5jn^Dk=8*Ig$1$)^gW)Bxn9n1iNsVlt|FkP` zzKr{Z)pqDCa5fqZFM#>*96+*_auN?l=c5E{^V!>E0^oV;K>D-~M*{>f{TxK zYMrqw0D!j?N{oTvRY3J(Cm;Z>U&Y1GBVc==OfrxdmmuJ)o#{Ty%qtviUhEwhCK*N6)TBA@P|CT zELkBSfC2$8EEmwVLjimyu~XT!3&^ffNPA|FT*%m6ll~wf<2^=DNRv=D8e0-jHjK3% zJqsk{jAB75ffC+xd=?+0FqzfvO1Cytpui-?C2xNKLydJ3Cy7B@00000NkvXXu0mjf DcG`vk diff --git a/graphics/pokemon/cofagrigus/front.png b/graphics/pokemon/cofagrigus/front.png deleted file mode 100644 index c48dbdaa4450b74da6ee670dbd748fd0bf482f35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcmV;`11kK9P)kXn6Se`1rUmuz)aVSRnW?AebOPczAfQxUc{K00000&Le$!000AE zNkl!twDjbcp@eRjR(AP8O1G4VX-n+N&tva0!1fBnnCje1D7VtO#mJtEnRY3s2 z0|N7l{(!K60I9-ey&4F>E+Rlh-C-3XXaE}KHBed)j$YbuMuEAb*Bu~rnhuf>6#pcQ z0q~W{bkt4ul^iHw01OaVz(vsAqpVa(!b*Wdo8=k}k?tO2mL~}-HQE>u=FVh6z$?UD zn-KQ7A%#t+18cgAh|#Fmga~*OUA{tIXcgmF?~am_Dg^H`A;P>6;~UKJqJNMkW!|je z03pK|H?ksD>qoo2G6!!9EfAgJv?!)ykjcSWnS_3NTuiYsQsZp47{kr_AT2qMDm!Z# z*y#56iv{LOSUaA4N`^*6&^Si!_J?Y#Tx{RM8cq@iQ~?Yy2w@A=a$C}7navcn7x{*O z?d3NGx8Eh=WkQ?T0LCs-55n7RfaQ-E@z4RjY2~ChT;2lQP=G}D7^pRx|8kP`)$<#G zXEa{{j30OPOdoj*p3$zDB{pdwL#__n!@i9Qi&3H<{&LJ6-fd_2^WS-^vU`HP#0|Fkj z4NzsIccLCX1&CN(9_rpZ3pBOzRIn3{rw*u3y_YHC)Lb@;rgPLHV$6`Q3J}m1BFIb& zy0UAqOWaq=A_%y?sx@@l07#r&8>SX1d=2zut00L*m8N&H93YI!DFfgGbsx1N2>3V) z!OPNVrS)pyD&!REqvKjoz&la!DzlZ)HtWD&gPTCi?^BQ!+aGKaCS5SaX#=*;TD4BH zRcQdz%x%~90IPB_$yRx%sz&Vg#CjXEBKw?X)|8@>)-+qvF!_*T>AAM*cdp>+*K~?m z3BIjGvt@FUF0i~R=PO|g2&ye(PnG2yR?Dze#rhb+CQrjvseB)R{eBtQGUVx8wY=y7 zC^e}$ap=o_3?cacw#*MedqBH3>pqQY}`P%00000NkvXXu0mjf D)_cGt diff --git a/graphics/pokemon/combee/front.png b/graphics/pokemon/combee/front.png deleted file mode 100644 index 4c1368df4b8c7bc2facd1810f0220bc70ecf35b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmV@c8g>0BBeM_|OQbfB@h)IIvhC$dD-TaEJf^00000IUKZh0004Y zNkl{~fzT~npj9~PJ=%hL01`Uuh1jz(C`!*5 zMGh0pmztnbWI%&BeuDf=Fs1>{k)W$>BC`0_<T1;K z6Pq@k)O6hm*t9k9?Ey@fe*#huVAA%_VADpRyTd8%2~^!1*tA7mdtzwP7Q5Q>@ft$j h_VL$%y5-+>*DsG7qY}`N<}CmK002ovPDHLkV1mk9(SiT~ diff --git a/graphics/pokemon/combusken/front.png b/graphics/pokemon/combusken/front.png deleted file mode 100644 index 2c2b6a5a1b2eaef7e8a3ed57d9129deabb8804a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 721 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 QF#rGn07*qoM6N<$g6@NO3;+NC diff --git a/graphics/pokemon/croagunk/front.png b/graphics/pokemon/croagunk/front.png deleted file mode 100644 index 6725ae39e7f7c010b23ad53d92b14d535ded68f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)C>HB%U(d?`}?@5nQd(!iy4&1==6Da|5 zCn3@_1yb$;4hcB1gsa4hw`uyS8c$s%_D2MaznoQ&@g??0(-g)ZFDqBZyH6B9zO(?J zF)|i7{aj5Jd`43F82}=DTk#nYY&H4*W5H&GptNu2OBt%GNMn|r)ISUXWt^6EafZ76>_-qrNm?h-DM2sBgm0*Ha zAFdo-hI7&TtpgBJi5tYbuDy*iE(0?q)};2PWt*Tu1<&r*>u%Hij;Ff-)&_#(Kby^_ zZLf`azvCNYiXdvOe&zH&@DI%S%IH1+4f%h4+y&~gS(-p({ndilm~zlWebLkftsR}0 zR1jZ$H9G(m@D2gAlo0{TAs~*HWgzU`RC)^xn-E%i7NFZtK+)9PiHq0$vW1WrEB;49 ztMB#eOXYZlGU%U@{od1vv%W+q73Yi6Aoh;H8COCSg_&DJ#3iyBT5o%g>v}kae-+2E jWA7ib^#6XRPvUhCN3E7(HlyFl00000NkvXXu0mjfPx#Fi=cXMVQc_S}AjbO3lrS_7D&d2tjHfYLu*6|4N*_)sz7L)c~{r0BUM#q@<+( z|Nj6009v1OH2?qtBS}O-R9J=WmeG2HAPh#yPmtAizW?JciHNi!g1gzp^6g@?J*R&p zrgQGUepMvp0NkbFy(dTB-%&tmPi!Vp+`%Qk@-9rH21LU{Fy2jHV}^_;UJYOUhKx^{ zS3$P{8$M0EU+pvKSs8D55nvUFA;zYFJjnRTip$q50we;6&v-Qyd^iZS3Hdn}aHO4o z50C_qCK>@4F=qZlkPPw$Gz=*CP!-5WG$K$$2=xw>r1P~1@LL4=&F%`9JX^i-dB8M+^?=Ni1=t!mpliw1kRwb%Y#2H(%yi`D=VrXoQFHe#UwNINbH~l5Yus=BGw@&JdYC z<^8;dkR~28Uhy$MAoDZGn<3(RS-zqBfpkX<@nWDT{Ia~_TBE$4+M)@PVHmgDF6m({ z#MYue7wjcRLf6Dctsk9uv=;T5AV-j8aw7t50!bqHa0DTg$~9_GmP-LQzpm=M4pZjc zPy|Z1oxyDR?f{oapRpRDQ;~w_za>9yeRVl#>-%`QYo`$Ef^8{w3MyfFKu~YB z&p?eQhxIO88JZI#CwghP7&%ik4VM$g7tck<$WnWpZmhrm`V;j74bKu2gfj=700000 LNkvXXu0mjf@8>3; diff --git a/graphics/pokemon/croconaw/front.png b/graphics/pokemon/croconaw/front.png deleted file mode 100644 index 22ea63306b4b3372df2d4094e11a074a9f0578e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)Px#Fi=cXMVQc_oDd-YtXdEd5dTU_)ff;UVtXKqy=u+Pi|*$C|Nnac0Omm;i(&xo zv`YW~V(AV$+|;z5|lQpk9A8PMiraW`Wik z%&<)uvp}oVj=4Z+C)><^6To&H$8IabV^4s^^&=p83qUA`4WyMy%N_Sh_=$ZAK7(PbPdt8SCT>#pcD9<9GkypTH0-;W$ zRXxN@Uvl`oi=t=Z2G9^#EzsQ-VxwXq<|u%Gn;JT~KJ?t=iNp=X^x>`r^ggx$*ytM{ z0=RK6SBZK^lc<6!fI9)Y57I(c?nTeHDNN2@N2H5ZIYgDv50E{cL0UxpRD|gRE8uet zZFE`%av2gK$%Fj*yC%F^u5CpLT|FJE&pCj<>N7yy_W`DScD?{am;t_L6xhHh0Jecv z0iCl%5GfUXJQPCK_g%3l=bnAI0v)sDLL@yka{E{R9S@rwIRme+2tBjp%>q)?v`B_s z9|8L8w~PfL_3Z;dpIqODSGCh=VEpa!$y$H$KjI&nlO=Kz^c%nc0000tK7-%RM=zvK0xOn*Z_&7K?xKJ=SFdzT`00000JhiIH0008i zNklyzi-n(6vtgf784TBCdrf`ZvFtw;ju%DQzXQ2R(fP{heDdEOC=&B)V0#7 z3Ono!NUXpD8?wS+q*zs?4$c3xLAdlYouK7Ep1Oq*1Mt0C*K3EgEK0dy85E2`h_+Oz2r> zSxKS^2|!KChG-%bIl?OH*+f`KB4(NjK=VK?UfrcIQGhw5wOxi1c&H9|y-b48zzyBs zwM1kqRh1%$NBbh!I>H;R0DE5Xemovyur;m$da;lOU=4`1MhJ|@V9KE0vKLnx?T!th zfJbp%qsJ`)n0KrLa+fcmr9CVlbL^Qih|`h8kpb#;>dNC2z_Dt|+CD7+8v)tY+q%x1 zffoWel0a)rHE`p&i~|_JA@xqs{Yb)N^KmxpSFIwd+ep~7z)D-nZX{JhDrF2H!QfSz~Gzsv@Hhb5+DY6een_JK0QmCPd_Je zFqIaOH4r-Qr}?D+obiiyII06XmpGO8zvr|5*U8)El^FRX^bN2K{VP5l9-N#N2PcOm zbdboQ+QeP4bzThFaF)%o5=R|AT?4N3=u2_NXENaPX@U+_`<4wpe4v1))0sQAd(_+X&ufY9hbXz(CFpa1{>AaWMd000Bm zNklb%?EsUszC)+z3br zrn5!Z2bD2G;oQYEBxoxl0@RRQ05v>U0o){U<68eAvqw?lQ4#{gTkvD&xp!xG-koD? zZp0qU&&&hq+eCpeP0tzXtz5( z0!lN$0&H}v_d7ljjiLwi<1Iw9wB2WtrVka`4?SU(vu~Bnj7j zqvJ!`l8y)977ZNH3z@1qlUp!Xom~&pYLZYvCY?;>zt3W`FbEwm! zM1%l9bsEnDl#gny9AvF_yzv8_%zz9xV#%>t{y%XIDH4dEQR?s4arZ-YN_rpNIL$T`k>Tm5G2wtjTC{KHfb1gC2y#OrEH zDchMN8Jusp&;7$k1dKm5Fk-1VB94MU>hV`_zB~RrBM=V63j*}~lYd4{^TlV3Dv-p* z+3qFqscVQYI4400zsuc^1mH!hYk)*tlhGWW)VIqoz91!0=@x-Eav){^+iIY(y;YWS z#qWgx6+^JtwBBre@1RdW&pq)qP$1wHh?sE+a84)LH=6HyTfXm$bO=y6jZ4QYI4T6h zukbvKLrnuIdupi#*Ew!yKGYzsdMm>5yfT=)wXZ!TE&-P>XB64t-4<=4SulXhiRV&N zO99WQoW1PJkNEh!PM$NvI8R<#3iwmxAV*_-6r7QqcO|WC!Iy^v&3+oSR0M+O$0QN9R-7Vk;LF038cb~4YvTp0kvekH4KeH zKq7)9g0X&0G??!CsjSX{l9~tNle4+JmbU=Wy+@bOIeg_v{Fg#BrT+umwZy*_$!4+K S5|%9h0000p8 diff --git a/graphics/pokemon/cubchoo/front.png b/graphics/pokemon/cubchoo/front.png deleted file mode 100644 index 82e5e9194ea2062abce68141c5cb14dd57e3e93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)KlQB!fP!xsJ5QA%K7dLGx+KPj@RUE5* zU;|yGpg*8!XF>YJNhL#y9W&&Tj%p#lpn)tx1`BU;?|<>7El%%tb?I5pmwV2Ac~8^U zT8mV{T4CyCt*`}U8rX%R4FEeNU_`CfL9W@Wj7LVT$N8jVTTXN+R$}P-?9O#!=(}9XA!5p(o z3Dg4{h?DHu`<(L*JGRumX4EB@uUet^e0A>w$+700T2D00000 LNkvXXu0mjf857*t diff --git a/graphics/pokemon/cubone/front.png b/graphics/pokemon/cubone/front.png deleted file mode 100644 index ddf94b1a049d519acfd95edb6ff569b729a47b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVPx#Fi=cXMVQc_i-T(T`1mO)DaFOrQc^jTYFfpdN>Vux$f$_$(6Hd(=l}o!00000 z0000008M$}{{R31ZAnByR9J=WmCLe(APhteO+xVhKlmnquUV+k&0W}4GgeXbp@R{o z>C>lA|64>?0~h|3Xm24KKoF1`qhZ{hatP2Pq=89szX67QDC%E|Sp6>mIcNLh$9@2r zUIZX1MV=5A0E)>08R6IHVktn65DY;}07WVs2dot+8i1p_umU6@w*d4gfNvc@{Hy>% z9%6a|AnTyq8qwkhw}6%wY!54dDAon!D_iZJ03r-%#BSnVyDe`1CJiFE*@anF1rfG^ zke%CpB|;GEK>v))S8FwZ(Mq`;!Y3D>U&=gJmji9^=BwE3<{wf_NOB9n%<6W>)D=*z z5l(x-Y~x|gqe)u~nK$8ldG9^$Zf`yvWk?9n&)?L8j(ymbAg2UcPViBumY!e`YV}4q zkKh;Bc5t>Wv@Xy(bP1Te{B6ei3GDnA037Z=9Q@k+SAgS@F)S{<<)41q1P6;Fg2ys` lZuFKV0+^!nKYjZ2Qh&Tx4i0!oBtZZG002ovPDHLkV1kB1(0%{_ diff --git a/graphics/pokemon/cyndaquil/front.png b/graphics/pokemon/cyndaquil/front.png deleted file mode 100644 index b8b7e71aca85e21c3b6fe01c6fa111d6a792850d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmV+%0^|LOP)Px#Fi=cXMVQc_-T(mqS^z0hQaNIKVuPIjoB$9I5dYo)7&%JCq-y`}q_`L$8)&Kwjnn^@KR9J=Wl-rhrAPhxC0>Oao|Nrge0%{*d!LHRO&+26!+?$Z3 zGfhvPJo#N*`*x>~oeTKw=9>Zm`R(Q}1>?M{w-SuM;W`DLV|V`$bn@Oq2m!p`FMr^#1wL2+{0`4C_7<@70H~ag@&z@+gP%O9e5;*33&mwwOR--*KD8e~K!goD1>?VX6YN zT;ZD_XTdor95lRV70i&S*d5TPRN(XYGkgce*ja3kgr@}O?{0G2+zwE%m4-1Z{xU{0}rtkVsvM7%@ zO~P6$8{a38`WY9#dWqEP{g0kIUk$-iEu4z!dz0-mQa_vZ)BO3j${W9sfGh1RSMYJO|Q2VqP3d zi16FEXi*e*R}n~iY2ky!tUzEH1#I*-0eFkRa`3ZxR0tmL5E$yI-1Y(iV249MM?gn` z0RV3Yz(EiwmLXW`y^qZa<2^oqMF0dfD-{fG!jTL0P^`mHR>}``mI%Og)fI$41PuEz z@V(}t2s0#LnsDy&?zVCXXyZ=-r<0Eee7#>+&dK~3NPzy=2>keSU;gqdDg99dwv>5Q zWMBS%sCNbdK%>10LI`2GGP1LyKb9Z@=0N}ixVCvTo|^_5 z9w0zV5wgpT{p_$knxiAaXdS-373a2=JI3_rLcI#tf8YEw<%YrYCb}sdU5OOq@JPCI zdL59Kif5ucGR{1!)9e(_#M-gY8(kUm58v$^DD+ciU z7GnxHcm%dK*JiAoB#y6_UggQ?`&|r))%;wQj=coX*3Rnpz~m7Z>MwEr11}ZgNqJ9b QjsO4v07*qoM6N<$g2PrFzx006LfNQj7-=%8pwNKo+b@K87)VEY<80008P zNklBbocBOwymYN>hpzFRpo1r$@|HX`hd8*=lSt}UQQKbK}Arzyj(!Py~DdVFQ#mRd@iv4nH0OH3${3Th%iNMX4TC z74Qne3_>YYl^w7PnYFmUCr|-pP!0i&7niGMG_-A)I3ghdY=CsktY({&&6A7&6kYF28s(V%}z{%0k z5Y^$)1=eCfdz2*C>0%w~2y2~0;?XQH9!{X;W34xVyd;|t5B)>mpY(iOi{s4{P=n^j zp&uEJ+kon6N&uSZ=DUCE-%b#OC zQ$et7HX!#2KwupOu9Y1Zq%(5=R6OkY3H`sZU)a@=xv{Tj>i_@%07*qoM6N<$f~D1O Aj{pDw diff --git a/graphics/pokemon/darmanitan/zen_mode/front.png b/graphics/pokemon/darmanitan/zen_mode/front.png deleted file mode 100644 index 84ace43cf9455006bf9cd505934625ec44bbed2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmV-C0>k}@P)Px#Fi=cXMVQc_AW~vdoUD6NDXeNK=A>c(002Q+VzkxnN=j0koTTvZ@Hu;nd!)Sp z000000NhP@|Nq_2EU1^JIngFfnm8X!(=gAz z!cEhoN00u80`(hrr0yW*dFt*vh?M4(6OHq{Bd!1>&pBs!=L}RzcL*tGiBYnn; z;YkcvFb3xz+eJbrHinPDPE(Ld0K@k*!iGQw>i$|k5u{bnqW3m5gzo?t^)mn| z)c5iai3fL`1FHQ1P}eB{MF^T+WAx7(pl;F=K$U_{`qt67VTuQ53TO8TUBt=g4QC$K z##m&mg5HP9Ea)YsxMZY-T>*f?!`pWUj6Dcbpy4~9z${~LQb5O)-o`11#(o`m@vJHh zs#@MPl>fww$7#Xe)|ZjP6@agO#jDUSAa7fnyx@z9D9@h!OGKR`$T!yjD0pHsQ(eDvtiU+W7xEg1+<-s4gL0000< KMNUMnLSTZ;Gy7!# diff --git a/graphics/pokemon/darumaka/front.png b/graphics/pokemon/darumaka/front.png deleted file mode 100644 index 92a3645d24ef1d2018c8c07bdc07e15702d210dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)u%vz*d-D5~2Ea;}TNXFJ? zoks|EHi4{Fs=z)>W><5;nccL3_%~Dh-}%pF2s!GX>g1G^a)C;-0Oz>?RG=l_%$Tbk zP|A!kpa}(L7onArVRQki=mNChOfk(#nGgzvJMMPjA|2(RIt+<uGvnS8RZmH=I{Nf79a-Q z`%H6%eTXcU{y-m)D45!L0ZB$cnV%hy48l2|AtFe T5j{6(00000NkvXXu0mjfR+Hul diff --git a/graphics/pokemon/dedenne/front.png b/graphics/pokemon/dedenne/front.png deleted file mode 100644 index 05e9403c50888e0a1ec15b7328cadbe7f5130278..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_FfcGsP*4yM5V){_`1rtJFc5f981S%I zuy`=|$cXs(`1o)D000000000003$k#I{*Lx32;bRa{vGi!vFvd!vV){sAK>D0oF-G zK~zY`?b1PO)Ibym@Rtpw*PY20D_(XcUc60`g6BdO^eANL2Po{e;8mL(w@Q5@z0}oq z^9>|lK)iYpAs?zQ*=)Pn%z75=9|GaMU*60lfyeysVMAbaZO2*Hm=sLXwGFrwE6Anf zK^(~~;XF@dGr|!`A{4lh?5^S@$x&0`Bf3*SLJYe=zX_TF6WsuCyZdk^I`tc%b=m-k zq*Q(2j`ZrL24Vxiq1L`Pou2G#owR_r}X z*xUm^n3ZLTIFIA?BP!~Ez0W00Ks4cf+3kP~>j9Jxo$^ES18QC`3HUJXbsgB7|0M9N zR$;)m#Xt($+ZJ-i=lq>rq*!XSp66y&HhL(4XV&H?7sU0eY7QL!m{UQK4Tmtcv062@ARVq;|qxsj6z5YwzKqZ61bUclL P00000NkvXXu0mjf$nD=V diff --git a/graphics/pokemon/deino/front.png b/graphics/pokemon/deino/front.png deleted file mode 100644 index 835771003ab15169476863b41754cb55257842c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmV+j0{8uiP)N;LC00009 za7bBm000ie000ie0hKEb8vpKl(A03Fc5|vS?t*93*?-wOKOLNmBuVg zs8yN=sOruriu?dbh(~}Gv2|mFm*dhRv78;LbAM&K&;NgScFWjBXDPX!0Aw*?026>z z@j8b%z;!$U>rp@mfGk!A)FRg3s7R0c2taU=9P(wP<3R4hM)009Kg7NOyC+1&p)v426D(`JdZtA zZtou{KsKk}hT0D_VCoXI24#Fl1FY+tzSqj5XrT7B_kGx&uiN-6vq`K$k~arUenm_t%pp@-FB696nw}J{R1PotWfBnq$7~q4yCZ$ z*k52$s&oH@{R10ehJyZ=JxQdIl)8sq#@@joeLs5d`=n=t{-bETs`d~HyT;mcfs+<$ zC&oHXke65hX%QRnLJPp8Zvq~p;lKfi4YbM3F+s>XqXL@__JLiBUd$M?DxenV*v8dUj!(dZgm={J*y9t(xLVTdZqwxhHZdq{hZQNR`42ZXjV$2MI`kC0A(SLS;qu$ zu(<6}S`@{#wh(uiZ(bHY`1t**IA?h#{9rE@%hW+9e;Q{<>$Id7iiv=^p=-D za(=J3JvR1D5AQjb0Da>8O4sy#3&3>5zb?6qQtxE81wbyI_&r~rKfj~8|j~0a8C$ZBlak z33+oVe!_5PgRTPRCJ@isAQd0rOEUdaEG!E+kw4c_D90{Wo!(dpAcmmz)nFfsE7ZIx zoF^k1|xMTYD-|TS@Jd9fe`ymXg~mPnl$SG zluIB_@T))x;;I&?F8Cb8ybiz>=TdCG0+e#l@LvOH!4r5BgljGep(WQx>k^=4S*L7G d)E@n}@dsjk?d3|erkMZ$002ovPDHLkV1fapPe=d& diff --git a/graphics/pokemon/delibird/front.png b/graphics/pokemon/delibird/front.png deleted file mode 100644 index a0eaf79af0feac6d4c076141a10e6356419e29af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)Q_$00000rRtv@00075 zNkl8nu6oqNSt(OcAabTo5}C;zY>T$ypAJRq2Pj~uOO^tHxzt++ zIq1+KgOm0FVs2@)F@p!UUYspRCcaBa%5Ex(LLVS!uwb4~_uNYo0^qUf`TqcGFMY~K ztziN@P!j8950np}5jX^vSbyS`9f*t(uqj`3paV?>O1l=cTp$5xEKq`0Y6!r?*q8v} zv!^72N~R34+!==><=f^aVJ8gzLLZbNbkhQ6UzR|sfT_c66Skc3V*%j6jl5bx1?R0` z?3Q^*sROG8YtVLz{4(;Iu;n1jd{iO=A$RKg$oC4yC?R)7V;@D;kj6#>9G zr}5Nou|(l}dB8$5I%SOE1*kL}FAr2$()})gWB_~w^FZ}epQTC`z5|DPMs+N&jIe*Q zK-`*PZZ{_3t|aP=^6^J2B2Eqra(>RlL)n(8p?my`CpoIehQELRbi zygeM`8u$xb3E_UjdECN)kcnQQ&jfKzl(70;=ztXYM~y5{Qo!oL zkG^GriUNK}VvX^dL`PGNXbS%<{z}MF{=-M{$vg`HjJxzAUZ&S@7N1b6l>p$J(u*&f z#2%fWnurw?75J^;qg@1xNl*B%10^FD?200000NkvXXu0mjfcf>t9 diff --git a/graphics/pokemon/delphox/front.png b/graphics/pokemon/delphox/front.png deleted file mode 100644 index 939b538c44a1573cca5b8566c3e9a134fb1acd8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1009 zcmVPx#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_XdnOp007`X5MWp+urLt#*g(LjF!=cR zFc1*9z{v3M@Q`RYNKjCKARxFnFnZiAbN~PV32;bRa{vGi!vFvd!vV){sAK>D14>Cm zK~zY`b(B45+dve@FR~YJQB&{7>xXejoTi6ECzDd6Lb@eYOU8U~$!v^8#!_h2PQjrB z(;!2ZrW874YrJI(Wb&RxnY2jY&5PA{vUEDx@f*Z_{OCee;ye zy;S#e5-3ulk-S0mg-sP;DX>XP)Y#Qom8t@JayVyhT2J|F#!UK4BvCvFYC@e4$rXJhmqyQnH097*qKFdpD zn#K1m1hyi8#twE0=%yI~RRKVp;@)ABW0WQ5^&Lz=?vos|Qx6S3^2WEFEs8oO0_7xmtqie**YQ!J)vEYDRNSs7o%>6;gb{|m z%lQFs;MfhqP)aN>U5DcsK#T9U8h{5@!f=>KK>xNI?c?1HzENu8kM~hwBy$6}5rinv z7{DbD7t&f(&}0}D5P@?6ka8G=ZVI@!=-D|Iz`Jv69hV9S3?!iWfPhHb*zaAH1mFy^ zfR9;;tP$vq0oqk^Afga1&huOV;*YmU1`rayD}ZLNcOJDwLCH}ZNE8-(y~{B$(H3nG zl{I#~tKOwcW`vYPd}!4JwK3A85wt0lVmXjB`G0dG6wQ9?ohC->|= zm<1qlaDtCl0&HeIP6cvQW2_ciM6YD}x5`7Sfk1Fyivj<~HU-U93Us;xRyn*6f*9}| z@G2@W?1q3v99ME2o?48qAmSK#F`<@I?xuj_s~uIC0vs>T7Fxt;Hjkcly*uZUf zvZ(|SjPM?g-=W|yFHd!y7Dn5lgYOT%PSWr-ScyM4qFsN8KZj$It00009 za7bBm000ie000ie0hKEb8vpY3w~A ziYW4ND{_(C9Kwi{2(uy&km5QL#mG|ndxA)Lfjq&9($`TYMVdTEW_N8c96q+du>12j zv$Nk0gzOD!lIMqg0yqm!02D4yM1b}wzzd&`05XPU9j9nWJ40ZWRVPE+tvDWfelV=b zl(x_3aSYI@&BHnWEP=Ros|xtm8P*99y1I);KfL-{(O)0q?@eYMTe8&b3vth{{UZ^m z4Il|B?!{378yHhW>yx-VCIGC-894Z@HRDGB+d~)dKoQO87~soK9w66oz0!5Apn0Nzx=nT=P^H2kE z==d7I27`8`3`51P1at+{rGB0vpiZ9m5xB(^iV~-ZPT>sVq6;>#&BW$vQ~*X&ZlVN8 zA6`$g6&{jWxJdL_*;x$RV+DCp^f6n#L`@r6JlvYk#u#Fu4w156qK$(+aBD3Gx?`?) z`O3f1z)H+_{f{!1EcBm)Wf~f|5Mp=V6hMm?R$&3mcJ7vdC@;)Fo1r%=t*MgeCWC3Q zX|CVt&Z-U4>1K^-dy!?k8BrBLAS739F`ra`y$&k@+U9(@&8j=I4uPW51+X9CDd5cZ zd$`kG?gOoT0pj$eY_%{4e*)SGRs{%;0rkJ10tW)5aWK&&b>lz5=*N^?o}DrP0000< KMNUMnLSTZjPntpi diff --git a/graphics/pokemon/deoxys/defense/front.png b/graphics/pokemon/deoxys/defense/front.png deleted file mode 100644 index 2e21b5592ed67884c07fba7e788961df3bbc1e56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmV-61Ihe}P)@scw$KKlIK!Xd{UJvG8sD(6@?(~%Hq0k8-}h!}T09;B@Jt!RgQ)0~EhOwi-me&|JKj<{#8l^CS9maqD5?E(Oz}Hz2 zfB#0OwN|wmsG3&Lr&(kO^ANOx?Kc$wct2G=2evFSi^>ELrIXgu3~UW(s>tRc2+#~I zp=a_8XMi$ZHzh^zEU$D7Aqa3OTsQ|0V^auSC5X@kL4}sNI}M>TB2 AV*mgE diff --git a/graphics/pokemon/deoxys/front.png b/graphics/pokemon/deoxys/front.png deleted file mode 100644 index 5c2c25314e5974d55901245fd5cb54e771f1bc48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 zcmV-z1CsoSP)`^gV6Ye%82I@3z`)ROIEYwKPo2#eCilwwuTF=Iih9Gn~^ncGj&Z{ekL(|49*OR}Y#tb0HI-~Zlw zIx$vX@SJrn7>Lfe^%CW%3wS#~*(LGp-6=|V->LyUrOu>4w}r6q%|t2rqK9q^@Opf% z)F%LRT2chgxw`lb0BryZzg>O)C?L$*0Csbwa|l|)1pGWBv- zcCe$?)+;x0(QB0m@&SVHLYqW@KL}ShtX|DDy$z-xGvxv|xqI8Wz-2 zf_Qk)oL-G+%=|haNA`q(aJ_ygBtU;mcB-RA9_aXE{xI1)T#l6IRpXX-(!dd zP*XZ`O%D9 zUUn3?mgsm;c=A*n2X1H_9bI@QiFs-OFpASNbR`72e=<1)EXd;Y3nJB*`&$LC3J@J% z)5MFA@h6464v3g6pxN31wfDz!;sVPN*rurWg5~`bcfdxW-c4q0fKAfvF}-T9$b)--E*n=-oIc%tmia+I)&LfH1E^V`jXJ=o5Dnlm-`*@6 zAg==Ul-{Kzcc4623G|cc4v5CHSfw5Tr7y1utdvrdC4_q*Gu<^gW@VAC)kJexdV9ch zmj>Hbr3}~F?B+GVR*PAz_IYUNo`8Gs1v$L=N(_34ZyoTO`CgIZ&UmSI^Yd`1{3yR00000NkvXXu0mjf D@e-1B diff --git a/graphics/pokemon/deoxys/speed/front.png b/graphics/pokemon/deoxys/speed/front.png deleted file mode 100644 index 776d0083b368ff1aebddbb6d15272028bc5a553e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmV;O17iG%P)o_sh00009 za7bBm000ie000ie0hKEb8vp$hxURlSrNEMG6CDXe?SG z70IeD^-?Bscy&W^0rf1Q#>oxvIbddi9kH>c(oL5Qd5XUa@6N7cI}U;y;`rY0{_nl> zdk>-iT&;Hd??9*LQcBG~$7==%={;wZdT1CnyCAS!#zu5F@tr1yG6{%eY&Z?*Rg(r~ z0U%FCY{XdH=!Gs=aA$$wyg5+5U=YOXn9bd00C5OmG>>mwx8Do^vGC{dyY7p901yCt z`??=M6MruI{ONuGODQkOug7}vx6DwjI~ z?VfAa@ge4sR=jR+wcWuH=e+Blsx;Z~`teqG&_1;4H@#<3DnwYfAKNnyrE)yrQSzxO z(dzVX%#)h*_(h~{KdTDRIS%b{Dft8m5vA|H>#$-s=N(^i4^a;*o!ovYXVD^7-{+>{ zha*oYp_XMA9sAjwB@2LX7J(32sEUAn@h1!j5BZBI(v>W`$5udkL#W2sb7T}HWe2T+ zy&ykEJ~Q>|U8Pl^5I}fgiEEXL32hKSXlekqgczsnsw#kd4}P$*%X0u`iy*8B7!O7w zfNFG?0LanV!zH5Z66|9t;kM^zTB!o)S^+e?$^q%;KHq)Br|+L@8```{fuBI!My>jD#~u$&pBthf+b#D8Ki0l15{W@EGiy z=wtksfwz^wl}PVT3m{A4AWH6wQV~j*fb1bs$6X zu6&79zuf}RKe`xFnG2zH@1iJ1XrI*r diff --git a/graphics/pokemon/dewgong/front.png b/graphics/pokemon/dewgong/front.png deleted file mode 100644 index 62201eaab32d338c8693b0bba2a83deced6a3d87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)v97j2!#WPoA-a>ikFCru5LP=`lFj!Jzoz9 z#=KsCH2@$#@sXOGb3%adJST`s1|rG>n4jsx@bV|PIU^_l{Sp9<^aJ43z>8c*I5eR3 z32hKkPi1y2t*oj3V6i^LPjEl9l#JGi(H<8f%iGUaY5}~ z=KCzddY;#SkSSTPLg1nliLOfkutdO&Ao4J7t7XHrp@o-b^@ln@kPtVp#K zCxC8%-Y;kl*vGv4S<|l z9RD*u1SCj&y$i6)Y+D?Lw@&vHJ(*t*xUcUbNW}u17CiL^AQlU`22e_;uM1B!8Ymha z0~7|dYSH&8gfht^Abi(=R!4%-rD+ljLhzNYxZ#0GKOWgw*c_%6pe7>s2&YwJ1rz{9 zl=p2G>R?-630P4SQ>q9)8npEpATiDeK1Vp$mlP=i>w3rz>>G|2F}D_)JWPLUFlI3~ zIHrLx0Z1=bI<`T?d)_U;FjNT&v3pJA!st8n;GW3|!t@l7Ap!FRAY%#wPk%D@h^O+1 d(EI$K#t-bG8#6#Ykh%Z>002ovPDHLkV1oF527CYj diff --git a/graphics/pokemon/dewott/front.png b/graphics/pokemon/dewott/front.png deleted file mode 100644 index d8665e601ea57d98d92054123df29532a567f439..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)Px#Fi=cXMVQc_FT1_uyr0 z<+?uh2h8Eu0sfG13JAfU5u6XFfFlna+j|5+)hzbzoiu`|t9?fRMg{}?Pa`550ptz= zuX-UEW03Msla)nJq}6wm5Q4Fi6iG7RB2X;E`oU^cS~4+Y(Yq{oGj#=b+i&vPNi%UR8F-OAvnl525PC>g#NwM z+62H(Nb+-LV5$2-5DK3k1c@h?+V*{5LgNcd2V`*dGg@uU0H}2&L4(j|lCo^)p|w_# zQhu?N(jGvv-uS+5nBr~y#nPu7VXb%dN?7tflKN&>KM9y~KoH`JO+V$L)zM^WD7|oq zb+64~0I*^W^J}(;fie2=r$e&eooDO5S0=Ux61S544*uR6F8kQOv2U%u5Sq@WBFF#$ N002ovPDHLkV1lbg`Ktf` diff --git a/graphics/pokemon/dialga/front.png b/graphics/pokemon/dialga/front.png deleted file mode 100644 index e4a6172ace570da0bdb9e8e884e53da964f314a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1149 zcmV-@1cLjCP)t~mGq8#7 z9O@xL59mDrG0{%nyGKAnJ3;jD>w5%tKI{9>?*vr+s56Z!cLPN0B)>+z$(;hYaC7y> zYu^KO67j}QzQ3~rORhxMpKe*eo9QkhH&_5LGBfoDwe^*PUFWjDJCBZntbnlrkcD4d z&Eu}mo@NDT2C#*g??pb#b};DS=33bm;+uZ-Fzw)iKo&4~KO!^*R2^aJXXLCn(*B@d z2JRZrpo0YPC(9dQ6n+i>vsS7^Q>i=}IR17yAtb#p?_Z8A{qYLWC4l1K#1Y%P>+|AWv!9>7`50KfDdr?Tucbob=q7BfG6eSFzT@rW<92FiLPT8V^XHH zdAKoM*3KAfk8;?M03fz$1 zRfjwUOD4ewV*yB)27t_^)uB1;w^&O92vCxP$A&$@4>On80KzT^wA>VHfOJa6@G7XmkgA`Do(71-* zO99bICN0@QDYnDZW_d5hc&}CfKt>kA4i)*>OaXN-!u#K8ofW`CyT}I@86f}FUwHpr zZvmW4S-@e8GaXR=pPwM01;CO^7Fg9~2Vs-xnm z0Ty(|#8mVc806trUE$pEF+Kty5!bN7!NoREOgPUG++!W_`;XU)jIv9BZJPj~<6XNW zZl=P7l(zxpIpku)IV##Ekz8Frg_hlH59Ne|DNEM?6Jjj5atc63qA=y4sOUw&N)UE{ zEZ%jr6gc>Ku_}9kLD&*_R!aeez2>JNSmYG|X5u#ha@x@* P00000NkvXXu0mjf(Xtk! diff --git a/graphics/pokemon/diancie/front.png b/graphics/pokemon/diancie/front.png deleted file mode 100644 index c99768d64a410514e06b425d78d49dc5edf2c54a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 812 zcmV+{1JnG8P)JFGmNi@zp~dZHRZ*k_(uCx!d~uT&Re)Cm zAeW(*=P3c?J~vE4GPKIt>PEP%j^F2SHP8Vm)_QvO;UHk_Sg7&{jXsx7Ul%TzJy7S- z=*y!|FAEorr*;6~?LO;#4SJTc4KM}|I{Sv#!m1i7Zuia+8c0XN>y^ z+*C=FP4d`f%oZqt^9qTCVUg0umM5kNK@sj`8)I3`Kga~!6SYeNqG*_GqZI1 z3y4e9z~RZ=)GSS*%?S)1F^Q%{=69F1v^9z5-xJuRl^Ad^pNHYBL95?x!mIfY+-$^v zlMupB(qbgw<7z%6aRne|=yo`Xd`X0}cnx0fHuTrSSrlC(AZEiDkg}N&>$lmpQCA?yhamux7}%XZo4p3Rm-#RRAc7tVaewT@WC>hPGy??^H`3yb@~4o6z7PNi z@hYcLa9Q^xoN?|D^$nDQf$N9>05huvWN-(o0dSCcm+?ca^l%pfwqx@{V-?Wmj$v%6 zfPUA7p>MbOVVV|{MRJ!z^!c$x)Q#way^JHG0bE!u!-)^m?<(CTaHIiJc9*RLkn1pe z0qBmqzubrC>3|?u00TWR9!LjIcZZ=h&kJ~OtQCN%^t}F9F90#_d-@U=CIGAwfI53C q1^xk8b5=XRPFD-SPXCg>A3p(@TsUf3e}X*#0000Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_P)JCKhD0-#Am zK~zY`&6K}y(?Ar*59t!tIsqiQ0z`u56!}{m85zr z?l!m4*K5J=N_a(@2L>1hor*+5a_}wC))tg;-rM9S{-6MQzV;Y)@P8>W0siv66%faM zUkRv^3W+9^`n(^~FX%y;eqtqJ*bwM{?1#pokU#;9O^eju6D?-eJB5G+0zIQ4{?Stz z_`SOT6MBY+x>=0pQzb!l{uAypdGeZb4}rmyN3a1PU^Y+QwOd&m0p0sELf&FF1(@o5 zBO-Ls?z9jHPL)ey0El5`_9rLuv;QJ{TpS(j7~n#Lc4{cbUO{rMiv&Ngz^s`1X`H}U zNaAx$4$v5@q^Ms45iX>Z6BuJs?ZioF0Bi^3VGPM)8L6^$OgmVmUW^O?X8@-WlmMiv z4JBcK#)+v3Al?8JQZz1a4?R-PWd$GtQaLK~!vQWOdr|>NIRtf5y+9SustVOO?6vUJ ze7+x9V01T6)k)&dD;ylas?EJ6->-3?{z10rW!d+>?Q|Pxjt`dE)75Ip->6xo_kcM4 zkgX8-Auo<3P6NVi0OsDe-@Cg%@%&;Opdj~v>$Qp-b$-Pqs+Itt^Xn_sf!Nl^>rw#D z7PW)5a1KcWmlcb@0XMb4{Q5S}*SB>RO_=8@uIh>`fV>unETARMh@;O6kc=EaQ+~{U z$vl@4zCXkj!>$}NDZ6-W_uK$0!wpc(c#kv|IsqaW>xK&3s{xRRLvl1`g4Bh&XEc>{ z0_xQa)t9YCL71-z0yC!sO-%;hcsD_d=lIb`XHE-yQ$-z6N(muC@_z&&e*hVlSV<-6 RYUKa`002ovPDHLkV1gxgY$*T$ diff --git a/graphics/pokemon/diglett/front.png b/graphics/pokemon/diglett/front.png deleted file mode 100644 index 4e527ef5e57cc120bf97a36500e1c35fdaec2dca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmV-(0gV2MP)Px#Fi=cXMVQc_q*_|uoLa?mL0T~w|Ns9G5D?WlN^<}h|E!e%YFdMPO0=wVT2dh9 z=Cl9+04Gq+U;qFB@kvBMR9J=WkV_83APfZyPMwc!?tk1qL)5fgfg^RrNQv0YVElMY zCX>nJUnJ*_o^vKjOVrP~28d#XMETkLU?CAP+-EefPz!K$gryCCE3mHHM$sj}-}e1D z&O+iy-~cPf1GKH+PJkFRKNxs39^mw)j|M~-&SeAPfrO}X`o=`Gy8z$p$7l9xZ@{b+ zP9G6d*chR&Af+InHF8!wAS@<51yQ%%FUnT8;q&8u?4c`Ad|vg8Vsp5e1$X1jolh{o zmOW#*Qxv~?5bM%g0-x3`NHuX5>-VoguzLJ!U{r4jJKq!1ugnd3GMP*UcmcgT3*-!c R!~6gM002ovPDHLkV1mxao~-}? diff --git a/graphics/pokemon/ditto/front.png b/graphics/pokemon/ditto/front.png deleted file mode 100644 index 73603b303d3ad01124fc8ca7f9bf2c726ac2e7f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU9H@9OBVxmk6F(j- z_z)p60VuN}j0E#~Hba4#v=zKfTP^ig3z%@B-!+EY7vq~>8pJ3h5 zXvA#VD|6ttxY`;6#hWuOIn`}7{{8L0yg<_BW%60|1%}3VZcpTgAT#YI*sB&KtJ(dA=#T9RGsX X;IZD7np;&bKw;qN>gTe~DWM4fDR_Ry diff --git a/graphics/pokemon/dodrio/front.png b/graphics/pokemon/dodrio/front.png deleted file mode 100644 index 5184438f49858fdc28492891fe8828135e7fcc6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944 zcmV;h15f;kP)Px#Fi=cXMVQc_K|w(f5DIjT+6b^hJB#8tSA9(;j_Yr_W zfKORD$Mvedsq3;_A&}_M`A$t530$(1L z&`*xywcd+!M~^M3dyi*0=TCyT(8`8C2qYO22>b6!tuY~=5ky`=-~|Ie5oc=PQl=TR z-}SaQBI}q#0s)_MiQyd#0g#qLg;p!wod9RhChEM+a$CTu3b+X zBmOJ=R4NSuA3{>N_HGlh1>n9YgQYVbsgVji;0W6jKmhL}D$@xV!{P^?Qcc{!z$607 zc(BfP77AGptCo6?wL0$!c){zEG_vWOM1$fJt><`qU-JzHY$JKjrEIER_C<08smU`L zf!0e2qQPr(34_*bPi<=PrKcuN=9^JiqNBceEek7m_3bnWMb2FJgMfY3nIPe6OWPMH z)(x}7u5MGlCV);__`sjFcprId$AWYW-eIhoegXIUgq|E+9h^(z>Qq&Qiqe=0*-&XH99c}SyE)p`P*CRT*4zjS1wOSss4vrcZ6P18SJi63i6 SipR460000&W_Gn*+zW@_lpq{t@%1jC8yP`|2bMC(L z#zJ@=1x>UAe0KvFDT8(G1Q7W+CDaEH{5x&jn;=GA`+(>cP~rwk4^T8XW96E&D2is6 z;vI1SBUSD8O--WSVX*zVFKeh_v)}x9AK3oNQ}VTMRiD2Lz;>0B``1!6o&7pb1it(G pZ?E0fo8&4_y#Sslp+5betUpu;iqDB9bTI$`002ovPDHLkV1g6V3(f!l diff --git a/graphics/pokemon/donphan/front.png b/graphics/pokemon/donphan/front.png deleted file mode 100644 index cb344b85bc2ed9283384bfc2f2abea1e3d456835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmV-!1CjiRP)KlfP@*P!PwJfah?w-yXeM%^b`50~9NJ zr1}&LaSQ>yAhHD-5i%4CrJ_?Q#KzE4=oGv+89HY(EfhL*P&#GEP{kBNrzX9VEhWwm z=-46OMWFk8X2LJ~gd*RMFY0&{>MBGY&Qc?>wFc73P0Nfh{^65u4Do~V4DFnAVK@>*$EdcaX zxJ^W{UcDBVMheX9Py~Tt7%F8zEl(k({Uik}xv24?G2n2uLOC zJQDSWCelDo6TRRTxdfd@sdGP+q)A<1ZlkR5S%FGL&k=!B8X(5^oZ}wCIE|o zqoXiW^pZw~8Q>tY2VU>6x0xdZyv~PBDQJ(p!=3P&4wRn((_8|?X4rjpc>`z<8Td5< zHo|Tz{(YVSih7()mbCp8;83G6kq41E373kt&1syPekiD ziPIiBs-sk8DK!DHKuhKb&+jO|74uSuf$}MVl~0SE6niQlB8_j!z?Et}-v_Nidn~KGEt>)n2D}1&~p? z%Ne;DMXz7Gc$a)nhWR+Dgd;{T37gdEGJTTw`99G469BFBz)ai=;vrxEDx8`DFdFT} zY0^7B({4&ac4@pwPS5ccpc#3_Lb7)|JfVr=5Bewl1$qKDi!xuY7XSbN07*qoM6N<$ Eg46|jK>z>% diff --git a/graphics/pokemon/doublade/front.png b/graphics/pokemon/doublade/front.png deleted file mode 100644 index b2bd15029f5600b0480fbcddfac7e1f1a5a5de16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 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 diff --git a/graphics/pokemon/drapion/front.png b/graphics/pokemon/drapion/front.png deleted file mode 100644 index 57734a284423ba73e38257bce16c15facd4b7c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmV+|1k(G7P)Px#Fi=cXMVQc_N-<)4L3I|fd9H09X zSP+mVVWz;Z#g0NmRCft^kL-$1xCH_s7hrgnWm!~Jh)M~3dL*zT4+6)F3#jYLx-7w< zU~~MV0!fKI?Q{^(3^NJJYF~r{|3rYm3HR_x7-AaLq)C?~fnV)LPR|5n5{&`kLIfKA(!IT|5mb6AK=_UY& zb+A@#IYToWkU_vMg%@S}IvE7`jlgofF%-zFNLz+71KBTQs+QH9?Z=>q=P1Bawh{DR zonYOokGZ#AEvs)^d3nE?^^k$c*q#BZ6((5MnH+;d7QZtH-bO<;TU_CktY-o@XF3tQ z7-_e>>Y#XYt$FAl0zhDwf*>X5Ubhe|FD6WqlIC{?N$tG_#Sq}O83#&pZ2}s5KHW(< zYi1=X;1IDNVxpa3o+-}yLkKK9zJTmD7jgC($M<@T`u{Q3vir5BE?kh0{6-U_wld6s^$yC!TA0nc0-Ma?1jGaU0CzQrW|Ab`!{txxti{v8cGN9}%ihi4zDm&P^MmN4$+i~j-2 nLu0;f^Ys%y`v>E9{nzUckLe#bC;-i}00000NkvXXu0mjfFly|L diff --git a/graphics/pokemon/dratini/front.png b/graphics/pokemon/dratini/front.png deleted file mode 100644 index ee6f3bc450170fc04c5994386d5ff7c8bc39eb9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 zcmV<20VDp2P)^vp;!p3DL<@oWo6F0Kh@WeH~?^9*`10z%eT z@uA#pLxLrr&KWZin`*8on(>oG|AU zLH&08wGxO-0|8JUf3MmJ2R;Cxqv=I(D;SV;i0D3MKotNNJ(^?@0|JfLsi{5_Te0wf zpw&#%%#lZkI{@bdABX{+6GDJfA2|1diF*YYkq6N3pdzIc$R1Hv?zRCQ$kwzZLJOw( z^HkJy3yjFV=Q=O1Y|p_=mNGR9kW#qSLckf3{by2>5A+(ax}0fbsfH>A2P{@I7E^o(sI=a=RCzD>qZL)~eeQRN=bt0007f zNkl#{q2Z;Fs6uv-^3{{n6sDw>Ac&pD=hblwj4Ad|+^27u} znZkfrk}(oeoH0_RD3Czgz!#Hhe8R3*HVC(XJbld-)*8x=LCRUfCGuAAf~-TAr~0X zA0lM355_j25PLPI037lrvk$Q99dSlU2FI2HBvFTI85tlRV-47?Oaz2{;wAaXIe%-g zETAxleB>SCopTnkd8Q9QWO2?HEykEH1CY<6UtBanK;nQ%2MP?^5Z8rZS~00I0g@t(5=DhQwkBPf9B8$sKg-@v8Dtf;w?2!|;| zfgKP}ub4l_f7lH;{tPLd+yjGa{##s^%jGS&0gS8gfezOan9^(Euk z$VwO{Vn^iJ)7P8SzP;zMsDD`5$Bd`l*rd078n<1r;Er45tJThK7(cJiz)CV0}5c z!jN$&g_P5Yh_Hx6lu8IO$9$!Y%G*oKKhst#v><MU zbU*-k3;_Fes&#Q1s243jU!>@isqO%_MXgIDA+1b8L+mrHpl^HQDP7?Wd;XM~VWdA;w1v)6CZq{R*Hu&Nm*Q>xYba zv%vzO9e^9?5rBhzZ_E7-t8njexr>M~h9Hms2lWlb#Au2R2xWKx0000TK-hZsP7KeS=KNl(*=S0%}H*Q?zq#Fks#1pX5<6A+NQox6Mb?{nGjPrUATx3ub8( zOk9v=^@vU~bs~D6SC8l^DRcP9LvFZ1$MVV`H=_xoL{1t#$PH>@PP|10B~WB;QeQzk8umd z%mot!r`(7nMzAp;a&BulhhU9snCi)q*1$Ov&SZy0s8kivyD~ucnRG$K5v=>CykOhH zf{m1Y2him_P-|f9!`*f!R@nFD%6%!R6rcd2;oW^c6A}RX-~tlq5DdSBf0##y^^76*8yQaLIm=-@L^=y5DZ97lm@H-^hjf0-I98-GQzdZ2}-5ZZ9TvU z1LTR;WqTiwQYC1;r%&+kJ_cxD?fnDH-`FXO);XhY_xq3 zVW6u1Nx28$eAZ^jO0@&3tib+Dz*h4fs$v+xf)@Z`I6`{9Z_wlbR^~0CEVO?C&59nL z>}wQ8tA|z)iYI$Z(c@$LtSPJhgs2dEHt}b#f9b#0f7NeeXz_)|kP?6Z0000BjE7>3V6MQdf#p__e1)@*%I)u91HYsg?c$Ou8k7_MuGtBNjKvUu;5 zxm)uO+A)DHN0!Xp3|`9phI}X6vZVXcKhVA)A@n|a@BL0fjQy9Pj{6eN7U$0b5O8h{ zAz-Xa6K)S+cru-^&PUo8Vi}yAT~Dmh#UJcK{0nhX9cQ;LUMxbJKek;F$mV%hxgbup$6U8{oRw z0V1G)0aOa~VODTU6BhyxkH(lCx9kW$Ko|BvW1}qLGCqLlyMLwqak6LuY_xRsWVb(8 zJ0Mwv4S;)GkM7<6C~Le*k|b^hTnO;e%s>BD280Nttv%onWoeehz9vk7`PfR|&35~M zm;ENduJm(W0u^9<4jzQDo(}eF7=SZ`_~4TO))*dN1_dx)145%D%7&W4lmPDb=Ba$7 zJ}72OfOp!H60d%lz)U`#qW4?wWVW2ihRls<`f~CY;Ez5TCG5(7kR&j>Zv@EuHc+$x z)oxj+`WO$20OsoGDhk-nRb6esQ7wW1)b^8h<}`q7pz>U)P3dpi{x0H@*?C^(Yz?5O zVjaE6gbFyUYf}}nIH_Wb51YBsVYN!q!&Aj{niw6NJg-t6cpp*!>Z5A#KcXiDwL~oy SU8}JG0000|vdjE##wi96_8uv(cs{3qos0 zB^k1nlAwui<7>m|H8ylSOR(Ac?sQ@p=;C3K zZ(7OU!pZA(AFi?Cpg~gC^0AgbS>WWg0I0fiHbp>}f?i7C|LKWZK)x7{$2VLJ^GVdo zOZ}FRt9G=YjpT`|v#IjI1xxQndROY*P>rhN2CcS%`&A9Tf5v^ElXdJBql9zZV8R}j z+G?~pLGb-6IoJ<9ZYU-|!Qqf=7Y-=g)waW{@p~q?CYeMv`?#)N<=l~>W*Ob>+wd!X|UB&)aB zESW+LEKs2f)Az#lrn*=6MyC$$GhLWeTPOS+QkfTQGBM`bWU;`gyjS7%s1V_kzt;Q$ zF3LmnOa*}N)B1FX^U)<#>I~ew+_O(N5P&oGOQq+>`Ka<{!+hO_TY(V_*YO3W7>e_| i2{`A_-msI@#0000Kl(A03Fc5}gOBEn70I5K1p=ry&lw8XL z5TmXYkwFz(q6t^_dZd{!*s<^xtpa#X+#s|I{&$ zymi)#Q!l_F?)x3G@YbIphM^xgg^MF^3jjzW4-gsv3ctZ1^Bj~-0iLHlI_KUcz-%gL z;OwD-*^{7Co|n2B2tnS}{+rf%?g31_8odZQLtV*b*%V_kLQvQBT-?wZjhL`!U>>4r zfsi)gHX;M^wpm+b{YFj#yxA6zg#8?d9__@8(~Nvf04%gXX1=`R?vS+79JV{-UQM3j z<2umwb0c{lNlOv n*pMH3;eTan`O7P`)1T=Z4=ZCSHKBj100000NkvXXu0mjfCYIS5 diff --git a/graphics/pokemon/dugtrio/front.png b/graphics/pokemon/dugtrio/front.png deleted file mode 100644 index 60051cd79ce76bc8be534bf57e7ead61df87563b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)Px#Fi=cXMVQc_q*_|uoLX8j7{zlz|Ns9G5D;?!82_x4|7u#*IZA_jO0=wVT2dh9 z=Cl9+01HOdC;$Kf$w@>(R9J=Wl<9JVFbsroEaZTX_kY~#u(?`n*ZI{cnvgJo{k#%h zrs=7t{zDn559BW?YX|kOQZPhd{j3KJ5g34Sz!1O!WB|Yr!HUi~2cH1k`@Og^faq~u zmSvS53=RR@x~}d6060X{76t)ZnO^{O`ws(j|AVy`eJ>#Ie|~P}DDMUAdM21nZ7f$e zV1`04Mcx@}3z9v&0BlJ$wECdQu{Z+&i+(PE)+7W#`N1Q=YA9!!OdCM?Dce8yKz;40 zZdf3I+w((ri(WI`3*h{e7BYY{UB=P|z!o0`uz}rE58$|gtpMn?a4=N`oC&;tjlLI( zspgKxE8vg_^;FkSXioa?fQA8&IYE1dP5>g-2|l1X7n)P5V+a+3_bH)?@d7BR<_lE- zhLl2xDa8|@0Fkul>4w`b=pq%l@W{)l4p}EBw0Ml3KKCYk@N|_ABp<9pS<}-GNeSS! z;_VP<_2AV;Qpc=`ye$9lr=bt3muavUQ8R!~#T)%`JH;tCPyjKgjO2P6xVd{d6Z|yM zy-DV&?nN(OJkQ!L*ox<@%?25qoFYHGShIgNQWlp-P@CJG30X^q=dpj`pGm{or=I## Z^#$G+8MAqT2}u9|002ovPDHLkV1fq#0fqno diff --git a/graphics/pokemon/dunsparce/front.png b/graphics/pokemon/dunsparce/front.png deleted file mode 100644 index 660f5e1a11566baddbafa076ef4efae86c36d38e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)WaXn?37AOHXWQN2L00005| zNkl>&z70|Tj25P3-vD3IV3DIZcK6r)6GlY<|S zMD$?kTB9^$SBaG3mI})$%tVTk4$OaH?)W%v_i`@NFxBeb=VsoS9jy>|@&CgeqdVTc zVxTq#a8z@>IDwol1RN!y5U9!G5{{H|(E?iOv80q|m8k5zzBx|-C>sb;U;~)2f%eUL za}mJua2qHqXyyU&C#BS~5Orv-m`zl6+n?AzEXZk>O-@=}R`%KlrKi}{ASJ-ODJQ`G z8WEi&#F7n&x8bVRy2r$V2aofBeMGKsMEX1A0FLY4=K|E#bn>IMWqELGd_QhO6X~O$ z+rdW@aAguxjfnr>4lKZtS24vVp9Mki!2nLL0ojNKtnY4QfojxAQ*eUNH|B7b0^XA^ zJD=Zx0jypEv)ExE48tve<=c8`=3OVz5j!62aRJD#Q}soXfu|Uu2M=RCyA0JX#ubon z0uLdHL3Rqmq(ZNyb<~F@>$GkFiN&sN>A61Cfhe0mIB*4MpMjUGo7+?$(Ip_?$AE8b z+k+ueZ1S5Vm_PSTncEm59!nn69Odqs5F^B%oaJ@tL+-m$Mne1pk66#yW{&3rw*Koc z4`3<(QSg74W8xfa|7jJUM*gdR$}!Q)X)gnOE!IW3_*uM*F>wJ5S;cV4Pumj!0000< KMNUMnLSTY6*d0Cq diff --git a/graphics/pokemon/duosion/front.png b/graphics/pokemon/duosion/front.png deleted file mode 100644 index acf0c1c0d2393e56406f59733872270ad43d6240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVZrE5Jhdt7Xak~9*{^{kW*V|Z-B-rTp|`JB^GR-E^RtrAca$>@#*q+ z7b_CX(z@|f7XNwvpWT7g>QVQqC|Z=)5z!K{j)@it=t)kr4>o|lt8z+1z=mkYT!(>@ z66S->gB~N$g#d*K3f3l+(&|J8x(qzg=Le0o74$W|oWH0jj3a~=F`dsyVAv7DpfMZ@ zeq;8;tOd@<&e#LsPHJI+egrD1MM;#gb3o+*plzyuVCn&&H@o*=zIjXl7r`{wZ*Chn zg@EJbhfVK+NeBnje7!UlXk`FXAOnCy07x1>;@^#32oa!H}t-X%UM!@g=6xjITjJJ~3UU`LFr)fk_sB#&A%}A)= o7sL^%S}D1KC6o$_kGgmL0SF0+<;mK&%>V!Z07*qoM6N<$f^$FF#sB~S diff --git a/graphics/pokemon/durant/front.png b/graphics/pokemon/durant/front.png deleted file mode 100644 index 0320e654f912e30c09566fdb2342aeb7e4d7bb8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmV+p0`dKcP)=6*oJb>C)R4nsP>3_z(PRoGvRG zQ@UKZ^+}N<`}53uBLiG?(SOuPJ_C&LJTXGV#W_GlV15p;mBQ&?&V&cJnuZlBKa!`6 z1PzeMKzQxPc*3gC4q&Ubw5aif)h77H1MgYdQa68EePJAAp5M1R^BUXWPQ%K2^*{d|9*j9)$i)6H97k_;kqg8V?#~-Z;`ZlkW zatS~m)y-%7Zo@_3TOERIk`lC8y%~Sltk!ELa$nkUJp{yZM8-^Qx#rH1+kG=h3$YY= zKDBeb@2DeJxa*_?bGxW(hhE%i8G)ut3UnG58E06*9Yx?Rr5(B(EEiz00OBpV@6_B6 zGq_KPWt?Rp8ZXFsF$Ci74)LL%pNO^lkCw;h)WL3o*mrmWM04aqu)o^3<^hd|!vN{N z&-FW~09bc|jbUIq06iv-Cn22c@5D`hEa?u{j^v;4Un|2iN?*f87yX-l0>5imN0<`P QZ~y=R07*qoM6N<$f?!VN1^@s6 diff --git a/graphics/pokemon/dusclops/front.png b/graphics/pokemon/dusclops/front.png deleted file mode 100644 index 58a0d15abb07718ae40f168c417d8081bcd03de3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmV-f1E&0mP)ljA6t=14N=(#hg2Y6Q#z;&s@B}?6r^J?-I8EjQMqzL;yt2v`(9dKSRv9;$j zr~_<2V{c_p0~jeaMOj0jC^D?37#l#E%qs~pl2FHarN*{8M%3q7Ql&9cr(X<3rHN5` z`Tc@SV3mpd^y}3(0_X}8_Q~bT>;5N|V1>p5b@}u9>a$L9v&)?)YRQnI-qbLg<&#tY z#|t_|@}9jZ=Npezl78eDRLNYjS0#~#pekyrL!xt(ZhNqHb8Ye3^g(M)-x-E&(Of53 zP-dcvpl&cBf;B)qR@rYrS^x&C3StoB+$4|aMo6QvLg5O*njncGjVBq(WSzp@ftKY+ zx-i)gQN{_K<4+2^#r?pFWll+n^B8jsS19a=cRU!I-E)K-H33;$^locmhuvn>iPJNH z7!hLnN=Asla+Wf?-7xZ*H=;h#UeV%R%tJy9tj1Dici)Y=ZtMQYTzc7Q@O{X^Wz4hN z1;F7==FyJB3^CDBC*q9(22I9TD45Z3e9BTB7Vm}te&ol2MT_(^02f+@uvGxm!Qh}5 zaUg@FK>(VG4eBk84zFlMDnk#VuBj5xCia1DS8H#^FSz8|Kj6*_b-klyR}oCZ_s>!3Su2+|gV<&?`1d(`jq$Q@wW3<>z46Gy|iH{}>Mx_22( zIS&A+2^~Td6?8}Q@RWzPD-Vgo3fwLLF+mK0-kCe_I_Hq?7#s=$&{{T!;^5!TGSuhA zx|Klr1P-ati~1=58kR^1$ws9Y0LrVR1Tv98tH3zyLnB5Uo^V6~cv(7hL>ePNq=n2N zb=;G2)z72^VuX?;*2>CCk3*q)(e=VWHX60#B)RK{IPA)A{%I^a0`zfK0I1!q^Kfmp zRRA23$O-@f5Umftd@(^u41Y+2V+_|vUzKW+5DXrZty(0~9F+#!mI_6Rg|!_Qm0HMh zDtB1GO$(!6K)V3NEQ{>CEEUVCHh`~)R2nFC3yx#sc32^>sdcyBwNC^@sH&m-wT9(v h-cV~Hs{H@``U$r=f@pdyQM~{F002ovPDHLkV1i3flp_ED diff --git a/graphics/pokemon/duskull/front.png b/graphics/pokemon/duskull/front.png deleted file mode 100644 index 33903c773d5e80cd9982a349b77c8b351fd58b24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV^fPioa2nhK2;MmZpu&|Jjh;ZoO!1zcIurN^gU?BMT_y`CH`cO^}0004q zNklb;z6o#W9AHY~u)r~-5PfP|@lmir{uMrn8QpTXj%GxU+l%=dhy+hZY zqCHHX9T*zN&d9=B|Ih#bKgaRB``l>g#I29k0|v_>;5iwH@RRib@k+-|odndi$B2iN z(if}FmkD(NJW+aR?J&|heXv#tl6d1x2xg*mS@>fiBq-qB0xS@aDkPis1402RWFvb+ z&|oK}#G4EriyjXmS^zWHQ$bCFoK=F9g<1rCj1>P($copx1g!%)Hi+#`9ysU{*psrT z>i~^h#Zc=-@j4jqSj<3Ht1rl8%GeYc&i`MzkM8@^4+2G~-UKs%Xxo&hUj$0Vv;lM~ z%ok1h@vVR`4Do#2T_QX0_Ay||BiCbm^sUG%09-S*07T^SfCg2{|1souG$+JtvbmI4TG{-9t^Jv!dwgLMCzfRxdC++dn)&dE* z=n>fd9stMr)&ynXb35Q+Q_mXE_He29x#|1?jum^6AvCGN00000NkvXXu0mjfxK!rf diff --git a/graphics/pokemon/dustox/front.png b/graphics/pokemon/dustox/front.png deleted file mode 100644 index 356320c18db15ad3323b7c1a7a7afb47fb37cb4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmV+)1K|9LP)9s|c!01#C|D4f$UxvYK=^oo@M5uS00009 za7bBm000ie000ie0hKEb8vpKlf6&dKp4i2)Ksd}fuu%aAreQjS6EIn zwIZ0#`8taEAUw{>%!i`-ryoCM%b=4t526{naVL-{!p+kkPQiMF>jg|DhGmy|) zsoD-*cqQAip5MLC^ZI;-@lbzWQ`5fzQVahGOcC;YGEm4&1|H3)RwhRvJsOcY0y2!yothZIz!db= zHMN*GbUmGj0-TP1YrsLen^%HTmon7>4JaKu1Bkb1ryfn>)pY>4cSa~sHEYZDnB9o< zrg5+6naa^~>+TvA&`15}LzYm#UacuQCx}A-7hUIQ;y7^f6mK-{kYemLosHgXV@xF` dXb<(@>j!_8icCAN-9i8W002ovPDHLkV1hEiV)Fn1 diff --git a/graphics/pokemon/dwebble/front.png b/graphics/pokemon/dwebble/front.png deleted file mode 100644 index 560295f560f1baab156c0775db2a5aac90c951d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)R~;e@&uY2jHx zKc);5wD4^aPTa&dWdUy1|LymgpBUg_9y31v0SSwZCEUeooG#|NeXk>o1b4X_2a7pH z(7i*z+Djl9rpuQxrL2oDWdbsRBE=Lu0FS{X3^0YV=71n>?x1bpq#&Rw%hREu3H-d$ zfa@a>7-u?c2Ouig@&=>^cppFsNcQ+xcx2k1&{-GND}p_Ui3Wpq!0z~oJBZC1Kt3ld z2}}S|DK$NQU_=syZP3AV#ZQ2HG|XDS#r4!9-@*|z@TdhSHLE2wNnU6IQ7d`)+EfVS z#G}TJq%Ku{8182ZgdEzyRPb7cL8T`=nG-a~^35m!sP~*2M`}=zj&uhA+s!br1Q53% zt|U2#T++Z2paIG7)5!ddjw}JX+YE~G5%1ahr%f{Ap6}{G7rWQ`_w@~uPMZyv2NQi5QZ5eg}O>gJX>+{05%KHvcn)5ETDra6xj;cEb1;D0@wyR#sSr? z4Xk^Bc(6KWh%;(vkvvq7bc3`aC8Oxn8?@ZV|Ni6gM95!+>oqF#JCu5rfKRDkC4mB4 zfEEJnstQ{HiYBUnCIbGee*@4&6;PvXx48`n!U}*i-JlvcM&N{VUJ4A{;80-j*Y-RY zvDn1ON^tQUHsXc&Jw_(L;y(zZ8z;F&Vtl8w_#G61DZsT5*?Nij4{H-}AO(m;_OQ&B z3K;Q14QB>Q;{I`s8sl3Nm|mVHke=W7*Bck-H-#G0etrg!p@PoGD+7pf2Jq$EqZSyA zR=fzXJWAkm_HZkNTaRO21RTbqA21)IMW42Dq6QGL{&$#*m3T{O>&OJir<|Q4AjBT) zy89O3B9B-)*F&gjpl}apBFg2J81@>31p9nt0NBTwjE6nXD+3%UB?}Kc+NillrUi^$ z#t1oR(Xi%PJpPKBNBuCcd3*v|)bFV#N(3~}b;||t3aHzy5Wo)U9txOG_E~}*cZ3+0 z=5fO*K8JDv{E5_sI3eVvoJ{NjEnNWLa4KztPdj?4W(gz!A8kNgt)&CW0@q++22yDNP4pNl;7YuQNdjRJ2xv!*$(i%`-2~vP;b9ji zjU^b4^NoZHLqG$Zsl1ez%)A9cx*peC#TYY>ZzS|m*^@dL5+#S92xhJQ-^Wk1YvM?< Sts>w60000&i zFhBqxFd$%XaInY_5Ey`PK)|SY*suWj&;aPzpxAIwm@p84fPnb;_y7O^DPedN0009y zNklBjU5XTjRJay=^D!Qa4wMjC|7o{phKs${RrN?HTn#_J3YyE0{sA`H^|Sv-}~SH-8MtJiCX<{ zdEo#+{SG4T7YoSa7U4Yi%DfOPvbmDqIS{<4I37uOgak{r@E4a?Pdq2DfS>-7KvTFu zE@1Ki%_WI7h-6>{po|9i1>tzZd{N;7< zW0atyNLdHy83F6T0km{{j`})QjJ(oCiva3V~ z+{Mgvc|D^oheEj0vXyYb+bHsOzXWhUjTZta(aeczU;vx*f^=-WDHjY84I(qN)MPJb z3Ft5pR@G1$pq@97Oc6j0ZEh*Nv_TH6(S+pVPC&p7ZEi;d@U{jNfUOv?X-5<1qRjvg zEwHUB0#3l50JUn{Y#87j0zDk40kqD*Ckt3X8-OaDf*YbvGGJqE2KKc+b_xK!;j@># z?(o@j;Pd2@Us?cohyz#0D?^*q-kH$jSo@^~v|OtTy3;*;&+zxzT*s3Yfd8)$XvHy2 z*DQNEzWB&3j||}D0N@)>Bc9E*z6wmA5|ei~aeDX8;TiS4qxEdgz=%#k+ufr<#y3EK zjqIa&e%Yh6PkGUu9^W|S9a}ilGGE{b&9K5M-d+0Fq&Sj_30DmV>O{cf`D)&> zL((`olqyogleU=M1}qtdQp&K40KOygE`WCEf%8hAb{5;FRh0eRh9_21eX Q#sB~S07*qoM6N<$f{|3Mr2qf` diff --git a/graphics/pokemon/eevee/front.png b/graphics/pokemon/eevee/front.png deleted file mode 100644 index 1773de2aaf1a830a9ecc350a66e13aca756faef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 535 zcmV+y0_gpTP)Px#Fi=cXMVQc_rDIBSN=nw8N&o-=QZXS?F(JL2d*;QI`1tt$=B?nkcwk6400000 z000000Of#QssI21l}SWFR9J=WmO+w)FbG8jLDGHy1J4IytJMpM&SIuY%1tlc%O}Cu z)AZC+f4t}>&okfS>9#;_8JHlDdjWo3Ktso(ya??CL^KpgNtR_3fJO}pb^(ANewPGW z2bc)pV>}ESkL-tjssa}6>pMRhU?QEJT-P5C;C;`&bqxMO1MH{f3XUA~;kovDB;QMw zSQ56@YDxA2B~oA3>1MT7uz_0<=V3JGivjetGi3k4mj&4OWW(cv$RAZQ$dUqmNl)Mc zD;so{+{H-Z0$fknKdTF{cnFY$h?_uQ{!|S)g|G;P0DKlQkkuk^OyL|n7F`W!q%a9) z;&}2$0r+!)y_>O6$2pGw(?mf49tJQ`edl>I@TtK0cT^m`Pe8a5KjnRDJD&!Bgts~u z=$Albgoi;_9<;?7bVI3w3=w$7S6T(c)tgPNzr1XH1SEJV-;CP#j=*adNF8^B`1k~y zf+2d!Z=-Q<<8$E9L1HzpL*(l Z)(@jy4EQ&;2+aTh002ovPDHLkV1n7!=k@>q diff --git a/graphics/pokemon/egg/front.png b/graphics/pokemon/egg/front.png deleted file mode 100644 index d9680a899240ddd41b41d025ed624401a51ac500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Cqd_IC^((*-I%m;JQH;0C-Mt$6j(bPu@F5d?7oCY zs)gI&cui}=M8@7srCO(k&|b+7j-O{;LsP^8nS5q9o>=r$_><~2o+(V)(Irdy7fn>n y-_U4s@kzALA6LoS>z3CFmDb+6zw`6&8b-l)*484MnWcdKVDNPHb6Mw<&;$THS$h=# diff --git a/graphics/pokemon/ekans/front.png b/graphics/pokemon/ekans/front.png deleted file mode 100644 index ebfd623efaf5edc526ab425e5bcb83c63f877edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Px#Fi=cXMVQc_S`bR4N{jBK)y-nGdogOXdolmjY7h_*=B!$r5CB+6FvUR__H#=3 z;Ftga0Ll|o$N&HV&q+i*d%39wHOY2Vop`1`S4F{ zzg~|XJ^E7w-M1&2rYYy!2uhOy6mid=yZ;`6G62k+QqJi*fe2sbQl%u-WdKdAA7-vq z8iOEL{ZqE+OOtXB;Kj=+vH25UBM4_UH&JqN9t4T7M67i4JaO#Z2iS)YD1&4G_~XACf@FOIuz$%xS|kT0 zz)oKxh~<4QemRIr06;nq@Vg4hm;woH2wN$` z--vX;H-tpS6FW^OvUES&g78X;b~pgQO110}Kl}&+1O#vj@TID2%^!pL?Wbr3V*zvm zu2cWK5d^eTfTU~)Tm_SDX?ssGKP4mBb?F<@2^PT_KzxSsLHLujj*$eI+L2(B*$7n# z`1Nb8uhY$~()Zw|JHjEG`J#IV fxov**=wI~%Dy|V6piFqw00000NkvXXu0mjfSIhf6 diff --git a/graphics/pokemon/electabuzz/front.png b/graphics/pokemon/electabuzz/front.png deleted file mode 100644 index 0459ecb3bc4175abaaba404b6bedb5e22524a487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 zcmV-E1Ht@>P)?00000Pj$vQ0008X zNklk5q!A0ZUl@0Xi5>OW`HXN z@NL$h5e#U=QIkl(5~>v5!4we`05EEuvew|R3Nxl0vsQczAQ>8C3;0I>ChdS> z--;kW?EtKM_2-!icy`z_p8<3eNOoI|uKqp`P^48?p;28hNw^Dq{%r<@SlcRs#81-Q zS+!}uRi*z?0#zNdxFHTG>>P=4Old>;`@`^!rR4sXEJ=anE!Njw%y637f<*5jkqr~hX42Z2NGe(zfLU1$p8QV07*qo IM6N<$f)nC*_5c6? diff --git a/graphics/pokemon/electivire/front.png b/graphics/pokemon/electivire/front.png deleted file mode 100644 index 41bf884b5e4b025fd7fcc7ea8c916d4bd0543575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1066 zcmV+_1l9YAP)BOF*-3~2)PID&u? zXm?O??UB}?)$q!|HZj>Eb=ovJxX#s)`y29RBzY}+bICLs&-=~y-n{w7jQy|i;eW(G z{qlo5R^Qt%I^RCJ3;6hpaX0hfp8clZ4SBF`({7Oumv)? zZUfN}c!_H-O;hIm_)>SdZN%wPd8oZi%3OI(t`E2N04sI2oD#9FaLo>K_&qSnmFY6W!ZDiVMVgBTHYEEjoP(Tost7F{8bfKQoX zstC2ra?t?VA!WAG^c9MFTC>Cen=>Pm!qlvJxMX5TV7EBpt@UvfEqFKOKV51%45Ln)4*Kr!|d#; zQYtzEN+WM34)@);rhmJmb5Mo#ekq~1l^+44_5ynVB|bj_$gWAh$xTiVn$Q8!?*Y@T zVi5nc*d*3gc38skNJN74-u2~2)BZmkpKVy07*qoM6N<$f?`nj4gdfE diff --git a/graphics/pokemon/electrike/front.png b/graphics/pokemon/electrike/front.png deleted file mode 100644 index 3e2b74a7522a869551d63530df2185e39b0b713f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)8nu6oqLh+5-atJkyIuqLknSX(wLBQ-J~^!(`2%%t7Q_XsrxXdjuGH zg{T{#6zV~tG}i#`xdTmkxu&&cP(s1lSL03*HvOa8Y9&MON9=&}!t#(XND$K0zv z&GitV-mnCiY<*m=QT5NT zTDQccB7cFM27rOJq;tvyx&Yih>Q?76`;{5+q5y+S+GKc7(dOfyqy^d=SBvh|dlH{s zfqTek5&-ef-=NcO3rP0?pEn@=da|HqrP%?ZrBTcziS`>QmI0_Cz~&(0CR56%Xvxl= zLLidtn#vUGA{;)lP__ZEf<=@dVl2Z17MBfZ8mT`?cWXol%w5}g?2NDVUpr7@z%SZm pc)-^#Q$M6{0x#Td_(A`R{sNr&o^_7A7Lot}002ovPDHLkV1nC-0^k44ofy`glX(f`7zFr)xX!q+ zASx(m$(%Xw-o5+r|AO0wM=JS@J-Vmt)#qSqXDCpx zOk|z#LQtNS@A3VJnH5Sx`?v2;Og-_CxiRLyorZ#BPFto>VN*KuGQ%**>7O2Y6g=j4 zJha&H*ycw2d!77h3(VHMn-_Y{Uh~-p=Z#`tOyh1^$rx= Mp00i_>zopr0A=pRrT_o{ diff --git a/graphics/pokemon/elekid/front.png b/graphics/pokemon/elekid/front.png deleted file mode 100644 index dc1c694b23e029d416f39ce67a3f56206463031f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmV-n0-pVeP)ljA6vxj|oux}GJ4-#KW`PZ!rK)DS`c)|PauGgNkfkh$84*SK7Dxzn z4)%g4tdgOymb2sq7QPtx1pMZcsk*Pl5BcBDj|H);p zfrv~E|I|f<93Tv6P@sj!i2D~yF3thAkdyx!F>Z0n_9gXcy(>EXbk9QPBk$IbBA4Y{ z{(Y}}RlQUC7`MoeG!9Ml71m00000NkvXXu0mjf?#U6h diff --git a/graphics/pokemon/elgyem/front.png b/graphics/pokemon/elgyem/front.png deleted file mode 100644 index f1a930f82a6d58834030f5d25d0e6676cfa4ea89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVPx#Fi=cXMfjkwAX-v6b5dfIgQU&95D*YSK|yM2a}ZJ~|Ns9WoDh2{Da`-?=FI?V zVh{iT0BC3-5C8xHcu7P-R9J=Wl}nPtFbG5q0!gu*-2b?N#?H)Y%8=cZS*Xg3eri6# z%W}sZcl;gXQI~TQk1~QGm)2U1aOj1Npx**2gi{}Y0^tJ)Lb?nj@|}ebppTjb8a?#A z9~N>1f>LDQbb@37AV6+_bcoEmXvesiYuy=LI3~&07*qoM6N<$f;v^%rvLx| diff --git a/graphics/pokemon/emboar/front.png b/graphics/pokemon/emboar/front.png deleted file mode 100644 index 009ecfd4de552705d199f24de6e74dbb79b5ccde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1166 zcmV;91abR`P)>+7S zMNw2TIH`KbsqAgZ!3bYM4ow-5XxT$BzGP3nIE7#qgIEjFLJg)?-;*8NA>Q=Vfs7~f ze)GL=X5L6q{;#$)XKn%h$nCf^2hf+4oHd5@_W%X}88i=Api4PcR1~9_jpqX>z%oFa z2b2tpWEmE8I!9uGQiE9vLJ)r+@aQXmU_|em1liAwbxsUcT$n4M>(sFLHe=QfX1H$> zW{pP(xZmn@V~zv>?g8Jn&6@UNL*54<@8=h#ReS&9x01g3>wS|5G=981sMi{xCFkq{ zrt7OMZRfiHMlX+NT^6zX@CBvSd|u;1gSgaYJmhTbcPo^x?rGwOUD$&JZYrQ6AS(1F zEvTJoW~9T4gwx?RPPsFkgzwdYZT)voDXhb z?HCZ=v%h(za7IgDWR!q^9YI|fm_5gs$DX|9ydpQw^o?UGPc;re$gHA=fXZyb;woQd(fbiIsMs~TTZRQEAv=w2D0S^IZBxDg{ zXv;9Ld(J3ejeadt`3PnOPG$X1au(2O9stiyqAtW^*=1HN&!+%fe|uGlJHC{m$Dofq zTZUbAi8%rYX6VvZA1Wc@`T0ICHIA325@tmSGbqO)u zavf42paxzbRJb}QO~y<=O$EVL4Nl4=D_RjSNWe@FFO!%8 zh&u|3`?!~O$DgaKt0DRHMj$c$j<_V9(0+PD$h8B^T>G+P@7L*KL{w| g;y(c8uBV6Eza9<@&wbM?TmS$707*qoM6N<$f(=v?NdN!< diff --git a/graphics/pokemon/emolga/front.png b/graphics/pokemon/emolga/front.png deleted file mode 100644 index 23a5856b4bef2654a799e0fe0c4ae6414e21e120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(bq1P)Kk}+@7KorNHfQ{!cmLL8)dW$HRJ=?iz`8zgYtKxY?{={n68MKr}nJ^HN2t^@=A% z)vKp3N&&$D){oC8B@PB?V~fuI0#rNLI!{U*0NR0%gryAt0z{%gqqG5dTU$hgizx)f z(jnFZ`d}yR23Rz#@%G`cHLw8J$FNw{c8Esx*6YH9b!#GLIA9=%=}%MEEdy{yJ`?ho z0Vn^wjo5Gl3+V6=^ollRZIm@Y#K3P9z&O5`%}771e&R-8elCU!GxTZpd44l}5)<8> zMc{he!45_A-p=Opo99QIrqUB|1rya`1c*a*`ECB?Hl--Z~QVdMY{Sj79@cn?NOH+>Gu>r24 zPzVV&a40FSHwMt%dpc|=b+?xjeFL=Rq7D_M)L{;cjKw|Kcq{-bZe~xZ zU=JNlSud+#8kv i*{D(etZQBWSib=|wYI_m(a}r*0000mV diff --git a/graphics/pokemon/empoleon/front.png b/graphics/pokemon/empoleon/front.png deleted file mode 100644 index 3b3dff0bc2880fe9d356d8d47ecf12ad7ae299ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 867 zcmV-p1DyPcP)A3lC@`4F_~_{P*y#8mASeI;00000A_L{V00009 za7bBm000ie000ie0hKEb8vpf0;j&Rqf^uwA>0{NmH(*Thn>dQ4)2iI_x$v{&z*f| z05YX!hf-B)JOfmo0ZPpVD6Po>f^xCbP>AU7B?G*ry)>3u7;o)upK#yy>u5Z!8 z2>5t^ckghH3jwdTr*}M@-(kpm+HA!GoI z0hAb^>Gq;SNC)8ph%LU6>+RUVzu|xr1JI1u(6*BdCu0uWB|zWo2|_XKbCg7I!jOlM z6R{jg0E5^z5)nKGgbM)TUNTjV4E;a?&H}KKsj?#WaKoL%^iU83uqAa!vLO@}9XrmWZ0-lrVi_RJ!HHlDxH84^J~w~j zI2v0i9|z(l1rVCdjv(Jbf>;I=5@0NzBYQUt1C-hA6MzUnyghtda3Xcqn9RbJx;!At zBn>c&0LSldJd{347~q@4NIK+{*!E?U^sBlpD;E)gy5Wt84*Z=^isHm6#0O&wK`1ttH(9lp&SZF{vF1Ga@000At zNkliLx^GVwZjvFURsPrPJt4E+2dLfOxEpMVGpTq zJuV`lrF&VJ!wPcfQv5G$Z@t7YF7&e0hcSVGiCb%Ep%ijT-$=GRF7_6B=)>TVz8}3` zdNV4O{y!`4{tHmu-2u4GLEUn^=63y~JN4QvdU>bm*NH_sTjN`I>i2tl8vZl?l*S=I_uEat2SKBM`opUiS77tuCgS_A z_rCh=i&xjzS77qt27rEJroRrJ4-|32H@TQ|K8)jdFu10C2}n(^aJ-)&5#v7}mzdIT z^eRT5Q$BhdpV1FFA5G@yM2d?wfDYyeT!G6+VsB(9Zz39eCMJX?zAAF;m8(83L~>dJ+}u zkMzlLh(mY7m=s;6C_M=S+%Nmbq31Qbs51npGL3NDe&6=c_EAqLjo5k`JKkQSQB#1e z3SgNf9UXY$A7((4Elt-;j`z5|04UwhbV=8M=0V#(RY1!EH^^ORK-qh6&~9e{5CE`M z1igk@0XPJ#j7WM~p8{wp;J(*t0U-(iyC)_q0Ebxtk5Grqfg*%hxiA1+1P+yEg*iZU zAXI>#1NH)dUJl62fd%B*p|1dvt4<4g6QxQu76uIoRF961ni-({IGzG3OfCkmOyKF! zyZ7f9N&y70A9qDkDdq};bl)*{4wh8_E@nAP7Ks|6wa>mL6Wjn}M3lwl?c@_cRyyVm`6+B5`u;DxqdHNWcxTvuG#9W4`@Q*+FImeN#HND^Q znS{;Q^5anXiO>1Dodx^z({tiISO6Uz$gk!
    hMe8WHxis4`+F!~ANlSenVW`lu@KK`F{CkXQn$QM2kL#{%u2cF#5ecvLR)RVK-q6 zP#cRJ&d}SVk6ao3!C|-FcOPP)TeNi7eXbd_b$6^<963X`6`p3$*4<+js0~DwofZSf zmihtb{G;6kjCMNb7q*teI1(9(oY!%o1LBA@3v<4Z#8d}tmlBhOoUg?zRu6%IXq^c; zs=`D&lC}_qf4~x0}VJ27URAdY=0GV2)&#^5V=O#6udctr zJU|vEL;*r56CS<4{>wm&i#3Zhg?|PaUW@3*{f7D5VJJYxuJG-{{l@hBFL=0A0k$f0 z33y@|#L!G3CmcW^jv63<`|6+xSVF;3i_{QoG$eUE-KQhq^bqJc;X@3Z zp2b^ZRDnZs`SJ+^f={YT^-0nSN{mr=iH#&r8Hk>255JicB(-S0Eq;L^PoN-Btq*7_dG(qJhscbQZ(G4V0Fzzkq|KHTY#?HaOXi!YA?)eqJwb7n-kGkf(1iVDCS zyE8Bt3%v)mHh?oQdM60fX(VO=3$;Mw0zocozKEk4hdv~HQUQZW*;HMDN{V{~u!xk{ zs$Iz1cQ+9@>XNB3U*70000`*f=nVm|%zi0000000000Ms`U=00009 za7bBm000ie000ie0hKEb8vpKld)>UFc5}i`~s0`$n4*OKTWHm;#pLWUj#Q_C6(msl%-YodO=(0u*IWq}@+IX|vvQkL&$` zJ*H;eWA||Ye@>L_f_Jey2jF}XGN|tH_-SE}UxTpk0+(R&k}ja)uwgwff>OH*CY+CL zl1nuiBM_`hav&-ia=I#qiZ;2oquF31Sd0~nCJ(uW#=LMX=*7sF*7BtsB@>QI@XL|M zFb@;5N3ElUMtYm-b|=LgMSNKXjab8N7}$yxc+%v1n;9en)Jd0Nj*0={I?b`!hLee> i*KjgXw&C34PvRTSsZI(IHN*@60000fIvXFKtTBT_{eZ*=zw^DC@=s300000(?o$l0009N zNklVd0#= zea-=gAPXUq!7~nyr(_iuPrMEetiujtO|0fHUF5J9W8sb_&Q=Qah{Ku;2o0R96i5hD z85rAn5S~!a@g+V|nw~qk&l!lu9Z6co{&>LS`|Q^l^p~ z2x-DtEa*zBOee@+-%0MjPKsu_OEszrEh>_|`-c)(@*pi1P#1}Jdt0-^;)B&U+GvAr z7%d*Ory;CNL>wp>uBi;W# zxA?G_2XQHQtrZPycg4YvFEEk`SR{&|{xYyF4u1N)7>0Zuc54pUOyBQ+;~K~`AcnmU zWjoEblgh~Fk$OJOlA@5|tv*T!Ve{39!jXwGAx3g6%1S*Am=-46L(m7ie~SjjlOL<%`T5z1o@@R3VY(kpf1UINcp5`8mQ~;KIC_f!Bn20H8>5 zE3+d830S|=v<+fAR<0WSj8q5HQ5Fzz{02o`U z9TDffiLYq823!s(b*pSq&*$)qE&vqym$a5G^7CJdM+SJ;{knstTWU4@i}Sw(P!#Px#Fi=cXMVQc_#dDO4ARzzM-VhKF|L%*;iwOAm`2X(i-rnBeu(;^JzyJUM00000 z0000006&-Q#{d8U`bk7VR9J=WmfMnpFbIZ)(4u|+2VPEz2}bSgUhRxbr?wHkaQI`p zERQ|**grEsu|I@EQG0Q_yCEPFO(1*x4FM$HEP3^SD}wkTyi;GKtm{B1UdPoa zG2A@9?0`xD{CuwDR5#KJ6xQN}8A7r~mNSI3F5Dy@Td;K=%-Z6d5MJ)d0h4T)Erl*# zzE26X$0IX)y8Z#j_!9!ziNgSp1QXzQftrnn&uM{|@5FTKIOa=|W zeuaq|YSX%H`h4Vw6%!0C5K#RVePIj=vj`|3-LK?1unFKv{!z4*lSIv@Vzc?O4;~818;!0>d4hPnig4 zN}$P&Q1As{q59;^9{sa2D=;C+J_b Wf(@Dy1ET8y0000Px#Fi=cXMF6nqQer6(5D;^$F}?qDoYhKFK@jGwTL1Qo`1q*!`1pHL5Tt4#i*rHd ztXj03O0W2h@&Et>5=lfsR9JO6PFoW090HkHh$gBWjdr(7^){*o2>K;gDZio5`CmxTekawpc<9H z2Cz0>_Nd)r{p~HSZLEDX|IA6M>S7i4Q>xTRAaO3V}*?tv-c)-%~27(8cvmAoUS<{~LLLq(R=plc-_K>uI#8Ch;+~(vKP>=qERJLRQ=r~4*U!Ax9Vh@DJ~MD-lAd59yN$Ex>cg5|pig8Y5puk$aB1=Oa*j@RS||ADDlBe+8j{ zN*Mi}!YqVeL{hyFfbbK)b2y}|_X+@F=4X-;)IrXAAf^C|tl~=lF9N=pt^Am=K*Jxs zezt_819(5ZhU4_Ulg|>4^Aw@Qe{2-JL~p}C06oFa5RM1I&-KBdJ;98a0-RQasl8oh zmf%%fyI_|I{ps@x&aw}W8G>$tMlS$;8V2|?XUzm(933>lpVzvt0$|7>fMvdVC$Dry z;SsJ56PhCc=d&*@9X?lYTdxquUCis}X27=7pg!K;KYShZ@1Q>V*uOmTeTq>CafpDg qT8w=AU5gP657oeLJ|w9B-S{60|0^>&t-AXs=XVBm0=ut0eD`1pv3h`7MeKAp?Q000B} zNkll*O6ae58SS=ljN(#`fJ`hbu*(aKW-3*RcpksjRiR{n}4ML)e2P?{5 zj4sKQ@zp>lql4rz=wO-X(kZ4p1syDK3u1JU76IOr-_Um?B{6~IgDt?m5BJ`?dv`); zF)B55`>5mQt@8%P?OQ<$n|sY#W6dg+T5SuP?&f{mSQFoDW9+&uj5k&;QNegigF1Yy z2d2A+;bSGJe$~};UT|QpuA~}nhuHn@Wyqhb0F@@Pd54Q%zkSNNS`pz+8`&b{N_m_M z0LJErdtQOOJP`^N9RZMNv*xs3j zxNZh?1jtT)NlXnCZ1k^ zP$ks!2CAzUaJ(7#RPUgbB!BA&k}(3yG|`tzMFptp@)Tp)PFsvIM^S_vVBhD!6m0kz{B?O^P=%|S0z~?<7$<375{J?}9n39Baga-LmSAC_vNoT>% z3CCueG5AwOAppkm<}fCNr0KouomVd~-m?mzoQTo9A*`_z19&?ewxIGHD6S|gfN__| z<1~G>Ga6E}(Sj^t9*(ZNh;UZ`7^S1p*~tR%kAR9tX&j&RTLeN7|07^3>7VD|#Dyvt zaR5ZjDgbJ^#L-~X@Arw`Nk$zWaclnt|6M1H1$b*e72eUnL35C$EKsh9^)Z?=69)?7?Z0 zjZ04hDAVTieL#d%mmsw>APFPZ@;&pVJvhr3_}7zE_ar5(1e|-5XG7S={`>Te$bpI| zD}(Es!EiYIYdp1u#dHiM7pJX(3_3r<0)LF(>B~ozA34-20Yfq#z(d7AfEG2bBqT8+%;j{7M z@obX)i{vk7)|Vv^%qHV~whWqg?t`Tu+xx+^l#~Px#Fi=cXMVQc_gli#MIsmnlQVxam-@cH6IAsRz)H{<<2iyzCjjVjd@CRX*F%fnpniNSAfzMT>RQf3eFHZplwh?MW?>lkO4SmfwqDQXs2d&?p3>uVDd{jcg$ECr4ZdOsN8;Dx{t z86d;B7L!Yw`cPY+GKvth9xZB>yoNIPX4THwzW{)vBf_Q)mJeg{#0ap24gj(|ieX6G zaA+;aQ4x0ZUKo3|4*~ZgJQ?7MuYfmeNh?Dh0BY;a*3$0^-;T z&_X$WcsI1|=7i?UA|3?8o+hWv;|L&0000z5D*Z+h%m4qAaEcc;6Om2KtT9_XyDMW`1ts!plIl*pwNJT3-nee000Aw zNkl9}rp(9o!-ggd%7c zMb_G(Ljl86k?ck`qnnE^MFIrbjBEk|EzFW7OWpU5iYQX-6A0*dpL^f;>mj%Ub-?a_S>vFG3_|RlQmq=m!NZ3ZK3B>E=u1HxssM*x4AucA8G->*0TPg~cEDHw;O_$XcC4um`vi!J21lm=N_H^A z&~*St6+i-+R8#_`q>qcTMne0hgB4&-ph8qA0~{kTsEiKCU1YCARq&k1L5)6@eIxi4NgU%Ovefs6G9x% z@G~(bKoT+TX1;NS%Yey)%z;1lW{de($tDQv0R=!=3AXowpU>ytCeSSb0m!b-U;Om=WN|XVb-rvN zV5Ho%0)g|B`Fs)!urHjKR7eV8J(G-0pHCOx{UC(zYf9>+$rXyBg0W9V?mtG_gaIUFNHp}j&c8?a{`;hkE3ZYr+)&f+8gH3lH&5wNW%ylHRb9Eco zW}6~L)OdCT;EirkBfh?(O{&5c(ERN$81>r^-U{#CpKoZB22vIh%@u|ajNGme58lyv z+o^ElfL&&TUv->#A`)&2#!j^C^jHBb2bt#RBoe-r4=@E@IB32ifF%hec!g5HG=i-N z2{;|BFqgi)AP`d!CEy~{1URs^1SerT0(SA94VKLQP>`h%N)?wBmTb7B`?5CrecC!t zA@ECWFI0-#etNjAZvoBdgyTX?UFh=Cc^g7*{nS8`23=OMi{<)D5*X7ru2%&vPd@{6 z%Y7P(atN6&01QF6Rp7G%YuFnpL?wvk<^cC$6r^@C>y6`J2g8*R#YHb$)W*H1t2l1E zvK|m^F?{;_@TMz3);U3SFZ=N6-y0G6U}^}AA%6AC-QC9s@6gUa1ll)I?EKwCz!RPj z?yiHo$C{n8pRN^`1tsEfXGmAt$StG00009 za7bBm000ie000ie0hKEb8vpKl+SA0KoG`Pu)0^Pyugn10`cYnl=U_d zw2;=I#KDkb{@fkx2e9$jzL%u;V&hxEfxtdPZ#g!v&|Y$Pb{*0NJXu2^H_u6Ee){Iy z*%>jmiFb(T!x}*BtO3%Tv7`tAU=kGu0BY+1SW`mCARw8@19_hf1Cax^!axKe3myo1 zWE^zR0*kAvS}Jfu=MT@iSoxVw=3Ocr^9EXx6Vw8aPF4f5h7vHUv-&KRm^OFU?!xcx~4?H>S{1sV!Jl;L<$3)LE(uL!9Edxm?j(^FQi2@%hUL e{z*6S_IL#L&Y4f8X-H=P0000Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_U|1*s008*dK)|RlXdnRKND#0v5Rj0V zKtMqF`1sh^;P7BL00000000000G3rh9RL6T32;bRa{vGi!vFvd!vV){sAK>D0q99Y zK~zY`?bI=E)G!nWa3^pBTYZkG)G6|%Ty;#z%f^)CNnNX=1PQSe6yMwvmq=Y%+GAwu z*qgxc0V?qYq2U-ixE`+?T_6Tkq_KYviJKR5w~l}zXruK;Z)XPN%vJLJm6Q?20?-XulckCj}2W}%j6Nn;~(meq)w@iSugbh~&QszN847|j{a11<1 peCg#QKv3q(kr~Fa`}(J1>=!GwhPx#Fi=cXMVQc_g8&Hsi-Qml5cX19DN2i4wDviR&5PCl|NsBR#l`>Ti)vB;|K^L$ zyEr&)+Nz&+%u#*c-!e7dsZfPBPpY*x&{XFnE|jk*{w=tGyUtFuh4U zkfU++0HZdMyTl_cwk`pq>&NWF0Y}i09Z$m=tw?jTi0!? z1R>)*fd{kYl@`%T=g~4j2Y3Mx3#1C`c>4gb1*|Sk3ABB+H5(vvL3DxGtKaXn2~qXF zLCy%MVrk%ZUZsEHyg`l;>pM4qxpkmHGF<@*LgmE(GcbF@DS&K0Xxb_-0KJ8dzyNfj zo^85V!v4?$768$q0pD|W5i>C=z`CDv0DZlsOR-{E5sbzFlzI|?b`D=@oSWC9An3ki za(xHDNxokw!ty51m3n|uCG`Fqz$wY*U1+C&=-$}Lq3b!FW+lN$1rl(1%)pmuPt;2XEPhoV*lDZOI-`yqUPXM2i!`l~ShNTI z@p+9WRGeSLBmm;w>_lu^1wrP*H@kk255_lcPwouLm0?vim+qa7e*QIuS|6G++l>44g!XmVgoJA6Ft=8& zgKG$}TfNrA0FDXrdYY0SKT|iRaC3x!$~oDAMBUe!IIxd~p&DVNe8s%}bGeEDu0)zm+{`{}Coti)XW4>?y09WiW-lBv44Yg0z({Ob7|k7kEc(n&iOs zbp(kG=`In1baC-rqeDpLiW!Ccf`e8YI)?m=+a`=#2|gV|-j0?|GFsxix1&c7Qb@l1=0VW@>LdH3-pVz+Ik)tLcP}0?Ds9OQH%! z%X2sMZioJnXZg!cB*}w-f;9woUJivN02?eQ_6tLJI@L!n$Z78L$=xHsegX_Ih$?E) zz7{S-c{gbyBw_?c#hChBNofEe3Jzk@9^*K!7!W|H=LTPU04Q7m)M?wc)sdI(dS3p4 z6`nRoK*E8vylbm!izCbPzzaUIwYY7W?1lkbLrcneiMo*&LFNT~&1_FqT%OyuB_>{v z53Jg5)vS)CaRy?3O;4yQWZ9Z|79b?%tc}&8uvpT#>Z{E;pe4ASZ5KD+_FFGz%F(P! zqjStReLxXF*^9FWfL8PV8C@<8RDFP?n|?7oru{Mi8W~XPQ=ho$fcOlMxNdsH&6ChQ z_JX#3qV9lR^Ee?FnGE(uw&y}`P9k?=3;=R>>IR*(_B8b4o7G7syn&)!LkW>X;k(mn zS%AI0;>HBx`sqSI02}^@lD64M-jzX=%AofRYjE5)7x5l`0`@H&8hUSNbt%W=X8@UL zFCb|b1-0Ms6BXzTfwWyfUR~CQHeLe)HUfvzf5WdvdUOEDj{x>Ddjs%5p8>NXvP&?= zbS#$uy7!}q7=pkm45f2wG={TLfmqYg^|E{e@^DZ>K5gY=mS5uE}^ zJ5{UzApQMJsWYaO&LAtKO{^9fq(5IiQOfSVaKnDI^0u-Ol)|du9x2GN8$y>h03-=Mk=dR~ zz-S%n*o7=&t(w9lGKYTRh9)B-_DBFSYAz*UWiHLor=2;zyCxUrIAMq?Xw$Vmky9`c z)kPwl;?FfM-OR9E=+;+ecm*Iz=ud7PLv^kL7>mc7dJQ0!{D*h}Tn&BA@eluhvcKSF V-Zz>?m7V|q002ovPDHLkV1i5(js*Y! diff --git a/graphics/pokemon/finneon/front.png b/graphics/pokemon/finneon/front.png deleted file mode 100644 index 635dcfc7e99aa3b2930da6db46a9f5a903aa0b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)K)3Hv&Fc1b{S622?-~nA(p7RD;+8-%@EMlzsU%w3#~D5{8`fJfkMxTGC@?ut-v$Z}u*J6#&aF7;>Y>P&wG zV|;iNhnTUObWDOthyiJ;NFZ{B0YHO!u0~S`$$pR*ia!F7I|Q3T2`IN7@S2H8SL6%? zYnbVsACy|((Mz5O0<_+dfIV+|P|=6#L8-S+z~f zT4`EqEky1edEH8j;P4r_56SDs*cSw1rYTSlAR|UF+4U0;EQvcx*$3Dn3y3=|h5!Wa zHskhK1@#_yXZrpjPhtWXQzQ6VPo9Vs%#iRtfz%zb=rABj-hc%7^X5AVuf@~@ewLtk zLM+(>O^u6b^`uZ$bt$giE{e$`i6)uLIpebXt00000 LNkvXXu0mjfn(V-( diff --git a/graphics/pokemon/flaaffy/front.png b/graphics/pokemon/flaaffy/front.png deleted file mode 100644 index 6bb2dc324a7812b07301a045d9643e3495c7925d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)Px#Fi=cXMVQc_y}i}{|Nnz?i{9q;5D*YbN?P7QV*jM1|8sNyy}hIW5K@E1QiH{V z#s4Wmi^l8+L;wH+4M{{nR9J=WmeF?OFbG5~A%rls`~QEtfTcJ|TSshOLwlS)bnY1j zOuHQx1v0%7wCn@o`f>nr2Zaf$E2lo^C?I8*f_`Q90ztw70RMJW z0SxL@;^J~Z3X})|dgm4cfIXvtF@syBR7xNQdlR$gBja6@vhF{fb}A8VO-2 zf;&KKOoE6hxXTMja{#N}jzWp9VsZ;j)9d{&8?g$wAylvM6$WLVv+G&_c$ z03C}A!u48;t}mr=lKg1~%-A5j+NzO%f&Nsz`4Su^X7HIoBRThs;5#%90w5FVX?~$ z8ZFJ}skNbRY{$h3Xcu-$uK<3~+ouAm0_F}AHEOp8I!Iekz~o_*)~sL04wKRIvc-OgM3Pkm~l{sD^?7#ZPbi8TNK002ovPDHLkV1ljMBq;y@ diff --git a/graphics/pokemon/flabebe/front.png b/graphics/pokemon/flabebe/front.png deleted file mode 100644 index 835047c90f34308caf654d24ecd2ae16e076a112..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVTwAs8;M;Tv&`hW)vI5D>vm=V_&adA73B1*qK`*RX_j$00Cl4M@0Xn2lB-L00JCI zL_t(|ob8h_Yui8+$4@Ae2NO92&DN4t<-jHu0hdZ?*I+%<-9&VCHRv1U3j_+@S~?V@ zEJ2$uo3}(;XDNZsQa^!7-<@fRPj~8E=o`d6{eSQM-f7&=E9&7TV0 zvNXg2gi|sYUIN&Ts|Ju5ECJwR$pPP&i2#Y$j&*TtVTS`BU@8IUy!gcVI6SdkA88pt z3xL2%>}5iIz7E?CFb@DNXmrVSdC~yplm;_i8}SFofJrGK?`9lX&=CSNk@%BmUk#{d8^eUaw>TTbh%U*zpR1^sB4bN-xX3 z)QDH^B+b3`=k}BtV>$a0uO?pZF}7|uU>M#lS}@exKrh8$`E7D~oim1O$)k5u6!@Ou z=kUCB%I=E$eFF93fw63yB=H)j!SsHwL9qkY*!vsmcRY970IwAf9l&)Y6o8n4DfvG|eRKRTXjX_|E>Bc<;${bI6w-@PrQ!C2a=qi)^BYBJMM%@pgwz#j z$}XT^^-Dd_G*A7qF28Hbe?C`FbzS~Yo`UHAxUK5CdERP0&dRcG9=CcA^Q=URu3eZE qfzGocHSN|(-E~UB0000Px#Fi=cXMVQc_b6P?F&6NM{q;nt`#iVKg007=fIix{B|8rUZ008*-_y7O^00000 z000000Cvjj#{d8VR7pfZR9J=WmEn>jAqa#6gQ(f}f8T4sF(#`{uJUuk)o$I?+8+&~ z-frLct3mWBfIlW29}=!Dh-~$g4&CeX9>BZ@NS*+wB@e>33DExrpl{TRr{maIF#Qw& zL`%E@pnFq*Nq{&KogXVecKs8el%`4eVWNO-{1fH!q_5KTJytC!24D&UCFHdVzXIT6 z>cRb^RSqb%m|Ufbi}+NdjKuR{^a^Z+braUBs@`ki<2g7bn%5xFBGkZQ$xVN66+Gn7 zuUbHDg)*anrY|Y+poToH2o$9nptSU6U;uB0fE9K=z*g%nfplY`X|(76VUR}qsd zCM%M1um8FOl%;0VtLYm6h_ilFuxJ5?M>V~*AkKB_1cTUrXzn3bvLve5|LSU_S4>2h zU>+(5UT>6D|O1A|{0eYVy#ioSSpuz-9o)N9|5&dg*_ezS*x~?}}QtaVO|= zPIh%`f{3bgk@u)VM>E%s; zo?W-A;b8!cx$dBCRbQld*@kj-e+p(Wf13YKv$pe%Z~TGy2mC!7L{(uCxc~qF07*qo IM6N<$f_3RrbN~PV diff --git a/graphics/pokemon/fletchinder/front.png b/graphics/pokemon/fletchinder/front.png deleted file mode 100644 index 86ff4500f007ba1fe0c8ef6e0549335f17f91ee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)}0SKMx#WTZShfAFDx zvODGdF4kLT8Dlh>_2%Kz%@{c}03lwk7O_s*>X;JjsImoe7abCLlLC&1t4-AD{5I(1 zTHVydLMhHw<#G3v9Qr}4n{r{EQbSv*7x?}(7kupZdY|+u!C;^}JVS4y z__0!xF=Dg-1rarXVS9cse4^B7G?Iv~d%fVZCLrI1;en$5WHOB<(hdy6Ff2{fXiD|1 zfhbYv0&N1sbX}L^A@x2ZgZUNv@f+~;9mpjKTwAwm;Ah zwQ3TG2ykvz0C`I(!2}#w#3w-ul){0TvjbQ~rpy2-U7d1(td(nPqMMVZth=t{WvXKDPgC{Q{?^{{roy*`WXc002ovPDHLkV1mAUECK)k diff --git a/graphics/pokemon/fletchling/front.png b/graphics/pokemon/fletchling/front.png deleted file mode 100644 index 53713836d0348d40d31c3cdc1d42ead807b0bf71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmV;Y0a*TtP)FxYYCyF%=_44YfSQ9v{Vn}n3kUf{Jw z>M$LPeL81B#tOr^N_?Am<#EXh2Um-`Mkq2yIG>8)EWan=GL!O!=%MRVZd0haYnoY5k&9-p)S--wL(_H%}DQLZ&2y zOb#etMIvRbb@jmI0H=DjlDb~&^&>CDnlQ1c-Y!@HDX+}Zm=1wTRL0b?sXLYeV?)$o z=h8GrcMQ$EojE`b+rKPe4(vaDVXt!^{f*in*bb3PKoxrYD*SK|-9pbF@(uukV?HxH R6tn;U002ovPDHLkV1htfwAcUu diff --git a/graphics/pokemon/floatzel/front.png b/graphics/pokemon/floatzel/front.png deleted file mode 100644 index 6ff6ec1362133fd969fdb0bdf502a676af8c6ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmV-v1D5=WP)sP$?3!vUf+Sgd#7MN;~1LqrJcv={p<487Jw|-jFDM zzkC1xd-rnIw12)yJ}w2o=I7AexL86ME_6Si1MEf@i-A3I$j{sTrNG+|UhLqw<;>>(VhIcZ5iKu{ z>wqr%&nJi{*dt(C+q`ZPVQ|j31#idkw_1YHXe>Ft^YxfH3jl2!k!#w3?}=kJC?t4Q zgXDc94z>x{%uVWOs-t!N6LHKhPeeyJGYObD!jS?DQ^bRI+&L1HZXC}!r+QH-b}dVO zO~OHZ*%A1OJc2EOv0@?3(ql1*uMiJo2~hY(&5)#7@`LQ3BAyWtP=cFGEn`T;HFb~x zsldQ~pCx_;NK%bU;E-wvn2SlG0&A({je868fH5yi(p2@B{-!=k;7lqo?ho@v4?vdr z5-2US8`PNWT9HWThf#W*GDq%7lJAcMRb&)h$UQo;@+4KukODG+Y*PV{i3&ghlt2Nf zxpZWv3YE%;YT8OT4U{(OS5Q3}cX+-l=4Dr6qhSm|{ zs4@{o^aW8K@|kRPLw_yAI!@Gqh?>RUMxMpg*BK=c>Og3_k3ck=wixS&b_M7Gf&^f5 z9?j`IJpfx#khh;*0Np5>&2r%RmI^e%rko@L8&MQZSswuWDj@fh4Bapb0r?=0(>=Hm z1*8BK1#KV7Wie;!1TH}Jw%flgfjh=}RHo}z6g1-v+`WTw<{{FwHR^UJ|WEuiz0005| zNklBjU5C`yAL@~xo6#NO)egMH!slnD@B*>b@fi77JhLWjZuyzd+bnH@V z)fCYoLzg0J(inL%9#ZK(LcT-qy~J5`_uNvdNpL^i```Ilh`)Pm+gyL;IA(F~IL_HA z@Wyn$5vcPO2;Bt>90YH}cgsr_%&{H@%S*C{1|dGd;x*ml96ui`AQ+&Es>R&4Bpm{a z7wZtaaNEQdlXR_`&|&D7kMd{cIzM^&~V%REN}4!X-hv3QRyuqE!%?&X^>L z>JX3F5J_?ozfa>i2k?w24x|^_Oa?Lh7J2&jlJu@cmZ#o^ok4>yKMRjdfMB|PFo9v= z?;i4dGstrI!Gqfl5ZtpNKja8}Xl-)HQMvf^1mKRUmlYh2fV%W00304Az%L&T#GM{t zy_1g>z}|<~F z-S!BGDG)%})Gt%_BBZV*i|=*6@{&>Axq`d!e*hv4a<+~c72q3aAhLe|IHd;6-}-3? z1Yg+{8VonN8DvG4af3dCTNYTVHEzp6Xq0009% zNklpXhjSLX;5lCM2R$bRKD*;M-# zLRd*>q+0*9k*FGMucYhxvugdcwn@M+^^$&aqQ5f?qgL4<@IhSa`svB>7XXa9vj#9O zE=PL(y=xm|0M3g2J)PV7=;*ob+734OcTr;NR^y{YftfYHGrbLd$Ss2JRv-F!uX zYK@g?HD{rn6MA467ocz1AYjxE%hbquXf`38kLnuqtwEp^Oxhvs#wwt^>Ainrnjz#= zIOt9u5RUSvvNyZEy9@8-%>NC8rfCKffgbc(-}igdV9ey~E;neDM?k`Sea{caFok{| z;4xs!1~jBU{R>~L+*txtBmhN#N%@nFV2*~&hTtv$(rK}zM$ljGfr=DpH)M)9og#oi zU~&{a;DGa-gK!o}+h;_|01lGhWCA?>b56*2Sl=YP!mGI<#u=4&4cmh8t1t{=Ag=%d z-c(uWtM0?e1SQ&^ml-f3?fVKV>;;nnO3)k-p8E0U$Q_3Bg@PNNwrE z>x%8jJm1oXlFbLx+}?(2MsjCgi*TL01Rk34Tf1FgPIm$nfn6RHn!}v{{s+n;@E;B4 V+e@1&1{weW002ovPDHLkV1jNAtK0wp diff --git a/graphics/pokemon/flygon/front.png b/graphics/pokemon/flygon/front.png deleted file mode 100644 index 64b9467a5d940deca28502570c1604415c535f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmV;m14{gfP)8|FHM3G2@o8yq)_4bgfmTrMk2(*Jl zE)hyW68ey2>Cn(Aa6@uD>fS9hQwoPEb`jD3e&?OuCDC^1Z+PCl@8|t~-}mn%Xr;;>FAtDp>q$JVQl>AA#NJ9~fiFzzDBVpW$D6*7H$TFHp19Ds6DkkHg zJ0>EI&#kTs0@5NMOI0W1usS^H+7?*|99Pg(_}|S64HP6bT)TQVjZ+sR96&IkJs6pnvI&w=LEH zpwm6}S0&e84UwI-Sc@IA0t@&OCHGZ)w?ete8aoY61Hg<62-_W!@378}HE8(>@xr^s zbejknt4Ggz=Be-Ui&vg$0;y)YE4dX)pUK5XUT=R4Ktyv5)?kb95qQ$^X7SJmgyb9^ zr3?V;?p#E9Edb;lKtiC=M*X*3^euKMzU~7S+GKDY4FDt>vm78UcNxztT+i7TQE#D~ zh;+NSpTDGqF6Wtee9g8m0)W^=6J~1wSBz(*qC97R3>+DOn-*MvJRWhLhDr~br~U+l zRoU~>4R&IdOJQy^gufl~l(=$HZtgz^ByZs|nG^A;TTLI+6m&JVv(=%ug}rIY>_ z1fFu62_gO!Xr|EXWT1x|ooh}6M7X|0z-B@em^mFtbJ+j1H3f*I+-5=uluQT4)W63c X!$8{N`wcQ&00000NkvXXu0mjfBVn~d diff --git a/graphics/pokemon/foongus/front.png b/graphics/pokemon/foongus/front.png deleted file mode 100644 index 0d584f1da7cfe669405c4f1cc6c5a5d70e8ee044..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389 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 diff --git a/graphics/pokemon/frogadier/front.png b/graphics/pokemon/frogadier/front.png deleted file mode 100644 index e99089269e5be79871b6d1537f59659df0108738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0!00ZP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_5Fj`Z5D*ABZ~$PSFsR^2NJub%p!oRs zAXsqt=xD&ez>tuT000000000006G#z>%32;bRa{vGi!vFvd!vV){sAK>D0u)I^ zK~zY`?Ub==+dve?r5ij~u}lhC)Rz`Hah6EhI@$M1z?%(6$W}TOgD1O~+Z!+knwqKV z=F+L7C?Rm3JY=c=sJ@f!fRwwvL+%Ehc)$0(@9rJvy^Q~G_)+x#cpZ2&(&j2r@- z0zrsr;<AT+?uHv*PcBFr)rH$PT9QEF)e0?e@Ze!fZxuoh`^#9{aRSDHMi+yeMi0f(>y z^ry%wfcW!wJH60aPrh0JQo!NrYSz>GUa6)8yM2FaBv8(^UQZwLXTYBdxDxZ;8sN=| zj=Wag>8UBP5I_ZDxfs#Co0N44pmQDr8Pw&1mZRXL4tQMvlWqWj3Ta&4t}?;(Ujj%D zViET11XKAVo#DMEe{B1>0mOboBA-$hGytt(yWM1%MGc!11Dp=b&&75_?S&fP%Nh{* zS*oKt07~Vhtb`eOELGD65cPB!%R}YKQa4LP3}Pw2?15fck9(atDGMRx(T-rves#vo z9O1P*p4lIO&iJe--U&IA(n|P(;>Dem$C3yqP=N8d5Ecpl`pksMTr8=THVb#K+ZT%+ zK(XH!qY{=!q5}mSfFrP2=#zzgUM%O&;~7t$00t5oHG)f;a1efrfP-4RrC!r~N}^sj h6@bz7UWRjc-ana2w7;Yz%SiwL002ovPDHLkV1hO-E7|}6 diff --git a/graphics/pokemon/froslass/front.png b/graphics/pokemon/froslass/front.png deleted file mode 100644 index 28597b4285f6d5f10ec8dc1a0f27a888f0c89ba0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 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 diff --git a/graphics/pokemon/furfrou/heart_trim/front.png b/graphics/pokemon/furfrou/heart_trim/front.png deleted file mode 100644 index 17b2f3dbb6a62d5fd646114bbf3bdc790661b38d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 785 zcmV+s1Md8ZP)Hq)$C#6EE00009 za7bBm000ie000ie0hKEb8vp76U>RKii+3GZalZ)px&sO4`IQ~Gb>joO7lWb?CT}^< ze1LuIh2V*IlPs<_l}m9O`N5_+G@l3v;Vn@d8l_t7MS2k^1h@ea3*oC#)JipgKNm&n z1#F|5_P9l`jlCe)Ykhw_7MMY#1gbByY6xri_4{ujvaN`5moxQvP~Xl=ggL z=rIlopGuvjxc^~kNsARapoV~f#JC~g8gVxUL;!Zrprm*+1V&_BS|ePe*msP#!5G|N z6>;l;#x;CQ%$_=sx_41(Jxp*0@*a#DDvgL7_|R3?|KaKL46G9BMbQW3 z7?|~nJCON-G&ocz5JvceU<7C~9C)1v3qHRBL>BU7KDlhb%~THnwtP7P%#97uyU4)q z_+osObb#Z55t%hKAme*t(T|=G(gEDZ5X1@H9tj->+z5eDBf`|pT?cj^5JY%E^`I*; z25e1(+3jIX#U=n_F^#4)_-1)Jond-H0FhxI%(g!_!xTX2p~wuK8{Z|s3aXF)^8dLR z0t1*GXuz!X0&DOOkFU7^s)rmw&Tu1GV;Z07CqU2!tokXda++eMbq&=+nU}h5bv*@D zt?RvdB%r5r;}U3%_d=aB2U;(vRa3VZ-A`th8maXY-U=E)I~{JC-jXV)Mnl;GOlmNE z0r~)d!1bY=04YuT)!IAEfE`CYE`eX?E)8_r(@GZr==7uwr!@ZWU$XuI^-);k_Oe!O P00000NkvXXu0mjfOeIu! diff --git a/graphics/pokemon/furfrou/kabuki_trim/front.png b/graphics/pokemon/furfrou/kabuki_trim/front.png deleted file mode 100644 index c1efac1c0827c4ecaf699609c110eff56dceb06a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmV+u1MK{XP)cnFvnz)pX_ZT%gLSa}Z~vLyosr}G z&zLP1i#M<7OV0Uf@ru6Q62T{lKiQBaXRucvqko!rC8Rs7Eu%5IaAdSlg zCM}jcMTrNj_fxE@DUqhJhuQ$ z5Kw;ZGBXQsAmH}&s{^E@tC#&M<(&}n5wY8azFOJ0kXv^{uN&_LsLLKOuc+7P^(WIU zlCHJJ-bonXBjT|GC_~w=a{iO%>f-dc@w#)+(JPYqs=rGn z?zl)eKYE-#6IV(p=${jNqN9f6^~N*PH_{!}J_+#NK5^fC11^U;rSO6Ct@&A}j{vS! zw*xE_9(F*NVH)tZlK=#yfze%hf-&KQ{2Z$ZfC;m9=;z6x6_(CC5Dd5L~I;VX4}s$_A(+kh;&J;-HFy%^?diMF7k4G_zP_ zv`p$oVk(W41)x>AG_AT*QIU>vPzhPlC_OHb+7Ue3C8(k(v7v1!MJYx(k~UJN-2;de zzzAS%`>bLB0+JS5qK80|JS!4nasbfuFan+ZxBxInP(T0x00000=vonV00009 za7bBm000ie000ie0hKEb8vp{eumfbw5*q@1*&NM#9!Al5zcNa~JJ z^p;~1$Fs3`oN&Gv5ivI-EGE1k=OK_B0j~lRWPEIjY4MaH02)y|18LK$O`C zUJqWg= zc#_&yO%3Z|j&!{ta8{X$tLc9? zK9#0>&n~tGD7We(dzZ=^D(kK33NSmbdU#H03KsOWaw8;nPgK`rI*s}N-X0000BMsjp(Lm&L^QeUc@DjDgBAVEAh^0f=aor^Is|opdaua1gX}nbxr}MgU&y&QA`D zXpFeZz`5?>>G7m*t&;*^wB7e#Kk)fP09CZzx1Zg;b7BQS@bK9Afe21cpj_JnoyhY& zL7n9vK(H_^fUu2k!0yiCK3~Sn*wywgfU-A`=Mvx>-*Wvt^LAXL#bLgH(6`4h*TUSr z1GEN@LEQsiMCCy?Ea4TnNw9ebzJ?L7%-5KY%VHLNM1zgM9rFea$z_4g9|Lt&1Nhu! zf;b2*o|R^3rJDCPH?EnsCAKoxaI><*@NNt0F|M7 z?ht*&vAw`caDauR9$z@+>Jwu zw!?!|4Qo_wdoENz;U6RD;Ue&NAI81vA-IHb7cI{F3Hkqj8NUI|!55|rG{q$V0000< KMNUMnLSTXokxQ5W diff --git a/graphics/pokemon/furfrou/pharaoh_trim/front.png b/graphics/pokemon/furfrou/pharaoh_trim/front.png deleted file mode 100644 index 987c7a7a448e3a59738dfe37a2307d83fd5ba396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 742 zcmV*v!$jprDv~cVQnsU?G3R5D*X-T8S87c>n+ZxBxInP(T0x00000e@2@x00009 za7bBm000ie000ie0hKEb8vpwF2#~BMgv5P}8bsv9 z@6dKI02`QgQ%Oq&pO-01x(k7JrgQM$vzL zCbQY>B1jlxH{tT;J=IxShU!zfGk^twkg~>>u~is|>JIT!2*i>AV+H0x(6t2E9R@-#@-p1h_Y4tU!PHt_kn~OgCrX=~M8fqj7-fyq5~H?#~81wnyd2`ucly_Bs3uDFmNS*nk(p!0xK>wc28EVdqy zybe(#Zp-rs+yNc_1=P+6aSzr*$e23N2iE%MuvMZsA0etAS5hWv)-TU=Bi+WTTLM=Z zt)IC8gpj2Rkk)1=3)(QcC9dT|cbUEo+!C~3RAN^g zmW=yAq%2Ut75AS%H8TKs81Pv_9Yu$a^UO2G6d%hZ%PC8txZ5v1z*3lPG#%@9oCTQy zD|2V&*m~x%rDz|_62&&A2ebrIlTKxdXQMGFLc8PkQ15YHj6={-z=J*YF(Mtk(XHO- z8mXhCETKk#5s2vqLIFUa(V$7YplOcyp!J^K0ARE`1VCSaL3{6PDwHQZUWdNm{rR7s YKNaRAtJsF5VE_OC07*qoM6N<$f=)+8zW@LL diff --git a/graphics/pokemon/furfrou/star_trim/front.png b/graphics/pokemon/furfrou/star_trim/front.png deleted file mode 100644 index a953143214b1aaeedefef69ed84b92a9415ed82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmV+x1L^#UP)*bop9prDv~cVQ-1W`fr3NrssiV0cJSK)3)f|NsB#>goUh00000GdSvK00009 za7bBm000ie000ie0hKEb8vpv2V9qC#s0)UV*8$**s0#qW zmtUd3`0+0(uSDk)<*ifk8v^$;*pS}Vxe3_xrjBaKz8XJc8(O_bPa z{Z1>$m0U%W>`n(dKTAo4M3hK`x;8K8b0G^UWz_~4y>Af$Yeh(jX9K!X2^CzwS?sYQ+@bJA3 z=0v}#w*K-6`fG}I}HJ< zD8QaK7;YRuQ^bLUeZlo033D+3;0oZFDJ0gpZ)IMZ zx-s=FplVYu_1*)f>`lcbfH7#gI%ffBqCl+=bpzG6PCo?0Ss#7R0%%MG5U%tY(3Mm+ zel&YI7^-J>L;yk^${Rok+iactiU_DU=za>k&O;b#=}0Mq(B5HyW4agO@Be501*hgC UD%79(4*&oF07*qoM6N<$g4O9(kpKVy diff --git a/graphics/pokemon/furret/front.png b/graphics/pokemon/furret/front.png deleted file mode 100644 index 4d7361e08b3487221742f694e1f356894eb4e869..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 658 zcmV;D0&V??P)Px#Fi=cXMVQc_QYj$j#Y%fYIUpb@#hgL^?v$KjO00t^|Nq7R|NnDybDRJG|CC~Q zKsW#Z0QonvFaQ7o5J^NqR9J=WmfLQ_APk0MQ(>v<YX zKXJVPTxiBI{Q;vMqWZ)1sL9i0MD+({s-+W?M1%n(vLa_0;Tr@NS<&B>5U&B>sd~>h z0|cwUHv=G3%|Z}B5&}TB945^|EC!ht9uFg6Duj&-FqB&TrVr8wQo<6%4xm0CL_L9; z1Nyd00;t=vd``eHq)$07*qoM6N<$f`pq7pa1{> diff --git a/graphics/pokemon/gabite/front.png b/graphics/pokemon/gabite/front.png deleted file mode 100644 index 3495a5f183fe837246694cd5b75e17596fe537d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*VdP)5_P0H`oX`1ttPSSWCKfWXMm(PY1k0008* zNkl8*3!JWM$LQ;giCwGtt0ojluWxUcN3Y&IMiy`J$ znLi-Zm(3!B%V+Pi>dE?0K;*Yu&$WPsb5jI(ywzGv0iJ6S zQ8WT7QA6|<0L?65(zi$zkXo2?)CV~Q)&`f-=vkPiEDUpi=}ss>2n4PKyke&&`)0b3wdT%vH9xbCmE&!`4$vlp*6c6*|e;tbqY~MZ#w!yfB^vc9#sgOjyARk5Cjx^ zqz^s05p7pP1AVv0D#L;#f9UgCKa}jDQn|wbioRWt%ST zljbDv2Enobny7Qdm}#l~(@o092Q)HH!&(N&dbgKA3dA1GRM6N2dSMngzXE^*-{l}U zmn;idk5XVuV7;sIlg^*{(>Hy57%veJRdME02rd?~0+$v6Ey`~r&h+c_QufyZoIkG> zd^xMGq*+UWm3g7@tpx5cQ~LhX#!6j#cVzmOPDon19|T!Q3||Y~)hW9mV6ZlH*Yj8% z(hv|uz&tx1|5#Rm7w+%7Zeov)w@qp?Pe?hohqCtck!~ZydNl0E-J1XpI(F|SiTAq~ szf9e~a16+sDkyib!Y;D$m-N5HZ@E75g(0hmjQ{`u07*qoM6N<$f+iM+8UO$Q diff --git a/graphics/pokemon/gallade/front.png b/graphics/pokemon/gallade/front.png deleted file mode 100644 index 93f2001594b438eb847c4eb390adb631b65c806e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmVFhrT$ zW=j`e*kGwITPGJw2(ikf*5<$DUauZw{9PJ!c>1)#!uAd48jDyX8ux(Xb-W?(U2MsQtw z&zu7RcJXLLnP&zSMyt@kb>{CGb4Wl&Ck#i|46ua#QC|XT0dfyjOXsA*G>*$2h_TlH**wiKVMxG96?@LE; zQ=1i9257i%+d}Y(0bmm-NMmpiN5%{iNOAv7Yi3G-&l`2>wCs>l!Gmx44v;zqacV`N zDvu4NeXnd36<(LD0G4qUo<2vUO^t&cNxEgpx`q|rI-5$rL z0>K7Iy9|=pahz!~1*mxj5Qs~;OOwurse1G3AQ0}6-R|F3Twe*nfH=aYM$q&ffq002ovPDHLkV1i2pS^59~ diff --git a/graphics/pokemon/galvantula/front.png b/graphics/pokemon/galvantula/front.png deleted file mode 100644 index 980ca86f9fa5ad20203bf364c96be5a5b932adb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 759 zcmV5Q}D`Xv=(D-N-^ z6?IakQlU!8h{{l9Waz)uch2u%8i|>=+27B7-@Etjj*zE#RM2HW`Pnj{v<#T$FpB|u zEUefC@=B@fSiAoN?6PC$fTp|(0H^FYxlpUF6#)eG7mbDjZ07->5kk^9AT@L{-GUsb z10Olvd{r;DTLQ(3M$R%Ja&$;VoF` z5XLn4$j%@h><=ojK`EPa=m5NBxCI9MBEESI9$l!h1EJCZ+JZwh0ZvN`B_#GWtjLbeceYUG}$siJswY8~Z-C z1Aq0>X#yeK%l`GB?}Hoj*1Fa3)G;BN%^#BlDn-A~1}bh32<`*as&od3G-e|4dmnXD z&pRr{b*d5s51?imZ-Ng8!@)p|Kd;?M3938s&N>O&rMzu;u>6UIs+g%`$cP5*VcWv6 znQ>7cP28_@ToZ9J0?;$T&oBOXpllQEc;qSo(s5GmZB8amao4UptS%jHD~s67_4f2= zSWYLOkyaNz=+3o-U002ovPDHLkV1iXXT<`z@ diff --git a/graphics/pokemon/garbodor/front.png b/graphics/pokemon/garbodor/front.png deleted file mode 100644 index 959931034f843f8eeec976f0f9394ff78f9a9365..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1047 zcmV+y1nB#TP)kxVX4*aB%qe_@Ibzly4TU000A` zNklt-P=({q4sy0_uWUBK=Q04k|1aPI+zBbX#|VS~G4!i3?df2;up&>M8_17M<~ zd}jB?BdFgcY8XSuqFobu;~#ba3=F(C1h5*wf!)1pfB^Xu9b-0b?@7b<<|>Fz5#V#^ zPk3b~%5Rj4RLDf#k@Gi)d?!f5kdacVr4~Y}fLA|L35}Ofe}-Qe1>E{f&*H1hLWqD0 zPDJkDi)+Jh*wu=#@NyXnMUfQzx7&Z4P>nTkv0eS~X{o}G%S8d$tZT4|=}7DH<-7IA z8}-}vrU0<^pO6FFGa-b!czILw!I}W=mGS75sf%|D4Q&4^0tX3D3eQxy{QYwCL1C=w zluD}CL%djc-F!kd!X&rbC1p`a*}Go9njP~;y2P@To2X_DaUI9~*`Xx^6#88OGSUCq8&s0Jh~pKXa!dJm z$J9wF&=`&q6KoYXIJa6k(ABOMkOP~Q$@zDvl*%UnFj{|qfiJ_&dd1}B63Wy90Q(tQ z2~cR;JzkLkXut-0A3dNIynwvvYGp%`jD#+DIq)>Cm5H__g^L*Nry`QG+^$ z03^%O^g)KAzS*p)n$I8u&LK?`)0LrXnDKiYH0%I9v;v6aq6w)9bmb}6s9kq35jMi9 z(hBx7ud>Hy$F;wg6r!kE-Suj zh~k)IjZ|I6Z#q518ggrXQY3^x)gI66;J@#q^8&G_WdtRR#YGfF=krW&>QjPmOIg)GM8w RciI2|002ovPDHLkV1ghR^N;`l diff --git a/graphics/pokemon/garchomp/front.png b/graphics/pokemon/garchomp/front.png deleted file mode 100644 index e84e0270ff8000ef2b083ef22a3742da60323484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmV+b1poVqP)1gh5XbjeDb_ZKWzo8cD1s8&TdlPDs4X5K(m{PW7)MbGTL_MVf(R+O z92AjgOoKp?0tq|;A4M8hr=-n05G6_j4YHZtbDXu$FpBK>=6C;@otc{>WYhvq{$8hvOkFC0Ais5lF5LKmH|xw$X3xB()+&e2^ zZ8zo|5(jj$&4woIWe3)ao|U-ZXV|D1+m$RjAlIg$S!Uq)clz7`!T=8Vpq(t+r9y(v z0nP}il>kNHvfnHZDId6w`>U<^Wiz-G{FVJ!l<8AWq(JO&s$!8pupOU6+Y&B%=yW5}ziE&;Z~ za)@W6Xjx|V0UraJc)tZ6MNtBoOzch=2ePM|xFVwa7Qh$|2;9O7Tna4P!?VB&B=BJa z1YSiM8D0Stiw)eZDW2OHCP9w}xKyQtIDz=U#z4S+jR7&p#74q%n2=spLSl~8J^n!cd@$G%(mV4xp~f z6pw);7fU0wQha_;OV?|~>+aJ&xiXPL;p%IR0+uh=C3?A1T3rHD7NFX#*tA?P_$L&< z1gHaexr5WTTQFK6G~CLmQy3`LQZ!V+^ja uv!5+YdNo}Ei}~Vzfj4Yx;>*pmf%`8$rf!+l!^W%t0000h*C`bSR000002`OoW0007S zNklB^aB;qXjj|^piotZ~1~Xpu@-;_j%%KdH@)BKId~s17wFjPh)4;4!VPp zcX_kU5*=7vjJ$WZYiOYZ-GKIP_nEfE!U^b`o04l=VBe>&zVLhPF0k!bugi31=>VEr zmYrM^SJMF^=63JHy#XN1mcM3}{x;E!^ml|Z?K*n=y(ySs{l({>e^!=$0swbEY^L2L z)Ze?+5Y25P=ppP9-FoN!H|IOt3DpQ<4Ie82n6?Q*2z92*LQKd&JbgWcLNQzv@-Gm6 z^Obf2i%uBA>lD?(X?zuM0Sv;!8VF&ZpT|O7K)9~~h{p55avk$M|9BKF2igE_g}0oi zCJ_D?tT{LJz?lGs2%Lrhw)%+hlK}id4{{0gQ-oIvq#A)Uq5%Aaw1cWw!fM5NS;lQ7 zEPC?)zh+QX96xIm8-%qe#UsUH1xJS-I1d7~anD*#h0!L&|of~pJeRYW9eyk`~V6Y)L;XfG@qGw7fJNKM=FTl^1C Wnjanq;+Sjz0000Px#Fi=cXMVQc_)vV3El(dUtgE=WV5D*Y^N@|N@gK$V_|NsBADG=ULInb!U*x1;# zDG=ULISm-5lmGw$*GWV{R9J=WmD_TIFbqVIEs>}f`u~4hNtTVB1VPI5jmarjC$O&N%@*WC;PqtG@D2^;k;;X#PRZy*T1WByvC+^Y7Mg z?s=ZEF;WA>Ls|Ve-&9H{h`JlEr}7DaH%8|1ptN=hwQv)3X2!X@_ji3O#zNajoDL%_| zQWJ^A0Sw|Nt^snL#O=F-c8F?dkpc9V?P5;xAU6O?4PLmmP%eSYUm^tc8z9-nHGtLt zb}0B+9d)qGiMp(hpgpulsRDLhZ#v|u60mF{5`OVF9SWeg*T1X;TE2Oad*iYYvIF*C zuqA?wBT4DYk4h-H9tQ_r(Ctu`y0M*S^+DYCJEENBL~Hj__zXQGhPTS$d#{8i|0%%q nuDuYZ$?a!!)_>{JrNjCKwIUDk*bXW|00000NkvXXu0mjfq(}>t diff --git a/graphics/pokemon/gastrodon/east_sea/front.png b/graphics/pokemon/gastrodon/east_sea/front.png deleted file mode 100644 index ca68f56d3a0b65dc0fd43276966901c84ff05e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)u zIwlYh5I>VeGiWb!x_&V+DWH%z_~39*NH}w1V*mgDXn3e-u=rR|c&Io~CUrX30006A zNklfCB%1Zc@125sBonWBXkK}=tBS2e? z#9U=3minibpw8=6y>@1RNXhwZ;&~Mqo^pk5gt3$z70ck*3P_nK+2J)(tVY!O`4SOd zgGvzZ800`#$`n-`B^cWr%v&(QEuvIbEo!F*=+9R`1 diff --git a/graphics/pokemon/gastrodon/front.png b/graphics/pokemon/gastrodon/front.png deleted file mode 100644 index b28352aed30e883bca01d2f6ac8210dda9fcd714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)Wq_}FkzNH}m{VEFj>s9=!zh`?w#P^dUid_`rV0005; zNkl&up~VDCl@JwxX^L+PjRatfVgllDDY4qus|UA`1o*eZ~y=R#Ey}Q0008V zNkl9v~~73wPY=DAF(^t%kytbhlw9rGwQ|&k;;pCXSK%@$?_7NHJY2RNE0X*_{ zKdzGK@^TJX?)3g8J%9b?^3@D*z5^~A=Bul>k)Cbs6rvzvelY`_4#RLGfZ~#B#SyU@ zre#rCswiqm#;2oxog-?df~u%xirEf>=!iyu86wGr;SM#Tt3ZfQPYnZrV$9Ly2nDra z8ID+Vu(=_hNvi;myu<=2gbK$}f()WdTqNr=_!XqkqBpKCsX@b5^q^T-Naei#AaSgg zws4>?oP?+K?N_4Q&e_Vyo3#G;!x7*Fr2Cw&5b5^r&H|ckn{*Ph*e^0I326Q6+jo%N z^({C^Y_$)3veH{~_eH8VXFW7TiVpg8>&hDc_}v-1+)zVJNe6w(KI60B?7P=V4XnV? zL53vZ-#@+17RqM0ZZp|!(8y8d95mJE@7jXuU=l(wqtaRiX_V|bkAM`c!A^U>7;zl7 zp`IH=@d6+i$q)sA!k5ry9Rjy0)u9Px#Fi=cXMVQc_T1uR>i@gvK5R`MYN-0WvVx<3CTK|-ky{x_e_Wx>Pd*0RFs1OiH zC`bSR0A2_E8UO$SJV``BR9J=Wmf?2fAP9wnK$6Mq`#C;%c)M9>33R7kVt%s`aCL)LcgdyWe{ZNFKFX`_-pb%I_pK6V)9~dxz4oys# z$odf=2$Y@Jmor2^1T3CA-RO0R3V^$ST=SM-23&~LBVY=^g8@Xk0Tgo&05t%*JrV6c z+#on%e#A((1{{Ex*O}V3w0Ro>eFkQZ{B_lVEMo5VJzAFIC!Wwz*b|hz;3fM85 z0Nw(?m4&CCVy`m^U~|HL>J6}VTS^HiW>w~sfXymkYXcF_9mNVzv)ezX0rRT@VE0r5 zjCHT&$58-`gHugL!s|pZ^ZUs9HD>VGh!&RWc(aEj4*<*o>~L3+>g?n7$Mn+xOZGOM zf4q_E8O#8PkJEw|1ZDw#s<8v2o|S~;h_e3(Auc&ZydIh0~neJOE{Fr!O|d1t(UZkOIFkwTLX6R&)m}3XO6+} zBk}`)7mwvds8PN3=PsIl#AEZsUQ|;KAioXkv1NbH0PJAJrrtcSUu@Px#Fi=cXMVQc_YHCtJIWfi6thBV8oRotQ5D?AY&Hw-ZI4C%X5D@5qcmMzZ00000 z000000FJ!r;{X5wd`Uz>R9J=Wl5LNKFbISf3h4j;#m7MFOY519ez;sxvdJ3lJRKN5 zpINhJ&HAGvB7P+=BIP-Oit9z*07U2o!LPR@A zJiLYD7Q6!#9-!|5jDUKCGh4(b&S_u#SopTBvgE+Z7=EdcKIb zrsZ*2G@hHZ)HvLv3=x3Pve5*@plC5d3bxp~#>d*p1ptUobt#?`ghs37#cKkvgSC}W z-v$>;npSMz03zCSV}v~+)i~GmopJkBpLpD40b@>G`@a!(bl3SEBB!Fyn+a diff --git a/graphics/pokemon/gible/front.png b/graphics/pokemon/gible/front.png deleted file mode 100644 index d3d5b48739a328bb39c6034ac93c25ba00106ccb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmV-+0*U>JP)`6pHR7i>KR545BKos5qx4%rrV;!4|PE5ULL3$ZYj{RjtIZhphPnXH1zBzs!>Re|^M zeeZj3URtepyb<2KI(%rXvuF;%2M8JsqGkeH1!%PJjR31>Sb;#)6N~^L))K5hh_c=x znnU<6hbDp*Ad9ZMynsGf;F`PsZEv+8gwk`Fa3~yTP#k2H!2o6s!N&xknp8kAa}Y_A zI2I~Uek}w5h#*^~jWP5rAygb-CE1rP|7F-VO1}dz7$PU9B<*@pDT+cOd^sG(%MpZs zPPec$FAvrC4)lK?$7YnN0w3d2kJy6{)_*`BQ7Y=Sv=JtVV4(+xikH%SctBu9RStqOzm^T_< zd5ikac%-8G^4Q5JyE;15n(CNVauPmK3pW$3(GnbwKej#U=>w%mtAn78ZfDuG*7x@` zc;Rqhusy!s(R%u~LxXY)a0mzpm@qKlFfbq}Kqxq9Kv0ONfEd`gSQr=}fPjEVNJszx000002@_&>0009h zNkl^%(B6>Eb^=fMD&A-D;c_Kt&* zE^@8QhNamFkO5qzS#liQtaF_JH0%_Z0N9HGpt2&*r}gRth||2V#_9n;voaM${iYfO z$xo@MqaO!>n|w!SwS4nh`w2O=+3xi>boS{F)30gFN5>NC(n~t4zAva803@7-!d7zx z4Wq~A2(wV~$@Gh4IRHG(DdWo!ft1GpOXfbypo#&a<6u(r+YFX41iTMc^IKj3tRXxG zMjzAlJYFw5Ai9I@?E3aVoi$M71W-1DIIqTpZN_o*6+Yc_o%$9Iz^3*bmgB=eXZjj? zPzj>)7mnHjfkRLc3H^BwRyHI`yl~_WsB}z4D3xArK;UTV(=8yB>C}_H6zX~dDg?|_-g|ef!l*;0L9C%rd`-pU;h4E3%D^R2yrW}TCgsv$7yZr7Cf2-0F{@&8uK%P zw!}-^Jj)T_(X{rnM_erx7U!6I9eCF6E>=8#A#Q@@k8c6)Ho(W5W$f-jJ4V0}z;j#O z-i8R29%CK1lTZ3Za6;bp8Dn13ffPZ3y(fnE@eliyT1IKufwGAa)Ho;S81Dht*V>~= zfIyywXGL8++;>sZ&wzvCMIdmqom?jQSz{k?Tl#o6Km!HS2@l##$qOpr(j0;)UNOAd z$qqEQ=uKvD)o_=4jqCyO{8V-zH~^V1Wwv>NnA+kQ_FbUucD$27VkJi3WZOPX;+1-?x7NmVHxRDc?<#00000NkvXXu0mjfqH~)A diff --git a/graphics/pokemon/girafarig/front.png b/graphics/pokemon/girafarig/front.png deleted file mode 100644 index 2a43c76e5d49a97cf97ae7ff9fff4acdc777c20d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 833 zcmV-H1HSx;P)#I5?PiK+upl_{d<$XpopVSV%ZH5D*ZMcxYfyP>66?LSa_&00009 za7bBm000ie000ie0hKEb8vp3u^f1rbRovIv6h#;_@Yde|=B8fa$0o0#nMENF3N z^Ra1XCiq|uoB8d$_hx4|2n{1W8mgExu0}%{x^W{K%2+g3qM=T)dJoO7&Pah4Sq(E5 z_#d$HP@hp_F89DN^y|6Dig^vM-8OC-*WiUhXjnH`WB@i4OXMSvh1z=sc*O5_vTrR{ z0p=LEd*@5dQ_Q1z26}qo!o1^5UmY68r^8aE5&zO6q<;}K8L%cI84@6N40I#oeTIs) z9WQY5rusbw_l?XcKxN0B0?&?5r@P3qU4mb`;|w%BSvwv~z(S3KJnYv-B1I{|K@95F zJAlm+?2mVf0ZNx|O@R+($d{}8<9j$*UY=Bhep|J_8@NpAq|Fu+aR#(dZ#>Uqp#8~4 z_>?x|1(^8bY7rQ3gzpK@MJq!PP97(9FVAxT@Ub!KvnR|WR00SNtld3y#YIUOD8Lr4 z(sJv2C}}G|=p0zvR?Yn?mcRkfE`W33G?f6Vj8qBf`6@u^&uX^|q$dFyn}>jQ1HOo< z0$U-_uxh?CC2d9<#mnfjB1j-EQ5XT>RT9Zo7dEFra6Xs`g0nLTfZ_;{fS#X=ISO!u zOA(+^h`@Zw!6wEEkTCI41YT253N(zH-`LxQsW;$2c;F1!34o^#JJ9UN_Ak#zfNi(U z543;b%#WiOgMk#}*I6r-=&iDSNe$D$O-Z^y#dVb6DOe6ENWiED00000 LNkvXXu0mjfDkf-O diff --git a/graphics/pokemon/giratina/front.png b/graphics/pokemon/giratina/front.png deleted file mode 100644 index d0004746a901659eb1b29bee797ca54814604cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1271 zcmV8V#*?jE_G;2T=sA1d%OBr6WYg$c{}g7 z?`z&j(-I4srZFuPBYa43b0*TX6#s;=2uN;gT6TT3OMCB;`VQxO1mw_|t%T|w+)O9# z&!kZ=bG{n^S)*Rh+N3dto9P5!M8ga#7j_BMW}oKauxK0W1e9pAbf1yV%8Yj>ECwtrC~_9B9T~+K4XOmz|!+Y zY3@i_ktFsAC{yf_uHBR8JMzJ&WFLw?8+|tg(#eYT)GB=~Wy=?y76U?k0b6n2JbU@i z+CW}f{c+%^Ke*m56%g2e_40)rv?~2+W@8}53u$e*|H2!zR$5jpt`_OHIrXj5M7t;b z%G&^2#AwOt2J=quR*b*a-%255O}j^mI;`3^>?3dKq}*)dssna&JznJ4g<0G@Dwn@h zho)?9u(w07+`#UY%R1VJ;xrD7_0`(o;~-cvKl6n(-ivpdu`}@?2&5E3Fcv2gsohXr zW8Me6&=kU(1Xv^>k>Vk+R?S0+^TpNEVfB=y$?pOu0Gqr^?>QW&*Sz4Wc2n+$ql)dN zEEDhV(z5i_c20sIfF4ei6ZpW@%8|B%rralubHKEm8P9sv=4?S(Elr5R_JA zvE}zC{TY=>OKvD{bH0G%=3ApnsZCBZyqBUXQ}<~ct!I&Wu0Fog;ZkKEzUKT3?9yEk z-QR}0r%fd(^OR%IW(PR>kq2|n{Rk#vj^+Nqk`Om3_dK3eI zatz+!)T+i~SjGU*xe0tjz_n5izzOWtbpUu6%d!Eyi~^yY1jnqGaaHFgKtg5*9y^eM zo~~3Z$?FN=g8K&m!zT{hdP4)p`Bwl9x6R;K&m1!qi*PG|BP7b#n3-a%u?OuvM~?wB ztP`HawR^1E%fK?=E`uIRp~31uhk(;j6utqN=A$Vv2Yb4r8GGZp?F_&k(C=3*2K1Ig zKsk!O?g9PWr3ru^^>n)ZN_BLIfVM0BNelz1Yzm<$0;miqsT-9s@UBFnO)fAKJPSkq z=*pG_-q=C5C~a_=PBEC{8gj=6Lp*mUeV83yZh}&DuXWw|MYe__1D=X?@;SL}KHKs< z?@HvILt`Vax+>p}0f(~YU;L0;4bG+f3Eb|1>K;@!#`byVdyHvy>UHDlZ0KVN-CQ1l z$^iYKG@&-o-%$UoN*Utyg0YIny^Uy54+P z_q;l|B%s#!rj2Y>q!@Q4`Q5j^Y2C|Bx`bj1vpIP;Z3KiDw`*G??~yy1^_x~-`)~0~ hfB*mNnC3J)?O)#JTRCNaGynhq002ovPDHLkV1nP}UJU>M diff --git a/graphics/pokemon/giratina/origin/front.png b/graphics/pokemon/giratina/origin/front.png deleted file mode 100644 index 14f631d09516f79c2b2ccca5360bb3b54f274bf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283 zcmV+e1^oJnP)zI9LHxCO=%CyyxG+(u53E5i8&}08q>R(7kcTou0}6isFC_Q4r)oD zJH<-HOBjZF@KW>`53kt=J?y1DL?|mo4-WMz3kxeO^fnL=wTLkNy?GgvSo=AYU>f2j&FsJjMF*DiZ0-0bqdQ zZGZu8&52ozG;!6Xp<{gQ*38Rj_5TH?P}{4~3y3&L9%7Jn(z*dPdKckLE;kjKb@AM# zp~~=3Is#NMmjO_-mDsMgBfgi*Wr*#j zIIn}{D7y0{|JzeO^zB2>dn9lOoSl*rE&Aj0R3oOLL7{9a3D10mvh~fJn`} zTrE{Ouz%9vtkT)t zxSul?TUz}K0dVBH?EUx;!MH!!-uW4;RvrovdIW%H&x|S3*9Rt3AubWwPS0illmi>AyFk1YlzYbQvBr=vm-!JDV-h{z=Q-S zqvaX$_|?x)2PVc{eWEF;FbqG)wLLJ3j^NF8i}P~4!refEp|Sw{hU?LIgTWr2=jB6U zlP)>{JQGpQ-vTI(5XEwQ@zsY#r>_ zXz61IlUFB~E{z)l=X(f}2tdcF=8KJklzUc?D&Tuz~sX>|FMgm6!r}m tgLH749S%wg^Z94N?dHhIqaf&c{a@vT0J%D>Y?1%~002ovPDHLkV1kGfQ!D@g diff --git a/graphics/pokemon/glaceon/front.png b/graphics/pokemon/glaceon/front.png deleted file mode 100644 index 463bd723d766ffd99143fe67958a55bac4ca43eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;T6)5b%CEPTs42-#({z z3JHb`-A;YV5cL1?Y|Mj@cT}U#H-P8g0?}kJry<+`3o*RL=95_70LAbcHvtW6aW@R~ zFd!Q>OaA_w_JBM~rgj%I@IN}&SjZ_XCu9TwOP9c178p$gNF>rB)V_)VLXf3oz>-cr zu64B+ONdL2BIq{A5$I|Txz;uFyA4RLbgAp__pB^g;K)gyYo)bdSlpEpDhpkg`QiuX zt{A~lmZdBl+kXSUKr%J}J_vw76k%UZD8SwCqk8NIEBF!~mFtXO>nnf(wY%Cw>jpXp zh^~P&=j$<_M@(hSW!?h$foDurL3)w5fI5&(s4F->=-6BWop>>VRq6&~t=ACa>x!DR z2kb4_3oviOg6H#s^~(X``bEIXygte90w`k+pne(wk$FlT0I$}73P+nkd^))mf}jl& z@7|aOY}pngYz3`@#BS@j4e;ee?djSkWaI5{4_FbN7Qe~~#h(Qp0v6gl=u9W|cKMaii|N58u11i6iGXUji@&Et;07*qoM6N<$g3_K1K>z>% diff --git a/graphics/pokemon/glalie/front.png b/graphics/pokemon/glalie/front.png deleted file mode 100644 index cb6ecd4925a34cd36622b88fe6ea818f5718b28d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)LaxL~;GpxF5M`1k+-00000JvHes00009 za7bBm000ie000ie0hKEb8vpCl`&7-KorOAfq{*8)QKII-VsQKE+mm) zVIau|z(`KAwo=Y81}Q#gOpx(qWN1Rz7)x1L;TupkR8<}NUHZ-m;0rZNDEAmz$b#PjxzC45x9Ojcfi^;#8)CC``9 zQiHem4XBj2(g3T}8KVu}1=!@Aw;^Av(G*~^e7(vts?Gw={SK>CN-u{%ptN4E)4+Fu zZJ>Z4tX`wAl>*AxBa6y}H4*_7gj5H^_`p~t!}~LVjs2~_U zJ)CwxAYWym114iO4}s0jkY^Oq9%n!c0iFO11t4v~FdP^uU}FZrYe1YLKnha;lBKl> zRKR^u9s>c5&*)J*<}wO!?s;4(_}mYH?CoektoBY<5conseoty9lD*MXfeR6mimd}9 zv>6y!oP+ySoDtx^qC^%6)4#x|T0SYj^iRdh@{0&fOe|KR-ne)*cWz z+Je>eIn8)PZeT1#^Wx_E;Szxp*wFz_f8@?FBYKSjP&|@RtR-dh{-;|9r$BR8c$qfa zvKeYQ*ufWaZ^c4Vb=e4SMWU+#<|zlTG2np$Ho1(1YiP@g+pIN65+X$&wJ4i=g_+Kd zl-U9;s!3A_=l)qLOIr>K+uIcD7*gnxl{w(Rk^Sx6U18%KF>2|}0fq&VBJj(R5d}Mx za~=_(k`^8xe?uq_prBvbX^#_0$?-8bp^UsxE_e;wvZpf0$`<-u^qMy9_zZzDCc)@} zIud}ySfv233_KadVaVvn})|2a+6=M34Xg002ovPDHLk FV1kbqhpGSo diff --git a/graphics/pokemon/glameow/front.png b/graphics/pokemon/glameow/front.png deleted file mode 100644 index bd72d82c12a503ded65d93cc813a42f4f6cc2dba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmV;~0w(>5P)Kls%8rFc`;e52&LZq(p3q@9NCd7u`)r z2#Niua=JAc+%h(m@{~6Tfv%*SSXdza0zk#i&<#ETU*IIZ2~X0hP+tr)5+0J_|MT+^2rm98OMN%tZe8BHt#ul@ZVPs#wN6|vgb*I;!{mWe7kva$hX<57=?{}6%{z4} z8qZOBnw~lgNc=D;BI(G{8=??E=x5zJ_4I%UD2NU8o^OEzJrE-ZiEl;l@_h4Wx*8ZX zK#dKYv?gx!lSQgz#Hrbju{YG`Nc85@llnqpDdNHkL08AKs(J;mSYAY!3)nI0x`HQb zfLXnohlIuuS-`Ze->=tSV9@|nL2kzYx9ZClSgz)g!a`aAi5G9zYjiP2K#j_X`&O&s zhcSlm=v}$|WR$@?d@Bt#jsak~DqnxhGl@M7EP&=803NSC!+4%I-l?4i%U9oypMJf9 zLQ2{8Q&~~I_@VWk?^jZ_O~8KI?No1Y44>u3L(Qjuj?RRK00000 LNkvXXu0mjf98E)R diff --git a/graphics/pokemon/gligar/front.png b/graphics/pokemon/gligar/front.png deleted file mode 100644 index 5164cb452bf52872c5ac24ce0b9264bed1618667..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmV-Z1FZasP)Px#Fi=cXMVQc_QYm8Il*JGb5Y1wwq)LNIT66#Z|E#^mAakT3L31&by^AR^izzY1 zbBh1~0L!+%*Z=?m(Md!>R9J=Wm+7*kAPj{&oJ2*fe*edvETFXQ*3RFXs;TOWoR2^j znAhviZW;ZrKD7iQ0)ASPQUf6UD>3a76urBqO3?gHEc<$2iM|VvFcnf3rI zxAYCcel#NHg{yiw4hn2Cz5vWVc-2|$xu<@Ct)wisKOD76+)J7S9{Ex~F5 zIxZ^!i&h;W#2&!atQxk*r#evR6(B`x|GK^p!U|yi0<0f>j|p7`sJ`#X-8#`*1gqSp zqVK!1hrt0Be)t}3;%+sPAA*NjW2BewKzU|~lZwR0)MiDIwJJ7k~c0fAesvWu;@TswQHw=g&9m_e77l1rL z86ef^+BDCz?#4GJCZDG1f?!j!Df(`nO+OolLqAQIfS8l@EPw)t1YPu}1kHt*ld~QL zz32CPF8N2f0?@SotzOSv4{98BvJ&X6HdD!PB}_ifX>rib89$R6l8FES002ovPDHLkV1mHtg}VR% diff --git a/graphics/pokemon/gliscor/front.png b/graphics/pokemon/gliscor/front.png deleted file mode 100644 index 24be70580480b18caa07f602122521bc036a26a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmV;d15^BoP)`76vbnv0H+aa^iTd zkQ>P^lG5}OnC3IMQ>n(X3smIM#`Jq??(B|&*oA?7he#DY^)iryvr>f`BMId_vE^zH<=<*T6rY1@9x;F17dCObjo^uhxyCm^r4wN4R#{s^)u#a>f69s0B44=aF7*ruTagXDn1 zG!(ah1;F(1epTD{4-on83mGHVjf)FhFNh$nMn>0ve*OCG1(e9`mlGZ^e;9(+E;}(Y0~e#dF(9BlKl_|g57E`>@!P?66W7LG8?eAy zZI1LYm6|dbO+&1;u}c715MtX5AC(7oG#R9HtfdIv!mU=1ngiR8-^Z0%0lbCTdp$Pv zq^EDSy$vw4#bZoPCU3a)sQc|N1Hsi$VfNE>$}QOWx()EhD!~WS2^uQF8epqAzycpk zLeN(WVi^c}A<7K*Ux_kxRorqXy5-Omp*+U@@E1hx?!mUVWX4(vyu~7|%hUr~%R0D1 zX)tzx6_0D*416JW+~n`DKvSi^#6m)IArg{bSZd_k2IouadRXO{T1*O8G;YDb)xlVybkES^FKqtpEGSF~MJ$M7qh@>Ft z^V10_MY;*SQh+?JiYTOc1jHyZRWu9{E#oxDsC2{H|0h6$ zMd!{il@P5_eWG(9UblUgC{VvqjlQSTO*G5ZU5iMl@6z4)-f8e3Uw;D$q#UhwZR1%0 O0000Px#Fi=cXMVQc_SSSF4IT+1zN~}^j5D*amy+QwT0PyIz#d9f(IT%W6dk`^7dxNC3 zTE(2C&ABm7YXATO4@pEpR9J=Wl-ZJ{AP__mO##L6|NnMs1H2u2#h$kb^T935LsnVn z+^biwdNh#!$?m-$e}~|u$u5WSIbj$k(lB7211QB)!Z5{=2?#9sADvh(jSI^;ObQU= z5HNU&b9n8_K2zebESM&(z)s|koTt1O&H+mZ><NMA1i08$cy*8(_s)Hr_h9%?@WNG^WNhyobdD-n1i zNsJGd6_ls63=yQ0l0d4j{&ZbI>G8rvfGySpwl+XI^%J1@rH?5MmRh7Y)}d2>1@J7* zsdTakV&{h`EvJ62TsgB4XtA{s09#yYJNFX+u1o{DS+L5%m+BAm^+sZ}4hdY|RztvG zir{?L1Pef%yph&VZ5fdA?f_hf0LalOd`ls9w|)gki}EJX1+zg<3~;y@!vmoOC|Z#} z310!u8K6aH1keEYeg>@hkE&7>K!lC}1R#IjW84Lj*8||rpL3QqH9?F5$p=73`IMgt zBq9*Q66AbeeCZ#o?wn(eQT>!F_b|8sIF#1yTiokdmNLFew;SqLjOJEmR~g2!N!V>K zIdHgsKn-DAQM28BgCBspmmm46A8T3mHvkzYGh%%f-RUrI1%TRwe!u+)N&r#cARYj1 rO`v;-n&mUH{0^P~?vbxv{df8cqqiYpc?|%g00000NkvXXu0mjfrj{0> diff --git a/graphics/pokemon/gogoat/front.png b/graphics/pokemon/gogoat/front.png deleted file mode 100644 index 3653876d55beeec646ae4eb57d539e962178ad54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 zcmV+j1o!)iP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nqARr(B001~RH~=URNFV?Jpip=~5CCvE zsEAnj`1rWExQH+y$f#&g2msJH7-72X)&Kwi32;bRa{vGi!vFvd!vV){sAK>D17S%- zK~zY`y_LOd+dvq`6%mmwH1x+wuxt$( zPiQwK)=LK&py2!wU>;*nY0ypeOQnO%%)q`a1Q4KINWzs$4Zk**(Dnteb@HAuuS99! zmJR?N8bOeHbUdS4BoE^Flz9QAw8jIv*KFXg)T6_CxDRJBIrUn2)$eoO?>0H7i;ybo z5n{#f$Z4xW#eKXPP~bf97dvNqhW#wQ|M6fni9O z_nD|V=X(<1ygQ5Ik227!*KhW<1^44P9*+StxHXsq^2QsafbH>d1s9TY>-)F6F?Y88hwL(igi7nF_3{Xx?z?1=ezO{s+s*a#-fg{#XJs!%yLhyKOLQ50C#)ll> z-2iF2jaUXY*z*L~oQ})h95~7Y@%T`DUtaz!r~irRR0fXX(MSlKe?2d=q_KJZ`$rBK zra<{D9;Lu1*&!aXB*G8;d3=}vU!`@}oWgJ;W9PtBes^45%^+icmJgM`YV&&bThG|* z<#&eqYxYUc*x4<>&70Px#Fi=cXMVQc_VuQ^&IeP#A0IbdbTCDD@Qmm9Ydtwk$&1$q_Vq(?R)&Kwh00000 z0000001WpYtpET5j7da6R9J=Wmg{cAAPj|Ly8&|P`@imdg*3O)sedNTn^cwLd>C^u z9ftq-LIB6_gvc=r^x*gf0})0JVgjNt#*Yw)ECwW!FO*Oj{RoiBS(M1WQ%cDYpU7E6 zF(d>RBg-Eq-|D*wFjn~~AaQN)2s}N6{8isaV11Qe0qzK|`aK}0 zcLd<#Z}esVd_%YbZ1p#Q1m^^JlyVQ4^e^R$6p)ut?f|Nvrd%#E7?5jF-eh2UJk>K` z%u2AS@;(98r?OuFHXO({loY8R0IKIrFa=;$wG=>dpDgmZz5)0Xq-&K*&^0h2pAcj$ zW!6st5TW!eoEib#N;&TVGLVHnHNaG~(`jI&5MEM5-s)8@wQ+zPT#b1~>zywEL&R3* zT;)vCvoJ3-Gh&=)TK51emmqQw$j+kGMpM9LUZwTHIxjc|L2EEYB--{gs!vds%w1pG z{s{g_suwd?z@Z`dxL8Ts{%er=paFJzCIley?9V`e-#`oiwLuW_UOx}H9&TQ zstd3645%Fgq2@q(71t+sfT3&w^En{pJ3#BL8-fD1DO~CWpppXs9H7tg4Z!`)uL&Rs z@;gcZ`jqGf(1Pb}DJTHy;h`P?Tfe1%2I!J~5kTJtcvrf(c1{5+9RL{Z?K)x#WWZwQ zQ2{zGj(7u*j%Kd{Ee=>1Apcznklh11m7k}@YRE0MBLQ)c_Ky+NK-!kvMzy=X3sGy$ z+<{?3A$0B~`io&=cQN%PUKpY|Ksn+55~kE0}*vsdH?_b M07*qoM6N<$g44E5zyJUM diff --git a/graphics/pokemon/goldeen/front.png b/graphics/pokemon/goldeen/front.png deleted file mode 100644 index 4f4b6db93922b9ac262e679c861adf5b1a3762d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)B?ES=qSRheTo6MeF4Gx-J9vy%s&@yW-$knLcZTU_d9>6Vcf(u4zv0X zz@p0435e?d1+-g4RK5I?5@fQ2%X4VpUgtuerFITPWRvX|B%yVeH#8taBCiNoFMzjq#7{~-JiXP1SF#v!4y?DVq7|ZaC1;b2t0krBCIlMI<%V!M0tgHfQ z?DkZF0J7PH0hC(x6=FTz^{dq?h~b_F+8b!-lT{#n84hIC0x-=c++*bH`h`0r0Qtsp zwx`*MUEU<(0`M`RrUc>ja{vvs`S0eGWPOmloyNNL~R$#B;QU%wjUcq=zT-vy1Dl2aB-}+`L-N?VD-5SB3`z+ z#yhXSYrylP=j5?k(XtTBF4nlWqplzuby?)1{N>qv4Bf8#bpDg`u&5D`*IxxtyvzL) zoqgQXDW(AMh%3VtAn*!+g;nKB`2>h9Sm44HX2m3oL}*uc?ey( sNzSlX=9w^^xGb*F4dbfQH*wA54;lmEP4&!QmjD0&07*qoM6N<$f}@~SUjP6A diff --git a/graphics/pokemon/golduck/front.png b/graphics/pokemon/golduck/front.png deleted file mode 100644 index e670ad751977d62ea6cf1ae5bc4979070fe012c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 756 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 iW!p%e01h`(z}P>%Z8>8@1>Q>l0000*6(=Gb zA_RaSfFWRmK}N!a865{4EFx}9n6V%t0jL}THhn(m1!Qp+ctjR6Fz_7#VaBQ2e9{aI zjJlpKjv*eMZ!d1lJ7gfh_8?-FgpuHP&MH6cYe_dIUtnJ`VNVH5=Mw!1Z#+Es_ydkc zyUT4(S3giB-ln(qh^J@U|Ht1|T`t!Cd#Pexw9x2(#bd^b4+8I=oDdK-Z+zq^<>&EJ zv}!}bqfGuAqA6MiLcwLMET4Javu^N3o5>47}&CQsR0 z*FRjklFU$XA*U+9?Cdx31Mku~v_A3cYB$V$9mRiwKeX=M!qRiKrdw4H9x1)X`(QTH zM(MQhn};=C=mSGFv)0006J zNklFv}rVNec?v?bii<;#UsklleqT(A$BzK7n z{Q^n0EU882R*Ae)Me3*OamP{q+%Z>WgXhQdJa_MbVf?!na-44c#mMa<(3ZPDg$`nC zXL2wCu(by6{%Fd8nGWcCFq!Uv)&jWzlh-FS#4W&Da=-(4MGT+PMH7fgk-*LUHjqdl z;J5RjnQ%))1$G^!T2&VDEOm%WpnCP5rLF;@cdje+qnmh5 z6hK($aQLJKK7#}vZ{l_Yi9$GrA31=}uCLn$X2wPZA35NEQgobWOgI*Rq5z-e<(|(w zER;WuD1(dBF9J~MY?gRD-sK7EUt0yxRls9^SD%odw~NzIYhVo7oG$l5tpNuxW_qAD zKv^*d?5hnVfGK^cO9-40aNtm?+{d9eWB*nE#5VkaswK*1WjAx6s5yL7d1$sR(A(Ne gZ3~lh-To)nADZOS%qMl(qW}N^07*qoM6N<$f-3qixc~qF diff --git a/graphics/pokemon/gothita/front.png b/graphics/pokemon/gothita/front.png deleted file mode 100644 index e7052bf8d077101fb360afdaac8ea4849411e2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 495 zcmVkTpZX?Bk}{_NbOc7Jc+T&@PgD0Rk%_+F%aks zOJ|m@UHb{`ztq5LCu=Kl*L!r|%kxzTx#*v&;*>#)3f>1yoQ;$ z)xdU^8UeD#&E0f~*?zaO0qK6f#_WB!FatTR-Zg;RgC!wX^N+(4zXmf)AE?^A&G7N( zvu_2|CRZ<9SymvVue4sjEoacG<%%n{;5J_qE8t2b)&x@N0dRBS&b}*-rLY1Om+6GW z*r$^yYhUXTp|SKQajzZ5jN5k002ovPDHLkV1ikc+e-id diff --git a/graphics/pokemon/gothitelle/front.png b/graphics/pokemon/gothitelle/front.png deleted file mode 100644 index 7178f82fbdc37beede783e323a69c7aefa4edca5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmV-v1D5=WP)8S%5XaZ7>CcV~wP#}>R6cL)h%PAi(Vp#WKy={47IiGIAXKSN=@BGl zDrAY8N8lZhcm&>oS?{5ozcR)7qf7;$oZkWXoM$-#Eae9`^F+$=p5LkfVn^5w0Ab7%OeO9BibMjg zvjqhDv8J6A4I#kQe!O}eKN1{o#oC`Jf7O z5o}T<>_#PceQP&0wxqOFjf{WzatW84Yn$1sj2*)8uuC3_r$4_PTwGLpkWN*aJGCj` z;~3+~=c_kgf4!U9*kk~^8^O8nU=6{huIml>YTB(?s4N)3r_bx(^(`Y5I@3f`0Wi{! zzuy^-K+U@&16HYK!~eK`Q&e|h3;|*DXR1R7Ub1QfTR(C1jH$h|4Z4r!cV>v0CXL>( zl$pi+w8&ONE^SnnujF~R!4^<0<+*ncP)J$5bjN`t%A-7l@f;b$kI60E@r3~E3q3i*)zAAhK)=~!GNAh~F7vV+jlPJ&f423xQw5k0rfg544Jcw}J z8U0w_^Z~Vr9GDV<7JP7D2uGbf6oT+x6WRpoG~GRVI`&X#i^l*u7vcngbPR|}ahj_W zZzP8iX`Qf-5#UT#vP{&<3H&i9HQAVx-3j?7xy=FK6R{S?CpOL&2&8T)|qeM4&HU*N8sf zc7OzOy@t2}_#%q}NFeG|fUQmu$_UOi0$XU;2moNSM2G+bu{#1Jc^BA~O91WM9_P{{ zVA>`^fYKx2ysr-c%D(|9vX+T3x%R#?Md>}o6wX1n0d~MprL`i!6pH3q*4ZbmjZ;s6 zrXkkprXA-Lswja!G(e^0egIrlH-)^YIu&^Nmk^i1b^s>v(;uj6#<~w+3)Be%xBjg| z!nvpmaOa$mxBm3emC})V029tF?@RBFpRX;&dlgVlEFZpj^Kiej2-|)F#w}aC{&u?g z{&i!y9LAZnjGGVVcX(og=z)}r`03M+yPFN#;{%J-%802~zs_f}C(Chwzj(ZB?5Tbq zsn=D+uJWJ9oYvxb4?GBg*R^;L&1IIu42=vdF8~+AZ8EnH4Hzga3*G4QvQ}{sL+Y%m zM*$|vIK`VLOFxqTLU3VqB)pu6qYdr_{RyTNfU3<@deSr493kIN0}1Q^@`)`pCPC1% zn@*twJ+6A%1s{749bu3B$YpE05OOX7rr19P*x_aDh(8U?d!!ok9+;};fpET04KVK^ ioI8m|V){D$+xiXIZg z69%ndNNrm#H7XJRz>|zZD{wS0?}}mo0053%yGN~}dbt@UdF}LT%A1xEnm`Vs8d8hnKh9 zz34kssm=k_dEQKt(md*~McC+Zg9jzDR*0Qj~#3xGjOATpE$ zT%rJ_z=^Xq|961Wfr8M}J7j%^4DdpUg776^LZ2Z#ayn20+K)v52msEsMGDZ{vV;Yd zMOuSN90}Nv#L3TV1eA#cC?pYi05Sv`HR)MMpHTP}#M50kziv(9Q*+E1)}~lLrD_0!~>Df|5=i(ER{$EfwV~?*Ndy6FV?# zZEyvUV*qjorTYL_rd=ZEV4wid9Hg|Y_?!&Qwf?yk=Z`uKV-P2I`(K{+FGZXmRvOyC zIvn=<{bK_F)%(>TM*_gbRF~Ib4MaOhF4`i0kYfvB{p7qYL_EU*8G?fs6fLG*RC+_8OEBnf=)1GyNY=Sf`oOlN_tE$J?%fX~^bcX= zr|)m3Gb3l~S% z4MvAV3h+#KpkXovY;sN$62=SGV9mXO00WQB7DBw0kjOKLrfkwPxH#HO<_5tf;UeV9 zUzW}1;3C)YVznDYW(<8ruTVP9~=r$VuznIkMC*H5}@qh$}ei) zR=_*D-nsHI*4Yn%gHGoXPb3uZK>}EB;se0Lj$g-#SxW&0x*mq#{6bw1OPe28826M%3+pBfB|A4#A(34q0Wq0(b58r0;I_}01lo3iMeZ10uw?+J|o~&OBLb(a4RK5loo*9=vq!mrMe(d zP6H;Z9YP7!iwXd10Z7;))hqLu9ka8Fbx{HLwE!e+A(B-#j#-VJIE#HDfi5USV?d47 znr{I3B7yjnlrz9#%`=?ESOJ_k?F`_V0Fd@?D3TL0+ZOE>oUiS60PXBS&!}gy4J? zzVr&nXh&_3k2uQf0eBv9E)UAwq?1lJ{8UUlX8$Ap0Gr!=82$^X-~a#s07*qoM6N<$ Ef^>eC`~Uy| diff --git a/graphics/pokemon/gourgeist/small/front.png b/graphics/pokemon/gourgeist/small/front.png deleted file mode 100644 index b3b659bdf10398e65ec7c3f0c76dc0c784a824d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JR{P)YDQA%sc$>PQg#tZ2HTCH0o39vU8ZF^-Q4YqOp2E4JMR#GcG!3IjE zY}g0Te!GzZOSm;X5!b)o%*^<#vXvaGA|J1&ht#%>>9K3a^(eiIr72L^!IenOpje*j zTrJ`Xu+I61)l@`{x$ON`9Ke{p4ilGndQ1)t5UMNwwotx4GLhkke)Cw;FI5=ZWpNo? z(nlq@{PS~Ydt8=}P#ZvxyR4v%(6P<-&f2@u^lPxzJ8NU3C;-4-uXl>Eu_f=9DgZv6 zRxsWz0QlV+_fN5d4LNAz9edyZ(Ke2;bczzL>^S?r&s%C+3brBnx9|Jn8Oeaku!DX9 zIF}CquRybf?g03{Tm(E61HUX4@Qz%AbF(J>|hY}&)GMM2DtU%?$6+nZ1cEmS4 zECAL#00O|wM+h)$-4`R=lSRZcD8v+?3X7Q8n;8SGPW%pBP9y+U@MbNI&UfewN;Mjm z^8t=hwJ7|&>QG{aK_=j^DMqM5x_L3CRL_CNA#2siiA892GUxyZQ$wh%(eRL_UxWfg zT^eM;AroM3@(n-)OXNYb0XKRs5@6h+W*&Gh0IfSB^eJqj8+OwG?RcsHW}S*h^&k(_ z$8fHTCj62CfXp_LD}Y|L$Rz~GfOyl(!{Cxkv|9gC53)BZE@c=*5BpzV_Qzq6eHPb1 zKbiFV{XrRk^yAX?AObMTZz2K1@F@y7#4AsC!?v&9AFVbRwkqQO@uK{%NUR+P71)T>u#h7i@dJaCcxv9O;^N53aB)3 z{T^_)A-%o7n{sI4@}mi`C!gO}O2D{-rY8a-TFN9VxYU@8eCa>0D7?Vs$-tzpoAal`!R6T>s{do2?=}@0M?rX0I;YRG;!*!DL~2HilXm9si_AFcwx_d z7e#f<0<8y>?|A@RF;oaNfGM1RM^SVm)HHy9j6L)VfJi?DSVLg^L;&@N09Z^C_%^Kr zU>&s42sj%o{|6u|8Vv;?gFNBOMQDG962vx=OemVElLn01*<^ti%W) zPeln%O(P*|u$-!_aYaaUw16W4VUhuaL)(DFvl~(Y6GC_~C(y1}YQzEHPDt=r5jYkf zrR7v)st*!X74Tbh5lX0E)&N)!LBi%rulxggK+kK|WewcdLy)jJPgQBsgBH~2EDgB; z`k)Z2K#PunuL4NUG{6G%(OF6)z@Q5`pyLBTx_xU5nm|DZ?1pm%|XEUj#t&1sdRyho|F56ky7XFVz&de{GvHvH6zBj(fli$84%IyB$EN5)W7aAYz&k7KjS)4lyD%L$tX8FNc9N#>6TxOY%V=iK_&m zOyfRqhDjc0Ut|=8A2AKJ=mJa^c{u<2Fj>8QkSP>PU8tqsNtHtu-9MK14p0<*AP?2f zOq5J0L)HaYKmfpXNmb-fteMt+s~O8dx+(#4D7#_>gqUb8sUDDe02o31?&js?`AQR6 z&<0&caDZI9NX{(RKW&UfFbwfS+mOP~W| z_OFSl+|*rNoVij!eli7#uyr~wnTb;bw|3j@x{LG;o`#V8P}VAiTc`X?#L|M zIP2*_geiTt6Ps0RpB+AcUEl4mU0+53V_03aAem9Dnhrog*y3$^=DR&q-DW zl~-Gr!5)=yYWc~xd|d;(DggnEXV~?POrN$@0=oy5#kv6Mtvg}`^n>Q3O{HTxppUQ} z~J#I?PAIAOg;c>^l^m*4943UBtcJNX08 zBM`F_!0C3t#3OPMLZli1Ll9vbC?<0{ee;NT8PB43+=@002ovPDHLkV1h8sTTB1| diff --git a/graphics/pokemon/graveler/front.png b/graphics/pokemon/graveler/front.png deleted file mode 100644 index c6dcfbe9fb7b7489397522e7a582694c3992d415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmVPx#Fi=cXMVQc_N$pTgP}q(L$7!GTBq2wsrEJ+3pDMWMo0$dJ_t zBHu0ET?7z7_tF8MuLUu8lwR`r3Rr+8C52}_#&}*aplcvk9Jfuubd}^e8hXKiY@8cd zRCwW?f23&pgCH?@aDagbafD6KR%C9O=c;D-8malO-3LT;h6oIl1nla_z~sT~A)xPR zb9gE+SgLUtEXTuhe6mi(3SKfIIiZ-XQx?m4pd62p82#>vd-+n)3zSI(*omc0YMSO$ z?rUAdT?XBt!z`7oZldb>iFY4z(+Lfh;Xdrvj39#!;{lDaxrgJzm-0;A8`vTqj~E2N zlYrTni>o&Bm+rv>Etw!5xS}kN+zG11tWlebq337TAcfHZ)GGkowKO@BF!ccDiNJ=) zlsl&h?7nTaVXa`vY1dUq0MMr<$A?b@G%+8VS81II3I=?!8?9%A^X^qf#JvR}AQlaMr1EJd{PQE#8U{z7;(8{I!MWCkJ zPE$h|QKTp_#y?nwJ!fpaG;QapTvjo dJMMThz5#xF6oTdDHje-R002ovPDHLkV1nX>Q@Q{E diff --git a/graphics/pokemon/greninja/ash/front.png b/graphics/pokemon/greninja/ash/front.png deleted file mode 100644 index a76b97dca9c8d1ec1a1daf35188dd5402ad19382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)zzi-n(6vt1#<_`#Cr}mv7lA$8H=PGF$iWJ{kQBjqZq2NEj9^S@~PLbHU zUV!0BXILSPe9Q43!RP12}--N4f4hHb4S2+eb!MP1gb#0~{RZ2FwO% zgHAinGc?({6%eO`6FV?CrpQzNXwOO4Y+bbDxJ4S+K67mV z_Xlx|El=TaWCgr-{N-Hvx`yp-TNCU>JML`Twj zwmb~>PprUspS6j}xard~3-IP$E(d{h)5KB(s}*uE6kr{-wkUKdM3P!hbxjjz2d^O#Nrgr2 z;NWdfG$J9w6Wgz0;?<2Hl9J%xLkA1Pl^f9@*^1cu>QWM*aK2JK(b9lm&T6ux!>lA! zcG;o`WRtPmIvt`9(}GyZvN44c%}eYoUY-UKG$<<-z2+y+Y8x>a#B=aIELPYc6soeNE zz9@4rcdaZE&DuOV8kkHjC@cV{1fs=AI#2-AT$(e-#frO)2qqI<@G`K>hI))9gk5L5 zdK&T}Kp3DR1KYg{0Z>#Lu$2q59c3lJ(A3#hJu(ALE002ovPDHLkV1jTVYKZ^< diff --git a/graphics/pokemon/greninja/front.png b/graphics/pokemon/greninja/front.png deleted file mode 100644 index 81faac3bf777b024020ac73d06ae80483078bbe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmV-}1AP36P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_7$8_EIDilk5J*5c`0&s$P|#4g=txLN zkdTo0`1rt3V0bV%kcfErc#r@90EdY{VgLXD32;bRa{vGi!vFvd!vV){sAK>D0^CVN zK~zY`-ITFU+dve?ZJ8lM2JT!Pr7DB(BoCb&U+W4Go#Lru>XE@Vdg@wb$jVevHab-D z2wkYvPT5Mu!d9wCh}nNZkpG6hvrX_>NxO549lzgw-}f%hHXhqD*Z%`huen(pdP@a( z^LQMQa~71s_H8RY$G^`{vqIuEjU;ypnypLPg(*; zhaHQJF~pOH7M^D3haDgQ@*2-zTKy(To}KF+0%AzRNd8h11c2vcT>}DO0O7vB>lr52 zk#OS{U?~B@!V%w{nnYWqltZF&C}h0_ zBna$;(QY~ATsFa464pr!EX~8wH3Ig1at8Ou+Q0gWz|PNbbXWS~{wZ0c=+8XTHFiS4W6NEl`#hvp_}#*2^n3IjnN=Y2&5@u4VLY zSn7Z!y@i0+FNbeceJ&9&K^qDspr~q1Z*lm{qzzzcexOBI2uOr``MJ;`e1hh)rw+96~$5F;@d%NhI*bhaM zKo{>uy%-20v(MbFw@DaKN4DxFzyQ#7@h3|;pluK8rasqaz-qN=QUGB|&C~FO-?U*8 zmwY7MPoLzkZW{@fkoTvqp4lW+MElruWfp)OK-y^va6a)X)x2M*s9RW4R;_e$J>F#) Ze*uNXAgXQTI`sem002ovPDHLkV1g24i>&|v diff --git a/graphics/pokemon/grimer/front.png b/graphics/pokemon/grimer/front.png deleted file mode 100644 index b99fbb299c7cbd84b0b5624ab9e0f5aa57e3c677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)Px#Fi=cXMVQc_oNAojtlnZdd+y%uw2QP55D_-7==U-(&(;Ok9XAm@=nDy3X+0)R6CD6gCJ0fF$*erTis&=iDg@0eV>WF-BB z*CC{Y3KfB*=|n&*-;`?t87~!*?4f)!yEq@^C$R=iB;Sa2#Z?Z;+7vcM;IIED3f#56d7dW~|x{@>YT$0<018 zu#Tkraz@N2BrJ7-^r7m*X0}2>?&)AG6F`e$6oBR+ppXC(ut!dS3l>jF8#uEtlF;=;Pr2`aj$R+@E3e-1`dJU?EjQ60#d_G`B?*qL8Iq%QGl$GwvBWO zF(3QG^)PxDK*>Rx*iX_6U@Z$ej?#+*)?w35G{B)i*1d-ZX*d#lzV;Dd$-oD^k4^o}-iwz0=P(6c)hYW>@ zgx|w&642=8&xj7ty7w23tVXw!T*s~OsXg8>x!w}@i1KykfrcKCTNrHLJpLHKVk_Gv z(hP*S9MpPwT|3d#E+VhkGO>f*YoF6@-1rVZPJtH_+ZO+K00000NkvXXu0mjf{0%9y diff --git a/graphics/pokemon/grotle/front.png b/graphics/pokemon/grotle/front.png deleted file mode 100644 index f52ebe6d63a3c0f8c2940eb19a212b2aaaf41974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)5(i*swt8&_HO2NT|SIkf>Pr`1sJ!(2$UjgSF#T0009e zNkl&W4&->o_1mV7}f&6V> zk&qSS-m56xR;3|$igCH9O2vP4Q4=*qn_w!^G^Nm=GN5YkS(CDYsExr>DD)dJKvPjJ zrD$1k4A^9d2r4*>D5t2*304wNShc3AD693BD#?j15Cfo3l$FF7fE2!qfu27&JSwO? z3$YK-m_NEsU@ON*$WQ_L&|I9)Ohi;nIv_AG%+feWB6Opv34_#_h|ojB!HO!XEQ|Ri z=2TQPWSY1-3AGT#+C>Qq1tGJF%huW?YZV;CJ|HCx)l6(+GM*bpy_MXk6k4d`G9h?= zx&(xjg^7hEVAb&=A;c`t>k^vC=}1oi!sCWxds}3^Y!SDlFHbwVA!J^1z+l5!WdP_E z;yT#DwqaH|z_PL9K?KtcYu&LiFmE_uVbk{Tr5@~9>j2m`2V^RntDaZs=}+knt^we1 zgJxcP-Y3r`podX2qNeTOn$2yt+3>vYTcpf%0HQt9uHiYZ1(SF%1F0}Qiatkl$Hc}q zKSZSgIwni|G0^JJJtN2`0K)WoYydz==}5q}Fj#eo3;L2A15F0Bea>LD?BWXOzE_UI zX4Gs_N;^e9!L~}K>F>TVSG9JG3<3eM9g3WfL#s{^bXXWgl$4* zqp0O~d;r=!kPcz^4)w_zn^O+_u&;^KEVNGLVRwd2F%kFyr9lFC2BXP@l>8X*^TR2qbSv&Mmk`p9K4riim9K#J2bcpg@4`+H zJC0rguT~Deae(E)R@bip3g`U%{P3r711x&*!>+~M?nkWv(DcR8pPMN%cmvKV1{Ock zuY|yb(2Ly7$(*j79>im_e-r*3eg}F-(LFkh3o;GNZpS~swc!Kv1j23sZo<0f$9Dng w!|us3(f_Lp=@;FLUw7z0=x0-R>GyX11(rf~Kx1PdRR91007*qoM6N<$f;z~r-2eap diff --git a/graphics/pokemon/groudon/front.png b/graphics/pokemon/groudon/front.png deleted file mode 100644 index 56e10fbccb11f5020853f9b9a127b644d0f7d1b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 zcmV;-1T*`IP)k9@6vyEWi85I7!30EvQ(YWvb?DI7xS2uM4|R--U#1TDrF41&Zl0Ms zZ*!F6o&V{DwUvGKC5m=#L(!!^L0 zic;72X$P85OKiMs*7XY2fp5T*#73o}S4*V`pAhP(hwvD9(KJ;9PR*~* zc!zH(kHfss^?m2`)a(s^)I@ryJ_@t>N`DQ%f))e=jiVah`Y*A$r&54zZ5)Ks8P&uS zqOB5}$KO(Gn^JiI;~}qu0=%{Ys4c3&8BZ;N#KGXxpUIxiuSlq-A`M3oebx5mh&vzt zM5(pXJc=UqdgoJo?R%0J1ko`Fko8#h<|+srJ>b2g_S@9&CtjAqv}-j?E%tayY3qpO0K0QByY>CPcY!(V z8R)eGis*I})g@UIvwwz3mYpwQk{_sHofr;L2mo-d4Eyz6iiCYjS)F~k!NoH+smDb8Y`1$?Us0WuYF974Dgor8CK_AV&naQ#1}-@wyL(YGG|zxcOAQp?+PFg+Xl{FnWN>=d1>yRy;B~|XgXe&oA{!KU qqP6?Xlwk*q{LGgc7hae9pZ@|O56LW>9SouX0000?vtkO=VTXm~I<$T&b)a5(T#U;qFBHOk7R7i>4l)sMJKoG_kY4@6Ivc@lf;RVc6q_pv3 zPRbQ7Fhojg)<}1y@m`VAfQ!_T@&b|a0@rX#7b(&?DNlKVD8-$hA+x}N|8Ue%rm*nL zZ@+KM&Mrd#UoamP?ynnd~G8NOyEPE(=l)H4NZ!!RiA6f?R0Ilz` z?;>~s@YUly%a&7r`|crJY!Yub@-ABn;i;CwIl?6asies@cx<{LGANc28HFn0US~hH zfGf*WHx%v^^5d&4Tc|d%JMz5}Fn0$DBFn4%F?C@mE)sV+F9FeLkorVi=J~J1jW?L3 z=_D!wI2!nA>IPo{NFY%weX4L#C%nl3#6{-i^gtbiAHrO{*#r954n=Xw5=j#e_T zbgm!jTANW*M_jzy0Ny098q8$&GoTqAn=x46D}~3|D6mk|WKCmd(lB(p+it3zffn-o zA%TKsvcA#T0UVfCSK+r%kJU&t43qVYX9;D}Q!nQsjDGwe6u`Si-`MZBX7&~E;Wq$J zLZ}s1->{!OP^0xqYa?`aty*{r;dp5s1TD~go0|*@-z(sol$%!!>-EE*1(`D${{&zx zVHEmM>2^>dG)n<@d7deNt6}Pw0GPj(jA0xy7d~Wj)!-5Uv64cp0SEzLim)rdScrwc zUh6^%xL>MO2vqiRL6}lq%s|0t)d}J!aD7qwb^$=wXw^+fYANC( z(UnKtgp9!hh}5RK13*=ROybSS#c4t*=2~I5w=oIi$l89d^wgMC?rRbZqwQfDr{Nsc zgIMlv#UvU>M*!$<2at#y2liSK4o(7yBkMHq&&6MhPx#Fi=cXMVQc_b7CO>_N2wEVh|7z-pzZ(Qc`m{5dXAN?u$xuVjya2YFJo!`1tVH z*wCmj5J5(8>Hq)%^+`lQR9J=WmFsT9APj};;!9|jzW?Ly*pP(m0$C^R$CR_FimH5v zV*~E(cInckzZSWEgWp{*TNM1fMM}rlcHS+@Sv(~}j&I7zAP5X=7;xgdBTBtP; zkzO0xtX~<(T@oz5578Jj3$g6H&^caQv>AxRckV#kX#zF0h;Fa4>|z;zf-eTuLUrU&%I5_R(FW(?3K$=(LxUTl z8*1koq1eqcQgGlS2P}nu7cm$IJTc1RJ##s6}V0H*f$|;OVKmHNsw(Ev>|eR zvVIey4@`CZ`1Gus=~JvYU`zWB$Du}XFHyJO;q^F-A{?fokCwe`vvUS1=4TmAIyY6@ zi3FHQ_)RJuOmUNU1IAX2T7X4JDSkYVzwo*n#NU92sGK7z1`WZ3qr4WW7~R4glVseq zR`U}@S|I*^W`-Q)37^k3CI6VOChLP|v0>LcP7AUu%gg*N8a}!@moEJmy#qIsG_ RFY^EZ002ovPDHLkV1ja8CL;g< diff --git a/graphics/pokemon/grumpig/front.png b/graphics/pokemon/grumpig/front.png deleted file mode 100644 index c5b65ca3b3c48ab5f34063511da0f0ee18b2ccfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmV-`1AqL9P)q=uyaF@#3M-yWm0g+F#JSo!L#y zZZk%D={qHPU*4NHvpWF%&p`Lb=O?teTg0?B*Z*{fAVXDReK9UUpK02H0>CUQ1J{l6 zPu{BlA!w`4kFuJ!>8V;|h<;{sZZVPXsenZ)y3Lzpoq6GjY6|N`o$|5Z?JF+ABAcg| zsty1?Ug!gL0dO~iIq!CwWGPe)3BXp<=B<^Ve#X1RO0X^Je_#3GTIwOey&&lEqm^H7 zX6c<0cvn~9$7<1ak*@Agdh`2o*A;;jM>&B2D0sb|%)1r(btFHnVE_vscHL@3M!>YD zEgAsktKDw{AZrc_JnbH8WwDiRKdJz}))LPj?9{(3G73Px52#t}9?lJc&A0cC*%}3~ zEz^#fEq8cp2w>B})nmqVO1Uq9nPqlspXaWJg^r17hOrH_%!R1TFlKjJ+!}6|K@mb( zw$YWR?K_OIvQ1kkxt~&y*}4S#PF4tt%@hEp5N#gCXEeiz_?iY#{LqQPzQi&LJ0R6$ zmZMlWeX)9x+HP8G%s=AsG9!Uc!&C{-&YeAvz@94wF4X=49cv!PbBN8P)BuGr)dSW| zJqBFtW+~_a7@nsF#$*_P)f6c626`x0faI|q zf!YNqC4p7upNM=n8)Bo^5CygKG{}|fgb)G5S&DPT3a~9eJpoQYDfyD;HkJi=$(t+! z$nZ{p7bJn6CsIUUO`KFYM@2?3C}#SqR$9Z*4B5j0UiJ~Htc zBB4a2lTis1n-Pd(B!4a9r$uoAK=}+%^F}b$uFArY(i=Lo-F7AZpQ-LZi+%+ggI;tL zhy;NV};Y87C(n#$~0Fy$Y#4^%C#TRBDF8P@?C&>vSIsxdw8H}C}t1&di1q?#-Xv3mjA6Q3a7c2#=0 zjAfduwYumpb#uMotIdKh1A$WaB5(W|v{Emt_GeVzfJKMlm5kBE+a zKLYP8P<#U&4**UT%_r9p;RjA)M?@XkVuTzA0M>nj-2iYS0E=-WHja6T2+*Je098yx z$p8`72>zCh4`6`s?SSAn0AlT2692qMSOL&stWS7sj7!cl;`RY8?Z6TUU`oRF^@S1+ zRcRanPv=jiHwhhd#v1FaWl&H6vy!phE6>TY(vyYzToVsl@Ab$>;ddObih`aSh!T`!eSns+9@GS z8RJYWDD?JZsrm`pO8EkOhQ71i#K0YYB!u|?bnpM3@6M%?N<`^o(hheMTIKNL`(1$E z4BX=#1Zh&I?b_-B4O^#<>#AaC6;D6bJ8nl6L-&a1p13EDD+fr^Zk%;ow@u|GFhJ$3 z?R4ChJf!A()n=Pg=g_T6fr@801BwdVlXHn5cvyhajF4p9Ytrgjo94teu;Kqg5O zejdOkazF4KKMi0EKFNFx;EMpp5i^F4#P?~C1~5%#4kR7;o|8?$3|T1gUjtB^F(&CS z4}dyiY#qQdPq(9<0P5L+VzqVcWCF4p}r=q-o_sBSlqc6~KyWJlh7e->zzFzV{k{k|4O;+l zUZM-5n?X_l_I%G;LTqP1)YI^LY!)V2@q!uxM(W4U!#<`R7e}oJjoR`CvL?FELyo`J zn$Q}j`+SNKQNy24`+P2dS^;R){At`N;KppXFx zZG1K1eBNEX^bkxdtO2Ex$v$)JpI9(irhc(PnuB5O8l;u#k_Ad7W01^oS^#|cUHDs@ zUL%)xGyVuLy=El2uWkCc>FP;sDrSr#5+B#Vjhbou%;e49<$&^ro*Jp&Q~8(!kG--$ zPB1p=U8wALi8f{s_ZKSQVIiJspL5j`4+}Bt{+y_QOD;|?eyM<{|Ck+}Sniiuezaiw zc1fkNj2NqCSq|C%hoKlYPN_%8j;E!WL(EUMuBTU7Q8(vQD`eMu`6}A^(#9fd?}2|K WMMrM^+f{u40000Px#Fi=cXMVQc_85tRKdwUsUl-Az&8A5YHweKN}t@ro$d)Dvw=B>`Pds;#vYZ)QE zF=OvzLgJlR=>Px(IY~r8R9J<@m)mmVI1EGuk`N@3QvUyMryHQIj%S?g!?G%N%26LS zE(GIY`1O+COMRvM-v}v{j|iFT`Jw8N${RqsidFN-mGwb2Em+?Lk*0%S2C0m(^gw80 z_(6CDq%x6^D4*x?BMJr4Nk}K49srC7CNBuN*sibA#N}0L2c$S{%$DS9Cq@Mm{bxVP z4gi4w5&qr*$QPbV%0c7h1U|l~9p2pUEzivR{ zxINE;#*`V4<*u2==B)@9Q}RlQ7C#*(ZvnRJuUQ0u;|dM0YDZyjfONIs$A@~=J&lnj zQH)5f-vNB_9CDmnb^xE=0mVzLJ~8z>00+^GJ~FmJ=HJPa9)p^=evFx`54|~HoH+-C zO+*8brzG7#rH7I<9Kga2V6(zA0kOYVNk?{90MtF>%*JK0jHdxT0n}%UKE@NC)l@I% zNzcpTI0-&#Y{nCGz(dOYV95Ci^Z%y zLVyC^9pL(-j~syJ*#S}eUXg1GNe~V_=reLafQFt&>;%{WklRrN0aKo(r-A52$WyY;^DTdI)gK z;2<)IiZpIsgnR`YM>57U++4*R3ygfDe@yjgmFzxaN=lz9Y^Qj=>c^NYN;QgUV{5xU zXACan(Vu5GHGg~BSHC#Xjx(xf+^ThepJz$a-~S^`g?BwDO}YEB&?5;jWI1Z|R{-x+ zPB=&@U%c;I^I^~l|607yjF%{O$F`H-1wqK45qP7kw$j>)g}(7*lklO1s1~zDz$y}m z&n@&@QBvCh8(zHG<=Jy@0Qd(*cw5y<{r2?*!Vdtru_6%kQe7d(+FJcQiMtOzF7@jI z_%MlmNdUq@^MN7rPXJ+9Jcg|;ZTK-@2n*}BPNgmKOF&BNwyhm7krBeHOsA7%W41s002ovPDHLkV1m$GCkFrk diff --git a/graphics/pokemon/happiny/front.png b/graphics/pokemon/happiny/front.png deleted file mode 100644 index 547c652edfee125a90c695a327cbb47e6d2bcd99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWUEQqK$(6QjhfeQix z0tF5cH!@}{2&nk+*m5E;CEpzq4Sz?kUi;uzx5`F8Tgyh8>8ZNehooVc=% zTNsq|=!f)#P7ON7HSv<{)w%|!b;hBppIJ2c16IBY{?>Ek+3u;W^&dXf@BCf6&*h@) z^WZzXC;gT267*pF(j3CTFomUrp-O3j)5O%E7CVtF6(%iVYk>_SfAegG{$`}5+8dTB z|D4-+aOsoppFMdG1utD0#=!dexRl5fh8&-zdwCD=8L3w`M7Q(#I93BG2`{HT5(zu> zI0c<}cx$G7&ldCOQG8#Ka!}5&_Ktvq<<(M-iZ6GMcb76+aWiuATDF=`U(T|nQSM}4 zT;hW}{4XAvv79M4Ioer#-{GGki-nTf{&(y5W!}DU>CD{Q{o;}D&+Yssz_jb#lD~}c zPTPOjFp3!pG=7s@{-iFkc?a*$x+@(wB(f()zELj@x!htM&^hz_#ZUEapK>%5@@6uz zT=~kiF>a%1T3K-D)Q3jDrikcQ)}}|hgg)iJxBtbSU+mLPx#Fi=cXMVQc_0002)oMMAYG1Y@wv}#h-w1f8M#pczdIYDZRYEoiil>h(#tb0oT z)qB;XVvZ9Epa1{^4M{{nR9Jo(VF_ z2|(YD(=>lU01+y{fmc01Ao(PO2Y?N20H**5Axs%C-q%5u-hY&!fF+oLiS#jqJAwi} zHGuWIfxvM~FoZc_eK9ce@Q;LHC%CLPfXQQgXa_hM&1T?sEaVa{3Ro5)#4*Nr z56E5MX)C}27!?2`B>+zV@5Db(8=}pk=((L4P}=EYyU`BR%8d|~5CsrmiUNokfVyTc z06O;oQwWRc89+72-H2MO4gv^);($bCVTt1Zhi72q6vP5bp`C4>Cj<>G`UzrSdHflF zW?oI>XzLnnqFk525Cu>c%R;hQhaV-2C`;B`xQkg46HMUgCjw;oD77>LcYB@zrpTdc zGzukA4Dr;_$ zTiIKj?a2Ndus4Kb3$WEu6Qq020Owp&&jzsKo&9sza;n|uLl2Edf{w}i6S(;FRsD;@O=Xm1YLK*}9i^cRHVL1PBC z($ec@+CJd47%M=|g0*mA0n(8`fP(=BK!EI{CIEkXA}nn?)c^^AT7D+bZ(BVRY5*f7 z%E!wbHl2(u@ja&|G{jCB1FUrxeL(0Zpnw4IEugolLpUJxi_{}roJyfVB>UU}TpcQ4 z*C}Pd(6OM2UY%+P5DEi^BVdL6|BDRxdXs;ngY1M|d<)=aL)fqQQ0#;{E=wTY$}Wyo zImGpK3q;?kYa_qE^`170gZmdxmQc?PzIq%RY#r)3iEjvU3uHZ?Nv{YrIw|c;du_o( lZ$JJ6q3*Fa1n57J{{nX!K{YDjZw>$e002ovPDHLkV1hxbiJkxe diff --git a/graphics/pokemon/haunter/front.png b/graphics/pokemon/haunter/front.png deleted file mode 100644 index f9434ad095ad2c88f29060a08ec237a7cdecf9e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0%-j5QWEr1Ec{D;F#>0jARYvn2O60`T(g|>~n^=aGxyVZPVQd2&VE= zS*6Ne3Gd_e>zP)mOZ~R4zR@SMzXFl|rpFI}`PUJ&{yGE!gC2p+&w;Xkg2<16Tdi-< z+EgAO(mqk20EnItfQ`O^p#fYGfKnb1^_f95?*L?dHZmYU_W(76ae~RbiO}d8#s(_r z0n+`MK{o{AhV?T80a|?qpBS{jh64gD#tsuG8$bd=46$=V0G|YqfB**AWq?c{8PF1- ztJ6L~eXCj5)^z&7fdSFCoxT{xyo*Gyw=NOGJ|%fpCc$%Z0U&G%b>Vj%9^q3#iaH+mtxb<2)0f>QaPDm!T`% z!%n`>RaRydVj|ZD{C^0lUA1@n{fm50Umybo1Av}71#Z7StPk&$F*ZDe%UtG*lyzQq zrQ+TCKxMjX$nvZza>Z#aA~ki%+xqa@Tmu7+5GN#}H8h}?9^ z-9?A~h#7Dz-`t!tyh&!X3TBlTt!3a+K9S>~Es*5lXv^88ZxYf`6hnZVPIs1mh9lro b|Fk{;N7R7u?e=0c00000NkvXXu0mjfR4D_^ diff --git a/graphics/pokemon/hawlucha/front.png b/graphics/pokemon/hawlucha/front.png deleted file mode 100644 index 5293bee35719bfc4952414b555c3f9fbbf5a6fa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_ct{xNh$s*c5V&XOI5=1s7?>z1xVXsp`1ojOcq7{Jg8%>k32;bRa{vGi!vFvd!vV){sAK>D0&z)1 zK~zY`<&-gR+CUhF9o@jdkO04c6CJu)IpF|F>CmP>Al65vs8ie?QnOTwocsWmr0T}f zO5GwdTnLK9W_LsCK-`I?sstUfAz`*|kbZY|h@)WV2jp9x3_C#wX^9Yco zYmWi>#D0b*E3D*cKC_k#JmQhf(?lRgGp`wo?_)%oOG-d#0j#6|bQ|8k(PR6mooBE| z3rPUfXf7M?VFT3ijrCU#JK={Ru$ODDF9}ild?_6Ofo3xs0QVMyoL)&_7hvakrod$g zBBDB*r7tLv>Z1gu+X~n^i2&q#*E`3j!x;YnaHfEA6xek8!o_ELwB7E>R9EQ5q5Ruz~nxfML>I6Nee`kzii#$Bs7-2T?XCr@L#Qa@Ve>$1YFeOs1UIBY?mFvs9A+ z{gzt}d<$Nk#{pXTH~=QU<2(X@43Fb3ky7xpl;QyLwGmZX0c$6<%Z(QA9*hr#I= zz|r@`b$Ae*$uEJ|1-Lv^<7l)6qwZ&0AaHW!K3u^9cj6G3UOfmB#wH5Kqm$*y0pL!4 z%W*OC)77t(b-%|%;R*=^>FWB5-79nS)<@L8v_~#Dv zoMgs3=b>YKGd5;PZP*qNOTawNIz0k<`J=Ev*8n?ajs;unAU}I-?%rtWscvncck&3~u{l+H0y%2SeIL&K?1PlrK=nT{>Hf zDiC2v1s}~fkjP6kBBzs=RRD9skoIou-%teYmrpN3TnC)f+eg#?QjKMgK%19D(Y zV2suT?oc;&A)u2&ATuR`vssKH{2eT@8 zG86(pv`gRtY^qx+c&qnJ(9zumydnV4A6GLjzhQgOekouMXWvybiojikcF4T1*X>a? zqBh!`J@0*VUK|7z*E;*ioP(g~ihu6u{{gM-?LQ#}m|4dX)T00Z002ovPDHLkV1gkd BuMhwL diff --git a/graphics/pokemon/heatmor/front.png b/graphics/pokemon/heatmor/front.png deleted file mode 100644 index 0b912da48b18b563633ec83cb318df9c21b7b944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmV--1Bm>IP)9-K={Bw`1tq$003YZ5TJ-iU>Fbp0000000000gUjkf00095 zNklls;9RV1ms* zTB1i5B*Z|+bf_Z#bDZ6@^>d*+5;w$(?&G`fef{n+_CFf2$GIz>N_PMv6t6k|bDq)w z;SeWpz}){^9-xcUV-L*7z%CDwlyc$0qY`^?2Ov&~h?;~4;XQ!!MdUS_v?%icpa&7( zZxn!+ot=hR34pBwHdvo;0dp!(aeM)h)}sZ^myZx~vg!rKRAcOgnGS@{KPj6N(Ibr# z@i4TS8WYyaI5*!e5#<$PssSV_DY=xJf*O24g(*)oU{pN~-WOAehlpz20Cq!V2iF)c zkAC7<=|Hs8l8bA^Q#`r!Lc1=aHQGG`Q6QCw&r%qv8ek-Mz%V8wCC-#m_+9f-l`pu1 zuTvUxjtYEF9cg(7a>3kSMG7!J$$)y~nurS+p|TTWMmEN0WDNMK*28lky12wNF_tj_ z3y3^WRviFP-e?jq0%kb%qVCx9Lju}YyAB!Hp)Uf~TE?W(yF?sAn6UP*yeea?x`*JW zIeoC@oB&@sM41Wup+x0CcC+Yu87H7OD^JwwTy`g(MS$1=vbQ+ooXqW^oN-*;$TN3f z-UG(w{6+?*s(`rzmh8#xX22hS-a?)ad^=&!dNZ3GSjb{s3@p~J0owtmH-?i1S)?|_ zwkT}HuEY-L_X^iGeb&ZF=?Jbj>%zD4SCkJbAJ+Y?;y#UCu7pBdXN9kFk-GQ5I$?@x z(Mf`6j?Pw5T8KT|L{Sf8F>vD&C1Qf&usMzIOH784_?AZ=heMaS}L<4efLh zFRX(NxHR4nG2q(Cr90w1Eev-z9XBrvIBu$#4n$Ozo4%bBFz$ex$ N002ovPDHLkV1kjxjM4xA diff --git a/graphics/pokemon/heatran/front.png b/graphics/pokemon/heatran/front.png deleted file mode 100644 index e446b445dc128c846a8a49b98196e58e6a329b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmV;b16BNqP)Kl+SAuK@`VRNiNcZ+ZGBz3z;kwN-lN+ zrqV;ZS*#3O5HtxCFaDZ9=tWukV9BYyBxid_j%|l54C}$OAX=9OhWQV~gJ;3N!8hBa zCb6kUJ@^jJ%e*p5uX-cK?0G}468&mW;JW9==PA|8pa1LP2 zmk#LV78!1Ua;e>!0#qA41GKxH%lF9eUZV~m+8x|t^*10>sW#s85CI%vHNSkaF(KEW zR)1gbLlBoK4Ug{x<3N>z4?P|LH1Ql30C_dO$4-wwhtR0V0AwLQ5oX$zTPXJdDXgPo z+M1lw-2%|4^)QU!C|~LxOeV2qS|O08%JdRIhlws+EKI638CCig3sH}@kFdLoQIet_ z)vu8y551%94|0Aj$(k<02vPCux8IqJzHGk>=1bi-bdJ*HKwgZIffe@T>rJheetd(M zw6#igndY*;fSNvh!L2}qj zH_PW`Ga>g$ixk8FD0TK(1+N3Y*WhB$r#X5%JMXskhrkJ*nw{}pm2bTUkBJ;XlhVQc z{S}q$as3(9r*@wQHSRO%#SXC$Xm=c<2Efw-Xq$m#Ae8iUOh^J0wTu!Vvs-|E97~Zb zPivRhRF^tM8J#Cl>#HaP&l8%(+SOQd3+w#zK~XA|Ou3^}Bq5H`9G3xfe3w6^7r^5% zQd%+(&CeG;&iF31nNqQN(J}}kshB`_>^Cm%S;(88m9I`s*y(*xkTC z84sI*Ur54EYZWP}HmwD*V6KxHyxK6gR}iuyQkjQz{ZvIlY>vF%DwiNZoI&7%Z*QbcQw?5` z(RS1Yah)PKx$`#x(sf7MQ?pX!@y@t}MIV!##$^LI1V14pC&Q-sJ*nds4j~pn0K{+F zc{!v22#rrRT4`swj)P87lQDW+T&1V3^Tssyfdlwg>UgxP4gR(I32DS|vF>T7od5s; M07*qoM6N<$f=WoHeEW0MG*v&j7s= zYLN!i_GuAK5CCjbKm`_W+fC9zygtVPa{VsE`HPAJS=$Pw5&$`E+jjTi;y`xV?sf?S zAkKEF1gMQtiG*JRF#JP(RH^Tc3d21l!exH#LvC*2*F_vKwf0_AKLHuW(Pw1i+7seE z0`wL$c0W8rH&0Qy9&kh8u5-B3A%S6lQJ^c+1Cybi*9N9t+xjL3XalNd_9nD|0FO(f z3!}Sq6j*W7Fw@L>VAvz&AqIbkalAf(}Z$_j7+phWb%DS#-zWP%&y zx(MNn*?aC0ofy3gz!(OK>ckkk^f0j67%U*HG3*lcR_huEn6+V%bE9npV4XF!4YsdP z53JljBLFRWfHL$JNLV@d<2kh0U+@aOXehtzU!^zz-#SkLqYA$3{)#F3r$W8=``+Yw i9qDpk3rf?#pVueq?whUG{Bza-0000!lvI6-A0X`wF6+2ddlt)BJC@5%XXk55(;m3^thJpz{e*D<6!r{k@gp3G@jtv)p zY@jkA5Y&2a2BbI(JR*x382Ao@Fyrz36)8Z=5&(u)eb+KUzAfy~ufyX=qM~fQ#StC*Msk3gu)NOMcmLx>lDdz)d`vJTC#fC?ED;8FQBEr+v&t;uc GLK6TMaoXkp diff --git a/graphics/pokemon/heracross/front.png b/graphics/pokemon/heracross/front.png deleted file mode 100644 index db9b244da3e65ed0fbe5970769990db04fc66f8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)MGbDJD1HE`r0#m%WP!=dlkf()G!M{g-k`fjHB0W= z#qAUH?Fw3QY}XQ3H;CX$E-E4sSPK8KCJL4|j;4Ap+bZ1Mj{BU^<6EgC8I7(9Hq1MRUVp z9Qo-bwm2A(zMAsOt3A--daB!dzc1u>NY}n5L_n|5iSYIC#%5q3;Ux0#VaD8;&7>oWGXajI`SjaKVfIR>K z=Z1_sBH2&H2%u#tz^g(rKtl{!L(r#G%?M}&T_~b%Jc-mz#z8IYfQopyo!bG)UM0$W zDXO~Zf)YD`3U1hV<46R`lEB%DUmgH%YBH42|KKNyP8+iayvS0lhZ-dG&s6{@tH>Br z`7R8$By?kqo2Nwb51)jBRTR=E63~yp)BD}t6Zn*dBC-JV*>W?SVmqV)ez_xn|4qrF zPxruLh@=c(4Zs$jpnT8VtX;O72& zDas-FXxjO+p**paes7|Hgg<@k^Ruh@0w9+c03j~{FZLG=SEI?e`0>a90000uq diff --git a/graphics/pokemon/herdier/front.png b/graphics/pokemon/herdier/front.png deleted file mode 100644 index b28db7c3197174a8d54414651628b27b1f3f89fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)c3hTE`j`cx_ zZ2?~aBC&5_RJAyW0=aSZdckkK=Nq`#oPNpwa-_k?)nqROB^+86O2pcCcr6J zMG6C#OYES#Nd&eHkQsBn)Qzs33Q2)E3Iv{7-(n$tTPdfDRjrjV z4SyMIah}O zkr9m-l%lPscy)V3MU?wkMa6vT_W~Z}WMPeHcO3#e3-ld_o{$Z&pmP%UG)W=^W_Z@U zr_!fAfG3#rDE>KpMf_-f2>79pv;86Fys1`mMWV2;_VX;gkuM_T7X>5FnvE#l9RL6T M07*qoM6N<$g4U-gC;$Ke diff --git a/graphics/pokemon/hippopotas/front.png b/graphics/pokemon/hippopotas/front.png deleted file mode 100644 index ea6fc85848c6b101d49702664ed30148ab0e0da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 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 diff --git a/graphics/pokemon/ho_oh/front.png b/graphics/pokemon/ho_oh/front.png deleted file mode 100644 index 4c32adca93bfa19ab055712cb41f5fe02e41a873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1280 zcmV+b1^@bqP)6fwdKP?3yYC^D23*veRNpbB0AMXcx+wXQ|4QL0obc+r-az(tt>ofx3(<-@iTQW}>HozhhWR)gwl1wUe5 zB&1xnY*=wXrzRA^Ip$YF%A_7vO&X~X)UXVulBr1IJ3Bg6W55RtK&6xfDiQ=MdrZQo zaX@V=+qjgj!O5i*Rv{`OP-z-@Tx{f+3tLsF5C{~mxfPK`>j#_oWq6`%yY7Xt!oc0@StMrkYPVg+=& z0U&D{7`4gOVO&^TT^^P&7=Q$p0eoOi)-wu)M%ASV!5Iio%@8QDq2ucxG9yrM7(%xv zI3q_lsj0V7R$|vrOksx0!Ep+MXMLwX))81+z#`$;OyY7C!YH^{Yv@^jZ2t--1QJ*R zUdooMGE8X!Qmm;}WRG0cL{x5v8o@~^t?AT4GVRnr-3KWcCw@(VMmYCY2mTn@T z4CvS-K&u*UBQZ^az8V;7Fc3&q4+2Nv&v1GOnq1ufMiz@Y-TfVXu7`0Ap+eh`aVZx9 zyd+|sOebi!7{o1vkgOXb8-{QZ2^SsP+fPY%;Sr!FBv364i<#>|Z)DP^wnsA3Cv1FK z0%}2m`t{-RjhsE2{CGF{F~ogTC?MU!V($6s_#592Mw6%7_nCjF@Bdwp(e4ABYes-| zXW-f@y`P!C@_m07k#CAp^CU7rg5%mY=>KRw2jC1nNJ;6Q8_B?Vw*3p}|7sqjAUGp6 zZ4$k$>)z-$5O_2XQv8*a$m~UIiaGu})jC)L&12HDN4+>Oqa9++!xGKjWZH9`7{NpS z%MJkN0K5TLTzBkrqauE`ejs0-&tE}?`Ps~U@x*op(G305gRc(`eYWQFm%Z5uM@THg z*md2`#aoDI4ezT*x% zlMVmk&2%~?{#ng)XRWxz;o~o!bFKeuZ+g-rq_*x3ul|hywp;tdt?^{t^(HfSdQ3QP z=)aD-Fyy@+)y?v@W<-ZE^Yg&QJXjM=trdE2H=$ct{p_uMZE1!1%+66B{+|YPn@k q5XT+9=J=SG9JzM2%jSSz?*9k>u`y~%GmUNl0000%Q>qxc_DH{Sc&?qLE$(SUyK73TZzO<6tUXV;qb%i$M+9( z7ahVdddtp-$KOB2x}=h>A3%dBst+$NPL5#f7x#;LdJ8Nviq5~C4~L(VL_o=aSh)p! z#V+0^*ettDC`|-NJWmE&$&a*^X_A118KF{#ox{u9Br(md#WM8sjq6nS-NvGa8LfwZ3GkECDuF0V6o;_slh1#rIM@ImjFw zpNbt3g(;zwl6=hoUS?nmC0YVY@8!KPz?GLdaFqE5MEzMe*Yp*VpRAd!l#neKL=@zJ z%WpKWZved!uEe#y&0tM z9M6e`)g=^sYVy0;PgysRkvzSpqWw_UHhORp_ZIxW=@@_}uvp&$0zPoBS|{}0C)BzgJcaGa?<%0vxdZ6Fm`p2E98C$GjJGQRf*suK p9CWLJG!JyDip&U~J`VhQ@dvkH^PKN{JmmlY002ovPDHLkV1n|Qe>eaD diff --git a/graphics/pokemon/honedge/front.png b/graphics/pokemon/honedge/front.png deleted file mode 100644 index 923e4563dc171229584c9efbef954eef845f1fa6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 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 diff --git a/graphics/pokemon/hoothoot/front.png b/graphics/pokemon/hoothoot/front.png deleted file mode 100644 index 8a89546b76fc5104f8ef9e89c1e6ae87abc30359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 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 IM6N<$g1QX?00009 za7bBm000ie000ie0hKEb8vpTg?!Eipdp1IMXv!iWn_mD(tBU~r{(r_$OzU>1Y$M6Uw0MMG9Xr816K+7$yGFewh*9mx%3fT?Aa2Grj zyL%Hrvl9M*F&5VID2vy%qJ0g-5nP9HYaIfxT5yA^n2l>v4txRljeHj4Tp0Q{Qg;~> zTlnly!gw_YfNZA$4r>7bM38qH)db-1#RA|lHV%wj5fVxOas}uMUK>abxkR8GtC`Kt1USIL+5>vu<&szVb01FuY2z5fz^`_^NI>b1&&S*VBi-!o}q|qci6sW;`IrT5r9X_JhR^s@G}{9HU&T#mt;856RrDL?Gw@` z5m4#91WAVPX`BMOr+z1;ozj^An!T=x+b7*5AU!(27+sF8v}=GryyVLv`=d1CR-mdD z0Tnj0K?yb(U5!Rtmd11NL?|oXK<%85#^bL)FHH_`xxh&5m)1U9jK_bzz5R`sBgH7l zk|;N6t^X8&{=2MRtO;k*%K^Mee*HZoCZ@&OO{V}%Y`|+1v^VVfyc>C@fQBt}CvW)&ezxSW_-WY`R!i1pvYmff8 zzBMSlPtc;1-u$TCC#d7F_?K~y*w#5Bl+yIJZYPY@&OoR6SkF7*Ds6!0Izk*GU(|9t z&Qa?jV*auTfkT~@;)q5Mp&z=N5SD(toN$CQVvvpj47#mv_vorrWInD%7(7xVMfZw&dIFS8_W(oTG&`%oWXJX~*a11yl{dq;fpG(Unz{T?`7wYGpz_wL z^L-6)-caiG1{lcMkrka%gl@-juCkr$Mi2u;N_JZ=My98al~UdnZ%7rV2-xz^Kcd$a zRvrK<`(i5Ru?dEu@=@!sQgs0Qx*_H7G12^TSV^w|zo8b@@$DAy^XJ9teYY>w!l=LD z9bZlofKgvt-k0(}WTD sDy_nIfTEq=2^ePda{TtfTYuvJ0U7r-2Q<0voUTAI{I2<^B}WN3cGZ~hTMzGd06D( zbzUkA3RBQj54(8SL)f|Gwv%@LFZ;dsl1xn6!w!SJOUiqne1E^Zyj0Wv%b_n#S~1nd zTAi>y19LI}a)8n;37i!fkN|xyTVDt(TM~HBML+^9J1IHibQi+CE%9T%vSgZRf(4e! zcw~RP-n=VlVwj0Yf~-5a-@-2Ptr$4X?nZ)CH&@ z5VySg@#XmZI0fub#*1Bdu!I2ZSyC+@C4jLZ=avHY&WQMOL(d0~kJ9I45$E3!^iXV$ zC{^J2CIK4^OK@&t5{k`J0dNz_{eH3)B@$o>&V9z%u1we#Z$vvG*;bU^a4CF0CUJa9 zTe-7c=4xF3isPtBNIM6HW3fKIzKcgE)rYH6-10FW-yt|DT1N17D8TLA#i$r)-ettE zFQeOw!6fhkqRWV#9Ts+=sS|a0hC49{;IVNTn+8}i4*nA8EF0}&fTw0^1cFS=6#;Rc z+-XGwm{vp=-z|^^ZB2;KlRuXRrNx`ID84#z9|~FsS`Nr*ql2QETQ^uMP_5N>5aa_4 zQMf05(82%(L<=Qa7@*!nH3d)dBFJ{9Lwy?b3W1ufQx+WLK-MGH=pcAl!tfvi_@R(00000NkvXXu0mjfZDVa7 diff --git a/graphics/pokemon/igglybuff/front.png b/graphics/pokemon/igglybuff/front.png deleted file mode 100644 index eb39d1f7385aedfa658ec0a31212321843c81a2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zV2(u4|Fc*Bui3jLs8~Qi;92vWXPN@t3=IGO|KH2N0AwJ8-RH!v0nHKhba4!cXni}y zyXde1k27=K)L;L;>#A7KtPtO{`W%Ox{zsNci{$#(0>OVJhWgLl8S@!t2rMXg|I>NF zm-f|Lf_ALXOue<{aP#ulKesbHyD)vtMb?J&^Kw}dR&{dPo0d7a>}4uDr()6C9ngE= zn=nJ2`U0N~J`ZgJJX}n=9QxEb7uXxGm1BH4Z}Yzs%llndxENfPVeygnoL6`5)9c5F zOH%rT4Q3qJ>Ho2o<@uKqo>?0_ULKTw*s2y2Zc)c4W`F0oj90@}w=0E5swF*EGWfh_ zQu6xUvg2p+s*=fn+#>!xayqPJ_jW1Y97&zLRrVakRr#fIQ#v=S{`G9NpS5_R--f^g sJO`c>ml(V2AJX1w?tSCdty@~J#FsR(H?6&+!wm{BPgg&ebxsLQ00<$gO#lD@ diff --git a/graphics/pokemon/illumise/front.png b/graphics/pokemon/illumise/front.png deleted file mode 100644 index f91f5c93559b903990ad5703719e9e48ae3050b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)=c9}IXDoGgPjGju-VMl5Dtqglr($Aq`5kA5`)F%%@tyKuL^lT-n@Bl5W0wejujLB zf9X#B(O=U53$P=74NH`u=TPrlaQA>xsLd9ebSu!|fd-7q7DU21e8wXdRDh27Aq?KX7^(c? z?T8MNNqiuU3@P1{Sj>0=)~~^yScpVQ5Fm_ekZAxi zvbY4i&;hhrRrqoaSjJ+(_jB-)708$BMPy_MUQ>lz$ z;uY|ukTG!88YS5*n!B#zy5qYwz%V!^N~Bo57T`6g$cmKsY6cj5E+xq8Jz@=T|L$2c g%2Yezi})Y$8~*kcksTdY0{{R307*qoM6N<$f-grb0{{R3 diff --git a/graphics/pokemon/infernape/front.png b/graphics/pokemon/infernape/front.png deleted file mode 100644 index 6bb4d332cfde23a8762d73969106e2386018ed97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmV;g15o^lP)cn}Z}fLI8?m>}RdK=6o2IB=l&*ifKgK;Vd2xWL$OaDe#u_<$%dW|*@A0009z zNklouUHArV{;#wx-8kL*CG2o|K z7THZ426p+^$|jITXg9kD8MKI!NcMJcr}{J-iy=!TE;CEcl4JAMNzuhZ}X{(REyU_LK&5)bS`c!A)bkfEW#}C&efQTG<1t(IC1<=W>Z+p*@^lCq(m1%0+LAbFK4;Mric_(P+dz z9p0Lxx_3}8nvb-e8PDa0hmRv(0CfHq+;}b@jc)Y-j&`HDj@>0C2v_Tl`UeQxWrC}7 Rv!wt4002ovPDHLkV1lv3w#@(l diff --git a/graphics/pokemon/inkay/front.png b/graphics/pokemon/inkay/front.png deleted file mode 100644 index 2fca9044a22afd2c171f47f953303d16ff62347a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_NKjb#`1k+-0N~)@fPjeDfS|BYfcWs3 za41kPn7{xiIN*q=7-*0HNMHZ}0Dpw*^8f$<32;bRa{vGi!vFvd!vV){sAK>D0h~!h zK~zY`?UOM}!$1_rFN928nkEj?sh19d2(jr@=urEtdmtdVr&$Zq=q@JTprmwh^hu!L zR>G0~l2b<*4oZB~ewv9r-0Os94vypd@UWpvdh|A_$^N zg*yr!eLs$;6$-6AjiW8_AX2!IA4k(M2ZC4xTu0+L48yx9oCdL=hH?^qC8`4MlVpqR z*H9n~lR09N%)|gOuM(q$*l>;$F`zV`tj=s=S?8F{gpIf{jLzcCGCDoX9a{+Kop565 z91wj^?X=;XE#4ar?WID%ZKibnJWr{GY2K~xt$VbI42!Te2YxCvj}B`18J4T?eMU8x zLY=H|h4_M)vL)$)zKfW^|HEtxWXvWiT+kh&7`ft9D$5Wz>onUGuew0#&PjECud)r} zSC;dKu3&!pC9q*-8&yF!iy9orNoD#RSW3oUt+7|hex7V;%YoXG9P)2N$OnJKv!U;* Rwr>Cc002ovPDHLkV1kcA{A~aL diff --git a/graphics/pokemon/ivysaur/front.png b/graphics/pokemon/ivysaur/front.png deleted file mode 100644 index 4259abad05e7481895ac50a342185ba248aca0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmV<70v`Q|P)P!kvb73cMW+Sw^89*6yDN+C!ksnOV$oq{b;gC2U9nGnf~3-RNC+>Hr;zHP|m<$u?NbbtPi}Fpts^rTrHGET=9# zqy%m|9#83j8i#K+XDIC6uv|jGZ4rcKGo1f=IHnAnHGJs$eAD1TT`E|Vl2};K@B^{+ zIS*@@*q`$aF$pt?nHa|q<ok$qm-2ynadztC^qztfiCX8mIVG-6x?Q!``v3D z3;YGCNJw;vFp+Ae8oN&lc@)hfJAU#Xlq1IBb58^>^tsA??-^-*DVN@Vt+VwHZOdKy Tn+Ol000000NkvXXu0mjfsPaM9 diff --git a/graphics/pokemon/jellicent/front.png b/graphics/pokemon/jellicent/front.png deleted file mode 100644 index 584c7f09b8e7d26607caad88b0750007c8138a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 807 zcmV+?1K9kDP)JNR7i=%l}(S@Fc5|vMeLc66x7}@>aO;dk^tHx z#mio|V$*2bQ~5CJkqt0a|3LRzR;=V>4^@9b|6gb91VS3ZtsMy)c^=PeEB0%~{&850 zl?#Dt&1$*@dAsemog%>M``(~X!tuokK%4+0wTB@2;mI8qxq>A3XI_q zB7pT2({d{2xkTy9H$Y$rYdMF!b%c+PuolBPP((QeKm#TZ@aC^?Rsxg&8RsGDXNeGC z(SUtiea~zmghl5kCRQuvD06e{Cc{ zTBE9Zkcrg+@RBM>nFj8adfF>osx3&hAsrdy0ZOR=e_PDsztAYC&F+h|RUF}(+HDBy z`+Q*gS$EF?<@11Nl@7iKF5{ui5x~AwIk9Q&c470AKwb&H2Uyz>n>4rKZWh!1?^(=-WGh5K12wV9cYj=BJ$$Z)NWe63x1-9m!i2Br0_&6Cyj` z5ih8SBm&pliamnn>CO_@a7%>Om2%=G7GgP~Y&z#Ugw-tzWOanhOq$bLLc{7~Uqw&Q zhb&l6IEjqk&!}7}Tp0kl>-eNQ{CpxMZ_Q@`=3!+V%}3`mz&pWZ4FQgqM4#M11L%B0 zUz<@VAR2e&10N*U=uVpemFNO=-0*?`0P!~RVo|*aTZ=>jQ&1T<0hTvVHbf-!Mr{x6 z(;u7>AkXpg-hk_O2=L85w2B~L!RiuAT!3ri!dEyk2HJvlG)167z%s(6_h^3N?YIo| z&hZVpUwzylfcb+CTM(i9g#yc~l^KzRmyu002ovPDHLkV1ieXYK{N^ diff --git a/graphics/pokemon/jigglypuff/front.png b/graphics/pokemon/jigglypuff/front.png deleted file mode 100644 index af3a2d78bdab6149e53ab4d1687e7d03537efada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmV<40U`d0P)Px#Fi=cXMVQc_q!1wgtfc01gAfo9b3qvY|NnDh-a#>(l!O1xz5l2X0O&w400000 z000000F~o8JOBUzTuDShR9J=Wl*y9AAPhv&!jk;|2S*ZM4|b&x>K1t2D9&FyUO>=A=^I@F#>89A#>Xf%o!ZoElfRx z=ay6Q9a=V9bm``A)Awj4TX1HrD&-j%cz?Y2-t#^n^sIj+Lc8k*d)Ez^jCZy$ZWcW5 zY;cpzx&UJYK-U=tTTVLxi_KTF<3kW)zMXvF#{h$jn0Z?RXWF{O*dVBZDAEzOst31= z8RvXF)DUkLPzQwy2sFez>DNF201txpMwW@Y2Y{fB`bm#FYhGeSu{lf&Lc{})HNfi$#cX(aA&XR4k=q8a zgYY0Kw^CkuR_M%E_bnq34$tpDOIdELkS?bmH2{D4?MXg;{R9Av)CQ1)Gg)oF2pfQj z4nWA4vJj~o9R=`4h@AFfHM2&i)z9@VFA;8iZ4g+0Rc&Qa2(hlJ@6Ec&uFud#A;nG# zkbG<)CS&Ycou6kCru5-S3E5`~LmCH+*uHQwaB@@bWJ$*1L2{i}BNax!e34zr!pl9; zQ@J=Gu!`e2{&AH(I!=+so?8beI=DYH2zh)eU?-Dd0y^p#4k7!>ae`FoqmcuK^3oR8oR+{ylxrYkakVa`Y-eww2HTjRYvRg00000 LNkvXXu0mjfHW3zI diff --git a/graphics/pokemon/jolteon/front.png b/graphics/pokemon/jolteon/front.png deleted file mode 100644 index 92ee1f72cc673b2341bf3026d73fd0ef33d00280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)Px#Fi=cXMVQc_5D*YrN)XMgO00`Hn0P?{|BL_LQb-7Z`1trzQc}gm#ejf_00000 z0000009KY2X#fBM2}wjjR9J=WmTj}*APj{)gfxZz|NnbWLf_nRTe$9yUyN3rPS3+h z2;k%Kjc@#~z?=Fc?-7!`2cZ75fPZfwXH5e{*Pj46=ZP^0fbMdN6Ko_U5TK?Hy4Gx# zfH6G*Nli2v)C`#C(XImZCW&K*{7K(Mf>AG_pF@9?6kUKcO+;8WPfyu=$y~e;N z%?ZZ2aQSv$U=Cn`djWQq6EJx$Dt28{6mxw_UIji`>pHwllk17Swg9i8rQ+Wlu`W>p zh)xa=vh~_Rnj?G6$-nBt7oxXp^2^;_>S69(y!`Biv@E4C2X86keb?VCRfz4uCzpi= zLf#_u>hX6%PSFJZq-4-RDXlImRF#FeGQp*gVntK#4jSU{HAOWql8B0}!?&pQq$fe{ zIvO~Jk9gAS?Si0?bKm5pa2{#lD1qJX4OEtW>>#k2_PL?CdjdtJX$!@rvY)(>Rs!y} z?8-5Vi%Xlqs0iy81mC0XiU9U+)B6=_N>p1VakrSa9Na|pRM6xbz|gTP!JRJ-scyj+ z<3Z@y)Tm{~;77cpWJ3gsYV07PmK}gtX&qa9B)OGd&VUD```lfte*$2;-FeEuPJq=w z0D4a;#JX8?{)GWQUL@+?l-Q`<24dI1^R%I_58AV$F90ex$J&_?#{qX?{CRUAF!tBx l1z^PTYr>%AZ+zpE@dJTe64!@3agP81002ovPDHLkV1jd8F+TtR diff --git a/graphics/pokemon/joltik/front.png b/graphics/pokemon/joltik/front.png deleted file mode 100644 index 845a9a104745c001d66d3b5a48607dde98f0ad82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU6a;X5xZxlmAaG&@ z2ZupILr1`k8!r+v9vDO%SkS-$REP|ws%!Q!Ffht_x;Tb-biSRmG3&5_KwIjaH{T-l z7sPv|d4Idmw<*+XyMRZ=b*B%)UpT!MRC_MSzg@gXM8~xF;Qs|r?f!nh@9Cry_2v9j zQKjFT{apQAcf|=*bz0TNA6(Gv$IKQUs@brt>XMSWDWjI)jWk zl)2AeEb6Fx!tcW#2WDol-Aw-6_f>id??s+Xci#9*lwHWEIimF1Fov(f(&%Axf9Z=h z_6I*o+NLU=(M@?hPx8R^ndXwrMLWKJ=ZLA8ta#~h-{IcieeV)tBnuVp`5!-^e1W0N zF5`A<+mD^9l1(q42S2&QUFZ8&+f~g)Y-85i6DBX6u7q+JG1cU_hF#ve{p<2d?u$Lg qzdQ|}Z}?#QyY1!;f5bLq1UlLCCL8d{`Tx8O3OP?#KbLh*2~7aa%&ArY diff --git a/graphics/pokemon/jumpluff/front.png b/graphics/pokemon/jumpluff/front.png deleted file mode 100644 index 3a092274185d94c979f57a6639ac9532fcafcfe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmV;r0!96aP)!cXKEngBy9J^;??RK(O2df;p@##l z;U2(i3SWhiyaCD!Ttj~kfnatW+c{@9v=mH{Ncq3a?9R?V2>pZMdB^o22u8>BkPsRl zAwo7ujuGCA$pi>-;R2$G4njrWuH(lBfD|J;F<>>|sDW#M#&%%XWN_RgssLz(7`TBX zfeemo3<&^?=?sn%oS6hvH~}CC;lfqoQA~)@UDw1S);i_f0eDdy6G{c87mmk>gb7y# zokGMya1pow^kf>noJPK*07P&8_T6>p))D%6J)gd@RCWO-&xJlX-CpoET98|f`E4r>Ny2vam(w?O{Ec#Jf|jbY9{ z6>WmdxHM^NAioCmd#Yu6US**58t~B2pFty3kpU*%Tu!GyfCt4={%=sG1>jA{>d zx4=eLv4q|Vs!iAd(0BO%;!4UAR~|jwhNo!?x-50`;RxLX^;s9t7yUdA5BE}Stp@{R gjsAn7`yYReKk-8tfTAcU#{d8T07*qoM6N<$g7Y{xSpWb4 diff --git a/graphics/pokemon/jynx/front.png b/graphics/pokemon/jynx/front.png deleted file mode 100644 index 430f9ad28ff536742eee4a8b0a2284ab91fdec8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 724 zcmV;_0xSKAP)Px#Fi=cXMVQc_i(*Ru=2G6QG5_|x0001DL4&kv-o3re`1tttF{vO`sP&qQ&3tjHRRGV-o`7 z?e^18@8#Ti_#%857+Z%g;s?_Z%4ekd2(H9<@ARYZ&BZ!#`|&m5W=9`bb&YkJ^e)odNOUV0t?A<} z!B)}HrqBWup!PFFUznBAn-);(1J;1=c9*i5*veV-UZf+?+O)O+ClXPT9FjI(mXvM( zH6IxLL%d0B2T4E@8}xq9IRm&7&jU#50|mfX8X|z%TnMkr=Y3!qN>5!vShz^8m`W&b zM#vusnx;}vW2@^i2uPyL*)D!ftT?cL7osV2=4*UgqIdhIf$Nsyw_kSl<%AEgvt;xUVi8Z zg=!oJY3@VmWgPEWj;`qXpLg=K)!?gmmE9wkZjzsV`d)tn%qjin0S!|C0000 z7&}2mI_6#K#0-_}uvf|rmgW0={|&!kv}*OgWfF36&L^EN>ytBnmr`~$jvIaYTmi4M z2Ew}OG1_I!X9G_QIJC#4`i{;wDV?2wYckRRoxeb$2@vxufOBy~t{P!7HV{A`5ND#9 z;WGH*vjh0E0gokgw~t~-;BYrre8X6N+l$DlN)+pStpV;=w&+=1_VJSrunyj&PKIY_0bxu|@Ag)= nQI(NP!){#sxZ!83Rww-e3kYs+utI;v00000NkvXXu0mjfIKH}9 diff --git a/graphics/pokemon/kabutops/front.png b/graphics/pokemon/kabutops/front.png deleted file mode 100644 index d89cb33cae9c607b9f9e5be277672408aac85d28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmV-I1HJr-P))ozg>eTw+&-pb z3_U`6#{dJHCc$`QI`x2o4K8EHwYv5GhQ<)%Es`J1#<6zZN*#$p~HE)_1_> z<3cU`SPNKB)47b6wLm$&OSY^pv5RKJR(EvwoYn#Cjxm-Bq`A1^)2RY0w&DPbD9RS$ z4fkFpc0kC+i;(Y!@4iB;LdbayOJ1Gi)V^+@oU5DsJ? z>j8}rn~+hOjon?wYN>arPwXKcrKOIn3l-3MrtLtQ!Be790gxR89pS+}26$cGVnCtn zVXHve#}(*nzBPY|f9-oB1HSFHHoBp4|5wGiGyuI-t2oihJ;!E0zE)XW8BZ zlc*>jsOR`B$+L_e+*3W|K#sf-idiwuvb0KQVN$GJ1Z@HM^pF@ALf_V6iHj($5IR2! zF4_YK(W&wg(2}fN5Et7=oyq`$ynKx5xVi`}@{w!IcPIfF;IN#8hvqE*H`;rOhop1JMPx#Fi=cXMVQc_i*pcSN(le%Db>9Q5D*aNIVoB>2&8i<*x1IN>Dx4=C%IISJMN~_x&A!1cCaZ9)wcL zr-;5cB_MoISpgp+`cf>*nnjg?fJP|S1nRSl^dgIm4e&7`06Nw|om1}ups&?jiy=@H zpHz$4G`W77-j@Wn)p4v75xJc$c)G1CKpn<$wh19n0(f>GQsYN@*I8DFc^GCh*ES1G zCYk`IVIj2Vh{VTr_GOS^tDldA!UYgKAK65{LnMFP!2s9iY<-yoF`SrA5X{CIZo#(f zTMt7vvFWI{(0e-7Z4W|kZkPJ;dO}DJkV?7#O+YbY-tuaL=QM$G1Ym%8)0;<+`T&%c zc@orPg2*Pd7*}a$f2Mt@(Tx>Vrk*RNOU(h`PLg&2mEJLLHe@c>s2U zHZk3bDoD#x7K@tlzILhuyeEWZfUg6gMu4qzfHpvf-K~vmS?Yie(TU}NAF=~@@{EJC z)&v8VwcPECQw3W=SU8!`D)V#zK#%jnnIixMI+kb-OqobXPcGQjVQH}ykdl3ofP&rt z3OxWx;(c|j>C_nkURqu?;*qzd6x52kijAo$g%9ZYR{{YphwnaJAyZpe9x)*Tpl<-B zOA=M1#vXwS$-6u1Z38Ix9UBt`>9%^>J5MEo!6yyigcgrPGYFeGjzXaS23GLCwc zXF&XM1i*zysjX$_E#wy$+W}rn`pFG#Y?BQD8v<~xC&4yU5G3qCJ#Pg0Zc4K`?U`Wu z&_6vq)uYV3yAk?YgS8R}u$C(9IF(o7C5`sYGYRPl@F-q8KfOceLm3EJH(};`9`*fO zWz`Sb3UPOY34?ffTe5+JBp>!#K+6@uWq7~J>rt!zlN+0j-z}SaiCQ2a^*g>J00000NkvXXu0mjfzJ8TB diff --git a/graphics/pokemon/kakuna/front.png b/graphics/pokemon/kakuna/front.png deleted file mode 100644 index 0115ad4f9f6d07c6c4a9794bbcd122da7fb0191e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ z;NFs;E!7O)u6q6dcD6f;ATlk7srr@*0)nP z3LQ4!aORfi`2Al#CS`JrwbQbDtt-3ZSj4`3t$MX``M(7ni}Ox+2E@9YI4+?Oz`gN_ zdgGS0@eOPb!{r$^Ni{r;j^BR3@c-ue@>S6r9{<{M-cp)jIm?fSoHJAp+`fF^cftG% z#heS~iQW0A{lv6Z;G9^Qz|Lz2lnUN4UNK2GWcxVb)SN7%$wd=FA}(59*)=&t>4iX0 zNxs|6Bez6&&xK}0{b&&0_DJNgMdS_so?9%-fAuJ7DW2y$3QM2CBdslrg(4sNMOvoSEiIhe`bjO0;h4m4wgg7c7rY9b n+xN|HiTPx#Fi=cXMVQc_Qb7=EYEp}oV*me??$w+S5D@tI_{hk}y_9p5b85X97~ZUd-n7+} zYKxFyXsHF|7XSbQOi4sRR9J=GmhG0~AP9!VMvQct`@h`fL)0Xi>7MgCrF;8jiK%=}g#AZ^Lyk?m#jl)est0jbGjgew1D zAA;&*wX~^x(8q`&B0c~iIsj19fA$}9M*ieA!2`fOBa}h}h~p;yN?@NN$NbK$7Xl$u zMnHT5&<~4v*WUQvO9ylUQhWl?&rdlS&?N*YF-PDqMglYWW3LO`^b8pE4A{BS=$zRc zcL%7BP4Z`Y!kz*J+G0Fb)uCl;y6 zBzYc!{{V{rs{@L8b0?j^MO43`enCLrnJ@r~tyc)*$W|d0=$wv3wAxqz0BY$Vj&YcC zOU50bdC8e154wZ3bWQ;1Ut}(ZGEye!d-=w5%r4diDfb#c@Syak2zb%!U$P<`0z01s zaDw@$IRx-Rgqje~3tlgj76RzD=^E@Nf^#h7>A4<7C)A_EiQH1P3j)o;0^s_snjzY| zhpP~105pAtfSpgy!1^K_w%r1d3_61Bh(GB&fTJudx2EKTdPzL?2Gl*1HOkWq^Xv8b z9G4It0lMAtu(9J82lDxRE+ITOXwNY6&$k2c_}~@r96|$a8y?5O{@UYEldF#+8uDw z8-VTrvb90F$WtZsmJM|`ukPz$&~|QXcarL901!L_X4U~x1(T_h7f>gYDFNyVwFGDe z0AC~h0=RW0H!SUHpXh5xYZK25(EHGh0I6Q>UjTG8f)j&8-?{^=0KwXsu0!T+R(SN5 z0v|ERZq5~;hC!zFP>_a~tM?&{r;L=WSKT)I-ORk)N0*k222P+0m@ly6357Lo|5@#1_(Ab wEGGaI*{)&E28`cL@~B}>z5fm7pY#*^1H0}!xFkivT>t<807*qoM6N<$f-`8ong9R* diff --git a/graphics/pokemon/karrablast/front.png b/graphics/pokemon/karrablast/front.png deleted file mode 100644 index 4d2edf923b3091b60ff54f16add2a2f72fe20032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmVA>t5D;+C_$VkiP*7Mvkf^Yj82H#2z)%4A`1o*OAOHXWV?@Gz0004n zNklTT7m)5@t|{%gmx1`p1K#mfFKEU zaj-PtEOzz-)NU>0GkC4*y(c(1^bJ{lKi>b{&$DSJLp+;C7z`52Q6HI8s7dq@lRV0_m@M88f6>AS)YV@fcb^aJsJI`)YS!|A^w zrqgFiu$?$W>`y`;v>BzYgOTgSK@55!yoDbTSgyaKKid@A# wS}0=2buTcYxcXtMPsj*AeYiJlQ~$cY0a>(_h07*qoM6N<$g4WR8P5=M^ diff --git a/graphics/pokemon/kecleon/front.png b/graphics/pokemon/kecleon/front.png deleted file mode 100644 index 2674a0d165ed6c03ccfe3ef1e4fe86e96d6d1bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)0&bA|^Ns8!-`_CJ4chVpLb1P;~8nQO^}a)!M=*MPfjZ za`De1OZK%YDfPmX)S!#5e}$>i7Yq|p=jIa%+u z){k)~Hvw)G-)nu>|I+KAI;lA@<^7{l9}U18cHuZ`_?a0Jh~2zm%-QUV!~g&xCA)Z) zWCs0(xcZcu3`!z|(&4A{vMQj*TpjdUF(J2*mppT#bHqt&lO1O z>Yoc1N1-ox2>P@*et_q*zhprw;b~D^7xMZTUXS481)!W`Hk-<+_d3f3&AH&q!0*{K z^UhnDNb*$p2#|jjo%7b2Y{2Ij;6paAI~%f*_$bg2xk$5}4S6VpFZ|_hHUwN&;5D-* zrI3LE38>H+xOA9u`QB~#&3WOW*GvPM1_)4@x1p?NN(1!Ty?Gn#vUxH?o7J3u7lKEK zH!pZ;q#cHsOzc{KSN1R9R#&|WSoQi!1F*1H>;LNd1EG=F;Z<`|0ssI207*qoM6N<$ Ef_Cy(jQ{`u diff --git a/graphics/pokemon/keldeo/front.png b/graphics/pokemon/keldeo/front.png deleted file mode 100644 index ffc17bf57c7058114ac9c5a6a76e67c1fea68987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmV+l1NHogP)E`sDWoQ3DWMHPqrqI&F+&mA zVi4v+CP7WADR>D%H)$zBFBv-Y19a<<_6vlxcd{v*EV*mx10L-6cklDO@0}6)|776V z^#{&hfQ9Xuy^VP~|F{ZpFfklTX{Cijwq$*qRCO@u(iTt20)3Q_kGUZ`t@u>|>w95hc4kkcpN{e;T!$J2Hqfb1l0^}#gW^h~zoUWP)qw7jo6gZ=TzVQpM_2$Iaw&Z6+>g9QA{e@n#DrarqGpdERoy#*LRxeJoCrPf zcxz3W5<|m;Rsg~vv5BS}aL)j7f@qe>wwxSeL=0JHRHV=+SuP~$n6g)+&!*qWG#x4L z2oUQ1$gE_1>oo!iKFU$#QG*kQODQoe0JB$}^dutzy$^AKcw>IWrvtn4I?cwEqVSH* zxA2aDH(zPc@~=J8B6(A{aKH5bHgM8n&}s)7A`0*TBuv)_?Oe!fBjcy(v;cH3J<^MH zqzHLNL}v)KgnX}S0^ZKEZ!Av5v>Nc9bP;0;0s2uspRl-}O{xv(utto>iR$(t6!~`t zUuV>(0;Fbnx#s|MX?~9Nk0H?o;3ozH!M7ScVPh# zho*)9Fv}V<^l3M#1&4>(JXqdf)2DpN z>K0e4RXpsO4HKfS?Cah7S@kG`>ouvS!)_Oog;F+vuU5Yhz%36&6R=(_0YKS32G3g> zk$PBL>|TD7PA1LIHO1U)L}6kh_|;}Br~xsS7+kz;g-|V%&?3^^71SoQ5mY{cuUY_3 z%h?6@KY)NvZcEAnQ0D;u9MJXK07b{Hyv3Gs;0(Zx-r_))80=@JtVp!$)%pV#XR_C} S)NiQ(0000Px#Fi=cXMVQc_gDD9Ai&C^&N)Qkb_Qi`zF(BTooO4nTT0t@Y_THpwLI3~%y}jlD z000000H1-x#Q*>Tqe(pUy>I;@>EHt9QZ*pxsv_umyl{2cVJSYlAF4$MSk5VJSEP6eUn9c?HB0O5`0t z_JB+v&dyhcC5-!W03=}#$OPuI8GyhfAogtlYjxsc&S$};s2Crv&tg3VasWx$cgzq( zRc5p1!)dL6L<3Oh_4={3W5=adUHTmWOA3&%mPH$Kv85l2i`TMR0@;B$JZCMQF$c&7 za2{F#VC3+=P`+Ps;Jpm10cHi^{O}7(pb-d)*Aw1Tj-V*Rauf%M>B|YAZURb&-ZZ7) z*)iK^0DO{|1+fiBf>x~^$y%+2rio`4$bP^A+tPcqg12+H?L+H*Aec2FV%+E#*T4?i zTI6u?cf|>|p{acUAk*~gk1gTS0hVJkr{zko7J;ash-Wb2;qwHTj0*<T4RX z9Xlgv_rWom99@;@MfbsxJpSOj;zk#rDb;#@uw*$=HrG3bNa*0f#r=1}!PbF`+58tu jedAx7$27k2jnCo_I$Ilmu+8pP00000NkvXXu0mjfHH~z= diff --git a/graphics/pokemon/kirlia/front.png b/graphics/pokemon/kirlia/front.png deleted file mode 100644 index c1858f76971590e650dab20b2524e36da013ecad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 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 E04=)K3;+NC diff --git a/graphics/pokemon/klinklang/front.png b/graphics/pokemon/klinklang/front.png deleted file mode 100644 index f49e126ee4215a2398c7d7e6c4775d0d3d24e1f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmV+l1oiugP)GT~(mSu6~2M?~X@Vvf2db)HfUnz8~Mc|CaT?6PtP7 z{_fYVL+6c5S>L8DpIt;09us>C>^LlqWlYjhJu|uK~8>M1We-L+c7) z&ZZA|44{FV1jq&fdv3Jl#Pe_AKEl2MJj-egp?w9!+38(?ICEG5u8a;#=Jjj0lcY^5lyd1HQ?q1|HK84 zy=@>a%6(is&~Ft0`MfSSazUD44bUAYl>E>sf#hH&N+6?}5-{`{9&49A@Y!q@kPlD3 ze}~wlq8Bys%TUDu0dIYLcAo$G4wG;Put|URbq&v_`J4CH2iDsKFYHGl@; z=w+mV?=Y1*Ouo*v0j8(;^ym5e03+%NU&^+%CCxERV|@A(dC-s}>dc|DrDs)nG&RL) z^fa()D--=_xm>W5 z=Hss}SL`CdzK-#PbxWd7dS~zU;EQiAS09%PkM!BNeNiU8tTx9IS*;k#foO?2#&Vbi;*u#?2<{+~S_2 zYDH%4psj(-v20MQ@HX~o|8TCh-AJ3&`3^8?+u$|fu!fmW0F7;LsQkhbz?6p9g|I5R zH2-QbRLCepNKMyglT?7~c@#NKwyOr8lfMa?hPW4Gh@xXz1kiqC`;6;wYB*>c6R5_M zW>L_#XM&lCsE>;~0{vb{BFZ;h@Ot581qb|I`86)tfoNM5Av8eER}uAc1tjWuvE7hX zfz`D(RoeD-b;*$T|E4t(;3w5&CH=Ji^MLi48~%g*4N6de1#!LzP5=M^07*qoM6N<$ Ef^C88O8@`> diff --git a/graphics/pokemon/koffing/front.png b/graphics/pokemon/koffing/front.png deleted file mode 100644 index 621724a6ed01f6dcf9008ac5731fcd73048265aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|@P)Px#Fi=cXMVQc_?$v7c?v%x}DRWw!&Asldl+8*hS`ZKr`1ttP*x0mMd+u|K&CRU# z?#%!I02Hk@djJ3e4@pEpR9J=Wmfd25APj|Jqz2dN`#7p}&Pu-d7ZYe%V&=-dMd_+0I3N=E_3)rfb6qS@7& zXcWPra2ba&?YwUZKtwW^z>z)N+lPxW30SwU1+;Q7xSr>EV(1XXG%o&%x8~4;^nT+% zXEjw&^Yvzz1rh~f__fI8bDqfrSVE8zwR!!X34T#TIJROCN2}2V?}Fg^J(*wPq6?S@ z>Ik?rtu$?3b03%s0aa)|7aL1JpU?TpmQ0?f(BlCrYDS!k5nJFP04afxUoe{_RskMR zNZHHWfZwaZxse_IL1pcVTJl&D5pKx>C@!DFjMb66TjEM@OIuOTMjbpyu(o_-H@CS31>w6?vv zQwfZ4jN1eSJ69SD#g6#&PvrCb$y-4CUBe$kj6a%()3eJ%0Jp_>dVV?!74IpDZ?Eoa rg}n58ySt?jMqFJhyb9iS+n?Gu`Px#Fi=cXMVQc_-Z?q{b20y$00000 z000000Mzr^od5s=3Q0skR9J=WmFseZAPj{K5(wD$f8L%1P;u3|Zhv$-o|#VD#q*J? zI}DE={V$Q~6Tfrg==>*sry<-WFg4vIu&NOFZVVy(7U5&S?M}Qy*qxa-a-b2~+~eN> zn1Ad;@DBcq0QhxmyAZsi%Y8Jz64oIA0Kz4JH@gv5At->_ES`43yIFk>HIVz)E``dw(et zExB5z3gF_{1Sqg4;hzB10I%Y%1XMar<0@3KM2`tW$V&=T#+6p@TFKU`6M)PBUsldr z<2<+HZ1ZXazY76@%|6-6wYhb*U?5l>>>auXND>7EKS8>281ZTPvUk2c9#SP7EltX- zo#bia;+ssmE8dPXx_#=;iDQ`9jPQQ}q=0HrK%2SU3Z#r27y!E)#k2dVEV=btr8iwwt0wW^;tsQHauR*9gx5|pS zVwEKOkL#Lou8H;x#_daISg%Zr-L|}*bB+m>kevJX(YCLa@Ephbm`klVA1&l6FRt1| m%a-lIEM3wT`RLK3zo2i)fD=q+lCZ}B0000JaY*?<{;1~^o;vEO11ISE zs_O)P*9kb0diZq;3iS#&RKt}o3=^^Az zuUsbt3S0+c8#n7{1FG;Aas7O2H?$7FU4y_GBEH(a{Fe9}=l~1|oYX%P8KkN`XlD$A za)Dp#MC#aQURjaBU_QXLF7;4&x;?}qgR^WwMa*)@EJ1Ye6HMn9h}Y)xh64*+!wj*$ zD2p#s_5i#L4&U7TxX+3u2l|Lo$=S_rtIdS#fmV?ALdbVp^U=obyhq*BZ33A8T0Pqb zs03Yz?@P-K(SS?+1VCEL16lxH&EWLZ+Wb8OnkjG$c~xckipz_>!7G3$sM1Zd#gBLZ$ZK3yk{W=z!z?~`i z{9knP!IZHB&`s3Nyr6GCa00D*&c6qV2TDA~zl%SbSeDgZ9y6-|0000Px#Fi=cXMVQc_Vle>TT2h=rF%S?CF)2AxNKgT9jaH7wuIaxU>9ki5f3b+ zl;$enrrr_Ye(0X*%voa>#WkVjPosCjAI*!E+z6rphGc+{0eB=q>L)2DYo(k!03}>$ zXaGnj00iy5%B2K;!Hr955^_#)4Y*1J09LjsE22nRN~%@q;x8qLO#pnAijJ>w1fkGG zT8CWi1PVy40RZ?K$1lwwWQJAS;#>lf#uyN`dBzevU?&v6buyg**vWxAg-j6u!t_0< z+Z%z1*%j7E`W_?HW)gCPx#Fi=cXMVQc_i*qqjIS|F1THd{bDJe0uw7nP@AP^7`T3TxV|NqT%d+wB^#l^)i zFgO4J0L`tyjQ{`wV@X6oR9J=WmRWA&Knz61ZZV`5-~YN(#cnBHV#!o~2AClN#Bfqi z+^J#sZ-23g$S{;5m*sUFrQp{!g48MiKwmEr3S^MhBIOzZva$m-51?L^04@4uT9SGX zseU=+s(u+TxzbEESxf3kFv?3o7&Yg@2A~`zFs3s_a8|I8U?>5zkOZLpM4B6wVVIf2 zGA=j>WiH++wL}ydFNmNc9*i=MwT?1o2xVD3903D>=;)e>f`pCH0>N130Sg^qFr121 z8g~HdM?zsza}E%&t_$NvAU8ZdsaIWL93`_MC#Jrl2iSwi9e!I@E%cqv^2+n1Ij|pbv$xNU9$V zIQ~-Bm34Ggb~KwZE^9~NL+D2qwf6QFIg~>Wz_%>{XoM)OybpcTzXy9^ay6WF}cFJxTIGkx1<>=g@Zg!Ua)T|M0l> zn;J`_Gxo1OG~aU-iwCbsLyq9D?e<9vd_Plu==T=Q8DW~HsM)K(Qvl9RyifCtpP4J{ z>0hUSp1!0&HqSrpx@q3K=_H6Zi_&i*V91<5bUPQm$((yjd3M5my8QycgOz?$`B&@@ Xw{jV{n@N#>00000NkvXXu0mjfoXto= diff --git a/graphics/pokemon/krookodile/front.png b/graphics/pokemon/krookodile/front.png deleted file mode 100644 index 3654e8360b16890dcc189050ea433f7c4497c3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1152 zcmV-`1b_R9P)idrl0`J=#g+fmK*VtptQ?4^24Im4N*Ny|dSzmIEgv(E~l<-_SR9 zGB#NrLSpR)X-d-mIUho-kG{7CMK^aeSP=*w&qNl;n8Stkg0|ahqu!4ff z-nYD`pZQlgczu)tE(DREIPX)#=v^waALBngs>yjxuaOgIlo8+>ayF9?Vh=N-OA z`E_WNPr3kzfy$Qf>t6`0(c*to_KT1J>`(j9sGS61kTwLr3v6_ExzewPJhEYb@*C8x z=_pJaIZj zoTs3b9vri3v&3e4vzkF26%R+76IyjSLD#{LlZs8!~-f?A{t)v$RzeG=np|_T!`@Wj4iEVGjCr0uVVL{kw$ob~B*TmJHXx z0KG;BHMr+LLer&$<#MjiB?C1dy~uOK;XU6#uj$Hw4J6evAo7GSHVN>JIEBtSj1Dsm1ihZb3fVG0rgZXascDFCq1>%m(zfV;FYQksqG0fqC2 zuk(5*K(*Eon>i@;DgRbv;GO`jkh;kMvy|#XHbYX8?M=E=YhdQlfIrLqEC{y+=#xhw*Ub}-4}p11Yq7zYIMCDiGR=J_u_rQbEagl66Z&2CCO8sL}$ zwQiC}{3-?5hfPxepMr-OFf&Bhy)*g8_+^sKVP+`NNxjMo#PJN60u~m)qXy|5KFeo7 z{I`&g?=%o1D1zi}UO!If@F)z>ADSe-GieQk5QQe_JM=Lw#9>VDL%vTojpF!a5kPu@ zOcylxF8-8*+neXWZO?$7{S+`gj-jX07L!NC`U_w_R)^H-t;%Ww)D0-5V>i8-N;g;1 zH5>VrU24;~@F8Gqp!4~I)Av$G0W3Xvusk_ET>zGp+wZqWv(fl;@_}k7Rsh>4R}=aU z&tiZ2VLDO8JYxrEd~xPs~v5v&A?V9gG&=dJ-1>Q2Y<~zA;iL S{E7zv0000`T7U~ninSfKcT$oRO((D=wOb-_%g000A! zNkl7`)MxeW#N8#IS5+miO6Lq9>^jO19`SROFOen0*H|MxV~ z5JE`JBAXT^%^lLHW@?Vr+%cR@z+Q8gI(xOPDx$f|7;Ep|v=SqYfm@-gS( zi%OvLWjN&cVU++6heCwIi)vsxyhiBas1g`r$}r?sHE=D&coV?IH6Mn&R{^vJs!cu( zHUKy%J_H3MYXBqG3Z4QI@#7j`5)7{cm?Dq}zU;L;HoFUBI30oYSOic2tUMLN<(?1# z)*^s@{+G$S=Vb|(13>@r2$n#HzoI1*gSi3L7O(_N7*NJbCX@{T&cb`31ChyJ+3%SI zu;?J5Lz;1qxWFT;oHOXVX`22jC+e5%nK6{>gt+WD)$3=b0N({^F=F1wFj=}>H|&VC z;@FSOh;)~onEB;gtu(zjGNhDN2ZI)!n8&}}{+`|hpcm&!@{=oVKkD-Hyp!Yf_V#vJ zhqFY8ulfvptHZ6XN@}JWDC)^VfFA+)(vHC%Jl6s#S`-3_82M7RFod+BXI`8ufg4O# zIGhQPd={(# zR5-(J1%BpVTEu860n#4j7Kf^Sa-e`r9{#NcWKcEd`du-?eJz6?C)uap{khr<^$f3> zimM_hEaW!`(9&Kxyc>D1lW`6l9<}Z4pZO1Cb%$fPUu6V|EV~nU8zy;CKZ#H>s(q-&B*rr8>iT>>pDLpjVSIqM zYX6fNwbfizNBFdhQNOWzfj73_VR~Yqgr{dR73lQxj}=jWtG`ep2Xt32v$v}pxuHEM zfUz2G8Ca(21os)PVDi6_6@Z6tB&=ey`)f`a`;DH%)$|mFoSg>>`c~p1-^GFeFOYZp>9H-q+6V+N02*jCHx^PulAu=!FDpIv+RM zRRE#XcASq$W5a=Lp#B!2m30(pZ@9d$(O>@oJ`wRxnD;k~00000NkvXXu0mjfGezgp diff --git a/graphics/pokemon/kyurem/black/front.png b/graphics/pokemon/kyurem/black/front.png deleted file mode 100644 index 45b31238fde4f2c76b7a94a90ce637033bae15a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1228 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 DbM}%5 diff --git a/graphics/pokemon/lampent/front.png b/graphics/pokemon/lampent/front.png deleted file mode 100644 index 2d249ae93ec961349e0c569d9ec10e56514ecc4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 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 JPDHLkV1n55R!sl^ diff --git a/graphics/pokemon/larvesta/front.png b/graphics/pokemon/larvesta/front.png deleted file mode 100644 index b2e83baacfcf46ea64be0fcf5c3702c0ee668709..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^21SyDdg1O)UI@_WS`D8=wvv2MDaFUm$f`VA6Vix#rcnJ!+ z&iFl;?o%71;cIY+Y#rk}ch%d~hCQ-F75RSA<>yF+D|=`=p^5^-7a2h6o;@0kgTjWy zF2BULWrX&fsWWyaKLuGGlmLo&P86g`VL?Dj?vs$yg+WM7QFfj2B(Mo-i?Oajy2Q~B zr_Nh&Q*;x}W{D7TVmLGWu7@~{Vbpu1HtWoDojC{74soDo^;{<{E_mlzav!2g^(8ze fvXe{cI{!Xj!n3hw>Qzv100000NkvXXu0mjf-MZ%# diff --git a/graphics/pokemon/larvitar/front.png b/graphics/pokemon/larvitar/front.png deleted file mode 100644 index 1974d284314bd45bad1a0d274be972a18982eda0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)+QW&)Map%h(EV++e*&~EJ2B@t0{3&fb;5kZw z`X`EKso>-`5!M>LQZcB&EsGs0jQU`S{aj)$2SngOj_2{`*qQEy&e w`C*jp7mM6m)KCN#>TOrm`L5~-?s0AW0mQgRWfa$iiU0rr07*qoM6N<$g3oWfumAu6 diff --git a/graphics/pokemon/latias/front.png b/graphics/pokemon/latias/front.png deleted file mode 100644 index cb84e81c036c18199f12d3eb8d040f117ca5fa8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 zcmVKlfQ4%KorLvS+X+XCPH0v%|JIRXG{iu zD9KBAKu8%FDvZviY^2Ir9wO0`>{CZnfz-J|mDQ1z36K!~2pcPG<(+@DjxT{f0N!9r z_dfc3-#sUW@xN--y73oa%fW|j{~55!&gO)kjs4N)oK~0E1Yoie=#nX5-_aU=@v=BS zL_kkqqIkb}7iVVxn!u99k@aRb%Q6^gf}j*UCy=p&Gi}5qDo1$MhxZ@8X@Hf=BEotF zrxzc;Xfp;f@%D4z@HBgQ?{jlTE0R)_m(11x?LbQ3xdPae<}JghoIr)eCjgB_Tf7Ru zVkdjF0kngfz%VJiRf<|hSQlU^L0w_-^P1qAxH<~rRRNZ(fa+_sH380%EAk&DqfLS3 zR0>6eJXsZ3EOh)z0rpKE9h|QSLLLiIDaPZGEmg5vI^{gW&z1xIKESpDR_~a`GGTsU z0GMikL5FxGDgzQpJtB`87QmSFY<$gR*jSSyUUvZqc|>fb&;TU5F7|tb^bwpT8eo|2 zfFLj?WCVNKqE+4Ax^+Z)Kzb8^P*NQ*AEwa}v8SYied*~6^YQX$)Q8U4RS`{qv3-Ls ze{cq)fvX}sf3?peVZ;69cgetY8Iyw1`V{#0=hE#wke8Brp-^jOSl2+nc_gW0UjCvy zmJ0CDa*VNMZFi(l#-Ya%z_lkH3y(Qpl!LTB?a+K^^J^&(J`GdMotGD+<(4oIj5L zgc}mu?@!P3yyy31gvKjZK#SKs0W6^MIrfuLQ|n6=UdvRU{0~T#SX!$s7Zw7Q``c=v zh|_`HogJ(ev6cqNpFZqhyZ{({aer*9YpFoy^Bd}Npp^zFuc*IQ#HqkDWy5v+1wc`u z)EXJzZRxP0Cu87*Gqf36v!W?j;!X0wA;x*@5f(lUpGX0hobkAtb>z5*I=VeQ$;f z36`?{XlCGz6V4Nnxq|S$uww#0ZP@MbO2!iEWzq zL>#AMoluVhx(U;e*6+g!aNI$*4?3GDBAGLZbt(8K$5uz?1APn~Xj@YNjpH())mr6% zWVg*WvQT76x`Z+>#l)L!DdD@opGlS&mZb7{75~0VFCzZwwQd*HnMG9nAIE}Pw%}mj QLjV8(07*qoM6N<$f(zxF>;M1& diff --git a/graphics/pokemon/leafeon/front.png b/graphics/pokemon/leafeon/front.png deleted file mode 100644 index 7ea19f1b55a0fe58620711f430e802ace9f7babb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmV<70v`Q|P)D{FgPd}U{FAasCekmn9#6rfM`ItkYMQe_&_*7+^EN)0007P zNklf#glL<0MF_6%44~7Wpn7bez1PNin`~iQ3)sxH2W;-6drcTrQK3(-zRkHx+@!#P% z_Sw1^D;}+W+7b2APi`Mz3E`g!a8VaQ@q*_8u=dG;(b=#2CBXG;V6JfTLo`NXgSE+D$Sp>C+{k?)fFa;+HUJKnta=CIW_>BNlvH*qI-zz%pWB zb8iF~CqO!d6s^wG#>Hq0u_1B3N?l4sUYulWb8>$z-9pK6e4d1s2C4;sZHD_j)xt5v z#Rq||NjZwMV{vCXeTR7U&3Na&O{O(a92DH{JW^cNj^c%oDv(1W%D|^yPu9|%x1A?+ zlM)~nEdWFZ>V2)JvhCR^x=9wWT1o)xUzLuPg}E;caL7QP4wWnuvidQOH%rN#)$_C3+JIk`q zE9!fDu$%+OWMj*u!-ecvFJ$+g32>8qVJ5(`Ek9qz?!E!=xV(NA0L?nqG?178){?3E zaPT8J2n@tfvaWWbwInkE!^xWZ)@50C%^3__Nu1riE=>HAga6&EaW0a&PXm2yDB+;9 zCjwyEjLGE7=X#NB)@1To^fZhDm@osc4ntb?jTsX#v>58@%=jJvOi$@N{vCe-CS$}6 T4D;W+00000NkvXXu0mjfRcKS= diff --git a/graphics/pokemon/leavanny/front.png b/graphics/pokemon/leavanny/front.png deleted file mode 100644 index fe45f277dbfdaea2307aa89bf95b3f24e6b6b686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}}#P)a7ZYaPyhe`?1t)w0006i zNklnW#cd9ul0@AmD&DhYrMs z2WO*mn_vRq0XP6Gcprm}0o#mB`g991yHFa7pcycB>G^q^nXIJ)wYc zARU%vDXF~_4*2ru0l|jaD^V{$Z@}Xe|AL4-k9wU_mgQZvq*B!7bg-89rOYIeLNs87 zmnzESjQK-%VB5D*7M#DOMgC-4cyo)>cs$Lj$)ok1D?%ACW8}qs;ffF}H;IR}n=K0F zz^*t2SLC-#Ca`PA`@qRQknDTn_k#c5{y*gIygRw9Z@K^g002ovPDHLk FV1l0gHG=>E diff --git a/graphics/pokemon/ledian/front.png b/graphics/pokemon/ledian/front.png deleted file mode 100644 index cf066921cb6d1d2b0182c28a8aaba57fd342482f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)Px#Fi=cXMVQc_5D*YjQc}e^TK|KCb084^NH_U3cd z)zwf?P)YD(7XSbPU`a$lR9J=Wm(g*l5k454GH%2t(wj>jXB2x zB;($0fAOn9bP*4i1QZ5-Jr^4J6S)8nkGp=!77cFABEAE=b!3MdCF9)3&*QH$j!4}<;bSp}@iKH=?=PWOA!J9fUgjZ92;`}~{_cMlzX2%2t%tx2(K;W-Y0 zXP`MecuWF2@utAaO%3#epl3HTknMG*aS3!0$OS#SR{|}hFbet>5NVOqTyRt(4O6In zS3NsSaJC3uum!iF>H^e_u)TD3L7qO}ykLWEH#*V#S=W$MZTwV#k#dysLx7JgR^`T* ziNFq15$f+&ZXoLgFY*`sO^&medN=C>`8ZuEcs0%iY>!hpUKDjV*uJx@6rUdv!WJ-m zzUcC&VcJHc0EYhr(+(b^4Px#Fi=cXMVQc_5D*YrQc`Lu7_>n#_F5SKoFLWB&Hw-ZtfZvXw0r;Nod5s5qglWAg9cmUJ z;vbKP_g>r-K)mXW;Qf69^RBM|@9yeDl-7X682Kh4MNZ9vn3&_eEGCW=q&5$Ij6{*- z1|lK5Zvcg$09ZMU06<4L0D2gL0Y(WJ`Dnm8iCmA_suAf%QyGjOmNsR_J@t9lTg&Jg%oTj(PYK_fV7dK6Bj zUgowC255p+b}{^alk59iXYT6QDIye62Tx z0-k38m`EdEXGu@rLb4j*d2T`UU|a-2HyN}|$Jqe;CbIp8_wP~d>1z^r+go_o3VZEo z?6p7vmqDPSd-w@37gD$e=nckLSdCI6mNMaThR`2Zo&01&7P7~E6DcK&imswq z26uHS2%{Ug66#-IUx-t2ji46FXpHpz=rmDToYQlFPe--{iem_d4Rw^o)k13(Fh)QF zyBFu-Kn?vEoe016w&EDlpbdYytxFs^&0Xq;|9^k$TmP;80k=38>Gs3DR{#J207*qo IM6N<$g2$pG{{R30 diff --git a/graphics/pokemon/lickilicky/front.png b/graphics/pokemon/lickilicky/front.png deleted file mode 100644 index e9905f1a650d7b7ace29c108b50a1aed8068ad69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmV8l26vuHTqb!wrDRiqUPHcB;2CQa_ggJq!s93(VsxlNrd4N{vF3AIs zy_L+)5Whm_Y;^3FEtwhe0`%N#j6X29s?;MPA^(3qAAjFtS1SKG4E9W`KRL$sdmV7x za`9YOpw&V|O^Q0{%+de>-Cy^*hXF=_V`%`B0Bq>SkTvjJLl~{U5YNd63j1IJOJz80 zMdPbfEj;9=Vaq1H8U4yr7;%1nutvQ*osMIuyat~yZWhyt?4k@XKZc8&Fbsc8ywVKj zJl4ZycU%S>C3+ahIrpqe_3yHU{W0fZ80(?30*b&_AH?O#-#$*3 z(W~U_b+qJy;!@e*TiDG5X!D>a0in)y8}l_LWQ~KT3Yg*c)MbGxjXptfngSHLIjS`X z@LNZSmJog!P%#?vTF=Fvc)LAx`9b5Yr058@J1zr)q_l9c&8#w@^AM+S6EuJ7CfL8H zi}#pD4xp9kuU%ZPH2|q=J_)j`kFqJA$6qnN<5J;@OZnSw_rnCR(g8eb&t@#WpTa+R zl!$6V>M$w*=Bv#H;0<-5WJ=I1EZ~4`R6Hsj2DMr)f$ZYN=wzo;2TpN=eR7r$ApySZ zZMa-~yUIDEX1&aF%1)|YEIwfQi}Y>&uK_g~`= Xky|?S4)R9800000NkvXXu0mjfL>^U6 diff --git a/graphics/pokemon/lickitung/front.png b/graphics/pokemon/lickitung/front.png deleted file mode 100644 index 6a7177e793ccb251f5b040f67439a0c1137b5a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmV+u1MK{XP)20007> zNkll&X5XTLjoGC9hm9j)&w@R{9vd@)ZU;y9H4jE9Dp?j4N(4}+h<#j-U zILlMMK+^ULfb#_i-ontuJ0GKW&jxHrvUREYWS)@!KmK>`?s$grfBl736Z^E+ou_m_ z>@|(L3(Y5WCSDJ~e^h^Q@rjB4vGoM-G6%5LhDT%6VgmYCh_;Miw5T+WXRryt5XNE)Xg3bfwiyY1M1U*QCEEb@Dluh z01DUJuQ&vK&&Hl|oY)USf`R~hl_U{drAT)iutVrT7zS9fsMD`Rhh^s!Tp%C-2+9@~ zfCrZjd1!zhT0yCv^u`CJek7AqmSWy4D8(@8g}R>pOpTpc2+K;Q2Y=l>oEQ zZ{cJGP>fO%({!HezGThKw@ngzcjSdnv2HD$BwkykuHGWd!&ofY;5yq>tr%A*g_nR+w!~4wQ`4;YGh~!F*4{ctS5HoqC5W5 z65>>Ur8an0XBYTl&H6vq$Ck-AvwVWh0KiG(uR&j@*=i7T3cAw!XxEdvbQ8mBrjWb4A% z7zw?BEpx|C{SZ|a!oYXwz4PI6woAvH5a4^i_y50pcRt2maqzeQ0lFbS4p;z33C_C! z|8{9{kOI7;9-1(j9dbE_1jky_Ac8Om{6eA?4pls^#ATVjl5l~501g2Ql)I&YIPd~c zSXn}$%6#&0!G#F=t^sH{0$QNPBr=+y0jmT)-WoMp+QO1GD4;(x9Lgem0y4<@69Vi5 zMlZvc-zV7sCbR39y;&TJv}u7>M}D2apg+604L>ZFh6yDrO}VR+&%drYE-wtg>XdG9 z^Yrr*rY|^b1iH|l{+O=Q1)eo4yoVW15%DoK;>_RcT}@;Z?}Bb=(Bhm~!CrvbUs2#r z@Nzd>Ea<+^EM27{ZL$(naP#(o|wK>MtFy@FABss`q7UVf3nAZTr zEJ;*qLZ8GuKXPnQP8Q;Fr5<+5(BW;^E@IznS=^80o>+M zQpn35(7)VV#ucu*iAtYi7AYYU7$bH`oVEoYsgw#}3kAdialLz%TD4A%gaj}aV)xAX zC9Sgp*b+#RSnTMiUp8z88xt^+aeCbd;FVUMUC70cnF4r9w@U@^+o1a|-+7+${qtU@kymXp$lYgA^#(C1xUVfaL;F0tZMU zLcOd!TN4QlH(2hHH|!R{c$_}Ut1RB<|NrOrK*;|&AIgdz{}`{ys;~PXEFh>5oyH5{ zg+f$|fEc3F6F{>7AdGns+TT5Z=+c5>0O~>YB)|#`0{a%V9uyjdM~DG@;v?Wgfj`npircb{Jr>5G_ESjaJ> zT7BX%x@w>-3FK0p*jf!pONAs#YLWgJc?q*Mmd>IP)KmE6aY}1g@qwUAfW}5ViML0t_y4gPuZyC>{Nd!ONkYp5xpL6UmJNs^iTt&`A%MzTwYtRo&0=KokJR z6)Y80N#&J@60!wC!bMeWaBop(pj5$^+h~uw3#hS$^SFEwub_i9DS9Z6E0rQP<6IEc zt@9fGgp1{JhYKQC1OUdx%H>CHJVv$mwNf5e@kNExhe%{d>F+GGW&xBJ>O^EuZcg!qBpZ$f-Bc4l|xpIeuv32FKgSfn3=9%OEI zXS3N~(HjH-X%pxojTh>>v)iobjZhF+A0R$1s7f6rCDF4TXFcRflGi-!_GoI)@IEd>#dM`8057G$Spqn%Iz*gH!ALH6g$ z2=0<4m|wgAwqZ2=;8a|OmMmqo{0YwJ1F+YE;R+ZBYOo4aq>nWKtWJK^S_SjpRC~3R zQSx|?OW>b;oxqbnz6awa*z^I9I;&uk_8k|1>D2M=fk!6}34jv-(PXa8vsLC?fF>mO!p0^S_DS|9)b N002ovPDHLkV1lHVi`oDH diff --git a/graphics/pokemon/lillipup/front.png b/graphics/pokemon/lillipup/front.png deleted file mode 100644 index 50bf52ed1565cda9f666ddde029c283ffde1ea77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)y zJOBd=6ALRt#WS$*0+o0I+!i)p8IcgbE|Wj|w;eO~ufHg#`U4>3Pk{O^;b_u9MPDTx zp<)VizLj8>XkfchK=IA5cu$PXoKGf`xM1RRkkHQ25eU;|_h z2o#WJf@*;knMB~kKv4)y5jk)$h$IFwa*7II9G`(ikv&u}JX3lYkUgNs9I302j58;_ zoaO@v3&2)xF97aM$~_A(dcB6-=O;)IpqR#J`~o`Kl09z|K@f)56xoKt4tEMt8W?|^XfL>+ zJTmsCpy7N=D8ULB(XGv%*WfgfknG<8zXA!AA}Q15PcgG+gMC1#L7wJL^StxE`z6G- zw)J0Et+5LLf5A=slf>i4T4#vx;CJH#fVTFPVgJ;w@WSpI$-bLO$u+%oCRbNcjzc6Azlt2^D%#9j&3q+9srygQA^wD zqcL;|C6>sM=UA6+2;eBb$@YgYOFSEkHKO?x#?WcjTWz|4lWkwb{E9d0?Mb$uF zIx)Liz79H|DyJ5i+&ufWziu-7c6J*lg}a?^>tCqvJD{Pgr3=Dq00000NkvXXu0mjf Dd!iT& diff --git a/graphics/pokemon/litleo/front.png b/graphics/pokemon/litleo/front.png deleted file mode 100644 index c34e0b74b2162d0e9df126965363034cb17bccfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 577 zcmV-H0>1r;P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_cmM!kNGRY?KU5sKsYEc z0000W7#Q&Q@c8)f`1tq$000000MZ&pB>(^b32;bRa{vGi!vFvd!vV){sAK>D0h&of zK~zY`?bFRl!$1%R@G-acB=iMpNd%8!p$||tNUy<_TD&Rv0HPCnu5?;2K`80=U1PHJkMHeXt&!FnXKHk{UgSjyf>Di}m| zE_VXXSt?S9V%ZCUbJ0p6;hVN^g-gs@;x08Z^MVP!wuBI7f-HBzToSGsbYn?lVnGx1gCXMM1G4Y~m@{}r69&FcH7XuzQ#`2>BG*)JpIlw9uuwPL zIJcXN&2oaHEvvi)NL-L?HWQrbZB=O7`O*P9o?*KCTF}&w+y6S_w%lHV)*j4F*MxJy!N)deo0K6*>uP|Ff6MX>m+|(C@x_SX` z7Gz>hv<8?XE2#8?>ZcwAjpKnMg#aDDh%m5X#5;oz!@l@9|0qo}8gV~9uR+sTG~hYSQMQPOfooT6QGt7OfYr()6yo3$DRSxR?Pfw zcEoze)FXQztWbSw+#>0%ufeb8tao5tx~8;b;$!jLt&%ggi7eu%^NnA)_m+Z1$p0RZ j>k}V;xBc??{hqqK*6`-F1xNpE2ZffWtDnm{r-UW|>G7b{ diff --git a/graphics/pokemon/lombre/front.png b/graphics/pokemon/lombre/front.png deleted file mode 100644 index 022c1c0081be6a20ac525d8c0ab603d1bfd9c8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)Px#Fi=cXMfku7K~f+9003%>Ig6}0tkq)w|Nn!FoJy2pd%c{LF+t5iV*hiLtlqQ$ z0000000}5Lp#T5@=t)FDR9J=WmC=rcAPhve11O;W|L^X!MK8PAT;V4B<~$fpm_sSG z{rYDJ*$4bqb5;SDUeOEz8sU}07`k8v{3M(RRfzprhWtMeoqyc!2=oNO zoSk>Ete!#Z3P8^DfKtl3ELfIxl@9=GsZ|MNkR`JxAYt40S`YV^AkzTs)J6nFz_h;s zwym0fJ^&+Zng)tBFq=aoxZC#U^AiGcDLIQcXPS_6u{w&OWCcu~B4_hx8z|+-Jj5{* zLoRxIz@ZH(>Q%xX!~VmU!y1|b*wZEmr=RnsbwnNn$1uU-x24gWsO7 zLDPTwQ))9&ufqVhS7FuD%0{%Kw!Wfyz;Rzs`~&J$b~Z}fU=0of6^Zu$=oR>Ek&6&; zU(*Z#EduPdp9M-g0dEMXL}U-3GMfEt=038WQ0qGaa{!MLb;o}0rU6s~kh;Ak=;jXK z>uVud1oHRdbGt2uKNe^(J1jTTL*{~dM4#CoJ^F8b13f(xiX)AwMF0Q*07*qoM6N<$ Eg5z)png9R* diff --git a/graphics/pokemon/lopunny/front.png b/graphics/pokemon/lopunny/front.png deleted file mode 100644 index 44e188d0fd9cfa3fdbc5f559bb936fa4f7444214..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 783 zcmV+q1MvKbP)gS?000009 za7bBm000ie000ie0hKEb8vprurOE=U}(Q;AWJ@B*bsDB>A7Bk@+u+ATQg+8kj{(e9W3|95vh zLi}IV`5Um~2s^NxHoy*Lc-jVpGM0%Wy4&UmFqK&*rPBqojRmtHg zuw&XwvI!IeL}Lgm?(b!?;0TDu5HmT?Bs&~lGGMyvnN*p4)=e%bLOd`yNclu^C8-Ad z`w|Si*8AVnF?*c6H#o%a7*Izkj5$PZ08TzI@bvL3fCy8%=P^?>%4D+mk>0=%6>WNS zhUYN&iHOR%(GvcqM+dkbp~8ij0899Ay$%B(o*C%yBlSlCM04)9n~GQqp)>Xi7^-vb*a{f00XkTp3cY>@z*QYs>6HT_%E=Mm zDuuNWEB$BhBBzHzB?nMY&0~wS{8B|_Gg(EcPzNj)r|}?KL@E`QTN=`a0u=>)nYtc2 zp7crYQ|${}l?vl)3sI)XKvhm%K%c-7p-iNQhns+PyU?>{l4l6FO9Qa9Rl=>0ZY5aD z;O7YG72Q9(dOIO?hC7;({t3y3~>=KA|s9m}`tiOeD zh0BUI^5>@qrMs#p_)`nSP?pwPu4zWtJY1rrVF;GMC8p8yHXuiu&x@9EenJd1jmc7i zmh+}LTb4z6c9f# N002ovPDHLkV1h(TQmg;~ diff --git a/graphics/pokemon/lotad/front.png b/graphics/pokemon/lotad/front.png deleted file mode 100644 index efc92a04b84328ee9c2d7fab535ca26d42bbfcf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmV-3!lF{zknh*(<=U>m4dj~F;C?GhZIPcdoC z3hWzGLNaIqQKE=)8vp?yLF^71z+SQp@FNefTiE`rp|(L&2T<&#{2?l^OHClUWk1g} z0|cpanhd15y)113K=(e96R|)d7t7 zL4>C+z=YOC!9Mhy2|VOLXPE^QfHA%fV)nurpl7TuJpT6Ules=JOL>8}+2hUo(g$CL zov-S1KCk`Kmq3W;s+vw881U6w!Trbd&PKfSCa4MC!ot9~4G^LnUoFmrH{wcL=ZiIN iP5cV1`8jO#-}Mb2ByHwvRxrf?0000{ diff --git a/graphics/pokemon/loudred/front.png b/graphics/pokemon/loudred/front.png deleted file mode 100644 index 29c1e1bafdcb6dd11ff83c5bab146d50b1dba71e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmV;a16KTrP)riEA?-|>{24$+$6NB&W_wL`jhobx+*#cOz0X%#3XBgAd ze#Ul-kwSi!uO(xWi8-;7!+NYmXAn!#p)FGIAeRIRWMg5DOb$i2p2)Gq>_dSiC!!C# z$Hf0Z zbss~Na-~9n?2+6_KywYQF9DUaTm>gLZ)QHp?cK=t8x&hZFhW4jI#8Rm1~+u2*q#oL z+70q(fMy6dV4$+y8jKbs_ag$_003A5niIro_BwMhpD(bFV+oiXz+M7XbOT^6f)M@o z*tKg)nR8gSsg{YYDQ|y?g*Z8#cmK3U6uh40To32as1TsJ?K!3Jx&p@|nVvQznxrdr z(`|ReeaE{$Tuh{auK==M0JGgWL0r%;0-%-v;79@(0a@C?c(KeF=!g>u=m_x?q}V}< zNoOHE&l56&j&*>Q%|sW__B(S=%Bf6IQ!%mG8Y=e9{Osb~JG<}#V0|as)8mUk&Nl<< zg9JS9?9+ok(#>_C*}D^3e{p7;E2mBF;K2TC0&G?<)A|-n}FcLX#P4b?|Qura*`M8 z@;%7UbPbAYSy6K?Y-n@2G=W)@wb*H(Wr7=;iKS?%8npg5V`pI0Qo&Y$D;tNs@RSQC z>;CB8CnufKj>@rr4e1EqDj@xL;vcp!K13DKT9{qN;3l>;^{69q-O00000 LNkvXXu0mjfKKtTBT_~77}NI)R4uwbAtFaQ7mmLv}c0006i zNkl=u>=4*fl_Rk9A(w0fDRsxbEovz^ef!A-13fVEvP~LU=E#0XG#w#Hx(gF+VmR z&4hS}N|z8j=ZtCp5rkEp3cz4Sce6IpM6pQ&(jnK*90KugK%F308u&{ z46curLQHZ1h1Fh%4BmY~P(Btc3}A;T2?(Ap1C*A`MLY%|K)Zz)TuRdl%5yxlRS9r+ zthNK~pUT9DO99rftb21x$Hl6q|N8#%Hnu5bg}(dkB8#v}rSs(G^CF!YdqH@9BXFn*FRt3*($@YU7VqCr!QL^pb^0~KO&Q8Z|V7zm;D7+g%^k}^ao z(%jPaf~P{$3@Zm5E`i~`89Hf~yh#*lBLbMa-LPnjHvz7FX|$n%hK{-O7TTuSUAaIR zKo;iiEddF#mw%OT8dmeMdRQ`^2b$p$AmPs4*#soj$6o`U`Q~ioz^Bu21u%z7Wh%ut zGl-(uDg-Ts(yCBvei%*H(@y_K7n`x%-*rB+W_SM0^B3MqpPDM4_M`v+002ovPDHLk FV1j{ZE4=^! diff --git a/graphics/pokemon/ludicolo/front.png b/graphics/pokemon/ludicolo/front.png deleted file mode 100644 index 98ac42818610b18b2b6f8fefe79a93c2c1708be0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmV+m1oZofP)u++nqSe_ba_G?Bj>MFTfEg~ukg@St0`x@+q0SvKq*SO=<%v@rgy-lG6huIY`29AeSKD)uAt>mv zK%fq~`g@!1`U8&>pdeMDsN1^_cdl+e{f@o)VPs&VwzK;XX*Zwf0B5q|- zECY?g%qjig62mHI)4oB@vkN2uv_~l$xgL2^meb^rm@Kd#G}1owk%;%dTqGwqbD4w2ge@O=|{<ct<+9tuLI zByA@Xgx=i-0qjIC?~R0JhbQfn5Hy+G!rn99d1q-_Ee`L>VH>c}f`?GU#~o1}f)wjG`3l0eLA*x~mFuWZ}5w<2B4!}Dc? ztph^R0NW0>t?*O?&H?ap@CY#WG45l8M1dacyP0F0;zc-EEJ5Y_PH7EN9)@>s6+j)j z05ovI=9L6gI*|^&fs~b-x#OF;Cv{=#1ckKt+41@4)I4}efEq?&uDz_8bHD^MO_m75 zs^UP4iy<3vFJB_m4y^J9j(Y_>Bk8aFs8X*Z{@KAVO%Cwmh@H9%c*-;ufWI~mgayyx zak0kXb1ihp=KZ)wVX;HGz4CV>0rzEjKr7^7k_qY0=s(v`z!-O|j9LHy002ovPDHLk FV1iF5@#+8o diff --git a/graphics/pokemon/lugia/front.png b/graphics/pokemon/lugia/front.png deleted file mode 100644 index 124a6f626ee8360b526d14ebabfc2a68b3567a28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946 zcmV;j15NyiP)tZ*?(H-paz~0eW1prNQe=mfTC;=YuI)E#Hb_ft2 zl%7c-fGZT#$_>%SGy`lO)M{Nsv&iFG2EbYF1IaAH1wi)z#WCzMHgXo>e^( z5wy4Dyp3`R07{9*JOThB`1vNYPeX{=kXyHah!EztL;*nKVT@*x_;UsT?m=f>F&%^Q zA-^nu1YuJMl+DAeJd(s9o&ngE0y*Faz`U4yj3tqX5WD9fpaOFvfibjU2eV{EDH}(q z0d;6m9kuu(dn8|d1b}}^TzC*d<|LjC_0UlWAtgXBzX`yGnUCFbc{X|pTmx`12LKM< z=b;c#8<7CALEtX{%#)aAkNxyq7|iBSCr$|@C-L^xG8G1=^P~b?Q~PB+hA!JCJ#T{x)DbuIk>er^lZKaJMLDuw6s-=`j_g1n$L@NmT)1$NeQT<7cQpZ-!)510cpqNOu1| zuOA*BhHw=~?MDmC4c)Js%?1>f(1-4z{iUzo0yKX2PG5XC7Dne9Tg*Mx~EWVXM6-LpDJ5arcYl?%EB0V1Jmr*`d-?){{_ z6ZMyr+c|^>$@jy1@5mE{c;{=m=$_Paw!Yc5Ptw4`D+kL@o9&_l%-*d_4Vw*|+PCPT zx_0Yl0Kop$1*FChl2Nj#E+&A+5_TtX5l~11liYHRBM*s)&ucm%LO=x$wH^&TuxIuWRi0nm-ZGy?b80W3fkP6YW-V=)MjhXX{%4zL2`F%225 z9RQt;GQy=R)$gya9bPc$VG=C(bJt=wZ0XLexv2J=e{rKg35I_>DqWa-< z|K>?Z!`?|8S7%7oHy^m-03{SJas3*lU(o};Y=J!r>Q+@o`@rp%B_PF`meGY<7q_(i zWtHubh*y)&0tYyj3Geksv-cbVKH)#VEpP_!J`n+(FnoWrKnR|IkXr(N(zF-NY0m)J zfl@XAY55Lx78wIsf*N4w3kY#X7CF*SgHbbeA^B2!1bk977juA!3}Bf*#Uk_v(n>@* znj&tr{E2G_EEJ~;E&)O+(_EeIS2X~s$(|dD*$h0l8GPo4)qGuqsrN}bfT7)b{s$1i ka`qI4^+BvI#C!MaFDXjCa?rzK^#A|>07*qoM6N<$f?k*w`v3p{ diff --git a/graphics/pokemon/lunatone/front.png b/graphics/pokemon/lunatone/front.png deleted file mode 100644 index 279f1578d141d168444aee9d4a1009b9799e2341..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmV-P0=E5$P)mLi5VkfE%- zAp=-c6~PuQV3KCG68_(g`ppmt9xJrg6(bllLnK((SW4*$V+4%)_l*oz%OE8BeE?+| zz_Q5Q3;F^k#uyF?28TfJ8GkQQSi|u=XlMczRr(4PRC=Zee+7O7z*?=H0pw26IRaqI zGv{0fkOUw{pzHu7#?a`y1zm(pueB}Q+s5Z;1F^)3nS8eX*g7n;1;oQJ(ZapbKs?N< ziRbT|&&^W{NQNnnT>2Y$;IRdqIPV3~Kvd6LN=&h%fJlol1G!l5wyP)VntF^ra~yN5 z9>_)|W8e-L7V}twqB<$^5-~v$W z!-NeF3T7NA=rHhD@#Du2jff8qR^0f|Z~!O;0qfp69tN^*db&7*W1YBUY|l zmb6;udC~nDSEF8}A7gmKvVd2?DzRmqu2Nh}OVx{HZ3b;-S%yvC8S@R8j))#>m~nt9 z_I*BQL5;_IgEa-a)E#bnBz!w`_}ibf@DuZ{C<}djaBCua-_99xG#I`unYO>f|9tbD zL)J~H(*n9bh%(5WILLgw$-;>t^h|;yW9Q`H*+(v};(D?ljA6vq$gj53lANWfHwDH}}~U^4V8B zm#uAL)wjaZFTl6pyYSpl)jnIv0ArtI$-e*Z{_lTJXF_i4pQ^tN*m<%AxMTMF_cjBj zxe?eg&Bt2|23Biza`Q^rVBFG;sQ$G-p6I~c5A`oPjD>w65=06ydMDsGsHIzSgQ zLbI%~$AB8|%99GnCYu0qm}OPW-n3qm(adUPq^ARjD;?g>^U(v#m=G$!svXID`VnH(AyjV=5Eiwe z)&YV05>IQr~zs)%&<(yk>An=9o6&FcT*qwk7%)y*1vGOVJ=wXJGzRbX`j)8pX< z!%>AQSoYMa1qf4)mN*PXJh{M5dIqCB8=kKhUz*Rn`6nH4<>L8zy7&)`7;8=1E!E$( z{o&|)`-sGwFR$O^v2K55e0_sxDHmP94f*<{t3$1rb{lW&zttaU(a?M#i?9p;0000< KMNUMnLSTYQ<1`ci diff --git a/graphics/pokemon/luxray/front.png b/graphics/pokemon/luxray/front.png deleted file mode 100644 index 12381ea362b6c942c9f806bd753eb250e88885f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%?uKNJwy~I8Xop00000`gJvk0008Z zNkl$Syri%HDQPU=H+B zT1Ex^0^3K}j_o0ZeyBakO)STzg`FniIOP5OfA9VEEJFU@wejQ;VCxZJW5Cz{5^?zH zRtI1oTF(y#qD`hPbStRL*)Uwd}`xpJWh(37?vdl)k=1IEQE$M0ty6}%~rrM z>LsQrVd4P|4dAsXtQ1*M0H@FZG<+v5AWI^kUQG^GlwhF)um&hgKmpqiC~RU91gz=> zbV{_(AQGig8oQ$dz`$aI0A_x!l#p2u0I3JwIwzG>5x{C65U?JYJ2zFTahou`0ssNy zoI8&Jnt&lK;HkTa0E}Bsq7>$AymP5mB{XrY)vBT_?b-ObTLKx8U{=X=J}Zg|93BmJ zmKhY)CaShVpoGI8F9Se%$_$OVL15?=u+2-KA>oRdmR}@CptL_P<})tF_62fnN-Ses~>0`Z?^UZ1Sn`*QTcYV&Jje2%s~6eslF?vdIX5fh4t^J zs1UgB1!mr4E_V@FbW>23SKLpc%n+!0fo;wp=M;faHSGbu9Am48=!fV9q#8d%VE-6@ z30a+Xa>)0UH*5a|k)xDW-6GT*JlRO{`6HpDYqIF%pjmh(u~^96HQDR{@*tSU?DQU3 z%R$vF4R=)7yAzwYmu(JyfKM?FOF?wJC0000< KMNUMnLSTZ~h-E|o diff --git a/graphics/pokemon/machamp/front.png b/graphics/pokemon/machamp/front.png deleted file mode 100644 index 205ae86402254b9862bb2201efa9ea6833b6454b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 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 T8JNsl00000NkvXXu0mjf;?&Yi diff --git a/graphics/pokemon/magcargo/front.png b/graphics/pokemon/magcargo/front.png deleted file mode 100644 index dda50c3f80f23a906ff1867ea641302192c4c9de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 915 zcmV;E18n?>P)|$AOK)!kT^hC5D*Y}h_J|LD5$W=plDe5fN=PLaF8GX23{Dq0009X zNklyF>l*O6vycR3WQ90G!D3>11}JeC4)g3$XtH`Qvg#BamPm*;9$TgNiTuu zpvNf!_YXBTel8xErwck9Gnb0rtZ!Af9(j z7_@s<5PxD;sOJ~0gJUbNd&Ni!eUMzF{3p_t+14qOD z;OKzf;qQ5V`Qg179RAb-RIPC`sK7DJ0) zy?99gJENOSFbRAEwFI<3y=S23L51Ax@Nk^y=cHiBFMq6R2u?N5UUqhevS zfmx*sUeX?AA-%Wd=nhbggb+f}9&gL>*Z9r`_1snkyiD0*y6{I20K!thvQqkYba%c6 zs%E+Rx$V&XmGqhDyRZUibdFoVZ+}<1IGs6Wr8D7}{TAWYTQk#Qur9Ot1L+7+D=t*i z={hyh24LurTo;?Iw&BelYvY*%jZ&=~6ts%cQg>oFQ7WmvJi+Pn5~{s?-H57AGBOgu p?@?Dq^aH8D`Px#Fi=cXMVQc_dty@f*eJa@Iq+Z@`1trzQeumXq=NuK_?Tb-0079y(Eprb|K`QG zI5@zlaIeJCeE{Quu}CD}A-A&BJOKD5hv*ZtK`u9RK{TwWyn1HcOe?cV`UCZYBX@N6F{#_RHY8_C4m0HPSc2pa&(5kTka z4M0%80ygyhaE9;+p!&Xq03fi}7eLGclv#`O4Z`&i0Mj^*#0JQj8X^o(`DjY372y$- zLja9LIoA&S%?P+ir34(T@=9oJz(9$#K<+;~hbthn0t9t9#tJ~YU;wMAwrU-!%#PlFI0AHLTT}A8xu9wtn6LSS9fyn?} zHy|AQ)&9c?KS$y`tDbKFrjL|9jg`PEvNt1eRNnv?xRovpOChRnfYOQmJJ%Rl&N;A! zid#@?LE^^*1FQ=jq2q!-=ffd>`Y$_aq^)zpPF?o^aSQ4Gs{Px#Fi=cXMVQc_#d{EYQZfJTO6I*W|Mt!QN-+=+5NaSG%@9HVi(+D8V)*#@|INL{ z#l`=NVuZ^W`v3p~6-h)vR9J=WmeIPSAPj^RC<#LC`@ikZBw%gN*7|uacezknnV%#i zz%>1Dr`tSV)P>QB;c(zbKn&qm00>Qq*HuC?K}VoHeM?RHUbLOgFVUDd;M+8@&u z3j%~0KG^#rA?KV@<~zv+z@!R-J<_q*y^%Gz2}Bb=~7*0y$nKI;8`e?SUqaYw$& zMd~U|J3vUd+vM5S;WHtQ`PaH~;U~JQj|Tydhh+f`IIv(4#AZ{=o=Md74)_v*I4p2` z2`KPHV1@Po?)7!Q*rt!2&>a@)nZhbvj-?Efd!|$6TGdy5>_({620e{{BZ{pcKr31$ z#yMDcvNnbOnJ=!NIzn259vT=y01%Z;*bnZV0)Sy}1`ID?G$Q~{l*!itD%lAZQ5d(= z8z6RoC#?}|tf>Ia-Vclm-J>(_gj~!3!GaUOUI%y{u%GCJEz@gRaNpYqSqk&PJ=g=X zrZl3E-;%-zdDx)75tZDdxCfvbk(+^7WCbSI(a%W?4PsG0w=mE=R`bh}l(riJJQIYyqnuYqD`!Dsz zmE=+`gOJ~2zb9aJY`-1gZY~gTbXP+dH-3n>PKa*25oWH-As~)ho!v>IYdV3ol#WkG zF-0%~;;mOXMRvV#{dWLE7sA*ilB=v)@A#Gyo+^K*9biu13>YT7$VO)lC-j|Q0|!7{ z9jr8t4yPx tDY%r)mh>ZlpX#BLXR_(iwfrA$e*ldFC4Z8;Yy|)S002ovPDHLkV1kl8q7wiB diff --git a/graphics/pokemon/magmortar/front.png b/graphics/pokemon/magmortar/front.png deleted file mode 100644 index 38f46e85e5c66a2a6847a8ef38c64fe2169ffc5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1087 zcmV-F1i<@=P)>#JNQYv!DvXrh6OHaYLRnKKveC&1qhQ2qler4OdgCz7m`hLGNni)m; zu=Gd&@iN;dr3d>~^*CaS5M6#sM)>^)0EDPf1Pro?-#=rmb}l5VEgu5(f)ny7baq&) zlg*$q)`E9xTLTO7Jpzw&)1W+IP=^|II1n2b7PDA82OJ?#(;S;~Zj^_NSymnZ4@~9I z21*QfvcQtA!?gn+wKW<6{F1ej3`+$JHWq9J`2iOKqD3Xl|j~oa>e-p6JlfjeIf!|(+*&|(8_r(-jbXuzh^65uqFFtWe^E|YMY2p~Yl z=E6gzT?8})>Rma8Q;gCxV+p&?DFU+}`rge`Okki90MR+2sIU_t#bnm^U@71rH*n=2 zk1Gog8vroTrXJSQvWzm=_I@#oj}{>Y2q?!A_*wQjl|Xd?G#a$FQj35aY?H0MZEqF> ziamgzMC)EuFrRy-Y4*dJ8HZ5eCuaakO$nSO0GJ@~M`U4B6xa?CSdZsYO7xKkLq`Ii zgw0At%tu+k39)8d=s^3;k+{C~vlg@&0T^JbDa1%wy^S3fzyb8{#t5v9G$E9_N|=B5H|rO`=3wm4LwEMn{Vq_)4y93R?;e7aH}odSJWvfxw6U z;($i<%CqBR(TL1gxT~4C=UH2+I-!-Q`_vcv&mCJRN65{%;$PVN;+)X)2 zEjJUZ^TvH3UvJ)h{SO~K0Ep4=@5KXss2|;j`^x`(|1ZvM=F&>e??(Ut002ovPDHLk FV1mKN@jd_m diff --git a/graphics/pokemon/magnemite/front.png b/graphics/pokemon/magnemite/front.png deleted file mode 100644 index b1e7dad9f0eb921d1b21a3205ff9e46ee6cb153c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmV;S0bc%zP)Px#Fi=cXMVQc_i;Iii|K`=z)ly1I5D*YKF){y(O70i{i?pP))xBDSVp7faDTA!2 zsHp${|CVNGo&W#=A4x<(R9J=Wl+kj8APhxCa&bd+`TxJ&1k_1gQ$BDU0x1o#ybApDRA;Xfa24n$K?5_{1n2}* z30{Xz^VI{n@~uJp;W30lk#ony{O)8e-Qj&n@lE?$v3Px#Fi=cXMVQc_Qc6lWF){y(N)Qkb?ic`zi;Ggt_SMzZDTA!g(9lX^O0?CzgPffB z`1q)(sMc|JKL7v%&`Cr=R9J=Wmfd!&APj{~jG#pH{ol6v0o3UnaoVf1R&&wLIPQ;~ z5Te8I7k}~Z0D#}f5ytW709l)+F$6lkeIBT`aH$7y$GK(NhwhP!Cbf@z(kJ#Zh_a#SqYg3biK;4 zR|O{!@XFh^nTZT=$Ybmf3=oQbOX?xpC6k93qnC-Ayia03L?f1>XJ2C@Q(0jvN^ zp~SLu>!^s5!L~^XIcKZ{fc`#M$QGDBtp>>Cb$lvUfLX{zZ-iSpEZ4879h5~cwR3>v zb+$ae31W1%dX19ActegX};sRXGaaT2LQU1cktPb_E@B zyP#c;8n62?ji6;k2kLV$)z@AZ zz}hsK<})Bu(TkOFI;NY@8UTF=wKXq#BT%X2bRLhzzFy~CMxpjFpUf~j0DL1}3yH>% zzgf?4f zKc1DgL>+wv@ZiPj#e=*IHvJC(qMr`Ee*Y9ONzi59eWVw`^x$pqp71;Q cU;KaZ1)St3y~H0_*hU-_~2L&5D>Vquy}ZIC@3(f$l!pWu+Zq}NN9-oKtRACAW+EgBx;=000009 za7bBm000ie000ie0hKEb8vpKlD}&cVI0O^IZAKnBGiB2RpL@Xc}q~w+{?3)tpP$<0DY(=>qSsh9`wM3HmPEJm41sAh*6XN^h zE-75RjxIh!xXbgo=lQ&I zH)K7FC(zpLk_wnFlRCzne;gATS_NRbn368Zk{V&bNxjXzPUKrfNE}duQ00?%rR_@K zbFs-qJ_6HKOKP@=D;&%Is;UvLi_ zf9C7y!6GvD8_o@&e*AD#J^csDQ2Gj{HZ^dd{e}T%4q;CMO*xiSPXh~H5U@trfQoQV zKGB2^zD2+>_ZSo5rmeH$%G|L6zW;)zqPf7mhKSzg;@Ky-rGVm(_Ylq*pZg-8NgLov z`$Z5mWb(PH=o#N@bTSq5Wr4-^=YnWU;|tUQ$I_PpUAi3t_EB5vOdliF;}?1Z4Y5Y6 zAplrg6NooOPawS}Ux;1mM!-~^bCq&|5Hf4@8=^xg9sym({1ZuVKJq27Jpw>M-m{aV zQ)9~wwptxELbM2*N!Dh2ftK80zu$FsDp$A~o&sf6mYru>LaK#be!sBAkv3{ vJF#ITdvKW;Ac3EW0jeW0Kpi95|M&U>@nV_YA55jV00000NkvXXu0mjf^=XdZ diff --git a/graphics/pokemon/makuhita/front.png b/graphics/pokemon/makuhita/front.png deleted file mode 100644 index 438ac8283e94c12a875cdaa905acba2263c3903d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 615 zcmV-t0+{`YP)L5UrJ1=A$4HtyN>20j!6J zk5yFx$9iCe8&x%KfIus$O}hXlE&$|0$bApsm=%IR3ZNMfd!17;94GL8diYBO;vCtckJBqF zSwsidIX1Cx#WSHd>sdpT_7;UYBLL@SmSX6cS{5*R^Q871x0ozTsA2@Lfa0y!Fhb={j3EH{e8AECcxDVP%Z$9%(JQi+z~MF#rt`W z9g=3?gn)vM11l^7Gaz8gxf?!EICO0f`fdPV2L@QO1$YMFIgAXz9I$Aiyti$@`} ztnKCVz+xXbax7i}w998kQGcEQX}8%XPUy#s^Wwd*w99Wuh~8+0yei_SAFUM?R9fKU zcv5J@>usM$k1F6unlb97upE-W5PCtkJ4WF@8V`euw?S+4c)0!Wd%rB(lsDwSBPbRlD^4qVhF?$nbIa|KzlB_UCp5jYRoLXE31cIfq;&5!sD z?Hf+^z0ZB$_dVeQAvF^Iszvsvk+l3Zz7WthX4rh7umubG2T-)e%OVeudyrfVY?Gq( zAVrFcOloEF%1jaRYHl)tv?SSvv;_2M5v^cVNPcGz@8hMb{UPpn=0wDz{LU!ZG zi~{*GDU*V4v$$)%$t%;+_KFfHZ^}kV@eSFCbU~m3Ad^rkJgij+0Y*;pd9C(=B$WIC zJxr#K(|Nm0Y6q0o_Z0`QM-LOn^%q~#H7cWyRG?m?YpeC;wP!Sl_u&eZ9@(qQ-zaXc zV*HGqsS*$AXU6rF)%}kzF}F*YQTk~s3>+~F>G&XRuXmSIrOcUH-PgTHie+mC}iDdz}Zi=`9 zFcAPc(#zyaO=3i;bq3%4O`K z1Yi)(O>Q)?&>T(GKw_8^zu`c3ApVTcb!P%n!pRAFfKOTjU?w0Xu5&_;P4}+EIMKZ) zAivOze-g$!@pgSb4-%Q+i(2=X7@=tBOUD6VWZmX{cjM4ZW-}b1* B#AE;f diff --git a/graphics/pokemon/mamoswine/front.png b/graphics/pokemon/mamoswine/front.png deleted file mode 100644 index 2b7945603019e5b461fffe52296d18ffcc83d93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmV+n1oQieP)`Xayc<`O>m04 zl?VYB4kpic%U)$+VMu)(k!u}-E5j;GE|nX>x{}Vi7>}LUg}{X?r(O`j^%+cRA4ts= z5p2FUD_MU|b{X=7mYI3K`Mx)^GwV42!}vr9@zJ!al&WlhFpsnZv-ttS=GW+^P@A8w z1Zq{zBS5UoV=nRs`$Vo7UanROU*W{s$5#g720{S(?^1*G2&iGD?R#juh%PfpKL~cF#1UR;I4WsgGE@*fDQu@HDC6F;Pw-t}V)*TVqU4_`dLbDSHGxcJLqKktx{lS;F&0u}6_%2VqTTK!w*Jyz7;U zF`V(1ft;(@vS7?<%{mnAjM+yd$0tm53N=L6ZmI=l_qU8!<)VLj_po-tY|*cHqB6VQ zz6;=X(Rp)|C=i;5##s*Rr!xn1E&&T-;bnnEv5(FF&*NXq2%URKdydJ00053 zNkl~4M8VJFT@#A#0@FAm@xYVAT_M$S8#Lk za~Kytk?++A*V3|Uc#h^ zS5B7`jL4JL+RSA}^qHQK$CLA7fKEo~5P>!eeVeZm4e-Rrl(yIhTGuxkm~@A%XZum6 z#TBcD!2Cf2Pp?bT^8vCz1BBfQx+yT&kPz|!4oT3LG{Y*~kbV(R^Dc%i)^K;l974g( z^#Fj~<1#Cs(PvUept%n?Nc^ae=rmU&0;E3p@#pwC`7ZdNEjjQyQfhyi2W&6B?7Zvu z3w$I39bxfC7;$8QuMstuix1i?u~VH~e&*w6-|*q(|j00000NkvXXu0mjfkhk&B diff --git a/graphics/pokemon/mandibuzz/front.png b/graphics/pokemon/mandibuzz/front.png deleted file mode 100644 index acd99e1e3042c7f33eaf590aebbd31ca2d33204c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmV-h1El%o2>1#6Di@>Pk9qfTL8_H{txRa z-vtzrM^TGMCr0_ohiKXibY^oYdlK$o)c|zV{VYi=Iq3y=S=OLGaA$v!jO6tMfYEw} zhhm_q3M?6XPoLnhsuu(2{2=`u;4IQKrT2}1lRgDFi_4TPt10LPNPEHU^(A`n`z8QA zmO&6)q6OFA0-QzwJ-WdJi(FQKb&Vyk4+pz}S%P}{%(shp0eJB?#yq9!HK5cBu)hYD zf7olF!};OE21x!Ezyh`a4IKKCAxV<-IZ2q>0?IB+8%Wl{RJ`2<<#E|XxYlPiAOlwD z{S5#$V3nZ@^dp!jSjGZWr3TH;GJt6mF-TOhn6ID?^>K9`Tn1x!bqMCz7P|iar zWemG^aiAyxPENom5**jIGEx0}8pgvxAsU7|r~(XuoEgKxu^61Y$6~K)!IV7>m2t{& zoeI|wW(6RM*%?!Ys|>-6&mfK}E1Q6d@eCPE?FqIgbi=JyNmLQ=sABgq7CLdOMbg8P z=zRsZ=NY)aiO71cI)2(U5{Wr0e-| zq>aZuG%Pvl=o*z)SL$8gm-Sg`M8|i@Hr&dMNS8JeFIBjZ<4AJ^ z9U@Jdz(9apBUPFdMyi}4v(%6IXA;SF!u$B%?9S}UF#ciLHM%*d0s6IoSDj(XdSFxw zbSw0|zV!U6GRFi|mPr6q0eeF!{i-tSfnyE8%Rv8_YLoyk7SSJPfN5Sg`IIGQ7?KLelb{0j6>pdmCNsfZHrEmJ(b6(AWUhESq6UdGhL;0H1HG z++Sug`f`Y$A3vmkHm3LCO7HLvmp2r#227*9nx_N2^Shrv6ao4mT*GMEQH;+S430>S z-9w?bY5E2WY&OG`MMEhyMR6jufeBqEZKl#iTwR8@7~Lo5#MXeN5GOmpiWU)~26~2Q zK-ZCWIK#9B;~eo50gf#k*LURU411Vu7;l~FO^iS^dmvBI9i$?Xz3NuL$=MW|B9H@D zc5)pjfGm8(X>&+`%p2&_z5)LYB09-*RGRI)a}vB=#3 zrZ#JZ_Zkp|3((#HP6FhwkhOI{Y-*rz$HI+1!^FWWBrv{4XcrE6UdbI~s*?cG^b&#q zMz)nlI7Va=x6V(Kp3I{{2rgPmT{m8zbJ9EMf!YE%C%`aWzQCToDSt5QHsjCO2WS_@Ytk5vLFyVsdeXW|k-yk8K|fR3$! zl8AmVY6LEfsQyr`iU7S4o=<(IVVqLeixH-x*IW<6ggq_Gjv-PHaP-j|af2N^J@SHX zeSLg*w~Qa4ON~7!>iRR@`lAqh`cb0mnKIt~`u&}kikn5&Un*oxu)6>6|5$$klcD5X TjNVxr00000NkvXXu0mjf0FGce diff --git a/graphics/pokemon/mankey/front.png b/graphics/pokemon/mankey/front.png deleted file mode 100644 index 576a813eb7e2c2f7ed78d70077a1e7230d531b72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)Px#Fi=cXMVQc_b3p*!q;n7u5XEy!_TIGBtep7x`1p8ev_UcMb7JmuV(zqy_`s<6 z=-_BbFfjv#bpQYX>PbXFR9J=WmfLcqFbqU#T2|Ie{{MR;$u^j5VVs$~Y!!N#npEhc zyO?Ep?6Jpw+W@?$U)S{=gzL@tvR*@gszRkK$&hH~*Ws$h}QDD4fOE{TGl8!xwpf;gk2J15zXT_{qel-66JcO*{XHY%Mroiwcy|= zSP3IVJJXIbt){q-r-#Oe%{-bL*cbamBxSU|a2V=|_J%obd}0~p(A5KZVYSNL%J{p% z%2GxVWw{1=e?#_H%jzl7MN;=uIT%MJfFR0GuwdE&ji-V z`@wIIGoU6h7~X&F9AvyO$CEP?(aaqf0^YKByg&BXe_~&6{SKR~A{1Z%0000)8N0&)h7A>nfW}nJ?|e6N`qNFY}6?0m|uBc=6S74U>k` zYo&iY816>;GJ$JLhYxb-@Oc)49d#>jZ5=Oj3ABMD0%>=agQ?5B?WCemI*#FFw>tvp zbJkVJbF&jfwuo_WuK~;+Z?QlDwH{;J%Der|SJa>P2N~Pcl=d6-a3|%>XEaCVB0x#$ z!XiKUjRpiIeSSUKAR_njm%2*lCfynC11W#vU-*40y$g*KPN!Q_d^(*zF7!YCdi(*; W4Af8N%nDTi0000Kl(9|%K@f)b5_1Wii*gTe=6nDnJq-=r zB1?S~%mwU7U;anN5B z9Pja~m*qe;t~W{xT%750K)$(rR5GIEgzA7FZVuYV9~V zWr1kz>#MllVF8ywvyk|R)SaX*a7~5|Xj(hvd=bjj73lJ|1$t8S{l17~Uq>~sA4uDN zPkMZ^Rbqiiv0J9)Xc!TonwndY=(q9w7Pa>7C_|jw<0x?eQz9$~Ac#aciUCZ43v1uN z%b3dujWPLzfM>YIgv(eFFwYU;4iLE#Lt}9Mw#*zbW=d2Dn7n^xHp2F~Q-Yc(re7b_ zB;_DC>Cof|G-&>cHiIjXyEWufdvb%oBmQc{Eo-nb7qh~4vHMQ#x=B--xS%eWm)>&E z11)tnL&eu(#7IE`lq{`e6GiP*`5JWwooN_DFi98Eq;Qa> z5|zT4B~ql+T$WA=Ke~47AJumz5Wqg3WrX}be((EzzB`11kqCLV91*Nw~RWaG=sOZiub=03xI^)R5j2D0icvu0_bud0NPlW{wz5vH5ltavbh43$=kI8 zcmc4eL+J^z)(WH+e>-jG-l>tb63J9{Zd>c04IGED6&DeFzGFWT1wQ1D*|jOY)N!h8 zr;%o$Y`w$zfUg1(f^o_$mSQ7f?bD+n=d)^J3D7TL!h1jbIUn8b%BMzbumC>l=VeG$ z2NI)TGmW}8=D|;6VFK?^vq-=4k!jJIaY#$3q%`7mIKq+q<&DSu!^Y7i3ujhohD z77^VCD%{OcYJVW4Zl?>pRy5`!H2e*>pm*oiE>hbff9rOEc5-EMa5D!|ddsk#u2+M# zaPsevIxRW|z;fq+&hlixAeaQCi{o6C_i~0Ydg}2_M_c4V^WuL@xma>`gH}23?J=|j zSV(K4_NRO)Z`YkR9S^#^znC?owtP!k-Oj=V!04f}1Uv_GWE31&Rn=iL1VF6qG%h>` z2)h#s#67kv+Oo`rwhBz(b{y0dLJaaUzy9i2M6)mh))kyTLYqMCaW5xlQ04tDZx@0a zH^%)ut@c}$aXUob(Dn1Q0bi{W0>pSv?l|fk%R+V#n1~*HBOAo~b%FpBGxKbwB;;^m z!h;zyGy_UO;JpwYY`5r4Y9$Dm6EU6KBS#6aE76QkQSJ`XcY*UohUUqiGdYgyPyk75 z+K_`;*A4~H47j6T_%BZh2!2gZ!H^1o<-ku}A(|TiKh%Kc=hYq1gvq?Rz|<8};aw^7 z@iF&X{8kfFF1#*x)f(UoY-$~@ED_@zcC@y7%r1vEV5-y;5MtmzlyW>@FO3B;00000 LNkvXXu0mjf?(T$S diff --git a/graphics/pokemon/mareep/front.png b/graphics/pokemon/mareep/front.png deleted file mode 100644 index 0ab5b071fd3e0641b92924b3413aeab39f901b1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 593 zcmV-X0Px#Fi=cXMVQc_=BxnCoKpY)|Nq_qoMIpl5D@?Wz3$C(Qc_Z+q@=Wa08)d!07{f| zr1oNz-Uhe+A^-pZ&q+ih) zhtutLyL9Ov$~ijcpC%v9`294wGX&?IbDqBk1O>Pe070(=KjNoZ^@0dI?4M^jv=+?( zWS0h*DeQ>o;=uG4K{P}~1nVVk>7T0Sh~Ak1pMEH415304pbr3=;Dt>k7B_{D2+l_n zU>p8U2#hVX`1k8O5cD%4#wqLp0FWnvzz|_eg`~5z0g>Y&3V{p(B9(_J2nO;2AgV5a zBiFIQf_cLLjwrem1_0r=z^y{5>UF@l>dZQfQ&!qNRzg$%8#TC?AB^itiR0q^vJ`?C z1Lzsz`cSO^AVG``P%5yj0rS)d0Nep!DggkXK%D!8%mpxUVvZO|?eyh`Hq$F1rxJh} zEkH-V0#fb(@Js0Q^3giNg&&IQ8@$NA#Bp-uRB1N_pnBgr*;6@{UB`Bw+Q9<1Ag>G_1bn24gEpX zRb+UG!rtD98~$}&bIw>|Ky-L-^?vcUZPQIQ?CzU%*Y+1C=QIq^xx0nG@PEWP@h{cQ fu=&0N6+X@PGgi5D@tI_~78^I6y$i$k+e?00000-J*$$00055 zNkl*XNh_&(kC1po6qxOdd6MtoLgTPdLVj=XA6{(C}hB zqK4-tTEGnh7fYBBMq0o~vOWR^Txb1M*Tcw0SsI2RWTRoE1qPFcQ-Bx-k7Iuia0f!! zWOA!r<80WIfO|jgi#t;(e_a4@N*k|cyQvU{8KB$jfg9%{wzg+gfm-VwfvaZ#VH_dQ zRDo#|po;)t?Eu=~2^2=C-}v0YAV+QAonEx*{T8^$CTdC1DCpi~(C?H}}y^$S?YmA|3nlNSI0002ovPDHLkV1hsr@Ra}n diff --git a/graphics/pokemon/marowak/front.png b/graphics/pokemon/marowak/front.png deleted file mode 100644 index 8d9488612deb8571afa385a18a4849255f4ada2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)Px#Fi=cXMVQc_i;HUb`1lYI5XHsKQc5}C;OJUG5XGEIlxkAouz0YLh0c~ zY^BSx7f3A=1x^Zo4(xs6%utp#lVv|% zbO7{&J_Af20*CWUX#tq!WB}D`y0CMp4FISR%K8pF%Rd9CSkU&i)4LMt0|4l-9HKOb zZlLSG1>h$-osj@OH)rVEx7x4q3%}6xdHw79-2wsPVShxQ0VM#{{Tl#J0Xl04Y7>YU zV+90LF={AI>_7pKs$&I6Sr>@-bY@orv}AouRc|_r)CGXV7n90Uta8a>zLT>ZppG=i z08yvBiM15>Zv>A9Hg(*#Z5;tDh$Zs4m3kpuj07Kmjc)+>u~tH=0L{Zyy#P{{r+5Pp zWC90FDc=N#18~v6J_7eJrJXQvf~5!1!W7HzVSvrC7#qUXwytwT1(uCb0KUGCJOaoc wO8oq`Jh}W4h)1H^r*7__nQ^D||Mgev8$zWSmzAd|nE(I)07*qoM6N<$f`bGLz5oCK diff --git a/graphics/pokemon/marshadow/front.png b/graphics/pokemon/marshadow/front.png deleted file mode 100644 index 14a1503bdaa42d76c8b5765fd3d38085d448185e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmV-(0*w8MP)6+<@T#6@+Bl1$F4YaWBx+;sj_8FdD=S=9at$mho@^ zc&eJk`xHBN9Ao~XE-ruZubT73b<^B!!QE)URns(EbFphR;1R&BxmJDigb??a4|)!E zx9SXFo_21hXRvPZV4PFkz5r#di@E}AlC}Y-E>2xf3b0w2)54jVyDAV^I588Ju?qN! zzX4tpfQpMRO>H#_Ngc>N(qztktOHhx&n)s%&B3zsut(>VQ_v_g{2=1%g`gnO zbI1Zt0rGoJ@)|Y3hkTGph83uu!iV7`Q9chE5W=t*kq-d%O4>B+7oGsnT=R|1!wGfx zJWjC=m=KQu-WH`5*aC%I+mX~;YiVso@=3e3ltA<=CDlq<{!w4A1Ax&pTIpIX2^VH3 z_-Q%fpt35}1C&!l_@rb2(L}P&M*Tuzv?!H2Xp?1#3xIkm!%53nfMrquOCvfVo{|R0 zj2k7-%G^LM2v}I?Xb7;-@bHK*kU$Wqu+WGwP{3e#p)Eiy0006c zNklBjE6aZjZWYCbIQvQG>TVOC5RR06hHJrK>de<^7t1iXKA%IO-wQcHu0i3!T#@ML^MnY-ds@|)k=z`)3oGS2Y z#7fbt07s+I2POd>t3mpH#5O6^AYykL&{x(l*mVcNtrTi-cZJ}(Bf*UdEWgPTR~>rB zf2f)$^7#XchU}J3#8d%}#auiv+2m^>3T1{O{~0kx$wY|!Ue&`fe~f`->s2nq{JXNt z$F*FmoKM7D1@tn$Uh*ZsS0C-u68z@Vs+0em;@48yV!7Hf{@Ja(plu*B1ps83sz4jy z?FNK&pBPCW;LTSA1VE0Q*t>Du#XdQo%@DLpkOkZEERu5=)7h8e32Zkh#rFGb7&11{ z>G>pIfUW5XCCT=wFfLO}aAVLjoC9D0#US2l!bsUL>S>+?`6AHF7btdS?p>xAj_px7 z>ji0a9n3M<*@Tq!Oe>UtFQDna#7DcI>Ak~S8`72F5}fScU%hEsEuc%zr!jnN+Iv8A zT(br6iSq&=@D;%I-4K8jMGSGE`i0P&7R70h3*2Jf6xksUP?^`KQ+(X3pJv0dFo700000NkvXXu0mjf7bQHn diff --git a/graphics/pokemon/masquerain/front.png b/graphics/pokemon/masquerain/front.png deleted file mode 100644 index 853e08a17202b2f4bc7d1fb01bd4273ea5888360..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)f@O*x>m1@E}-lutBjE6vrhz2t3tl(!CcYOBd0Dno=(n&-ws1(g#STBV)jj!>zW^BD!`6 zM?G{YgiNKLO0u*Xg2{cTzIU=5OG>S!?Hi2H`}zO>zo$FP`YZLQqi-Mldw}`70k<3I z@aO_;)&aN-#ydmo1H^v>2Ivqcv3Rq2BkO%Mx5tSP=hYkMQ#~F6E`;Lbhi#9P383s}$pBoQZhe%=Ng*8p}@2bLS)EHMr?00HZijyl~42oY=n>ky8r z!t^g=1O_D_9sn-$4+2bvFfl+GVqO7P`38uR@IGY)^z#jX-zp@DufB08f&Qfd!ia!9 z3L(;{1Qvc7U=2)ZUm(Up#PsaUOW-Z_^H@M&fKb3VO-XI8lt#cgF@Qk89JT!f!1Hix za-~)p7j>4F4haMU0(uh|9|w#Le<-zB6xJXVQJ%jSA`wA36Zb+~yNd>>P}ts)C=0~# zdMo^J!VZSmR}1~q4WR5N5JuHrIp@Ap0xt8suoM88Zk--$M1a!27z48zh}J_?H7i^K zis#IO6bMS{cQ$+BdBARnI70ap;%r7n6bN??rJi|W@YL+{tqkuEGAO;{*` zLvGc9?;bqmXn{ky>@Z^6eFra`gZUX|Al=6}_jX@qT3S7g{byRY@3A8_mb6Bi`bDdc ze>Wv(^jow9db%n()Oz+xO4%Uz$g~T7cTIJJWCQ7O>~l1FNBvu(Pa7gKBj%O_a2|SW z1;MYRhx+bX7upa_iI;Q|d<=O@QnD?9fT9(1pN3jxw3dd00jNfLrLv|8oi^@QfKnGY zQ_W9x?-xwK=SD=Qb}~5neQWN)Y7n~tB$^&A;-Ukvco*=0>o;ZV VPCGYZ@;v|m002ovPDHLkV1lTdTBHB~ diff --git a/graphics/pokemon/mawile/front.png b/graphics/pokemon/mawile/front.png deleted file mode 100644 index 9f8bddbfd53915e1ce767f77c44014e36deae1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVKl)rA&KoG{gqDtrWUW9WwPP%n0PN`T= z69l5Ltn`NqUI01uQLuJ-G+7HFC89XHpg7S{@DA?%5)lm*&%mthyYru1kf<}I=jU&} znVnt3c#QuDO3jDTgmMrM5M&f^7vL~43Id;pAPx!y7~Ek8B}O$M4ocKOC|C^uyy#cB zj1T}pbd4v#`NHf0QS{z#0K(p4L*16GOAWXJ3}zY(D5cPKqk%|!G#Tb7exW_!V-#KK zE~)2KdBf;-Y{}?KYJhRxjFYqhGM5+?fC^u0aoTR;c?FBHj!$ev*D!5b8*K6(ZsE3P(B1)@dx*b+6sTB-pm*P zj(GDOeNr!kMyFh&wg(sGBg1qgbtICyhJacq~E$ z)-sd*vuY}w(-7^;M9L(;8TP=%&tovjJGs)Uk>mpbM@)|e@i>1ftGLPx#Fi=cXMVQc_gF#9V5D?8;bLMl4?wq7jK}z1<-iw2atfZ{P#l`mCgYLarv`Sk4 z|No?ODNa}*I{*Lz5J^NqR9J=97xyc&RQO*wDl0*aSV3V^1tjTuPhKzx?= zi5uSmCsw?61MnuQa_0Rz8lK_v0a9N8zU7 zcuE|bRO6mO#u^|7?WY?8oysv*LeU3O4sRiApU7t5qGR?JFSAruFU1D^J%OfRyhm{1 zRlvr33_k=f-Y1Y2i0wJh(FNm%s(dq$+^f|spxOnb0;<#m!!Q0+OHn~36Vz@P|8h`6 zX}BbC^5X)~JM_O9s5njpzVR(2DMv2>bG#`uXhNXZ=tXci`GxHsz7)efQ(kX1xQU+{ syPqaLTQL4k^IHa!0!d*~uzV`O7j^j;3U1T7F8}}l07*qoM6N<$fKls#_~K@f(|*SNO#6eJ3C%&l`kDtlH) z1X0|11Pu*Q{y@M=ZPF~cbTpAD;{wgOa}#CLxv`v7>C;h@CN=+owL`#>ch5*P6nVA9 zO7q;j^P#;UxYz%xTD$@f`3fNFtZ-1O+CwO;1RB`Iyn<+;1(cttAu4;w+lZJ0NaRUj z6Ih2C;7RcZ@T3rb0nAEJL>V|8lHY)Ej#DJJO=MkkY@~*A4%iCFUY1jYN@m+_r0iWp zS;GaisA*(0^S)r9RikWu_8?k|3SxZjub zc*oAECwt9|^7?*yxL82>Y!X6v`QiJw*Si!0#0O<@vudaTmw->fReNuiN zFV+A&MBNYZ(KS*t(0cHa$9Ee6=<-($c0|ooPkE5TQll{Cp#exA8hcp|&xn-IjMXWF zbDOqVfCFPDzVKX6hts2qa1g#=9=PmpB^7hm|9tEEqn)*SpndVe97jZNjL~kFVxmV9 zs5man$O&w4xxTXtP@H=KPCC!=g!#-3gd04{#U?Y4+%*JYDg|zG>0HE3A2LC;S2bx1 o_}>06lidIJxDojM@AZ%R3F7^Ntw5JJH~;_u07*qoM6N<$f=#gyDgXcg diff --git a/graphics/pokemon/meganium/front.png b/graphics/pokemon/meganium/front.png deleted file mode 100644 index 8d2d25f6c19d8617b843fc297877998dbcd61c16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmV-a1FQUrP)Px#Fi=cXMfkw@|K1>CN&x1p0BWp35OXQL|9gwxF%S?C|NsC0Ia+%VIrgNS%^*3= z&CP0RYCec(hX4Qq(n&-?R9Jlp+2D&hTO{knD+j~L5pYPeXRAOxUl=Ohh5+^q)mmV;}E^&Y~n$RQ8{2oH=Q z)*U&<(KzKjYQT`B4!F8 z)oaj9!s8SwK~GN|5bN^vyof6MrHHbX?0(orjq)3yl+*z? zk8;zeRQZ{KQVR67Zv1M1qGPl2lu}^qay9-C;>*UJ+ynY z0ZOrc)=Pk6Q1W(BMa!0m(MNC+>bW6eee7bnFc4e5B!{L#zAW3`3~(oB9E6J^adP9gDgwaW0>!58PMWDV> zzKkD>A08#%^_xoMpWZGhXDh+*Bpm=dOSyJH(+@0AJORLvk4FKu%Lf)Hei5ny@@eGi zEGmFL0I6(P`xwDl8Uc=u00aA{T`_7s>EbjSpb_e>2O(j2&=uQVSc)wuUXNnPy5;gq zKeG0l!6UPpmbvdp1JTwAbN$Av67Tn@;*=?527o5qKp0!(!I z0{~mh0vs72MEt>kybsVSc^1%$5R_mg`veS%2ml58qc)o`ozZ8ze)vkDkSOf{TaNkt zp4&xCmXiO`_jE0zyuE3BH9I`3WIAC3PwQbsyzzVLfgm1aGJW`EcuRj17J4EneI=~k ersRF{%KfDjN6U|?WKa4>kVSjh00K!|ww`0&8Mz%am|kdTnrc!;o2U|3L46Hl%90005~ zNklG{du_sxvW*j4>g9%H<%&-;u8aSPyx z_`d+3wF7-F(|q0n^!VHuV<&=vYw~$!?%RMJ*?kP~C3|iI_*9o~PGO;JPWkXjSpY1w zO(W?3T-GNO$ZZQRTSG0yB$3;<}qG+oxv#KfGwM`An2S5d^?Rg3!%R!|do; zAd+pL&Y*ebge=Qv!(A%Jkg=)95IE@Dmcj9+684~X=grp}e7 zOsv=NP6*V<&NT(B@fJSfC=k#(-v+J$RC|GFcB+&n&eHiRlR6TE1WhV+Mp&5K9YZ8# z(o9M{A^_(E-iA`fEJY7bsgUF2*ufXz#VC4P`)F)*p^%gN?!X4nhO)pq$BhvgBe1dq zEZlYVD;n6poDBks{5m%P%M=YH>@T3TWvY3H^?+6GpPSxgjVp z*JoDw-6{Dh-amhOaav|q_8~E`#uwf90++rK5L~Lbs(EoxRJPE=`%6A{vP?gl$HP-T zQ}%kkspNx(-$onCn|`cSDR|Q>8EN{-z~R?Hi7>65hck@@8SK8bJrsHMEihqvqfo!} zvJHD~I5ijYdswaM{@BxePR;U}){HA=+gCA|EG^+vF)(1SxfNbeAfE1K;3lK+uu=3~ zT7`M`u3%~22UB)cZ2QMh*71sE8^f~M+Z+95_sQm_`rX&ax?1I+bu?;;Q`X$Aj$1Ep zHMuEO-F>yB{yBs3RLSFq_Br)^IJ(9s|JV)2b2f&_+&AQ(iXKR<^)y`HU>e7ebX{+z zcs+AK#k2YL>|#3aj<5c>pLxlzbcWPF@4rdQH!tYZt-kdbl!`oE{an^LB{Ts5VK);3 diff --git a/graphics/pokemon/meowstic/front.png b/graphics/pokemon/meowstic/front.png deleted file mode 100644 index 5ec230fb75f93d7377f845cd16be3c08234e3180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmV;~0w(>5P)ljA6aZj*an{5QFz3ah5n>`0d##IH36`QfJ1|iR8;_1ubC#HDap~g+ zP>GIgbY^2=;D_ZnHiE??L-#g#Ev*-O!mp{5Y9+@CK8s70@Xo2J1;W#pY z57Wi#onZ`>2>{dWFsIf6r0_OHfJ6rHO4@8w~phr9H&=TnDMejEtqW?eEh=OtR8*Fj29&)m{{QE6Vb~X2ArrR zuu|mL8hpLNS_8B}i7Q2$BFCo7u(WHCzEoF%GfZL=jJR`4!Y+YYB0M-Yz`@f}-~V1` zK?Xx}Mg95xw^E+hI*tOZDR2#LsQEn6aa=5|De&={08Hmij#A2n5EeKa9War!`OdSH zLL8a}2*at~E-LkNeiKI9_@GY1iCoc2KP=I+BcpA?C|ghO>EzTtWHI|`fPt+1knVS)b&W;AFNoP=8{{3h)XRV$PU0UHD0?7fjTn;+`U?8s4&?IW#n=MnrU&}y z*W3-}=?K(2o|{Tn8Vp2i1IZ1~)r;Px#Fi=cXMVQc_m}mg_;D8Vi5R_T~`1ttv&;ZDw0Kj+%*tj^@*x3JbQs|g4ltBR1 zS~&m!0Cp^LL;wH*>PbXFR9J=WmW^)0FbsroE}`*C`~Hu+vz-<+q0QMeO_Q*IhM)Ul zU!0W7{-rSz}mtBq;Xn@C!dQ)@6KL5%!) zB1Z+LZyI`S?M+l&UA`>DD}aeGQV@=a)3gup!cC?lfdFJ(^lAB`Ix4VSs8>zvB?xCw z+toct0n`!7E6^Vpu^b5qz{%p#Yzy;T5K91~ClZCY$T-_-u{Fyd$2XZWE-=T42!hEc z4@HFKBrw#gm;*S08Suh^dTY-i%t+f$aLicQNrH8>YNX&RJ8OgATA~TOwMQeuZ#B7) zdmG`@_uK83B|HKU0Mqy0lLXN_;4%`RzScAWdL}R&B*5f(fW$ID?-ukaKs17HjK~60 z`e+_s0oZg zap?4!tCb(-r+2}}!;8nOd7pLvDbVCU&`jo3P=M$_Kv+0HcyN&T`1r8M@Q|3ms6asYupp?2KtMo1>K7W$0006# zNkl1^v1iCl_&Sgxp&ksD5kB37t#k^e%FuH__JkSMIUh-fH4 zLOO&fCWRHQu{_0=G&GbaegR$5oxFva^_?i3NvIGFQ>``6zVpuRtS#$*{FP|9u5&Cu z^Z-Wgkvvp!kZ1ygAwU!ysM3TW48sWo{<%ze;Dyh^NdV($CJT&TPv2fnzym*$Bs>^> znl2a^%M$GH;d=V*67r7_M1q75<5PV4_4yg12kmGmROokdcmaU?K_ZW!PibqSAw!3PH3+`MPN-;?m5Y|gG3c>I$bW1{7}fymB2A+>(xEbkOt32TvN#lUmh8&U?4F?WS}$vbxHAf ziz8L6kb#~7L<5#qIcjor)rb^!Mk?J{y0R&T+l|%6vgwF~Ry*dHlCoRgyX%>p{J@ur zfs(|{cK~i}THOP&2q>G>9T2Ai(89EpD7rGsTn4bv3a?l`K>>&pyg;4t-r^--u+Y%ZsHmuLXmH@*;KKl)rD>HWbHY0^LJKVo)F`$XA_WCq{t6 zb$2B^?Q)L z-$(D4zGRktw{L4(oE`w1ft!0OW5%e}lHa%*U~gY#CFkmLSziIlU!7t#cB>`h#SKvF zz|Rl6Y^%Y~dzC+!AFTPA+3&JkP9Ie$=2oo(4FTSL-V)O1>p(e2wbiUekaZ}-l!FCF zfCFr^AFQ?Mi(Kcp1|SmPbroP?jBy!jG%P|l0S>(?ynrtGjq#-iVdPX&Ww8^IbCEwv z{&^6B=SEIl&j>)^T$?8Ov9L<#rbTg?Apw;Kkfw3yg2kY8F`s~PW~E}%w}-|W6RbOG zg#e3um4lfC=*r*fUp-2|lPGJ0l}FpHfZP!vid%pENhLIY#CSyiO;9PzNt7n1H5Yhi zc>6a2XEC1CofatVa@u8W8cRSWhT+xde<3UgUil@!Y`sr~X#sdT{5OBx#~7UCTF=@` z;AWiwExMgyIPLpqN8!MW3Ia7e0`1-}&Z5?Bckg_7)AxsBW&tW;ZP6})-+v1s0e<%` z0f)C?W)DD?2}o@)Z>4kHNmWRAPr$uhD6G}(tZ_>q(^evOJ5|wA5&hxrJ6%|`yj%p? z26YJlt9)V4hrSn3&3jfmE^k^uB`NjXX#NKl1h`1JYk`cD6h zD&W$OfRXe!$_Et*3Ke^L7JDuFc*HrP2hzn7m>EPaDcN?6$B6Vi!Bo=(*pz}^Sd1XC zi$tVjUOJQ`utl23Bpw!zxd5OLFEkaesd6fV_D@KRKl)rD&KorM~EQ^&2T8V`Pi8Mh^ZTB5L$1ZuK}Jp zUOJ7$G8WD0?v6b40_% z&dcf1kMGsUq0y=b!yN;18R{NS-lIiTx`<9cKD!6FF$k2gSC)m}p#_;yN>ce?`clMT zfU0`*!Lp9=(Knm(86_YOy>uxsvUzIM1M3(iAf!_sf;#gicLMyJ@rhYKXdcS50kYLk)KN{Jki1H(cVP-r0^G>X zcxL86s|T>x%T^uC#O?J}7N`+5Zm=oN`m57wL}ymtqy^BE?YZ?!7Sc|;Z)Q=xdm@W& zmxctRUp@wimT7B)jN4xjq-Lo%_u`;cGogkb0B)qfp1(G}%h0>Bbq@k<6JURD^M73q uH04|Ex3&tXku$KhU7&!_c7ey(5PtyX(EamT(fM|=VSclLKOVuKhO%6tS|88Y^`H6CM*U78rm^y5IS#kH`FmsuQ=s+{*84(F*TUvl2A zQ}#RKpA4(yB;_vu1OMuRFSIfjG4)(pn0HgNC?|2*&4&9Ge9F~lSoW_;y6lv*+oeT? z$4!NSndb$Q;fCaAX$RPH}l{wWk$E%W8mxW)na?_>EpsAZKUDD?M;kVaw s{TIc5u3pcVOT=!G^NHEC=au|x{^tuLEdBOs?*#>mdKI;Vst00)hxJpcdz diff --git a/graphics/pokemon/mew/front.png b/graphics/pokemon/mew/front.png deleted file mode 100644 index 9451dacfab1ffc3f852763cbac98b2f79b578f5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmV+o0`mQdP)Px#Fi=cXMVQc_v|^P1)$Zd&9BUOvAC$Zi_DN^0x!n?aP;1t488vanos+eQR!mUPoO-RfH_QD%v+k35MR zgp8|Nnt>4<#y18%0>WAc`ho)3A%Gx=(9Ceo$yo&@a0oR2HF~tW45~cNZ(DJv2r~uZ zTw@V{Tte#CY7hVb3IYTY^mFTHWyJhRyGeR@s|gJt;rJN~u=W~9*lK_Y7%tjq;UWHV zOQ!+2cJUYBoB;k7-Ht#foa^FbXPx#Fi=cXMVQc_gL|Cb)#f=lQnaka0002)=I&}SoRmSm@bK`oO71xzQrOto`1tq$ z000000NzG1Y5)KN%}GQ-R9JR}z zEI@1E!@~9LlpVB#Isnl1rqFbH49p{d?nDLc0B{TOEiCF{Am1Ppen&V!CLV9ts51a4 zALt=p5Z(%S^P#gDss-40mQV0<7snYt)i(g#HwC=7>Vu8XO=LZbz5$3*n9chT4jUsv zV<*w$Q7-Wis+LHLy}iRRMac_UrT`QW{0w_n20?A zttN|m%^XcXJfR)HB)sn^`3tBPs#*@w2^I#nZ6QnnGKVZU z2xS$$s#pPabKRNBwvE6DmS9Dk=c5$_0$wFf2KdHpttvhVo=*!vC9p?ooQNf()&R)_ z2gusRPZ@9$767(X_Bc3g3K+}kV4=v;0w6Pnx;R?Mx=#zP*K)BWqyf+p>`s9Jjz9~- zhlN-QORj2QfOtVj<#jx(8=m2CrQG3e88dV8#yz;0#>;jgf3u#@ Zk3WD#7+l$6I0OIy002ovPDHLkV1g8|c(nik diff --git a/graphics/pokemon/mienfoo/front.png b/graphics/pokemon/mienfoo/front.png deleted file mode 100644 index 51cc46adaf42308fae9ad08095554331839c03dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 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 BTIT=& diff --git a/graphics/pokemon/mime_jr/front.png b/graphics/pokemon/mime_jr/front.png deleted file mode 100644 index c3519f6c9f08502d9db0e6024088ecb6934099b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?Yl0P)|mToM#J&W#y zZjRQ)>FNX-xk93F;Ri?&o*}b#6N#C<8i{G=yP4UaTOrDm5eGqH&yIeC3Rr8u|76p~bP!k;C~MC=;9AJU z*SF~@H>5QFbDOgH!!58B$S{ADj*|_zc%6@`iHL1#Ov20J_OWdMrK4J4S06dAj=0t>N@X5h2FBuV4Q2f=< z&s>>_h(cIj0rZ7*pj=J&z#)GLG1b_O0G+0KgldV!rLL&8cFyPDV7Bln=7~Cu)k1|{ zFKLY8PH7v8zVH7xF-gk~@SGaM z@@D|!ZST{yL9t;afK@7~gdMm^o8^%;Mn5c$0k0YIEf#0CV7k!H;3ZaCfpc zg->_FF@E+3mRYKyQ=*n-e^LrT0RUZ$wVze=s-u#yiy=z?!V^TJaaU8Q^?#~r`?eQB z34qYA9(V-m+Eq}uEKvFo+zLpJs^oaL|6+dtv?hcL0003| zNklToQ5QUAL13;P!)c63jz=EtA;x4*vIv{qHszhR4RXIS8K!P;4?ck8A zRXt{vU1q`G`c-JdR)TfP>MlS&!)7>H-BIB$;QZi6_(&5vYIg#9HwUQR zb9iGC2-1ldfYhA;#?WqE$i0>8PevE{;hcb-Se}x)hlT~_O9BqibR4jN8XyH^fmwY5 zSiTw#kPp!BzQ{(mi)3_cje0?@$xLlXN6uzD%pD?Xu7Z#V4FMg$vWpWmeah;_4hzw- z-ffiXsjaq9;c>+S+X|}o$TV51xNkbLI%P@(Bf$13)fzGP%$jy)K`yX95Buqk2zJ!N w&J1Pi1y+eDJQZj;klCIDXK3P2dW&nuH!Z1OmUHHDivR!s07*qoM6N<$f-P#p_5c6? diff --git a/graphics/pokemon/misdreavus/front.png b/graphics/pokemon/misdreavus/front.png deleted file mode 100644 index b46d709a969478c04b9dfe3ef0d66aed737159d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)5ZGX#U>HD1fS?#CKrl#PIADOdkT9SqSm@wj*g$~z`1o)TFaQ7m3GJb20005j zNklzCiJD+VI1gf~CI z`u6u_<;(K0eO#@yOxeq_M3iJ}} zbAEgC$MD4&F8ki+{M!vDaFc+ymj4fpJ}8MIsxQWO{+~E5kd@N~gy06I3rMJ&evJPl Z?f`N;p;kCM5-I=y002ovPDHLkV1fkM3p4-# diff --git a/graphics/pokemon/mismagius/front.png b/graphics/pokemon/mismagius/front.png deleted file mode 100644 index 5d68e8b7042b806674a8c0e03635cf3c4780a88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 727 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 KMNUMnLSTZ&VOYNa diff --git a/graphics/pokemon/mudkip/front.png b/graphics/pokemon/mudkip/front.png deleted file mode 100644 index 7c83c421f11535c1377fbb68356aeb3649b69a10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6RPP)%o;P|LmAn1TF_^3em`1n{zKmY&$`1>Vu00009 za7bBm000ie000ie0hKEb8vpK)W1){KokdXNT@MPTmg4p+d-Ucad4zu z2RBUG#t0f6IQ$^)c znN6)}A(WoWHNB9QXKP?qRsuy8Oi1eyg62v9Om#KTSO&8H0a{AF97unFTr2_>s8A0# zxkY;ma%{*dfF{Hhr8luWw`<72%Mu4H0*#TO2%r`cz|qJs1mK(C9R{&|l^g@fq)9o6`KG6002ovPDHLkV1i^w=1Kqn diff --git a/graphics/pokemon/muk/front.png b/graphics/pokemon/muk/front.png deleted file mode 100644 index 4bb6d0a84e86390a753c097924079f877a59fef3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmV<80v-K{P)Px#Fi=cXMVQc_drE`mz3#=N&7^y*S}}7F5D@tI_^hIxzNVL1@#2>{*5KkpL|-y~2cz#~8+7~(y`+b%pIz@)zk zfL;YG)GnH=GAP0B47Dg>$;e(XkbcYlkZ$#L&O z3-z0!r!L>PP=l1ww_I%zxu2#&peRL4M``8SAQC{BCxGA7%4D_mRGD zK~S0;5r{n8*9AAWp#XR#J-|aS`Kcy==*yTNPr&O3z!hq>oW!a7R)AzxYJDa7dA2eFv@xm59YBki z<);s>HDffkX2A9kO#mG+zIc(R<>at-qD&6Rlj8oB!zZL-b)Ke1Y;^(Wq2aL0ukoQjCqS4NyT!@gxNvSU3_;x*(kvPlc zJmB=Usqqwo<88`L=y4)*KlwO*g+RDJg!$(M9K_>WhxzLph>|C{8RWvY_aMi=v2cO3 z1Ub>GJQcESsgy=tF{w>!w9``a6UH{dOYe<^q`W;{I@}D_Isu!<9{dFUwg2C~00EO6 Uc2MDDa{vGU07*qoM6N<$f>MT2rvLx| diff --git a/graphics/pokemon/munchlax/front.png b/graphics/pokemon/munchlax/front.png deleted file mode 100644 index 243df8dd060aab539d3a4c4e33656ffd307fd74f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)8nu6oq9&FK{V!NGDrN0%xR-?G~A&n1EpvnF0Zsi@-zHxbV=`1(a+p zGK5988u@vI#7|(rd8b}F>0*)UkReMhKtRy_z;iBn7zFS2Ce>&KK~e`qY0yNg29Vt# zL{_5!)shf(0I~tPexL~m)BzC?gJt|4p(F!-mkbR40}!~j{T_?L0$!ICK77P{3JrxNi<2w&+NcP#(A3zz)orN;C?&p!84HhGR1Rp{|8d($y5j&a~~Ku zHNs5drRFZ1i^s`J`_KL)hN@(0cse~;_xC3^C%1Ve5#h=A#YMh;6XP$BV+J-g^utw| z^BJkTMOiLpq&Fo(W6HU`jypcgtC`L>#|W>N=5h^~)zZwW62ajU1AJlk*Q*tO3B3u7 z_;=i<_D2ikN%gwegw`YuVk@Du$_6}#&O)6v#mJY*e_W`2nR~C-)n9jji~J>R5u^YB N002ovPDHLkV1k^22j~C* diff --git a/graphics/pokemon/munna/front.png b/graphics/pokemon/munna/front.png deleted file mode 100644 index 3abe09025e01385e9a86d094d9f4049822acc72b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmV;f0a5;mP)CR{vKA;OvwS5n>7_e5~aqI_Pxe0V3yT zx4wY#z6Qo>!2+^ZmJXP6et@L|GBx8O0t&Dta6I7vSss8)O`be}3s40Em=+Ed)Qkms zE`R`4G@A(UsI1^7A+0H;Z&VW3#u`QT9Zg`_e_kODHg9zh(}M*rHcMNI1zrf){sE+0 zyYsXOg!wB0_-+G|hA%>_0i!+c7(mGW%KDc@_l5YdGY-e7}6({Yjf;$M|z04*{w^2;c$0xnECt>X=uq{wXDg#4$I-XL;E@ z5hRWspy0GKtOV6Vz+pXs4#=Uht z!0bwGQh`hW18qwVb0AGcmh=gR1&p&!5s@TJ`UEgsI=81np86&eDdSnA`8+6a^ehxW zDRq~q+i-XN5@u4iP-4vR(1{A$R}f4v!pA#+hLenhhDvh@qd+E51`(&b8VkhXq)u+{ z)FTtZjJ?nCy74#L4{2;1QwmJqKmGOgNopI?GBLq-M0|g^iP+}-+RqysCuK*wz$v12yf1sP;QRP55lz^qTZFxi<@uwE8x0mT z>>`9bpM_krvSddUve+b@Emt(t*HmJ?{sO@xS8>QW|M< THi`e(00000NkvXXu0mjfsqEjZ diff --git a/graphics/pokemon/musharna/front.png b/graphics/pokemon/musharna/front.png deleted file mode 100644 index 75addd0950be8f58fb27292dfe858d8207d8ceb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmV-?0)zdDP)zy>8nu5XVgf_S8YAp>ap@6`VH+QRoe_I!GWV@zw%8cMnpoUEJyg>e)*c z?Vb8iy*r8$B~fa(qG!O%|Hu2{9kp2e69br2Ri=!YAt2X~8RGN%rrQ3Vg3f@ zfZX?JItLQ-HpvZHB0^~L#m15i5CU}L;Nr@9+av&TunfAjkm zH;B(I@V;LLC$L0B=aMe`jFE%Gm(EAzLP>?}fb1}KL9^O8NCT=%u@8h8l%e#%>-c>L zDDJcFfUeLc20LINL~zgZz$iMCgE3<$=c|0rh!308F;3 zs!PPr)sX;lat;xAV*TDde$^G*)Ba3Ay>3TRo^Otkn|DGSO9tM?d%;gE(E2n0Fc7bW z@=s_39B<)gUB|l_w%0((`u5GQMcLEC3qn^?mgRPlurOBB2J^3=CuToofBMw@@Aexy W+5Y~Fn{cxL0000Px#Fi=cXMF6nqgDC*^T3Xd9T1u2bDQYQmy+M@KK`ALIgJK~6-YM0rDgXcfQc_aQ z&CQgQlyNiNlK=n!`$>5CbINY3TkFtG>fuq+CY)!$;)00000NkvXXu0mjfN&TmC diff --git a/graphics/pokemon/nidoking/front.png b/graphics/pokemon/nidoking/front.png deleted file mode 100644 index e230190a25ff5c311112ac3f09ccf4f6d59f5f93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmVPx#Fi=cXMVQc_S}AJYl=cu15Y=<;q*9bAdz1i5VnLL}|NsBR#iXnd0CRI%=0P#$ z=GExv*mnLk=>Px&c1c7*R9J=Wmf4b{FbqYJWhKGwA^-okqbteAVQHxDnzvC^QdxWt z+F_dh+oh4e)9s_%9}`2KGhge|2Z8;p4qK!!Z`Y<@Jq7 z8Fv8c=|Es{`9qEF04COh$uou*07B2_GYHpJSOJAb48`E~;MkXIF$!7%G65tGanDJtp zEjBv~0#nn($@ST;&5Vz%SLRu*1Y*}$cGeN<3eE0-sG7_*v}b__rGTLI`ap;v0!~Jd z#AVj7oj}L$2T1)1c#|>tQBsCY{Pis2%)(fCR+bh9e6aZ;R%DI;cPP8Bh*^ZnudjXigW>wd^0eCvZj+)~DXm89j zXYZB_1mu78TT!FvPwq9!@gt*f8cZ!!Xhz3rS=hW=$i9`*3Fe%5iSj(##x)lNfTI6O zY(4!@mt~fJq!491mVbxq?+@Pvpp_GEOcf-vm04x?vHTzu1>89PgU;$ZogV5%R4gu``39uQSsSOH>*IMxpUK{vQucU}Y7Zt%B5z273+ z;9#27#EQ?|0Sn{&9y?5)-;g~k$baa+le-J69%f@m+3t#;{~Q`dClKQ?1H?A_4$vl; zwr<8PS}q7KKX?!!f9lvqx3kk{7{95>d=%Y1!*h<{0cRiGZG_kp659GFaPx#Fi=cXMVQc_VvDR=w9PR}N)Qkby{uYuS}Ai{DV){b(9qEM`1rl7TIS7*?&hR$ zC@AQFcuKkOKL7v%*-1n}R9J=OR@;{1Fbu=7NJ(4%|997y+zKruoHI|GhZ%;c6kC?< z-fsWNAvsfzzk-7t9>?3W%o(lVKs1gQg22o{A&MsXV-_#>8Ud8*e!s^^gb4z20s;cx zmt_%#83I;3ffyRVvSfxy0?{A@1T3=zip}sJ2_BC}hKrV!U?KyA!+{4dp&_&gB3_O` zOM$5x2t&cM*TYE0@i!=#6`t6^3ZI}58SQ$+b*%v)3@4#wF#L+OW}sq>mN9q$!8%BL zz+5@5Vzq#txNU`DSb|nQxqjO+!vuj114A2p+u$J#<8KB)M*l(}6(=+}Y9U3{(W#{7 zwe$pl7$j)*?~G(t8dQP>Uz|__aDt%-nByLsnRIMPjc;^37$f*ckpm2BYTSWL?zGwgy02#-d9Xm6LR4#^Gbk(9)3X} zfvvUitZ=I4rlCj)fXWwg26N#~|My`S?voF#_8<25%cH!jd-=l-Jdt*uEk z{5jb0N|2K{UQ)l8pC1Tpfv3dpYqW~^ZNqBkrLz>_?+5ZTeO}R*0@bEYUl^{bJvMv` l;S&RLEI$(5eg^*a`3KeT8bYqTg|q+w002ovPDHLkV1g6Shx7md diff --git a/graphics/pokemon/nidoran_f/front.png b/graphics/pokemon/nidoran_f/front.png deleted file mode 100644 index d47802a0da7a2ef8a3b34df66b962b49f1ae56b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVPx#Fi=cXMVQc_bAzl}L4&NU&DGWaG;Om%i{=mz5cv4`y)jDe?*IQ%LEhfp00000 z0000009I9CApigYXGugsR9J=WmBDhuFbG7=f{l{;|G&2&Q0z_*7Sl@)+DRs{C;JQt z$hIvlEiL_b5&ix)FKomNH``03j35TH6G#AY5l{n!U;r^jhhUxo9zqxsA+v-Z0ALX6 z5zx(#DC#W1f6vqb`*9q*->CR|)uF24?}QS7{ow3vfFo4PU{jVj{Tra-hfoqkdJ6l_ ztOWq2nH{sco3-MHj0C7thJAV>F#Jutr%Ait+IprF{q$bpZ?6DE2--iM{cjlw;Pur$ zEp2U~G<6WF_*BqZ@fr#^Wdh*2a@H=^z=)ymhl!Df==Ib-&3s9p%V2)XB0{$eVycig zER4r8`iW_4h+U9HxDuJGf;R4_<{8i}0h&993?pN|`TeTU(73s2tk@bLUEvH$X`<5I z&EWW_r~r}x!svjaKXb6A__UBxErLusnn-P!s05(%q%#+RgW#8?6jXDKQET>SXlbk6 f^#|+H(o#j=bf^jbsY~z+00000NkvXXu0mjf(2w2h diff --git a/graphics/pokemon/nidoran_m/front.png b/graphics/pokemon/nidoran_m/front.png deleted file mode 100644 index 3b1084e3dcf6daa14838b1b49cbc6796825781ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)Px#Fi=cXMVQc_y<)}YoYi7MY7h_*?!E2+VnG0;bIr}o|7ueI|Nq`WDX1VkjFF(BmU_pBmv#;v}K!_P!3ABo=E90f*+0U-x(8FbT&4}Dj7;qbi z(u4?riUVd>r3oTb{AM63egotPr2qkNmb&*{0Z8T`)o%yF{JRP18c6jkq5CHQdMZ@_ z4*}%c0HRJ90!aIR0-Q0EK{1QU02^_$)kw*a6aB?;gL z@IIIyLg|&DWn{Jtxci0jee~&XiVH<~|JAOk2PNk(O?11IH}N2HMHHA~B;}|$LU~eE z1jkB{ud@LnjARvbm|`bB&T1^BNKZo~fCqJePx#Fi=cXMVZp1T9mZK=I%LKVh|7zi^a_tIdeB(ut zgM$D70J+Bo*8l(l6-h)vR9J=Wmg{bVFbsup>=csr{hxQfB?MN$X#Xax3Jsd`aePVE zX?o&`C%y#e1-8$2_ow=Vygt!Jp3>&Q6#%!(MIP4+Af-&>1HR8U4CKro7eLeVgCGKI zxdAYt=wGk((S;g1K$oMWGru_IAV3P3I{=fuUL#foRww{96ySQX5F>~j%!BEdWxi#B zg^-hVE~SO_90~|^0sX~FV1VftO(E7s8UWbzbJ&0YnqIr{n$1A4gqp+#poDM*Rljw> z1nz^)F$Sv$qufS{Y${`Y=s3xRCH?x$`mG|q;JXxTdYLWT z9(bXrPn+YyfII*soBdh!CBUnPpZ8~|qgVp#&^Z8i4RCd@1@<}|98fqCh}I&uYIOZk zPvi&_8K+CN{3Zao{;;Xqe6r=WrGN;4g9SQ0r-{%PBk5I#0@fr*^~V4$HHXX~JKwJ2W`uFq-V?84{r-7K#HL=ab}?R-uATv+yF{>@YFzc>*yy7dd5k0 zAOJWu!0i`xucjv~qy`W>Cj(8T?>J0yBZW^6u&Ji=jorWG4sbUMQlZt0PGj(Zl<`ZV zCIx`irjPS=5dSg)BCjTp*k=HQ0Y;FJRLJfS?gP+r?zs5RrAgn~OV)XDz(kd5?E>bZ xW^;!yuBVEXdG!upPb=l7gD;FfsGs=P@dJr^61Cp1_a6WN002ovPDHLkV1lUCF9!es diff --git a/graphics/pokemon/nidorino/front.png b/graphics/pokemon/nidorino/front.png deleted file mode 100644 index 16b304216e80830c08f2c4d27401629e61721ad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP)Px#Fi=cXMVQc_S~+6PgWeDj5az7zlv=a^lwwNFr1<#wfPjF&z`&4Lu&5{~=zw?t z0000009ubQp#T5^F-b&0R9J=WmTiyYAPj^%I8Ji>{~vrF+o5C|NKgH;Iu&hJEn*(V zFOWVS-|-#4asVIdi~I%vULbD=hEj^Wy1?=g09dYljR55gFuCjB$qw~JPXKPu2@!o4 zV2HLf!{k7u-T^e>(MV2uBS29aJ(BRx<5g z69>hy5b-tDKGsWupS69`oFvA=lm%mLLr9_tf1w${v~I@5UB?W9=XQgnfLf|BnB9 Z`~|4Q5y-0pA{qby002ovPDHLkV1oHCIFJAU diff --git a/graphics/pokemon/nincada/front.png b/graphics/pokemon/nincada/front.png deleted file mode 100644 index 1c408a81d25693c63d6d75665bfc5692ba834f95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)%B00009 za7bBm000ie000ie0hKEb8vpK)3Hj!Ko|hv7y^Q1DaAdWk{+p5G~^9R zEV>!;0EY5g?NpFdbPHk+?F+a`haip)MeGCU&?2}eg^V5U4J_WNNn4FN3;7{|yZ^iY z?mrSi$RdmX9CONFVDk@+!IkT6w34k+~*pJ%s& zICx(wc6)INaZE@2V$3odl!o+kzL@MG(n#Z1Yx0TpaSWthvd5~jkbpHB#p@=ZqzF7$ z;jeyNKq&4cK>V2FKprRGG(t(AvE$D#e?=Bq2yg1=oTf<8vswTE002ovPDHLkV1nfM B^s)c| diff --git a/graphics/pokemon/ninetales/front.png b/graphics/pokemon/ninetales/front.png deleted file mode 100644 index 4c14bd887c11c95cbfd950b44cb5dc663a3208f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP)Px#Fi=cXMVQc_&74YuVi@-3dk_#1=EYL95CH%G|Nm+!|Ew|pln|&80000000000 z000000BTW5KmY&&=t)FDR9J=Gm)myZAPhw{|Aqb1PEj7I@6~PD_wSD&bDp{ zvTgtUApV(*%D(`p$?T@c=W0_qz;8a(huZYaaYw>Fp6Xp)h)Wwn^_xeCs-u$nen$@s zVVGWqL8&*F;_{6HT=?+LE+0s@4%mA}8#I&$v#tumUZ*A?K28VXsJ|iz5vu`+Ni{rB z+^F&lAi5x6rkY$d5G;aQLp(BJlbB}!mlcKW!59cP*=(~wh&MyX#z;W8bFo70+3OVm zGe(2{%^#xQ3qxJW3u*Y9tZh#Y*-TA@&DU>rIBQOHoeGP%$=E73u z;n51Pq>?xQ>A+{sWub)uRj(E{2MC-%M)hpKY=T$~k$U-Isx*KT{BqD@p-oXh;#jIa z0Fj8Q*P6ZYl8)Pk}j0AC_8`P*Bb)O! z4~rxA@!E*$tTdtT)|Ui{S+V-sG@*k!0vOgU0K~12wJ^93))Xf9J&Q|1wDSRgOsMkF z288(@(4v6<;DDamk)G zs;=H4dhHnNYA=>c03&SC1{ZzMcS}559i*!TsE5V!X{Ps0e4%#$h7tH}VKNJBBo6Y~5glT$>3$)c>OK7w{S#_KBArF8}}l07*qoM6N<$f-7&1 Au>b%7 diff --git a/graphics/pokemon/ninjask/front.png b/graphics/pokemon/ninjask/front.png deleted file mode 100644 index f7c0d20dc49d02c23ee8f5db8632a7cfe7fa91b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)0001(AV9z{P}ne7sIahrI5>b{K-k#O_|RbBs7N?CICyw?L|Dv90007_ zNkls)XqV;e#{gk*H4qHLN(6bP6OEhw~T$W-;6B*!N;O{Q*n)7^bPz3+Wbf^bu# znh>u6X2~_gEcq89=SRS$MCu_SDm&=W9MA(d)pm|e zvu#=I_bY7Co5mOrQn~$sW13%AoeCh(3Kngs0!PdboK6RUUSFLhk|iI>9Y;V9h8G?I8^-7GjM70M+HX3-0>%FW*0p0m3sKLqM4Uu3I|a zqIBEibs=5v4aln5s69sjJKm)$P!rlW_NT2qcqK^i}tfm6LXCZSSX4#x9r@ZJE_q13*oM2B3 zUP`iClI3CXeKxKO3%lV=`yIq2kiKU}CxD*aAN~d4`}pX(AU2ag0zOT~Ojhw4;Lgca4h(>+^_%)n^#@jC V38GR57vlf`002ovPDHLkV1mnCU6TL+ diff --git a/graphics/pokemon/noctowl/front.png b/graphics/pokemon/noctowl/front.png deleted file mode 100644 index c646747b44a09fe7f1a239131143bafbd8081bd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP)Px#Fi=cXMVQc_tb0mgK{5aKw0l}g-pyJ;DInF9Vh|7zVq#+d|Nq4?7@PnA#l^*x zS~;YHYT%k>-2earJV``BR9J<*mVu6=FbqUVaEt{a`TxJY83$V0Tj^rZo+YYPweuKf z+$7WVTUGNz{rm(_p??CXvlIaC6Y2~D4|;%_`fq?}2r$nd|Ibx<0`R6r0f#<+en-Gy z6F(Rb|3(Hq)SnEvehlz3Agqgl(M326h%78oeKBVX0Cahk#td{q?r-k|2^r`etLr*I zODPcp)1*$2qYsh73g|ll`XZ+R)@TFlq4b_hRn(!67^qEM|4|_Ww(1u^BL)cAl=>=1 zX$lwsplzDi{<`j_C9xuasTMt3?V%% zEUJqx{81#=#|*dyRg7V+X}O~ZA-#XiklXlJAm%9$WXDTfGh*^d_L za}HUMmcIe9CO!-x4%f?g61jPXUj_mM0x(C%zHX;J3{d*ew}J6R=m7Z(Fl+&bu=p_Z z;|_o+2#*!H3$UIe7g4T&;YG0PAdsN0&w1Pe-M?e(fGhz3B1k<2)q{{D4oFCVNO}Qs z$iYbvr#K8iF@z3TR5o+D z=8nLJ1vVBG?ggBONvX8n${3khy^csPKlfVfCdK**rjP&inKcmVkL`1sfWC@>%x7!Uve00000{@qVc00009 za7bBm000ie000ie0hKEb8vpKk};3kFcim)yksm9s7sd^5FIVvCC9)5 zXH*7;a*34;-H}S2($6Xd8yj;Ekf<5*7*W?yk`4$VH{W+$ ztPxy_zX@k6V6A|jeDZmy%3<61lyElL{in}^F6qk$&M9(oLT0BPN@ueiPnqC6fe`sj zWt+V=#8En9#U1CoNXnmp6E>-cV^24g&Sr_9a9NHh_U|=7HU|qQXF7^7EMO!{KVdJx z$NY~0Txg3elyaY@!^)7HSO6fbiK{@#=}O~-cmTt%$8+FHr#MKLGNl+4;Hm4t@Osh< zrK^Sq!w~eUbADZz=|8^lAf<=Z`E^#0EWW53=*!9w!CtB&Q~OZrQ=}_9fYa4JU6oe7 z8WfPyZh(-#uG&@;PJ(b)2VgZVMO_Mv}mpY(|+H?M^@f+mw VtEV%N6mI|k002ovPDHLkV1j3JGm`)S diff --git a/graphics/pokemon/noivern/front.png b/graphics/pokemon/noivern/front.png deleted file mode 100644 index 252a56fb46cdf760d026aa1f6841015f064b70c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 972 zcmV;-12g=IP)|LTWs400009 za7bBm000ie000ie0hKEb8vp?1f(k_=Hxiw7) zMAv^HR|h(jH@F~oeIA^-eUr(Sbg1w@2!ud91x>|tD_Xi4Oa{>{WXV=2n%>@b&Xt@f zQB-*Fu0crmem>{uNY@tPKMt>b$x(bT?Lab+?Z87N91mN8ho~Hht-wLVP$C3vKpGhA zA;fPZ)dG64KQM6|%g2FZ;?Wp;@xi1WOok>th(|3z_D1p8j9OB>XD}HJ2^|a{DRSf3 zf(fH|+y-963?{J*PsB-mk^Izx(GVAt$q>WkAIln;R>0XF$~Sp$ETf&}=`9GwMzRK3 zfLX9FF%yIG#)ztHR!G=8cQ z49ql{S#T`7+xhj*FM8Mv3I-h{aFI~@5Me#qt7k=V z!x@Z^{WUnk?q+_Craxa6rzg9d0tP0kz?8tgw@G)%xfa5+CCzq?U!0QUYHL!h3q@)PI6)uY#M33I^CXfn%Z<5-Hksdq(48Dfq z43NKWBjD3pKy!Q4#h1x0e8hcER$$-ONZ^RC5qs~Fd)xq&0U(}MU?e01Dss-?B9R1W)57%A^oSzGe+iypVBd_x3%=yjmr3#g zO>e}T-GW&O(lu~x!R7@4TF0lev;tcgh2=|bZ`sf^-|4e-Uha+bTU zP;NMv+RklMLPnZEwG9vJ;C#SM6OO(Q$_!%jVs@@MhO%J3-k@vX=~rpG#UOkLY%B*O z0_O~T0Efj_-`6~B2(@j2>sRe?bm(V`JOm0-HQ;mEr}ZT$j>;OUnQE*< z+@%$858Q?jVmn_b(HKE^7jdB*zy(xylWqgJ*`M{FS-0_<8-#hik44ofy`glX(f`7zFr)xX!q+ zz%gi!p`lmzl4nWPd)Ms!29%j&=yfkB=>L={|Ff#2Bou%maKQ0-?p2^UO`a}}ArY-_ zr+QC1Y{22deC$NwyZZYNm5*AiT$xoVwz)7rDDq1&vrv^y-rZfTT{C|2=Pf$wa$Ue> zQ%g$hbHV)W>=C}jEk1UC)D$mq+IxTX7WY#K`}yrLgHYJNZ-*HsU7J<3>W5)N1B1y~J$4-%?+e@BI;T68Ff(qMmiKWCoiKfGWiHG*-RPxy{uo*PHTKzRFgFS-by-IS!^wxKZTi6`3Kg`nP zd@IAi5}@JK!&Sw=@nBx#g}Q%k41qib9LMDh9qxEB6#RItYSLgF;2-_wb%P~O zLk#nisMGA7>lm%vyqI>hKUZKbI604F?#u^kqyI0H=k^k~7tC?V85A|1u6{1-oD!M< DbXm;A diff --git a/graphics/pokemon/numel/front.png b/graphics/pokemon/numel/front.png deleted file mode 100644 index 2df10f3c71b999185564e115ae7276745dbc37b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^|r5aKK>j@SxDpkofrc(8$K)3Hv%Ko|$`mIP)_8jQHWwG58D@FRe*e!PK5U}OZYc?QN^Fs*?BL^v}{5CpVHQ^R6Gi^Teh#PcTJydE^; zYwiZaggRQw<%0$QB}xdiR_uIJ6$`lqnBy>Pt<%RjK(qA1Nx)pV4DeveFuQA1D1=w!bd&u@fZzg zz)1inz>PEmTgpO5qy?{qDXQ1g4y1fD0k;S~bO7$8oa~2hm8S(gsXV|5oh#Q>bYP?u zeZZ00G3^>U;P-aD!MtL}}4}dO*?klCIb_}}qLLB`~IELB> fMo`oKpOg6kGUAnO3gntv00000NkvXXu0mjfm@@45 diff --git a/graphics/pokemon/nuzleaf/front.png b/graphics/pokemon/nuzleaf/front.png deleted file mode 100644 index 173398f528181a8cb3734170bf570f0b94f30e71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4wKls}G}KorI&1qnrpSV=B`PY_u-z)C&< z%@`wA+lAON+71l~TWn)7GO3A1;s6n@ZHQhCUZhdFTp?B3l~U#nt|DffKFTW)()XM1 z{h0@Z{0~!1CV$bL=|y7VIL_<>@x+Bk)o=%x75?4lxSFc@y#8hh$ zl4l85Cn=q20ssBSJy4gN5ls%i*h2${fgoq_&$t$wuR@4}sR4V{m#B-+nzKV#-=z@U zA}aNO%@;qUXm4(Qidd`fD!+^RlHMACUA6Z&$6gfQ`cenjRaN_G@Ii>8mpZ@##lR(L#$s%70*|wAGvAa2#E^RBiWjWr$TIwYrM_Y z1oR^OgzF&R834cRA9@5rX~^M=Vilo5X#y6aY%h-P8rS zmU7#Lk+Dr;QBJ5d4~lSgiIgr4vdv+*#f;tSfh=um+(#R~Fg-vaP(Pmxv>Q8=IIKYq vb#D9zsmL2hObc~3S^}e&0F~;Z{*T6Qn*8aWQZFW?00000NkvXXu0mjf8Uh@p diff --git a/graphics/pokemon/octillery/front.png b/graphics/pokemon/octillery/front.png deleted file mode 100644 index 2fc250c8d162fe3ab2428eec8693df4a8be72f72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)Klg(<|Koo_?f}m}cMD5lLXtFkA(As#q zuZLb~9f7WrU63mc^Z|;WAke%(sh_gmJdD0D4?htgi^27I9_iv8o*XRzaW`-oCgV8|rrg zMC=Y0U%vn9n>qwEEdT?@<8uQr?INli0iYg_zcC8}D)RvTe8w)|AcPkHZbd>65U%rt zlu#6*K?)HMA^>$A+?5bnI{-5RROm?|Siu+w2}E+q9TF!?@8o zZ9{gpG28?N`0G}G8jUK}J<=rNmir{2&31ZqHcjXJ++yw%EKSL|aICmbDCZ*Qz0!;K f-s|H1KYRWFuLa8)na3pc00000NkvXXu0mjfWL_7P diff --git a/graphics/pokemon/oddish/front.png b/graphics/pokemon/oddish/front.png deleted file mode 100644 index 3ced8e7058e74ec08341b45a37e0302add1a0834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)Px#Fi=cXMfkwLi>xt9S|FU&O2y`T5D*YrYJ+o>q?EM9?m00jIZCozdDfMz00000 z000000J}6%i~s-uL`g(JR9J=Wl*x_*Aq+&ZjZMP;fADyLUT%iDj5JhQiqcBGc9ls= zIXXJ}Hv+)l*$FDHBLK#GCA-##(C3D~>V>dO03sux`ztc@A^=Gdp#A{FJyYV@p56f% z0Rn)QBNN1?21K>%iyS~$80}`N2&|+C!~j?q%3`-Cn*@6*83881{1$*Se$PM@F)je- z{o0>Juz4o{bcx9oj1kC3zANzg^-L!j@pZfb9QFZA6LfRrDYO6&Ffb`XbUwTHk2I7l z!aXb^S|F?@7zmMOQpQDC`dg5X$`NCR{2FinAShz_=Pd0BXvs790Px#Fi=cXMVQc_Vp1`ffN194gT<_K|L(;A002R1tT{o0V!ie`oXz<7_`txxXlQ7d z;P3zd0K&5xE&u=lZ%IT!R9J=WmCd$;APj^Xq!Up4{;zwJ!P>t~;^uCcV-IffF%yEl z-KM6drh<~8i`Au+W#|$@q}FN-;Y&>;WVyQz14clyz8n%+e1CgV1S!M7ee7SP8ZkqV zSH16F0HgqC0Fwi(S|AC6EX%Wl)d*lSkN^|{cmj5mho3|USx)&Z903Z#2l3Sc(7s!^ z;-L5eI#CjU@|^%|K{ o!PNI`{FGY}>}s;aaP%YvXMS0%U*Su|Z_x z>IP^bas&W00000NkvXXu0mjfd0N)Q diff --git a/graphics/pokemon/omastar/front.png b/graphics/pokemon/omastar/front.png deleted file mode 100644 index 87796c37d5891e67a96bf51572e769063a99bcf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmV-l1EBngP)`1trhKtQMf00000laenY0008& zNklB;YV12rz$H@N0lN~Y9iPwRbp^qN)@31 zTZE$Iu`-0dEvhn+C5obUX#a@*1Nj?zXB(O-4((j^h7)@C;qLpr_Z*A;v$6Jvx{_X1 z#DA|__TzwRBEVMxY)xUjwgRxy0IPv&mc=uVYm8gmX|VKTB9!F5Rby6znHfEjNw)W3 zoe`0abfRRE%#RIT%|!vptQi1Sf;&+SS~+I8Zi6wNh;*v#&Yh!7W?A~PNS5FC$0G7ezP^d`bzbwcfXDV#I%x}ratdpHVa}RvB7}qT3~~2430XZDFEEv6{MsFKmvkA z(1R!(p^BN?bn5zR1W44>z6WUXyi+L2{+l1JJCZaZ-;=Y&rZjOjl85;Y76$O~ne<0= zaMED0so_LURquoR6*DqPVCX^4?7TPf3jici+Ths*JPuugt$Ll3l!yKSAd0)E<9nL` pyCe@6TUp-HZ=pie&;Rk)@e_#CA)>GXQ3n73002ovPDHLkV1j&`m2&_9 diff --git a/graphics/pokemon/onix/front.png b/graphics/pokemon/onix/front.png deleted file mode 100644 index 6cba5adc4d0dce3beb59c4be97b0ab98a1e62ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 832 zcmV-G1Hb%Px#Fi=cXMVQc_Qc6mLdwcfo?!C0M5D*aF)z$d;`1ttv00000000000000000000 z000000Q?Pl0ynF|>#D-8gwG1swfv|Wn;XoQQj zfMG_u=TvI|?K*%+*Q7(v02|_j0n-NkLFkda({@Hc1B4OiggqesNxu&Y#q%KKUk3pC z%&gS;rV~ib)>ljxc)h7{X0ZT-+XB$$MdmOArU41Sz60gW zBM>5C*x1xuw9NLY*L~1;Fg_j$un{8Gt3?v+Vi4>Aow;hrqX4^H;|ONPWa_o_Y2hK0 zKMQckcFyS&FmoA2WeAZ!pCWd^p#VXXM_QB*;mKM&M9xo)5S@!CSmX+zHk1qG!63J= zVtKBButRWp!ON~yuaOn_yn-Df!aCQW4xD-m^hF5<)j~!i26^!hfb9g}%MzYj%u=BP z2&aB^0vI3yl7R$_EErKqR;L)_jAzXQCif8No?00&w^z?ZB%fX6YrU<2k9vP>{uK}3 z>TMd0DM0| zuK@!zk6$j}zOj~@+(~?$>z4-bEGSL<_9wP{B~%9X6kO+h*N-}*y7z$YKS3t|`5@og zmc9ps|8`ID_?fW)yviM^OmAlc)LAmC6@Q@Lz>fmh>PXVW{UjaLhoXox-mCIQ>D12W znEP!9wngZoO>Tq_v$;v_`uS#Zp?6Px#Fi=cXMVQc_N=izLi=6-e|1m*oN@}brK~ew!0E=2N#gr+<#myjEVky1FAe5Yo zS~2+GkQB5OApigYQ%OWYR9J=WmC=&IAPhw%0n$Qg|Nn0{3AEGI-G{3$K5(@i$MGCP z!1#E~%*=d!g5?96*h23(Vx&&Cj0m0!V2&vPhVa5OrzDWz#SsC4 z^EZRPq=*SbZ_5$_U$Tg;Kn2UXs$$5Pu@-PBTEKD>6j0!6559!rH$tN=3@LsVQ<&;rgH!njmMSOI3ZzFSjkg>$&`$%XTFACg=y6wk$9IGp8P$kC8;E$sl zAow2vHdj@!y1?7eMB9>51Pr3s*#g}Lkr;I_BZF0%ZNlz&Gu(m+Zs`JWBW?!C=q6gr zQ_ceyU?5+7vRKhxJvp<3h5~l~G+e6|RlQNdpRSpineWaIn?Mn|CaU8U00000 LNkvXXu0mjfX*$Ki diff --git a/graphics/pokemon/pachirisu/front.png b/graphics/pokemon/pachirisu/front.png deleted file mode 100644 index 7d60cf8dfb55a9274df4bd7a1781a1c822e07b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmV+u0_^>XP)*RTBU`3iO>~lSnYS~uvoQ9D!#D=4=8*zW51L1S;aFfZgEoe(K&uV_*oH>~ z3tWIxkIb7nXmv^8TL9oVBrv%G;F2@=+|4U^)e`E6!Th1h_xPv+3|rmcj3aP3#z^n6 z16Y9PQ2{W;uZ^Hnfct~sVn_lDx~EnSioB3h4LC#i38W5M9e@$QZP`IoK)Z)WogEN; z9hjVBrq?aObt2RK0)Ek%m*89o9Yi~zegm249m22xK@MW6cQAtmP8O9w%w?+G!Fk!a^-W}x^_?dxD=K=t-+XdD*^+?8@`H=*#`7u{ zD5EjJqubcKqyTGVQf{OI2Rksf824ApK@Et;p~zx#1Z?3yCL*W>_@W^W@<0JT#x2Kk zN#t>e{GYg_3NSXqMaTu6Kau@a<(2n3;442x0S#v16bDV{5{3P)k(74#x;P|k(*pQH*z-ZWrP>?t{IPmEB`1ttvP(Tn65csgDVTIAJ000DL zNklOtw&KqLiw1q+J!*+8lRFr8OD=Z|K29X>FxcS~nB`=?R1`Y2b-c zsWcJAA%>ueA8^bshaEJxK(J$!R5imLKE^jP5fk2r+1;&o@Cm+tMjRqEy$IB1=-|qpz z7^`qz!xT2q(Axex9yTC*0%*6VSqmb#PEt_n=aPVw)%b zeOD8$2-t8-=Kei!7c8!T+{b^;?`g?B%~U1a74zTyhZbFwvP~=eQA zPhRGyiFf1)o-8w=qzsa-@!9MUgDEA&7C z&^mp0Ry0k~gc=}#rUp_HYi1AtU?RCn~*HEDFB?~7_bSo;8=SKs8M22JAbC)IP#dZ!!y6w_o^NoiadN( zcLUesCr}%ZQS zOQc&*T?CBJ{NtqvnDmeR-wtI@lQFPO(9$>lvAY`WTReDnIBE%ac!gYl()Y(#<112X zmsaW@$OoXOy=|r52WaxO|JwiK?QzhMQ|{`!0HqRE_#d2=>LP=iFF61J002ovPDHLk FV1hbpICB61 diff --git a/graphics/pokemon/palpitoad/front.png b/graphics/pokemon/palpitoad/front.png deleted file mode 100644 index 05b2a8b24cdc03546f4f0bd2e58e7a1f2f01c3b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmV-+0*U>JP)O-v{4rJUPMSB z5O0(6swHJ0kel)#SPa${v5k$8?zG#0g;sH#og{kt=1#D%%D36#efYi^W*z4;{}Pwn zoIdwxjZ6a`rL(LAaJb?JAs);CEY}? z{t1c=Ug?_(eFRvv0ahLkxh{CBL5rdtZlgJPM-IsCYBlM=G6uOubNi8eo3_Jt62L8b z51q1D>cQc0`cWPx0V^(G;Ffx8M5)vF2XVmsg#rRj0_$ItS{m{AwH4%JP^TwfKYa%c z*b`ik@2x5I;ki<K(!EZ@Fc1guL~7KPH0n^POB_Mx=A?E- zYSr=pI2kh0DCZR#VwaDNhu|4thYooFUW>#PV!3OP7+~nF|6k7Ma~$Vbe^mY<&^!4h zaN}^VaD5SmdqF6oy)FDm2ocWbbm~c)3+T&pGEXqDAP!|p0g2cXyXuo5IRHHT1|b8k z#7{wVP0#Rk!iWcJ3#K^ccx=}v)9;MJ`RyHGSlptFKu{Ia0 z2q&}LP`Mw0oI0(XswReFC}4adjGzlUM)%002ovPDHLkV1l$-$Wj0R diff --git a/graphics/pokemon/pangoro/front.png b/graphics/pokemon/pangoro/front.png deleted file mode 100644 index 9de90108a402c6a6135a170e616f2b1075f26d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmV-_1AzRAP);(0O;u8xUirQARs_MNN8wq7)TfZplB#CFi22XKtM?N`1k+-00000_^RZw0009D zNkl8nu5XY5)K;W%#yYwv#+TIH(89cd&PXcT$fkO)5E)mckpm~6HE)a_X zm|08ZRUH~VRF9Hu)0UO#$PeQ& zH8up0%th}+55^#w**;U*Ah4ozOegC>zdbg})q8$5$Qo-C9*+rbc_Unzg0^v)ju zM!9IRyyF7^Q7s@CyXptBct!Voo(6Em{o^@bKG1KUX%wXrmVM;qR~`dUIz=GQA?^XU zFF|HXJx^qcL?3W&pMw;@y-y^@h~j=CFF&PJj~;oZ7C<{dwv#uKjoP_FZnwjcjrti0oP6o^Z-fHxsX8CKk9E6G7ih4+ygYlCJXW z>^qzIn1K*tc>t6WTv_+6FW&wrai|JGr^Yi{5+f+Wf4ctL0ZQykz$rLIfc>Vb>$+R< z^&1rL;rmG-+*JDto8CRbrg(?CumJ4$9;{E*rl>aKASu-KU3==k{f$e>tIP*C{DcyLf4pm;a{0000000000tD;&Z0006N zNkl-82RGZ)&n?Rnf5446O)`3JwbwUHWW&H%@YWh znsE-Qp%A1#fuE`)i9#%CeJJ#n|3R>t-_GamGWM?jB14=uU%37W zN1@NFQGjm+Q3y@IbK|>;u;x+Znn!?D0L%CRAc$Qrh?)TX<4f`I`72Rvz$chT{3d?J z?NZ$P1cbGj>!pYI5%Ej>43wi=8@Vo{$hwZ75P!t?a7_{FXTq9?79hSN#-Yeq<3JVhCjizH8(uoD_cvlZEPKX}6aI)7cacdJAH?XBp4Q`lK{NC`@n(`LCS kAeHrRnA30ZyZ&8&0DtPh*stTF@Bjb+07*qoM6N<$f-{XP^8f$< diff --git a/graphics/pokemon/pansage/front.png b/graphics/pokemon/pansage/front.png deleted file mode 100644 index 63e3125ca28d1bcf1665fb93dfb0f1f2cb6a840d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 625 zcmV-%0*?KOP)8S%5XaZ1r8s{`wDz74A#@V5z0w6y**l4-P39z|q~Lc7b6j7K}-j*u~w zJK_Oo`Bsk*1ndKZHV;RqEB&!pxIp=by8rFs}3cJkKWv1AwA$6J#8uoEv}~0&S2(>2QD%5y~cg`kwMP0yt5{2v{`1 z_5$GX*Ef(9jTp^J1LvOso;-YAz`f?o0KD2e|MF68HLx%Mi9FqV_qJVbAAE$OF#(Vr zY!LC&1_c3Pv~gFS)`%@W|9~fE0J0jpYl84uVW>cxgc%;+bS(jkvvHRs?-3sV_)ZQd z(omtVQsd1vqIyAtG#HTPYJH`Ynk3^*{1&IM;>^`?!^Sl+U-QfUms7eUq@!by!)o3G zMKT1w;U&AjRvnFl>Gcn<;N7Y|>X6qf-fAKYhd_&0h?R@W$VH4akPQKf{|dHPF*hB~ zg2q%u><;3p2Ut9s1=lZ!s1Z17n;;qjeRKMMKRY78$xLy&J*09@Kwty>1YkO=Jj=R* zQdfzyscl^jy$tjKd7kb5hazIJ>1zKGJ(DaE=JJ2#`n%(|`e*tH43drr<%Rk%00000 LNkvXXu0mjfVr3Y? diff --git a/graphics/pokemon/pansear/front.png b/graphics/pokemon/pansear/front.png deleted file mode 100644 index c7dc3a5b8fce7b6cf8df00c696370411f03d924b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0zKRg8@(cK(#!FTH*;5byjk7-O1%b4aL@BFad?lr9ib z4glJQuz=f60-|9LBqb_g+yIb9G@&eSZ>SSvbJ27CRA+HTz||=*(4Trh7!4-RD+@@o zMtt#z&R~9rIC)ypIPWWLn0biH3g_1g5E*WofNoVG8|3N@7foBUUA`iHtAe19ev)h- z_4^jp3yI-FBM_{WI;$Vo1LPF6zj|9-)OF2ykb?FPq+3l@T`$!Dr+IMXZ+Dk#+fa)_ zmD??Lfei=V%x1f7>`3>*y2u44tFKKcV^;xr08#msn>TP$f6MK4S&gIA1^S5VobT6$ z5Z=x)kOxW1_kALgGV_KJa(fdUs}mS$tr~`9tEbe%WE3mky|ZY@`YnH{m?KE{E?w*S dEB$YOVV~ZFi8fJ!xrzV)002ovPDHLkV1oC&_-X(E diff --git a/graphics/pokemon/paras/front.png b/graphics/pokemon/paras/front.png deleted file mode 100644 index b79705ba548699a526d14d45553bafbe9f678247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fN(P)Px#Fi=cXMVQc_y+J`@DJk}9YQ?l5|J70u5D;)k7&$2r=7TB!_W!hEApfjlT3TAo z&CR5w&5C_=+5i9n#7RU!R9J=Wl-qK{APhvoc7znb{{O%2t{|CYTD!QNPG78CCIRn} zR>%(FiYudK&+{@(uPgD4{&u^~^KE$+;lOc3oE@+{0bBrK9yP^uOc_ zo^(u}OWp4Gy0#j;hg6ReGP2eUHXDZp)0m)zYAvNb{6EZkq zQ`OM?djYtF+C2cbsSgC;p58X?g*^%g55gWm)%Qc&*N5JodJ+yM0oQ(J(-@nZQwQwT z&k*~(nS3B}*Yp2r!29$Z0>11HrXanppLj4fJxBYb=3Rey`+OhckHRaixZP)F9yaA0006W zNkl#)Dj$YN(nl!+6qzJ#xU(+{oIRyN9ef|~Q$YC389wpX8 zz>V2<=xP`MGaRE8$4hd+NuT};igQHdzLbzdAfj$eWeJnmkd z;_?&-VX=~_EW?p<*?lu%rr*kMhwn9GW7`EXb5!!j;g@CV*mb568VlV0e7rk60+*G} zt_Nt%;VDKY2T0Akl4yaw1t0@cJPFNHV-!CHj;O%(g8`ij#1)_u^d0ad;J;Rx)q}W5 z4C@2H6C{-22ABMy5G` z=mP=A6(~123wD8vqfOXdsG4?wsJjR)-~nrHr93HAGmOyGT2)VW8R*WN+;`t+XetM9 t3UCh4+v_d#vrR~x+ zxTEP9(F}zyJ}8(%3dNp6I|LnpK&C+cgFsG-hDz3X4TOA0eLwf!-S^#zkO$pk!4hlL zaBaXq2pw{GA;pOdwsaQw)=WGdXFtaCrOl)cIyQ$Klm8$^1;Ycz@bPcq6}c` z`N3y-{9*8A{tKfcA;gcvatPhy(f&XAdpMUVMk|-%=ha0S=*zvoZ)Gk8T%B)RloRtd zr92h;nV+@@Ir2KCLny$K^0D}St$>q`Yk&1wC2|A$@{gFDsRA4@aG6t`2?H*ZZ!%ry zU?O_Vs`!Kg@HaAb0Tkf-3k9+gU~xX10%S9RMSwCuIh)NgOliSag!w`$Vv05~8Z|y4 zotIe*C+gBU^?;EBDF(!`mjDt21L^_t{_P%sX*v*ZuKX#OmIk1p za>}A?X$q*YbKf*Iugif#{=z6L0B8W!qT#wr0P0w(IcHj+S3FBra~X1@S3GPQYfeFn m@4cP+U%-E0-Fi0000Bh_u-FbK-M1I&`Z`!@mnq;x;67YjwFhRSs$pAeLO4giZz?$!SF%vG z%#!ELCi;c~{#Fl`*+g$whzML74hpAY#2}fU3YpL>C{Y0`Qh0{z=(P ziVY6XsZRrpFCeZdNSeD}zSLsl@?a+74&)+V@byS6_8t2n7(IC15%fDB04@f>HO^YR z>JBj)X*%Vb=A5S>KquRzfGqqPkHu|KQ7tkJmI(eZzL_L|*zyDya2Ruz)Z`IHq;?3-y{2l)2t9k}u Wz=IYvojm&h0000=x}g=`1tsUKrr~&NWge7@USrW_^8N0P?)g5D#!hA0007! zNklZCGnwgKvg z75P@H1K^YrwH5-DcHJ^yuhnW(jBc64@!R%00Z_jLc-93*jw=BDGYr^ZNNK4{>y3TU zw})i{n$|q9iEXn|0qy##&sYVp6MpLvyFVz-#_`>C7@>z=5wIJ_p@_wlF;)QVK0L~N zH0I=r6?k}f!X(F-hkP0o03$Nyd_c8?;f(s^1!EsJz>mdUAd`fU<~&4z(w;ip$=&2J91${kl7p21 z?I~+EnXINEiAVzKu2}c{C*WfRz-MO?xJjoW2Yf}~?9ae?84&UDcQkQ)ey9MCS>U#h zz`e2}nR(zdE&zW~3M}}-9#Vg*tfo57h~GoN1`-8s=Pv<$@h^S^AV888K#9)Eg#=I_ zpVtfzq=YnnxYa+cv6aZ!v|zhuDsco3seFy<)#<;F-@#DOf^lAD3jhEB07*qoM6N<$ Eg7n&F;s5{u diff --git a/graphics/pokemon/persian/front.png b/graphics/pokemon/persian/front.png deleted file mode 100644 index 650de8dd74ede69c1dc0f0f07498644c8767b6f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)$R5 z3`63VUx*MM2{6B3ZSdLo>-f-h!O zCWxU#dSwF=c~Sw;K&F6$Rk)%e7Qc2+XSYq$Jodc~dot=G z!8Ry=K<&s1tto(AP#!&9!f35I2Qn$Ai1cGM6j85n!^?dGh{n%?L2m^haQ& z1lyVjC|S1GqZt8NSHjb`HCiD+kk0LC~qI%28lnsAMUaIo0NH|=i?7XNq>i}n;aIaW&meK`8Djd`(bv5D*ZUxJY1lFu>?|$jG?(`1rVpka#dSu+U%t00000000009XaB40004B zNklZrE5JlG#qBhtUVBrF=9KeRfIK8pk6d}lEB%8T_6KyVlwDx5);FNqU zrAgyy|KtBZ>MZ?sAl%zpt-Mxa0z^nfP; z5K0D8UL};HO&pmp5D8x<2nZtvW-1&{;0(ExezZ{jxItec&iqJuDjnB_qg1BySSes2 zM6S{xUnq@q;pFi$&9Tlz(Ud0`z*Dz$pcB?zmd`}kqG5H)!lgTKMizYnO=UFHFwhdr zXxdK(3RuFWw&SmDgEAaC+L~Ubflgc7LEvz_T6<*x?O7ae*4}J)-hnNO{Q!Jb2yk}h z+Zt0>AVG-D));fC@IlPdt+}i>P6hI#nJ)*0000< KMNUMnLSTYf(8qWH diff --git a/graphics/pokemon/phanpy/front.png b/graphics/pokemon/phanpy/front.png deleted file mode 100644 index 22ef3096316086bc6ae74781c54bd76c1c09260f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP)0Ju0X@Muu@`1okJxQK{|(9qDR5CG^vFaQ7mm^~YO00044 zNkl{k=@B^q zkkvPoixYqa3%VyTX2FY36M{{>zv1R=MbQRs?Ja@e-Q+= zEk6ihWFJAo0I)XH&A{>}{z|!Lz{nRpx2@>)VWn2GxQyeQz=0KobEOhh0NEbnyDMjj zK{zB3GY5Xic-A6PyoZUP`&3h2Oi_?GzZ5Nfi`TrS+R4n2Nq`#n%Bg%M^r}o zxIbT2184M2z(g+rU3B`NHcS%TP{@HLs#wzh!F6?m2aYnEDY*9fJ7iwhSDz*y5ReN^ zKQLhb(-Y#RGu1pH+z;~{XdW$R|2_Zv%%;4lQ-|^k5KVw#kpUyG00000NkvXXu0mjf D3%$k0 diff --git a/graphics/pokemon/phantump/front.png b/graphics/pokemon/phantump/front.png deleted file mode 100644 index 2471e23010c679bb1e3f8a557efcca54fff167ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmV-A0>%A_P)Kls$^VKorN5!onu3%C>?}v``S%>9+6; z8pyy}Y$4=%?LCp{jLd z@QHxj@Ud(K2a{i^9-&z=tYYybcN diff --git a/graphics/pokemon/phione/front.png b/graphics/pokemon/phione/front.png deleted file mode 100644 index 10f7d01b52033ef34cf40479c9fdaf111cf1fe0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmV4*d!jAw8G{)$e zn}{}`YQt~AH37;d{3{0fg#kcJY+wzT?^Xs8OKS&mMJ;#B0&R@D&E;BVF)p!OESJ)(#EtwsF{)C1t006YK!3-DpHR&7N{zjc761*l53 z;i^?VAh1q`z^b7wo^`WpJ{^XL7yx)Ojg@W>D4I4rnrspP29|FPwI<{km{9}{*>bo{ zC1YUun(-WYz@n;32Ve@|@1*oZhN>O`LZup@Bm=73Q|LQelzj`|n+0o~td@sdtq`2YX_07*qoM6N<$f{O^; Avj6}9 diff --git a/graphics/pokemon/pichu/front.png b/graphics/pokemon/pichu/front.png deleted file mode 100644 index f8974c37b8ee6028b2c23b0a65e330522bee7198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP)Px#Fi=cXMVQc_ARsYPK|!Q@2*s=r_U2N9S}FGKlwwK{l#6@r=FR4Nl#3uBy(uXG z0000009}o6+5i9nJ4r-AR9J=WmBF^dAP7VyB9bQM|3CKu#x~s*J$)<3O*V7SAVN}F zT3Y(804Dw0Hb+pv6v6!SfC+;7vz{pc>iHx9eBT)ZAl@UWIZ%^Tpn!J-Xm=6;;0@62 zaX_n~*$o!}cm;^iaitW!)bG0j@b)J#yD9=OM9!I1`q}&?_OOU*t!5*FkpNU`y$FQ| z0+1TIzw`hR0Ly;&h66A>qGFhmsv2BtwAXs(u&2Kv=CzefB$|97J=h_M(`1`iDCv0Bly*PFcQ^p5p2V}=>hxFentU_ z8GSLc?}efL&etB&T2c}j0Q6BpR{s_!+yEjI1ox*A0_zL#XP_k*Anf-kv^JJT2>M_D nQqY|`@RmPGbN;2JrT@_%{xAw2ysM>l00000NkvXXu0mjfKl;2e diff --git a/graphics/pokemon/pidgeot/front.png b/graphics/pokemon/pidgeot/front.png deleted file mode 100644 index 0efed3108f9805f243d2791258ca2787ba309540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmV;m14{gfP)Px#Fi=cXMVQc_S~)2Y5D=_;T60oL=Coq}=8O37c=(ub?qWfUIUv3|NsBy zq@2Bbdx*Wn`v3p~Gf6~2R9J<@mhG0KAPk0^5UhgA{on283q)-l+y2_C@=s3syyOD z0Zh07U^$1X$>fCkANNw|nBDy6ke(G|t2bkU}r+y2BK(P{7{S4z%1Mmo_l?xzjdar>2 z02Av)oH(9O#6tpJL$prZGH?P;wmgd`4q+Ig1BA|kxUT`HQI|KhMM@*?E!gcs4^TZX zUl&IX{*d|8p@Iqs*qcE7ZPmL7G0DFv=bZ2WAZ=po+lD>BJdR;ZlL&M}g^JY-j-%lrs5Q+~xgbL6h5~xi9&PsYKo%K=# z74#gNzFXb1SHcSyrJbwZGQe&I)FFs&*IN_#)@UBo1gK_z-uz<;(e5o~0Brt|?;-EW zrQQ*P2j~$DX1vZ!lw&6#Fp8*|V8^d3v5aX8s-ua!{2)6*X$=%iW8G*-1L3{6f1zpGP;f3XQaKH(Z@2?M?zo)ZQgG&h3IZu)RWyKpV7*?G?Cr1Uy z987sbWPSjguBI8q#`Z3fu~su-eNw`P;8(zjfa+xF&u$@g@8Jn#o9NkIFRv%71GEnP z&7YE63G#dq`D^_=qb*&4ui7mibhQ!0#+O^+&4@EBu&gU|^&qSAl&ADQ`#ulgpQXrc zz5S78_Wb%&Z#zOWauNIF^xbyZkL}A3-P85-)m!TJ-B*N90+;zG04~e?Qvx5=`+wsf XN+u|9!^cPx#Fi=cXMVQc_doduzF)8k1K_DO?kU&U-QZe}W_(3TkczA&StaH`X-mH6C=Dk|~ z=8LR*TAAFy%K!iZG)Y83R9J=WmdjGZFbqX2Tcfxnvj6{Y(ZgXuI^o~jq(bRDqWIDr3c7%3jsF! zCmig2q}248djpmP_~XH?oB(p7PA?X0M(Vm1*b5I|0R9@SpA=A39z5c~u1v(c9OxNx zofx6%C7bgiKPf<<7$1fM#Y| c{~x~;pMm-#=_)B}a{vGU07*qoM6N<$f_d{RAOHXW diff --git a/graphics/pokemon/pidgey/front.png b/graphics/pokemon/pidgey/front.png deleted file mode 100644 index 44cddf449b25a9b0a47dd971d9680db209c4bd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)Px#Fi=cXMVQc_fJiXSgIc6wTBKrH=DlJN5D@?FoPdCUy(u8LxVZnUbNKl9?qWgB zgIYi!5Exq;eE%_APht?n1PT${{L@x4BfW(;Yz@2-!f7nwd$OB zitRY}=+UG9FOh%rdkNbJbuM^M#I8RI{nTy>jp+82(iTCJRbcjry#f+Kh{+UX2LS?N zlq?dd4Z?98d~z;85N!F+Q&4b$gs=lR&st+Zh7mRZIB7IO2W*@p-L(e$`vBR>z&--~ z>;n2X0LtSxu?^|xIjpA8)Cs)%U|JrDmR^cJjG6LdEbn`|fFb_@cyPajFopO4A~!-; zAPGHAm>|3p*f9Ga1i2?l&@VrS>gDEPNYAj6AVnK%BLopP#bg9@=eYD0yl;nwsRR!E ztyR&lCfzR5^UR&1WiUvzhE!{2>D#F#o%6E@*0004Q zNklrT95nG(Ug&o}ODJ*b6cQm}Xy0!q9FT?ZRL?PG0Hk5~t{mFm@-T*%R z{tfa8uj8VB+p|oO`8dSA0U~>o>KzmL9FUvishLp)%>eB=8e?W>AuvRH)+WG&0Le1q zm05DeoRI$o0IDToNCTDufEdGSrSCa^HGXV5y>LzaY$39Z#+wctjC^|=>bG&U%E9ZUH07zU6pRt;)|@SZRbf| zrN)2FM5BizOThSeJknhraH40eJKZ~$aH6Q((NFh$6BQll{J!QM?E-O%HhY1r@i+QI Z{Q%VgkW=002ovPDHLkV1iY7(`Enw diff --git a/graphics/pokemon/pignite/front.png b/graphics/pokemon/pignite/front.png deleted file mode 100644 index 39c020d57d6c0b5c6c4fc62480ec6ef281b4a797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmVDERpJz^I_OSTN{tD0nz1=)gFzh$wJi5Xe9{I3OTMNJuz1H~;_uG|GIb0007X zNkl8l26vus8kQgeii!H*36`wY=s#pkW`T|IuK{Cvaw! z1R(2w0LbtvaH0uHGWfdy6Tqom5U^`BEi&ig3Y^PFD(II&K?VR_pp3`z{IYp2niN4b zGSG|(>8P@>0_!H=?P zHG5yMqa!Y-<3oTEpf<{nDq_E3(O!sHCIHn`Xc?&2fFjJuAXGGK<_M|DF4C})fYLQ< z*yo%Wi>4tWI%{UMyBNlGs1Ow(i5Gy&2K_YRr_MTi;Ks2HiuiF$Qc(>7*Kw7!yyVXJ z!2Q%Vc+yrm+kT?-69JB$=Iq?VeI4;u$C6X5K#H|y6Y6} zbfDzex(VJM@T5earLnzQf$C1(34rghVEyJ-1YnD?EW>KyE+*jn-m?}|*HOTk?YeuI zReS<|vgc}`9Rk_2i4RcsW)t7XinpzayU@&cf?VMJ`A0ER`Boon)vw$&m)mR!`{0puJ@d~!L9 zzQ0I58gT9_IhQi7*1-{=l>wP`-pRv<=1>h;B b|L@~B6zTG_YMuAc00000NkvXXu0mjfk1tpB diff --git a/graphics/pokemon/pikachu/front.png b/graphics/pokemon/pikachu/front.png deleted file mode 100644 index 9a320c28660762bfa26544b95942c82083d7bcc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)Px#Fi=cXMVQc_0000fDJf$y2vSm7_q`#UQULenQr?sR|M#W;|NrJ%Ld78&s4x)V zP&fbp0KA(8A^-pZ$w@>(R9J=WmeFE^FbGAZ2%)vz|9|d)m_)Nqv2JhPhia|&gb+wG z43{qbli;lXc9QT1fO7=(p9kQZ=lVDb80iN<-QzgMB7>2rBe>fX15gKGrX&6eV3S>v z>VSV3Pyx(xzu!|5w>tsCOQQfWyAz6<-NM=D?#nVjy`YXsX`==*C z=iesaL^>wFURq3vo+<~d{M&%1)v^L!tk(vhV*ui>F9Rrn4B+>zu(ooL->m=>4CS`3 z%lCpzsDACucE4{gfQ2+n^4Ib+yvfRt8#Pnr_;8@T~ygiy;m_FLtz(i)u0 zrWC&!L81U?PH78o{vg3;!1W_}5>P})Ft)GD3P56gt$x8^3V`R}a{!z-29fZt3}y5h zidO)0kN{@N{|7K%y&b{?v+%r(T>KtE3;?UX_eJpaLyp!lQSVO&+Mu*zaZ~YA{LsSm zPQemrA#{otfe{R$b)&*h{D{JJ$pCe8muLxPzm*X#a_;AiV>19;e^=zWvn#|;Ho(|~V6X>RA@5Sju*H(>^Z_bxF5fTGCnd7uyvX4O!O0v^8oQS#b4no{6m3pp zNC)yW)&dGJFvU3WWJqCf3U?xNU@;6#5l|HY41s@nJC;2SRk{Bov4N+7o;AGg3IMNr zR?vV|LazY!NxU+^%q(Gav|CERo&<x8cQ9UnDaD7+~H9jwi9Qz*q<49>BW5?+3>Q ziFK4CV63yvWHnn`Ks%@D!UD&!lF#lG2o*pEI5WW91YrlH&w;E3m&Q3zwfUso3zvG9 zW4$9&cNWrE-7A0F58^pwl*xYuQedfrQ2kUpo~ipCr&unN8DPQ`;FEVW_ENl(z|}yo z*-YLe&bL?c1p`FV%-E;cL{}HLx7&OZCLwV-&kaCal7A}8k0>f2AV?GlMLNLMMOl_# z-2I)*)$p~q-8s3gny=;0@4u^k-sarpo%=aL=tI@~C_n$Is=8_O=^|QpC%{#G_vYc@ zZFQ&{Ux6jp_Bj%VJ;5SCe-4k0zwj4RE(*Qlp+TzLjf9A2d>I(W5Z!-6LLhvvz>e?q zSc#ijI8K3O1w?RkZUIO9ZRF>5-4sL+J61xK5<)nmbxcn0000< KMNUMnLSTX^h8g|< diff --git a/graphics/pokemon/pineco/front.png b/graphics/pokemon/pineco/front.png deleted file mode 100644 index eec63a8ec7b1f1ee7d503c8a2a48644a5412759e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmV+*0^j|KP)e zuPx9eLpW%#e*E)&G}Lu(@miz*8*sS!Phb~QH^LPNL4o_!-=Q~&-5GDXaPRjgL2m&e z>h}$4?N_`yUUy0bm1Y=f@|e^z`L{y*1`#_;ZX$;cGhjDPH2lAR-2E z`j(b(1=gBB>j4r63on*vC@A)<4R5SixR zfq{@WqFfbF7G4@aq>7X3fygRN3v~+X<*04EHDlKkf?n!Dl+e&QA?OU0VA6B+mI@b0 zv$@upso6zOvQZw176?Q$8Y%`&bedhY$kzB!ognYj2@rPcU~E&JV5iA0EY{CZE9iLD ziQM}90wnyLmC#+pM&u>7*-_Rhr^6LsV9$i!&GBU3s~6z50OGApy@Yg<=T-jn$PC$5 i@b5rpy$o;hO5zt9kzkX6T6wzw0000Px#Fi=cXMVQc_NR9J=WmD_gfAPhupjFE`=|L?7CU~H3^o;;q?)vT5<+oM6? zW%)10x_$`=+n0o}G2t5<4A|B$T!bxdf|y-?TNr{^*!DTXFtFbN!eCZv*ry0#Tr5wA z@Ew4ECM;N7am5R<(v<|qXBWNYeQrYEPn|= z33C-Vz*f`C^$jp}976?A&aS6Srk^mt7IxQDwm~UjCfs+N(hI?!p9n+`NdU~DNdVtS z4oC?^4{5g`aE`z&pnBX{sxrjv1cEses{@KFeITJQ<_IJYEE#w-05Pv1@!%!;@qYLY zq!c+p_hH*2E(F4VJp)PtI6RP$tPI{(j`x$^0Km`JUlH=qKrIL=9{@<1yaF{4SzVX` z3XmCD^wt8ZKM9dK2NE9wiM|y%1R!beb7K6^=D-1m{0#uzyg4{!z*TH5l$6QJ%3eO3(#wc#Cb@?)_ej$FIRxLmOTXqC;?+lgt|beUWCxh%K-G| zkd6)sicA`SPEF(n#6N(PVYd)~8PH%Mz``#KSfI<}Xv203tIn?wb5@U~J}8;%K>h}* zMF9GH0JShVUS#up(e{VR%H}wT=ji|}M|h`R102qW#9BEfN0+vh=eGci!6cEU3(~WX zv73k30Cau7P!C{Sl(M-r=-*{vdm`;1E6#+=LS>$9c@ZfE=Fs4~+gcdCNx`t=FQ*3m dyYz3oA3yw+EPbL|i17db002ovPDHLkV1kd9aH9YK diff --git a/graphics/pokemon/piplup/front.png b/graphics/pokemon/piplup/front.png deleted file mode 100644 index c2ce15cdc70eeb8cf38d8117884722002a56b599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 491 zcmVK(y>m$P!tB>;zTqNtJQ%C2pV-QFMwVj z0OJ{8F(ldsonYW74*F$dmQn!-f$9X5#Z4eMx0{sbYMmk@(b(XeY-RtaoSJFMY{0;s`bcooOM%B0&U>mP$vZVGxzcw h4m9_dhUxs_`2nk5eeD)mYFYpQ002ovPDHLkV1lso(GLIs diff --git a/graphics/pokemon/plusle/front.png b/graphics/pokemon/plusle/front.png deleted file mode 100644 index 87b7612197d766969babdbc34287602584d3d0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVb;@5Jfj=MNJ?F2y0Mkyr#Fz5=WsU3`9y3kr?{OcuzpY0XRbLkb*1Z zP?@!HmHnimV;W2TZ~uJF>$E5UAVyS`1sQ~Va0WXJ2tE) zF<_n)1jc&?9yJ;i1BSLlL&CrpJ-?Hh`mZ!sLZ6ev_CwvoDCCe1Ki@VVMF{BA3j<>f zLl|ohb_LhT7n_OA;>0N1cZR3EfP)eV8!!;p&-`!7)MhkauS6#V7BbB!o97}xfLmy~ zS>G$rq6X4s7mb^NnYHQC|9l;=A#3v@fq+O^H>L~s#Xu2@1fJ&}?nWkXTh4+32^)xi d#7mvEegVtnU1IKVf5-p;002ovPDHLkV1g&w%n<+p diff --git a/graphics/pokemon/politoed/front.png b/graphics/pokemon/politoed/front.png deleted file mode 100644 index 74d705c1060bd2c88165e23bbc3c96ce65dc4f1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 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 diff --git a/graphics/pokemon/porygon2/front.png b/graphics/pokemon/porygon2/front.png deleted file mode 100644 index 84f153fc72d92573717016b144537b88324e0a57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)KlCe(1Fc5}awTnA(Wui>E2nm%1s2E_j zs*f|mAu;d$N(1Q!(eO!9XuKtpvSYkcLJqKAbYYa8Vj~pn~ouo z8#q}l7?4EI_Kpnvto?w#>T|} diff --git a/graphics/pokemon/porygon_z/front.png b/graphics/pokemon/porygon_z/front.png deleted file mode 100644 index 1f39bffa578bd617790219864248489ae494aee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 564 zcmV-40?Yl0P)JR1~6);%cyv+#rQFFhv@{6dUX`;0|nO zDld@2bVkUMIf0->NbMPXvk@`bnb}&ua=st$&&)T3{7X3*e$K080FVI`)-zfZN?9Fh zX21d4Xgi*9MrXMWu&?(Qyvr+q4Sfj@BmlZKg5VxD>+tlbnS%D3;SInJJ1uK~QC|!X zVejpIyrgd73n2zj>UI;r;^`8SII2x160jbc*J*-9@xkgx(jw|9fSk*iyT;C4n^1*OyQ$~HjgkeL!D1ZKBxlh3TF6R)fd1~%KE>N>>@5yGfpL6LA<(pAkT5vJ0pN{ z4FK__U)1}A%E)MPKNWM09V8JbUTSuXmf6oMvM{4|1`w*!^t(YMlxg`926|xfEeyAD zOAEh;vBPbn9~%MuKgJPcqKpN|iO?o`Dw^T{S$zQyGOS9DnNT+X0000Px#Fi=cXMVQc_S}_2eYHH1kS^xk5VoD(Y=CnaULFT=jdwYBT|JDDLTKM?*y-G3v zlv?1hh&?9-@&Et=wMj%lR9J=Wmg{!oAPj^J3^Km;{U3LA!=^S)y3W}@d#bdJ<7Pg@ zNPvgoH~zy2A$+8cDW%7R5RwHR>Rle=b3n8}&JXlpVPJIthD;qo9$scPLdOPVd?GrM z@QX|+I=OzG#tE@bAkZ9%$}ZH4JkLY|5UVrpR2a zS`p)Sg68HPR=wwt_$9#r42}@bPATX*;jb6L3vm6^M^sDQdL?&vi1}GfXhA%hHT7;A~ z4oPKl0IA+v`3l%~s!G_tIJS*bHYZv_yv_i}9)YSi1XZyG*DrKx0PMSrXRvKw5X6QC z;N`zIK}fom6cE5W5${D}0V52skKZ>g*aGJ^9!Gt%(Kcn2LmzJlb|wjdo7`6Ao-j%q zvD3h6;9edmfMKN{H|@6P9 z->{AF#R0t&`~kpDAIFxY$1wl^002ovPDHLkV1mLG BZ<_!B diff --git a/graphics/pokemon/prinplup/front.png b/graphics/pokemon/prinplup/front.png deleted file mode 100644 index a4b84554dda4a949e7ddba65c714ea0e76bdb8cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)3e_y7O^TL|Ws0006c zNklljA6bEpFFg3_3;%gwpPK3zTiY?qZRC40G+YzVeGW>sj@114aF#ff5ZCUIq>q<~V zLbX@a06ToMx0D@h+~fuDBQ-#`V8_+~yh_5F4xl)SYPhNagXE?Cc;}`Xr0fj_Py^g( zSm+QO6)>zSvKpxlAcSuxYEb!zF?yu~XBJ-70rTvMUDtw>HG6HO8PZHz_&$p@V7IkZ zr=S7wq6$FNz=IG1LP9m*DbWDaodM$O3lP$S=h6aKIq8uQB%s41ZsLga_+MF=BnMGU z2E+r25CuX)_G7|0;KyAQVgjEKHsC)FAlUyhmsj%hk%XlYO9g=FLm70UZ(kW>-}?dt z$y^E1A?zgCCl0b>0iX=vHJby)9^#OpKb`}$2rA;<1dPpQ7`h^-M+FdyOP-C{Y)u^3 zqcq+tfJ>hH?}n$@tb${hUQo=J4gq$%$@o_e&VQ7ih$RZY`&~Lb5ksD4bZ-&dpp<%D zO5bLmCzGFY(1#q1_;wyI<^uQvBw5P0kqlgV;L@vA>R=eY;rYG}@JH73yCQr)rF~g$ zxFC)}FScoNEC;T^!G&YoV{*XPHl6ZY*s32i<++Kc{4;*tdf48Oe(z0;aSkxL^I%;9 zo?58g%!jFM);49}?#AEVrt8XHaMMxD_Ft?&BhnC6Tt4!U00000NkvXXu0mjfK+ZA0 diff --git a/graphics/pokemon/probopass/front.png b/graphics/pokemon/probopass/front.png deleted file mode 100644 index 21916b3762d0a38d5a2aa2203cce1e1d10f32e69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)aeI&sZgmJ zW?_w8qDbj0N5yGV0<4_{wj9_W9ddxb;!u?azjLsy*dfzq;RSOlrwvohn&CJzfI*&_ zHhz`d+-aAt2qBkO?+9t-8z@bJP9=QXS`t`dkwUD}VfOtXeBD?C1ak!Z1SsA4 zoe;1SU@jJZGVRiI=$u6W!$ISy5m;%*!8=ZK2jId3NOBY-gDMMwK+OA?Aq5Vc#ttB) z0YE!3utLDZHe{fGe=C0=IxovPrI8vY;}QVyG~l3O(L^_)ECmd^Xp_##XuW0}AGNin1V&?`Z69}A7dCIj2-fhh zf{8bZ9S#R;u5_WE7CbyYt~`I1)JO&!p6G(Rk3XkUcWI3$8?GTlg{QMwQll~0Y&L6z z6y+X;z+HOS204)cV(ZjkI@7lo0VM^*DZZw0l_M0UhyZ=N4L;bcLkQzh4f-Wz5I#Tv zTUm2=tN?fW5;J7^YuPK22IK4Px#Fi=cXMVQc_dwY8j5D=7F5ay&(|J6$W=A_=VQvd(|gIWOp?!ETji}>ic00000 z000000G4~qqW}N_ZAnByR9J=WmfMcQAPhuP8`ePo|9{t)Ktj?7yS(g5nW{Ibb21p4 zblV<1`Y(EcJ(mEm0$}q}00Audg#fQ;2IR+vCXEm*0wzoV*@PIi3xMrEtd5BLv-&$B z#|Y}rrvyR>ECN#kqC5*TcvGmqlujTPUq7%60h9tefl&-Y{*?TF0hCf}Rlj^8@K-?r z?5nM{Y5@$80{|veYK^ESTY_y%fKb(6>CNllBBmgqN__RV_9oCs0l=pAE(7di;Uj$T zF95{P6CDD;8~}A+Q{qlaP5{jTL}+i$D)J=t>(2o9Kmw2ncK=Rr19)^zX;Q#{=&%P) zlr!Lj@SkckU?ALptA8N$PVpVU5GXz6AbbSmzLnnrj$UvT0@KHBaQpR0y0w7}l=}{M z>A)T!aC^Hpu?BGa^&Gv;fxnUMK%EdEa8b7Zz&L?*Uc{%fVUBI>R lCb$8mvWx%p9zFWw`UOH@62tfx@{j-k002ovPDHLkV1iZ9)vW*k diff --git a/graphics/pokemon/pumpkaboo/front.png b/graphics/pokemon/pumpkaboo/front.png deleted file mode 100644 index d55ed24ab8b504719dec2008610f6b7c9d6da705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)9fKJO`Tegd6G;wuU4EzH#CAAnFq9U_Xfy~TS z;7es4d;>4dFwkaqu@!wHBKPFpci$w6j&qp9l9MpNaTe5D0D=}A=mjmf7Ag!V9bST~ ze|Bie%7FQq7OqI-et?g-=nHm_CH{2>z8?;k6n>h&O>T-RpLRTDARkZJMi0$y?gq%nGI+Bvw8F{Wym` Y-_yv9<(Tg~m;e9(07*qoM6N<$g0(;P1ONa4 diff --git a/graphics/pokemon/pumpkaboo/large/front.png b/graphics/pokemon/pumpkaboo/large/front.png deleted file mode 100644 index d3df6bca4b8d953114997a3bf0f2d9d2125fc2be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)t;KBF#zw>`Vu+yI?Od5WG!I8Hf0f5(n0i<3FrnvM2Qu&8q z@|PJRK?b3liQvK%nHyl86QbN>5D@voVxoO$vhV=VFwGqDx>OkN@u5*My$RJlp#b?kAa$`pG1=Us8dj!OlVs1_+Ux0si+I@Di9eK zmVGpz?hPOiRTr(m0Tv^GQ^YYkfbqZp8IA`9;?M@n^Fs0r@A3gYJAkDWILY&CoW59o z5zh1eD60T%2g*es3!E(SrM7hlg4Qbmdj39h0p(0jwJzW69ZU~BB*2_@17k5AR*b`d tEK0M+meU{z65Sxovg!@7Id=Mo`T%1-nHJQVm{|Y-002ovPDHLkV1i7T^GE;y diff --git a/graphics/pokemon/pumpkaboo/small/front.png b/graphics/pokemon/pumpkaboo/small/front.png deleted file mode 100644 index 8f22eea38907007f7cd88b1b630f0e0ca0f04600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN13DvH~h*#cJi6Kq2uG z*NBqf{Irtt#G+INcOMs^F$!g=MGD4xCWWm_9s-qcloa^617(bXYzD6eO?e>2lJ4m1 z$iT3%pZiZDE0Avx;1l9H^U@L^Q&N~MH(JlrM#@x6@XzU_?^{&=|Nr0Pq`g1i>wQHni ze0hECQw^(|8>PJY7&Ol{Rq^lOVi&l{=y1xJK`l^3!$i)1ZC^pw10Pdb{{5d9!%XDR1RCYb^O&X*_FS-#7iIpfHG?YG`}vF@3xolo!` zFt&Q`-@o?Fi>XEhe`dbgb||NLe_H#}wz*orv)=1<2;9xw7W+oK<@KrLlet3NzH_w? zUh87;n|bARx9|m3#-ycJR#kmw$WB;Oy0X^6@j#4t>$-b$9rkK3y>RvL-RH+RU7qi* zvAzB^>0(90!E(Q!uVeG3y<3`m`^-*!CjRR2*VsJj6QO{eYyfYX8^;IyCu+HQbH z{0Jb9Ou>&d=`(FW?2HfBC{jB>qn4)ZZD_!ErAb-min_9*5Mh?kvH}DcIJbkKZjYiS z1i1sa#~yHK(D74V0t|;0f^@YG?b{F@pscRf+XtFw_$~zK(5((k?5~y-Dn4GGOBE_d zhd|hd{Swu)B{&?G5S@e7^6eZ&6>+jdpjITb>rWF=C2%43{4t1TtD0w#!;a_$zpq$L zK*+cKv+>ZdALk<0t;PaaET``VU_3;Cy-5*EBXA+J3BV1C(gI9V1kgRrEI^)QJnYNY zBt>9u1U8(>*<VA16nM$fZ0G>q@{_)04>y45Cm2Ov}kClF?U?fy65}_o$3$u18AwS UkEkwci~s-t07*qoM6N<$f?P5FwEzGB diff --git a/graphics/pokemon/pupitar/front.png b/graphics/pokemon/pupitar/front.png deleted file mode 100644 index cc7fda7150e1edbd28e48a8f4d1b7385ac29bf92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*B=WuI7Czk2nej$apS^` z7ZnqBtXQ$)$B!QyK+3Uz`4!7r85kHlJY5_^JUZV_Hmqtk;Aw4q|61;`MR9y72?Y)m{7i#p{{&?5YK+W4w?1) z>g%1HrZmXbyIUAeFyJ`Q>3r<*^{EY0T7=YRx9@OV%y3*Xor|$I+2KXt!voevH>Z1r z%!ui(k(?r=x8%fiMaR_)#%@d}dKrG31_&8Aum$birpdzSQ&9W!=C&^{ES$Lf*jA;@ zG_ZKNH|5ZV^RojQ7Crsn=ygRZK-YH8hevX%Vh;cIMwYTIGGaaXQQ;uN3ei=^E{I%e r{&o7K;T67_3-q#%xmGnzpSMc>_}A<%wHT)7ps4b6^>bP0l+XkKu$R@= diff --git a/graphics/pokemon/purrloin/front.png b/graphics/pokemon/purrloin/front.png deleted file mode 100644 index 0d329d15c920d849c9f031e401f6f8f398437e18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 529 zcmV+s0`C2ZP)*V; zHdw^MmvWDwj<6S;aqQSCll}7Vf4iG=oJ0I6+>;YvMgw=V}iU)#jvvTuxZBcOC4RFJ@S$;M*d70G%@>$mc4WPx& zT5Nz4Ill~|noeWf(y|6KCZzEv?%*_FG3OiudDrgo+>^Go9JMT%)4v6HmT*_&`8VsGxB8;9$te*qE5OD6kR70009y zNklfSd|n>XFoYhOL&$@i1*^L>AWNYcF- z^86h@WHCgbP#sAv2Fp353$-NcBA}q7TnDC`_;JD4A$z;U9A4Uf3Auu&15RTcS_c^~ zRki_YMHB^qbVa`fWS2fvN?NnoG^$`$I3Q+_!FW^QdZPig)xQ8r3D({<7_bbVKUOMx zw`L(Nz*?-a+yux|y1KuY#ThFMWU$Th!NF7dX`cXSq#yw11ju7d5BE!8#H(f~<);1w zVEF)>^vinyONES(LMd(jWFaVyo>B^6I7&B@5kqYLdf1|euO4{-nJ;%UAXvy-KbSuQjk$e@7-eiK`fedbwQN zI@9W;FatUrl|$NF*S+c!ve8Sp*JoO-P^$a7Dyck;BWtef_DPQ*!Y*1-g>H(I@^x6%ecEKPh!A^`@W`sd3rA$ch1=h&!cp%4J*NINz z^#~~j0GW_oB&jG)tn%)V19FcDua@RTVx8;Bv2TvXgMj{k9$EZ>-moJNee>ja9I#-k z(DGU#Ns1DWm50LsfR0Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_uz(D19C}3 zK~zY`ebqm28c7rY@G*s_pvf34ifa-SJ^)%-DXuzcSFUY5+Lj7Px7G#5fTioq@&yj| z&Z$>kyGWB*f|XJt!$|oUQKY+1aF%@U&Ft(B@t=`w%)H;eH-8?O;Mig6rBr`So*pHK zDOPZ_OR2%3r?#oJ!NRz;370X`3MaoK&EK0#wC& zVHjRyq7TymoT|rh4UGVP^+F+p5vKqe+h8{o@RyihV4PO=NQoohoYzU|z=s4A_2_Wk zR$#y0;GUxZuQ!@LBnT9sQC$8+P90c2f?q!K6W47y`@!zym0sQ`E^h!hRTn|Ja$T1@ z3S=8BCrbsIRd>|-Rmu+@#BD$psRAI*Td9=&mZQNm$UrJJaNgZ)q`aCr8jzs@Wf_ou z1%Z@u6KTK!%pQSDx%sF8Y?IKLRe~NN_(#tEjbc>+K@?;O zI1Ux~Q{8mBj#bCNtUQN<)SwNQ)$O(QQ3nQGUCFfu?x52NJE0BU!t5wHk54oh&cm>G zVXo7F!zBLQ0$~QIPz?*SEzx&0@DvE!d4p%*z;g~VfN@MAwgL2#O5sQ0Q~|m&fWu=B zf&&Xg?Q;X5=hf4?h6ex^F}>?b3qVIAz#4q0fxMMLzDj6Wd>CtZ2w+^w)CRgdq~P3- zqIo!-ZvoOc(i>IV+wd|4=Nyl7M2#EjB$(~G1eGHB2p_T01Xh}U;unk zdjx8yjO}M&ug(;Ju?~s?1%OeDdebdHAOTY~juaS(GY#Ur1_}!VbgV!USVEXpvf3Et zmjIF^F7_!pea;))KV`Ku1SpcENI|FugNZl`$G14MT>k{R3gA6yK$crz-1*Yy4WIN1 zKo&L_Ew8)B@Uc}OcnT~MaV+o~Hk>S<02J$C6ZfX!B&$%~+NOE4dpVyOAT2P;fxKH~ zdF}fwzyM}7SlTTk%$DgFGh6=l^*(P(x{(on z6vr^SHakim^2+c(sW=89vhT%j4-eMopanDPF9`3_|_~UXAhg T-Y5w%00000NkvXXu0mjfj@`zC diff --git a/graphics/pokemon/quagsire/front.png b/graphics/pokemon/quagsire/front.png deleted file mode 100644 index 41b4ad26b3e70f96865adeb67edf624da708091d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+RiSP)Fp!`aSZHWih+uf2s1N|?KrjFR000004{}y&0005_ zNklL^>)?egPMG z%9~v;-mzl`i3;ha$Xc17Xa4iCj-vn1gp_Be{D6q769g0m5&0w$-`y8$BGeS13m0KB zM2tV2AM=S2@eO*L0A{UshX@a+05Z6I8}SRk94)lUA={4uN_zz`0f3Y#`Lhy0jR6Ue z!x)p&3BT+c!*)22w}(d(y$Zf~K|dt}F89Ne6Vbd-LuJ-gSSY(FOhi^{Tw$j{tX+cwpidVTfY49-x(;eZd#eI4`$_)#aRB%r*M~;n)8DGD-#Z{iP8^!FssSnn zbeGqcQPscce4YXztDo(06@c<1MVlk5+;J7ED4_+kkKpSG01Z>S067QP=ZN1dGC!Ft z0F;AUIm{5rIVa{m1M9TT?Tw;uh_nvBpz{zw&=-vUw{IA;rM=!-j42QbCAOlIR-GB_ zzEL!WvldWPMBnQOirYS=kg5@YVs-_m${hQHB_=uP|9TK00000NkvXX Hu0mjf1;-C* diff --git a/graphics/pokemon/question_mark/circled/front.png b/graphics/pokemon/question_mark/circled/front.png deleted file mode 100644 index 3056402db40adabac5a463995c694bdec359e5e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*Ewg;0-5;1*|TTYtXcE_ z|9_yeICobOAjMb`2mt|oEJ={|6P7}nZ)+$yZ7C;wLe_1WcN>s>Eq*PGXAsnHz&s= z7>nt%PWamtz-;#UYEdR!~X{G;Kp7JM4 PKq2bs>gTe~DWM4fhQyg8 diff --git a/graphics/pokemon/question_mark/double/front.png b/graphics/pokemon/question_mark/double/front.png deleted file mode 100644 index f23b08476d7b80a2d518d7bbfe8d39337e9c05c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ipSBC!#|Ns97@*pITfgh~g zVlW|5)h~ zwmNN1nC}hA{B!4a75@`=EPZ8sPidO(K5O=UEcZS)9zFE$8p}VSgRf@nf4_pe>AF++ TzSo}mAg_A5`njxgN@xNA$02mt diff --git a/graphics/pokemon/quilava/front.png b/graphics/pokemon/quilava/front.png deleted file mode 100644 index 65c45aedd235d390f444350dd9d0795fa0fdb45d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 599 zcmV-d0;v6oP)Px#Fi=cXMVQc_*Z=_dSOECY0Qi^yC}?OXKwvnCkPr|Mr~m-?`1r7xQ26Me;K*o* zU?31MIPKyl;Q#;u)k#D_R9J=WlEHGrAPht;K%fbj|Nq<~0X8-`p>=!dcu&cgeXLe2 z%cDpCRB+dS7octe;5PtD-SI0>`VRqb=YtGT##{p4uP99~{_6lA8ZH2>)u=`I2$1nP zfF70rf}a5Bq(KRwD&VpQb{D`XfC4@M`xq?<>H@U*2LQfY0CfyF^dWx)VEPFvT@vOL z3!LkKZ3BIP`fU@GVY-B72cWehfN3a$26bt`pmRtEIJYAUR{5p%>&!2}e7_2S=%R1)>j)VdiyEely$|KY|*&PB9ZY=;-cG*$wa@2zO6Mzu6A`<}huCcvF z$o{H~u+}o5Kup=>*`EpGx0bMB*vdR+=n)nefDT`;27u`HRJ!e;Ls(b*>Ie`5x+cPS z4U5fJS%4S$5Q1+Im5N!E1=zGP26j&~grx>KyV*Yn;G;wt5RFo lGayd2c1^fvfAr`(`T{b!89)<|iZK8H002ovPDHLkV1h&;0Ehqp diff --git a/graphics/pokemon/quilladin/front.png b/graphics/pokemon/quilladin/front.png deleted file mode 100644 index 4a6264fa475ebdd23b7c7ab11f229d277ed5a2e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMF6nqkSGB7SU3<65GWW3a6lj^PzaE~IADMv zNGK5KsDQY5Xt=nzNH{QHU|{(8_&|Mqg8%>k32;bRa{vGi!vFvd!vV){sAK>D0v}04 zK~zY`?b0!8+dvct@GA-$OYN~+Rmd!IIJRsP53L8!;)c*AgdhzaI>hJ<9Tk%EtQ7pn z=yvFN3<<=7X2?`X@&WP<3f?ky={rdzI{TCk?U*+h>E2KOck+om*FV;a+F$zhw@-t* zY7a?R1ehEsc$U-k24d)Lt>SdOzEltCEjfKX?h2jm@sO$7tacU^r?8zJXG z-`!)){mmVl^HIFCX{*UO@B2g6Y&0Xp!X*YVWDQ1{qALNp7_u+h%*VbVAQyecm>-%0 zvUgLUeI9aQOtAUKuNWZZxe&q>VMp^RW1UpaT4oS_zL_`tAGdRfz%(QL)NMD~-QJy? zR)Jo7Dtnc{jxM*_a<)}~*a$jLgY^EjoZbJvlcxv{cUHlN`Wq=PZ{%5mfJdv~L;)$! z0KpOG%Mk&G3&8$2fK~>UB7%r}X*!qR(+dUEnQIaF5godu;M3I4pxu9bqTU zO8wImKdVR!h(`GCN}N*c3lC?EN;8nF^_Wtsp2w?1-$ck`$U8;htqx*O2f|BQ`;UDq z@gT`&4;}y{-s6c{0N`3eOvGR!#*=KuPgs<|6}=*)C15guF=T+!E-e9D*ylh07*qoM6N<$g3JCgr2qf` diff --git a/graphics/pokemon/qwilfish/front.png b/graphics/pokemon/qwilfish/front.png deleted file mode 100644 index 6fd19c1346fb4ebbfaf77cb1d12f956811ba3a4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)- z#crH~sh#W*5?0|e_)6(wAIEB&Kyk|v z#3FE2AQm86Dj>YT3lu%d0s;tB-vJNA4iI>|00 diff --git a/graphics/pokemon/raichu/front.png b/graphics/pokemon/raichu/front.png deleted file mode 100644 index 3b50a2318422a2a7ae6e515085215e694581bde7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmV+=1KRwFP)Px#Fi=cXMVQc_S}7@uVh{iT0CPbx|GfZ|K|%lCTK23d-g`0s?$y0oF})ZF|J7Pz zVrn@#LBPDADgXciqe(SG4j-TX+Kj=k{^qb!NpkG9P2EY-2rw7eR;|}5sNNTfkK=U;2D4lI9Whc!a#Wq{VdCE#09DS`q36hLBz3<9P4n;tN-V4U;Ow<*Z`Avc|1YysUW*SFG# zm@&gzU049gAUvN>AkKn^_%H*UEkMd$0MDd%P61}H1O%WKu(Ve;5p^9^uYffK03(xo zL|B=CYYV{OYZrLHx&~{~G91-Qa%cbsV`yfv_pFz4MjUQ1xGI4MRSSWmB?Oy3nn4Ca zIHCXuPJqmb!yV3KKu{aG$Uph|PQayD=nP~)v>yO0r33&! z0I*&FFO4BVq={fpfRL+bSt}dl>$ML6>W_F)THga=X+z!?X@9+Eb1V}=y&nw$u@->_ zgz}qgB8>%GYS>osH6zI7Dger!(9PvJfLHT7pr1+mq^BhHvRg{SLsP?V0J1A?8|xq( z@&J47-aZ2;Ax5wvk z?HnN8$g%MZ7{cvG2S6sA9u?9l{dW8K7;!qN<2QhX&y--g*}^;~-hcXen`~e>ub-a2 j49V;70m~OF;Gc^>4ACUF>6uU600000NkvXXu0mjfo-knh diff --git a/graphics/pokemon/raikou/front.png b/graphics/pokemon/raikou/front.png deleted file mode 100644 index b729a2c3758fd8ee464e87072d00c51a0e640148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 968 zcmV;(12_DMP)LP$+2l`1qippb!uc(9qDB(D=Xr0Qks2(3mKQU=aA|kXTq?Om(ku000A1 zNkl}SZEkvGAXFZGdWZ2W%j|NiekMndT4Jf?Z< zS7MOox^4H$b;G%GYWmxWZQC8c1k^7a=kgn19|igaP*K3EgZao{#Gy>}ohYEQ4`7!B zgbiI+0Tl&Q-|Wr64UaO?(7=h^0fE>1GcXx7286hSngY%%ovLmBwl`yVEpxf+qHL%N;SkxQR;icm^znUt9 z4ouM|n?<(ad^#ZSKP(AxJX@c0vzXAF7ZVaXpy|gjnLAzu^cB(jT?4TOj4<&SNfH`d zc&Z9Eb~!YY!YWPFiR+H*^>omX!?^~+!bCG+&14=px9*wj=?T00Y=-l~0~rmHWaPT; zL=x5ok=J$w03#V{6PWRlJ4|BN^`u<4mOz|$JIdS~7bXnOtTAQoU?T5VWJTYB#w(a^ z#Hd*S4r9TTF{lec$eO-0tK&!mVXWh<`+5D6=TZtG)-6FOo20y^03$Zy0*Eg8ObLhu z0B1sE1%P86H%8CER;*ep0^n*qQ0)*=kyXyeoad@tv=(QgB^ILrB#j|Iv;(*T$UP7% zfW+M>^g(_2UBTjfCWvUcZ-D?4!*C8ehDlrir<(`>5YPBl+yN*UPMSVu;cf)pfW!O)I~A+)7V;4Q!-{57B`Hcd{POe!BdkANF2CUH z;l2d?`}FiEe8R1WAT5N0000xNtCdK(O$Th~S9G$l#ce!0_<+c!;ooC`kBtkkCkQOs`-e0003< zNklbW-Y0`&`HWkC_VCd?AxevhdQoew3 z?Q-7Yz(UH05{PcRTTM*g!tnp)&$~MzPV+x!IvGCBl*t``-V0|Y7aWlD3w+v23y{+s zS5_b~&o>+pmr`Ek-E1cem`NG*;LQU1JWse^Z2SSdsE6_VY~>FtBx=oo`}1HZD6C*t zD2&HJmOTggPGyKVzGa%dW=g4)2WfJn3gp2u#wB8mEO4)X0dorBLJ4V%YZx!+01-U` z+;X`P;ofMXlFfx1eHvZz1-&rr0zaa*#=@&BYeCyowiUhB7^(blyaVe?Y%LwZsb7+BG}18U!2 zRU(8FD)6Ozc|$_=rohlo$Gf_;U|>5CP5E+i^Ey^4xCKAVz&=pEHHvqCpWK`(TcV4} zF}cpw)vSp>gy5r}{d`i1z&Vt0-vTLT07QzTGa=qgbbd-D&Sh+Os?9(TA~4uF6R0V2 z)vHlnJtv^5yc$4MAn(NAMtUlmeMH+zO_3lQf-Z3HT)xoLfZj3U$lmUusv=Ay#62aC zW}rxs;st?bmG41%!?CFj^c-L|1FQlAC?~m5YFOd_plWJLIBXi4;3h@4Nk-}xjzH8O@OX8AF`0+xJ&Ev+#?`4 zW@a|OVfJV7HGvGNJ00b}o{4iMdsxna8|jQ?4AQFoD3@_Fy-4l=$K@EX5SRtI&gFMI z*HLlE{{@cAXd?(BeWZu_?LPCK>=q+l1`Drgm^zWZ(1yUyyX!VCgZdzKy2JP)(r@KE znwku`SttN1a8oAZNEe-kF0&Pooxb8m{}xB%aWu?D)<6BV%Y_))M*slbQYkE(X;*pG#1WmwJ+M7k~=@&{J-@kYoTi&z&J-yul zVlRPp6^un$K8;x$3uLD~<-$bo-VEaj{(fZhfn2LL! c@_!uv04#O)wr51PQ~&?~07*qoM6N<$g4t5j?EnA( diff --git a/graphics/pokemon/rapidash/front.png b/graphics/pokemon/rapidash/front.png deleted file mode 100644 index d0fb296f50a22ab2cdfb6c369e74e346cfd49742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1012 zcmVPx#Fi=cXMVQc_|C|`+VkzDb5dYp%i&8QF=EV>Y5XF>g?!}9!NI=EK#sB~R_@J0` zdxJqrQipzA2LJ#Aa!Eu%R9JV4K-8ZFbi2JqRIP z*bw$3hW{JMe`XoKk*BDiza=CYFM&jn3nU-EoC)BC5mP?BoI;uiDM2kmKTnMNMUm=b zByvbRg?tYv6o^E{g%iZd)|@=2@}c_cJWye(loA#B5I|M}{$Vl5Y?REVn;1k{<&9bz zixj)40OU0$q{SXy16X1}0PjZ7CMBeoWkfhRKa~bGiCzFo$eMB}#A^NzT`eFI5FID6XgL3)~Tl<6_@(#$@$2FOAT}7gNHMI?Pj<1SqvS3hj6J*=w^F7uyC-gdM56>E<+#f?0Qs%NV3|Z_@ex;>z)PG zZwM!|?Erj9!EQ!@JHQFY5JnZC-@&mYIo$O^I4@$@j9LR|HF2#Sz+zClrwt*UJPCxH zWpj@JC2#&GAj-U8JBlLp|Gs{p$* zUERGt3jkVJ6zvF9fKA7^L*8GyKQh*-^ehkj`S4m1s(<)fW7%(4f2>$@D3n@HyKQ6KW0000Px#Fi=cXMVQc_lu{7IgHr#^oDdKYYB>PKlsTkxDc-b7w6wJU|NnzpDfafH?#**^ zb91DFG4J8K(*OVhOi4sRR9J=Wmf>!LFbsrAxFkRtc>lNE*$JU*1Eo}&CT*5F^+)gX z`8-0p?!W$4nOqmu*4RGRH3ZdG+6%>AK$t2rrYGcW!hKIc*sDpbe)=At5&BLxRsCAiM{XMnY5LU8i&&U@EzU|s{L3r@WOw>q%mJ0utrZG@~$}5yZ9crf)xsF%p1jnnq-TMvzck^F4xN01F8-2|)Fb zMO1qNELQyvfMYBeX8|B(54oq@X)NSrwgOs&oC4-~99IhrAS!?lI*&3#0Q5X-#>j@q z7RF+Mp=1Pk(pW)qoVFcsyK#ZWIIk8WxY{V2)w2|G*XrfI*M2L;6qzGO80Q*eDsf1j zkS=m9K>N)e6Y?U2uPx#Fi=cXMVQc_i%N^MbG_A+)k-Nr5D*Z}tYYrow9U=Uq;m-7T66#Z|D+f>VoC^F zT3P@A097xS%m4rZj!8s8R9J=WmBDhuAPhtSOTwx{|NnEl5>8_G;HWUulXb}06ZWx4 zLQd(9JMM@^wwTeEWhrGGks*fzAO-=nEKnC3CQyL`s6n7nLa`K39w%58h!_MOBP2$+ zm6>WLCyZKn5oRsqc?+|E{4aphy*XdR5a84=b`1`M5WpIbQ=b8-yySx@2LL2ujqfu6 zWfQ!Ug29ud$UAJ#{+X4PrZ~|WgR8TZA!MgcEcD=Ue;o#*GU{!Cv zWKUKHv{!mWuK_MRuHfT1v48b%Q`sx}C&e$lR<1K20^}^xIG2by`5kxM5sx3=W(mc} SZQW`B0000t7o;w7FyODDmeI$0e z|Nnq9;wORDQ){PNr$b28ItMuqP6D2_)5S@h^#i3_{l>sy?W?_Rx}fyHh#J#gxd#jf zb2lQrv1}KE$JGvSY(z}CuCsO(4yQHXVB$i=IrMa3as9Lg3`FMwJZ|w1I#DM6FEwCQ z^ZU1)fR3J{5(hOPHh-5DmrqAeQhV_z-2z>Jzo4q#5U~HkNWW$z zb(BNa|I(FbV0?UB)JY=47^o<@tB$w-T|Ad-J`C%+@ls}H8FvAEkTc+f-w9~H9^!KQ zzA1BK0RS2&)ZCWK^wA{2lb?(SiG5vTL{c5L#{#snbbafZPja1z)7ly7NZPa$&mhc%vG z)Z4XZF$emDxTG%8+W{uvdvzS`^7=C2APrtoHs9_oW;x!<-d8R>ANjpB;M8gIy+!dW z=19ai8Ti-{qN;x91zG&Lw=f>=XispgOT-R9QShRAtpm)we-Vp#Lop=bzs>d|q0SkzIx{Dkb0S@)T!(Q!r z7%G4+Q7LsUf&+jV@*d=BdMtH5zGDAzv2xl#5Qfjd&@UK~q%x9?)ryrxl1ethNsI7;OB)%H))2U~j*|?}K$(>~ft z0sd%tA_t`mKq075z>TPYxm)KJ;E6nijUAv!)O8e4LUi+$snbYXn02Dpzn*}m?1G!l zS7$_T{;UA}ARR~vo?K5_s>SbMsJZMAX0bs-je*)@>L@fctIn)Pm z$Zc2y7Tjm-x%N1=6i`UzMKMsorKuX0 z?Bh%Xm+XF-0KuNT7}db^3%bs|c`002ovPDHLkV1lGSnyml; diff --git a/graphics/pokemon/regigigas/front.png b/graphics/pokemon/regigigas/front.png deleted file mode 100644 index 7cb87a1ccf84c0edce841872b40978a9c2f01656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1198 zcmV;f1X25mP)`8beZ zh*Uq82B>MS9Q#KRkc$C2-nCf9vHZ;2<{6}oB`kg>IoiXpghTm0k2GfQY3_c%z$)4tYd#i{5%2l zaC;#z_@~dLUE)`S2qHb%SINO|fA{NPvi;NdhwK-ENRBl-5de3gTSoUls2k{j0oW1< z5t}u6M*`~I$29FD8&cP^(2Dk`b$NpHoW&Yk79v3zrFmX5!V**23c-0#cevkjBmjMY zHZS|jVUqwD4bM1NRcMwi97tg5Dj{^$u^@LpWgfJizZr0qQB#F7KqV8p-{UB|8TgeK zuluP@c6s&s@{7V_I2yW;KsntxbM~|Oz;~Yia0tNpb$1Y6K}uI;A5CF-}NJJ4(IO3so30%wVBH}B_j+g*un!{Mu{7_ao0AN%G z;LRj~7?!&M?>H#D7)!y?z!zmwTs)W7Vt{29|Bjxa{N{~r(8jyh9IAhMlS;9 z0KmhWbJc{3v2t!no`*I}hxpHqfG6^}*iD1mja+e&^CKpwLk#Uk$roqNa(EQ}wZKeK z@hw?<&JSS)5je|7tP)JlThfC6Y}SLUin3@~)(~zTW0gRei$!o?O^&D~c-L--*emxz zo3Yk(ip?4gJC;DPFIr5@0e?Wk81P6|=*P)dl3iH$VoNM+h|>*`nF9Sj8=kJu0k^&u zr}#9pJN~RbWC8}}QfTh!2E3n>In_r3e}dzHe1CCfJhX*3VC4SX5=qbVBr#rN0b>|& zcW1zMq_0nTP0q;7fLb+LV>}0bQd|IL+gPYpLw#Zk-fa!L^FSt(k;r1bjQ2cu8_$>WM${H+mSPp(4ZPR*A0Za^Y~G+#g8%>k M07*qoM6N<$f|ZLZ$^ZZW diff --git a/graphics/pokemon/regirock/front.png b/graphics/pokemon/regirock/front.png deleted file mode 100644 index 4ba1f41d8005d14bd317c6f117e05b737596ecc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1049 zcmV+!1m^pRP)OjxP^eF$YCJW?;Tp#}g7)U9j!fLS-r@x=0<@Ec#x4B%-5I8%(*q3NI7Z<%Cmk)V1@3NO} ze_x_|?z%6ulv-wU#;)881R4@h0|3iU|19(D%dzv!b+OQfM2o#~{~SDg`U_I%<5$nz zK4U>sqRWC#Z>Zy3%Scbo+!f$&flF`Th08o%=C`AJ3K^I)*Z~0N@k0)u@_RAwbg)x= zuuTyJ*rlop0RF~l_B=1xnmh?SXfv+c8gQ_P24Dn(e`}xwK)l8bJAg@t<2oLIh3Zx{ zG%S$e?Jyc+c=@d(#2RR{+Ezmujmz&JJ6(3ERKhNy$mYQ|_$f?Uj3E>OMNhooN;MS1 z836KKxdsx0Qd=ckk21D*0L##`h4LGKoB%Lh1F2=kS;3Qr1@50B@C^Y0p{Bek#MXnY zCn-gs{K%L{F;s9)twsi0S*H

    4iWGaBrl=#)FwhKKMf5QKdBy%6Pi*aO6`33GJ_C zxll?dj=h!g{RX&;N}5_kWM4~2P+34=w)Sw8kIP5stEti(bRZBgV(qUL?q-l1eJOzk zYJgDRUiDf@aQ6r|&5lqT1?ax2fupK^1X`Y`Y7o@}U(ed}Dgn-*#KF8lAS-}Dxet^U z3#%$Y0RXaQ&l{+;C>Av!W4KH(!$_+N2m#;%?zROq!n^|l-5f<)Ps_(NG4)BU5Ndo4 znGrMu0b``Keg^|I^#p-z4&M;~0us{39nK+a8m0j4TLHGNFL37xMIk-4U|3NdNDPd?J=8o^77A)`UjbUI0JLqS z9J*|^H^68G5TR$hI+)O7N(`ZOs;*BAQXtn&dU~3i4(5i6Cfs$prH$l?oB zS%dB2K122_Fa^m&<1J&wcjcz#iuPM!l{t*r3S+Ou z^A58ttIj!le-Pvctl_$D`RbMr4hfYr8{;GHd7KXpCNRF2bb8Gc4WP>F#hoGqaixZ%e5K|sR~hk;qk?oxSZ$Qo17zPc6ny-WgL7RI;v z!|(YkAn#R$aXp_sr(oI-v5w3d5@eR}`*_I!HRJ@6HYEVOzy@dn0Xv~K-70||^aX5z zkN~xr05}5xXH%rs7ggb$$RY>?d%zS^ac`|a0AK*TWH+h=JqU6Ve4)4lwh?Ey8i5HZ zpyVci9cOo11E_-|pZ6k(cl9lx*l=b_FkZ+wfyLJ2wu_EwMD93_>lBA$rLzt6_{?FQ z7zcF-U1bNnbm9g$#v0)Iooo@yI9}8WAOThhMM{|g%gDu&)Ka%2fjn$ku*B+VTeK7y zbhG2G!BTdIe`!t!+ekqZ?o%O!Mo4gNgNleq;FP!|>^SOIPPJin#{ zDsB+o9#NN0(OrY`GjM4Ymx!mqb|eXtYWmMO*&b>iG8XYs%~Yd-ReJx&5zatFi6ITk(Hx Z`~^HPa_UXBDD(gT002ovPDHLkV1k&1nvk#J~u0007U zNkll&H6vyqsS(q?Is#F&4lp#tNIJqivhkgVHbY2i6hYBB{^3aK?Yfy@= z5>gi!Jk=n)I9bS;Y?TsG$=$o;GxR+hwVVMnbgO!Um-oB>|Nq{zt!e-2DITfo^ld(1 z)}9>!N>;u@m6eYGwS0x%5P@zUFtoH2&&dOvJmAD*9}&390i>h#JSn~$0wi4SNhuF# z000i}0XRL7QKk-if#@p&SE;}y-D#w7?;!Bm?|Gw!ytH?K>sv=FJj!>U8nR9SSndGK zDa;?`T8TSrbwbV_gve}c&X{EqLa_rvZbTN) z0bmxbGXNNHp%99N{sQW?w!J_L@UTNwKsOgq@5DDT3S1HzWgIHkl(9}6$Llns9jOlb z-J2CFZ|VS?4}=O-g8LN<;`ql;1PFO0)F$+ol@(E?>x~BheHW+fY!6CrvLLP3EzzICRbO4T5wKDUkZ=Y= zc75TiKy6rVF&kz{+!;69Cba@;Z(Q%yN7wty}ILe9DIAZCunGrKZy z5dohQ_@Fzp{+=Hg5Ox%pWSIcjT_;343V0Jgc;h>I>>>Dt*0xiC@2PJfeDZ_!|L3pH YFFDx__#FZT!~g&Q07*qoM6N<$f{yt(e*gdg diff --git a/graphics/pokemon/remoraid/front.png b/graphics/pokemon/remoraid/front.png deleted file mode 100644 index 8cf4b866415b743d92a6bfc73dab67388a92017e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmV-80>}M{P)KlRZnrKp4l*P8qr+6-%AUff{s*8H75i zfqsGumO8i?l)99Nj}(Vi(6qh`9TY=wPz2jUM~k9^2pvQxCms4-yrd#EcWoEl`X3(1 z{eO90@>~!aXrMpPkj$Scoe!~T&X3G@CYVn0z(U7aY;2ha0Au#5g1Z76M!H;@0o%tk zlW#k27)E-_0kD${IN^X{=F0$iD99>`CERd{p$)^BbK}4e8JF~g_Z05n<~?0+R2cx8 zqH10vTtPbf+^<&x01CC)+a<1tqt-`awMucapZ+QhDu7q0%fC6iB z`{fj5tVVgD+TiXF(S<6D=k@+clfvgO-t#*}1U1tf#na}S#0J6`Ml#b*`#uFxB zz*9usnQB<1E8uT2dP}T(F@O#h{n%VNe&8-dTf29Dd^KISTaBV0qh`hxkNK@AS?dj; zrg`u6^3f~Fc4_jb2H}6LUwR{gYa1f^0I1my5Zvp5{#Rclz>x8&0s?{n0000xF%?J782VggKx`POuIyCKfp)&?gFLFRW4p+Y8wg(kI}0Ogv@#|LsY zSK^`dPMXRHk%6Qp*Fve*n^=+AJwU#l`gV+#HXj$O&i?q#RiQ z3^~7#0QhV|B@&TjoQ&Ja01R{u8acW!4>^(mWIO!!%;J*fsXcslJ~a^y5s}Cfs?j{( z;4^)%rb&8i!Z#yMga88}jq{)TD#N=@INfMbOHFh4nsBcc-$U+BYd0{U2= z0DtHy5A{8yW-Wob)I+bAI8gHJ1KOrpZQtpg9yB$3oDorH?L_#ERt`#Wxr|p0gXhd z!s?+4GzGEwc^5|^4y5xARLd?8*CUAVcxh7>m+^@FRX{%kw57x~fElj+jB;kKXYf`! z)%b|Lu7PyxHhk0k2f!>ZL;K^i*Kn@EIFSc{N?g%ka==lRK2rC6dJ&J6tn#oo8Sixu z7e8sV4V?`Cja*9o7MDfLGT~X$q&Ot<>OFjd1~RDI__D@HOxb{wSDic&#+d($Uz~pd XPQxQs!HCts00000NkvXXu0mjfNEGTs diff --git a/graphics/pokemon/reuniclus/front.png b/graphics/pokemon/reuniclus/front.png deleted file mode 100644 index d189c0bf4002b433052e5954d3e187790c7d7ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 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 diff --git a/graphics/pokemon/rotom/front.png b/graphics/pokemon/rotom/front.png deleted file mode 100644 index f6141a7097e2c4ca822cc8847810b2def68c1425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457 zcmV;)0XF`LP)d~?K>KMPfAkk#;Ns>{J#4lM?-=y8R@5TdEUI&2 zzamFN5diNnF9PIrsUv%4DUkJdUIcg#4D17jI?EGI0_+g(E#zDp$eAT@ZvpdGfVEx; zdl%(>+G(BH(J65K-Rc;itedfOPr;vDax?|(YSVWAfYS?&-hl+r4<03Ba?^({5DTdw zca!QZX69LQl$c;@PDIRSSwhqus)aQ_*GcOa5qCtzSR$wf00000NkvXXu0mjfxr)Ve diff --git a/graphics/pokemon/rotom/frost/front.png b/graphics/pokemon/rotom/frost/front.png deleted file mode 100644 index d94fd9376bb13d38e6bf56b5f1f01ddf15108e82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP) zBCgD&N;U>*tsf>})F3thBp8$W1ZaHId{yIl2H$+ zY@sxUg@B*LIpzC7QXpW8az2bsa_y*}2ND;+R`oNbpHbu*ilu=A5b>_Mf2kpV|B~Vm zFpUQi{!pa=UY`Iw{z;(>09%Fi4Zv30*8_mlZvIP~$N4#e z0&;I@*_yY%_7Z@I5Ln&Vz4c4s0n9*v1u(=2@XtXO37=mHs3D$!1iJY=0`|p?;z;WN ztzy`*GvJ&D*fnejTjR)0d88TkFa`m?({La-N1$;X{A2cjo>IbM0x*>++fAJ!ICKDq zz~$lu8U#fT!cOD=2x~A`9_MmZoH}x#=2cftI z!iky#bWl3+Ne$m1SBLYWvl&p8?kCld(4jsDu-|r9Rdolpmlx{z)tLwR{{u4*u*xOC z);jI-{T+7x7^S}_@w&`)GP$zhh?fWLBY~TA`c;6-c=QIVnePhYY6v;|S>Z!0fBSA7 Z{{X)XEU*JJ2KWE~002ovPDHLkV1nh3FlGP% diff --git a/graphics/pokemon/rotom/heat/front.png b/graphics/pokemon/rotom/heat/front.png deleted file mode 100644 index 59878b8bb889d26c7e471cd6d39b13d1a3ab08b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 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 diff --git a/graphics/pokemon/samurott/front.png b/graphics/pokemon/samurott/front.png deleted file mode 100644 index ceef8bab9da288484d2db4c46e647b0604d711e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmV<610Vc}P)-000AP zNklB2SBW`qhE)FRLIR7m?6X&llFoTs{%l=GYy;^4SXY( z#DzSoJV;MDZSf>A!iT@l*aZj>YrBMsOaXdF$-oGb0oHv&Xq&c*y+b93;;W0!-ET>f z^gT*x{h8Zi2Wpm(QZX4M31gn;f}63M1urHi>p$7p#u4aLF^=B(YuEk`;-|2<-Orcpw_lLtF=0QAF z5iJG$723{#OAIkFngwEQB?UOvXZ$%JPBnQYX+EFzj{#XBo|>=tmyjWHg3IJ}AFCbP zFOLBspfDrvkm^Pi1dTATd3cn18SH2J?02@~#qGWqAP1JxEY`}~R4cJ<( zZd@8l67?2`7Wo+fTS=t^paKMeY=5TEw8<7UKO&QVfU2Gkz;JjeXbwOnu5b8u29yxS z7Q>AR5?dsT<)YpQd8)JUgA z^W9asthrscs|<%B!qkKFb&OqgK(YAT?Pi|wisDDBuw`aRH4RES(fkKa-=N_1CyVR= O0000k44ofy`glX(f`7zFr)xX!q+ zpu5;mK|$f(-sT`n0U$U!C(6;$Ys;3sK|x7pi>rYOk%8OWf(oEHah@)YArY-_r`*nC zGURc&-uL#vzyIvz$2eI6rd|kps@a^d^Ua(d{YMttK;U1bQvIgYQm3lHbczLWyn=)PgI>V1p;h2FdlUqv4*az62BfoExX8SDG&4X>FQ zB4e7&=J<#t6gRMB3)tv$a<%#0e{01q(S6)gA%^`yqk__Xp6{Ft+)mZ&9S-HO#FRW$ zSL}CDb+M36_-U!kP;ic6PS~%{9wze|-2`)!|HpK}(3Z2b=f$^m@~2}AkN->j z@$+kR!{KN}<_EpMKYYFYX+?#J{HdQC?a#;lN)2JNxzHUrcu@xo?Y>yZM4b N-qY33Wt~$(69D~0&8PqX diff --git a/graphics/pokemon/sandshrew/front.png b/graphics/pokemon/sandshrew/front.png deleted file mode 100644 index a3a6ea88f65adce03e2650c87627521f1c334c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmV-M0=fN(P)Px#Fi=cXMVQc_gJKZw-Vn{bv=9&w&9nfpfDq{D$PhSq`1trJc*yA3$bf)=$jHcZ zN*DkD08p}U+W-Io#7RU!R9J=WmBDTUAq+$@jA04n|9`h0gW6O*>^iyhuvVp1Rp(*G zgOk!-cir`mOXNd+&O(Z8P?#sh2u8{LNc;^^fJ&|`BJ8Jz0ix;+XsxQ!Gzdtd*#Sy~ zv^N0R4p#3%Nq9r=r<)H3&>C-G>xp;|fMWv`sBaK(blPwFqXPs4=V*ZH4jACD7HYHy z!DBmcJPwrjC8Qn8fp!4JQWbBZ(Ex3&jZ)yD4gtXMQSN&2QPzl$sAyYWVDBoLCYXB| z>v;IPiUNG_W4K&&H}FF^-7gHEMUVpkJk<4dl9JDwf$sp&fKCJQYGAv_znt9$iYX{# z*vEQJRdxp=e4wXx0FC+~UDkC(%?t?FBd>D?5NZYs(+-9&7Zs@O3A%CGfY~HvEP`2C zeGUfo+vtS`xQjQyvQYPCtKP|l3;05^8Ek!#yrS$aTyY@zcfukR2Yhd~dhuB@2#moh zW^uhITuro1?S&v7LpBdi=YpO&;J)JOWe?)vxj1+|+F U=X<^-%m4rY07*qoM6N<$f_W|kkN^Mx diff --git a/graphics/pokemon/sandslash/front.png b/graphics/pokemon/sandslash/front.png deleted file mode 100644 index bbbf311b5e0ff2f0ea202578bbbd907c45846469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)Px#Fi=cXMVQc_N;wd$gE0^g5R`iWi((kntRPxS0QS`&|NsAsi;LdXw8+TNFfd3` zQc?f_0Q1@1D*yljmPtfGR9J=Wmfd!%AP`1Pz7dpA-v4pW{DG1xvB}N32+P`(<=)H; zgUvL3$9J5J+wT4rf4}J++YFDt@FL(l3t;&DzOxMnnP8rb0skm|RX~A(nFUY^e8m{w z5(vZh7?uTp;X}YY-%$m^yWmnCU4R9%@ce;C5W&Sdnt(A0gLzqBKHqS$4CDbQ)dHAp z8+1cnWI-N)32Fe&&k(ux)VYRt;SO7tSRfe*W(5%*FSdjNv&vB*$2A)XXf|4686>eR zkwMb^d*)}2WyrgL;-dA_l2(2j;{X;8otzI9)5%iVJsbQ69|0Q~&W6VE$RlR2+}7eOjOmVuVcaCEjaft6r+ z$lx-1V*~w04(gDa0M?R~pD*#m)vGw)%mA%wk00|Sr!lST>bxm@V`HnqX&=eyVS`6s z+~7P5te{fOW4;swKfrtwG z69jqELTic`E#KJlTs~~Pg~0EqoTEyx9Zp|{cH3|K>aVe>2~e_3iv-*8_I36F7%x?* zn-r}GMdl?yO$2tlcX4_E!so2KPsPv+)}%qlN_TuQp4Z-bgsYUAAyq+$;eclW=g{|; zRM|twDoCLhbWcP0zOD4Z;)0Za37#J3H_>z;2&Jf?G~NZjPQ$_R@SQ59WKOU)NRSR1 zypVQAI6}xA1Bm>u!8^Uf?cbXMERe5TQ2sS6JO{ly6|nDWlSI)Uz*AoGhKIaOKez9I z&(@T*&$os2(g0cBMmH_hm+L|ZhjoUWYq?(X=iV&Iy)T$P7kEc}62gaq)>7Z`zm0#B WN+g4LY?f;P00004)W2?ujOlg1O!J;eBr!f39a>;)X|%P_W2~-`$6!=nJp47yxk4z9_P2 z8n=4@lHX|+^gFsPL7s7!>fw~1+~%U%qHp$K2)P8u^im&j_p2x>EwH8cEM(;QuZ%}w zIAz>1L{ThTU_vI=&i=eepBO(52P{Ik$VFNOZ9|o}0Qj`aBZNNuG?w6%eRw1uMK0)5 z#^cK_hn2x;Udd=tPl6fp1mhPhmcS7C5*R{=!drk0K!i%L%-Amg7{WmqK+Js!M0KJ{ zKA+F?1%M1W1mqQ|arc~|$O!R>N)RtVu9IBh0WP$p@RDlbs(((Q3vHZ>?|)*V;%T+ z58sM!wyD-Yi>k)5E2XwZS~bwuNV`>ur7CSi^i4um7q}`Y-CBR?$6rp84yu7t>8$_& N002ovPDHLkV1jE3Y)JqB diff --git a/graphics/pokemon/sawsbuck/front.png b/graphics/pokemon/sawsbuck/front.png deleted file mode 100644 index 71aed05e3793945e555329916397fa3bf6f51d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmV;}0w?{6P)&c&rKEDOgA>7{J}EPHbQ$tNg`T!Qgbvvw#>LTT9|5`q z=XvjJAS93gk0R;F;)1Rs^#NvA6;=3f`vL|zsW-pDJuS1}X-i;M!+ zBc%a=>@CYA!)rM}DHS9dxO<%;1&cEANa^r3P`uJtf48N3rN$~St-#$I?6`=_^{&w% z_e~Dtk;idV&M{W&A z{=Uer8fsv24|ag3>MIHh*lbofM*Be4)j+=40%8wfowPgCz)E&}C~QEMYCy^?lMq_~ zo~2D~jU)4H09uHdw*Hke9;bF-s&}A+qBpbV5Ijcj4z5Axx&r8~a6Y#HO%$dNfU*GZ zQNT^)8&L)14}j%NH9&v>jtvXY*x<8w2&@orM;1U~UIXB}B8QgG&>e{;Iv;C^+m3ZN zMPM$Df8yMB?wZ5eoeT2;(?BZBjTOM$e7e=iW4rR7@Nd9Q_rC#U%oa4Y%en~w0000< KMNUMnLSTYa@<`|a diff --git a/graphics/pokemon/scatterbug/front.png b/graphics/pokemon/scatterbug/front.png deleted file mode 100644 index 0a8f680cac85b8b56d3e2af68e6ee87f17abb11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU6ciKyc|U&q*s)`W zf`URsKtM%BMSzFKg98;30s;_mpaKY3EIaWf0|TSEr;B5VN9Wr~8~s`w1lrO&rM&m< zWj}B8cRbm*p5-bthy17F!?|X;+s{v4!tm{fNouB5<}2L> z?sdYkoI(+d)2AMr#B#^~b7uA#PtO_WS1zgIW(bQ|*v4?dN!q>9d+z7;pP7p%BrNKi Relrggn4YeFF6*2UngCbqw7~!X diff --git a/graphics/pokemon/sceptile/front.png b/graphics/pokemon/sceptile/front.png deleted file mode 100644 index f49aef7653b9e032b84a877c288dd317a5b49ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmV;Z16TZsP)A{5XhJa=-@!WARy>SIB-}fD1b0Xs7M%KC;$KeQpwrn0009s zNklvkEn-k=^#TVh zG#mil5BT!}0OtJ}PLv;#eqeq&2pllyP@F*A3pnf`x?T*F5Qnp$H$VChVPN{RJFtg< zm;q%`FEEQGr3=IkV5Q4-p>;G1Y7_lM1u!zmrhkjW&4d9VXm9bxn zs~)c)d6O~5A2RHfx!;aaijQDQekF<)dB#O61NdM043U#S&=N}mIkCSZ2)LQYcgKotKCUW zC?vxS21CD%j?6<&103bYUfB2^JQX6C%6Y5J4udeIGTHxvnZl;EXtK&DC;bm{H?xk5>JmKnyD>^(k@%Ytplgo2n2oVJ+rv{)^RcSSt$G#9!i13&-03BD= z$44!Msdf{Yj+C}Uif-IrjYBPm5Q(~oP~pC~sH#UK#!Eei5KUWBnTZy7+y^j(npl%k zHy2cStMT8p-s>g>$wxGGMbrSxwbp9t_|3@Yc|>WBImXLsr3Ih?%#x;(Jc2T(36YEBas~B-&`$NbGQv#oSo!O^)k$+PIrR%*}-C znVo90n)&g6{}p|V%vs^}|NIod3myysBq@??5Wu^kTVpqg=KcrApGNA9kV|R+0000< KMNUMnLSTYc#jE`Q diff --git a/graphics/pokemon/scizor/front.png b/graphics/pokemon/scizor/front.png deleted file mode 100644 index f872c488b4e721442038d8c373acba6473f9a990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmV;v13~F*3pURa)9D{#kJoiZnrOC7>AlOA&yo@>f`y0hvyWy(F?$nj@bGa&40cXGc zWm1;itxm{u`~I$26?cqtb(#eoy9nXBCC*&rG!qvAW;p~9bA*)*0=v7h8E6{g0PNF3l)#?n+5$xfKw`r2-r5qPX*er={N=5lXldrJ^W+fbXxaBY$!e@}R9<6$PF+dx>iBA83Yn zO-=#)JfxgWADOnC4FIL21zhyiwBl?AuX|_sO6?OYQ=YDKGFzF>JA@M`xd#x0X|>C@ z+W`ID61Itg=FZ7%o$scP5hld4l{l6!DuJsiU%$nx3R_1H<%_5)zFJpn^f@Nb;3n9k zkxu4ny^EI?SPtxwfv33XRelQ_3TXgDRM&w{c^6}Vo&XVU64ef;b^nK*@l#(lqkT8H zP0wN&WnCcTLo4eBpkBtD#eS|d5)%th4;a;hsqvWjAe-Oc?;>V#XB*T?5qcPDmyeRl-J`%?i+ gv|qR1v;RlyU-S0Q^>)7mMz$mvBU~`QX{3kmf(9FH$+#- zDxOjb&ECB1#qD96f!qr9SJ>#5djJ1>8U`U$MNb5M@dSXO z@dVMb_Eldrkm~PiLAwp?b@w^weUC@`095lEt?@n$De(1P6NvU|UROEa1K93paQVX? z4Sxvmi+BFj;!U{{_Cf&L8&t(#Q8^LJscDY@z6CQX1=vg4Bha070eEQ(W>M0j5e&e0 zN&);DUqE#R1LN$wuoO5)Q;;z|g>nEP1>o1ko9Su)$7cB)3Yc$iKFkdN6)Oj((7Ac{ zVFLZ1_`Do2uirg?YmYjVmzy|Th?~XIuTuB|po!1d+R|MEnB@Sz`9m45^=aRCzAz_2 zD$^6{gSRtzP&^`JqOVVUa4K1*T?CZ2UOO>-o&nD`Vpo}q3$E7~yxLi?hiN@~CQg`; z_gAEmIf!L1Wv8fCL-D?qTf;#rcIjn+($vJV?|T_w$$yINW{MYF6RH8dVcvogX8>lQ zxb+Qq=z!~KE!fRe^Fpz7``&7sxpevKbM$i#Aku=?=G%-C`xDhw{M`^((S-QB{xC$q zZ3=eX-+4q6A;b&_OV@iu2#+Zk!`u)Dp%8z{kIhL19mx}XH3u-f+z^3OATahq-n@bi zg)@=@Igd@LV8e+y40xmT}W;xUt_$M_Z z>>#oOs?x$zTM`yK7ByUB9FB&Q^qgfO0T~qH)j!M_U-srN|NV^e@c{IA%wj{09W||=EwTARU!2td9;ZQ5GK_qIYep&;p2}5;2=ziwVvq7f0gtr;q*5T@Q|cE7Wm`+ zlJRlzDq-^OA>?p@@OFM&ysfZ+Z9@#uEgu3&*=i`QC}N10+^(JU`y cz~dMH2StoBG8xEOAOHXW07*qoM6N<$f~v%}5&!@I diff --git a/graphics/pokemon/scrafty/front.png b/graphics/pokemon/scrafty/front.png deleted file mode 100644 index 642dcb9665196eb2f02473c5d5329db9fa3a39d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 719 zcmV;=0xj00009 za7bBm000ie000ie0hKEb8vp|&e}K%{Dg-QH za{qxjH3@hU`qZ%yq>PzdF3`0@OVcF1~Ol z`iz7$;xZ#J^q51Y$01`3yC{=YnxqI|km)^}-cMYKzOBW2x>&ms1uQ9*)LLVJD=VoM zpl}$e3_FI*RlX&cSBOO?CZ19$W6!;2AOS{{8eRD7LBuH0;Y zl~TVjrGC@^Q_8d=R0XJ7^HO)CQbI=CjmmOO z*$1M90!_8n0Q1YLscry}SVTDwxD8GbVA#KV0pKdQM*z3~8UQhIQQ&$UOrDLvD42|t zJH&vCGXTa7H+VpSFbqGQ{NND*Xr#4{!*`C3(gQ%RVsuc1F2GNc8Riqh6VM!gEFhv} zX7UN?CT5?sw*dPU%Wy>SqpB58O(*y|u#zS2)A*!r%`_fCm(|K*>fsUIcfF>k-4qAj z0N~w}a%6{93V`=H7piy|bjcaBweBbcDDkW{m#M_M)5&`!gjBv=l)-e2VGEl$%-#eX=@aVMLi#O2S-~{~ stjs>^D;7Px#Fi=cXMF6nqKv)>K;BXKS5QunC_~_7x$Z+7$s92at(CFy+`1qi($Y^MA=-9B} z(5L_a0MSfzNB{r=bV)=(R9J=0mf@D8APhzgQ9$JM{U3MpCD2hT6vsVh*Xa+b+-nj7 zooV{dFM7&5e#p}!0l9hkrvmU70vaytm4JwxA2g5`{%8=|`FWmi3hMlVFT;Eh%)to3 zo#3N<4PfD50y6xzAQS=k-qpaS8&=NbUr;*kPy zHE@iy6O1hYc5OA_dh>%VsC*HqL#HMr0xA$2A4YR{my=t0sza`O z<68i`uS|eyPCtgO;FFJN9ur6?;9s2-4gxEHGH-;jn2rD2Ao%13&v_p;F*UL{31}td zb53dhN@|yZ+)hB)RP4Oq+m_CPRtP@=@YpxtQ`!sqA?zXmUistN^g?*gR2=a`kdL!` zyPfM%r<*?K!k-1MyCKRHE&e56PyLR7O7L3$3xRjNEu}Lo`GV)Ozz&GmJ67`h;iIE1|O+&Dq3;${9Jd+Y^ o-}vtJSTNB;{x1j~^1rzL0Hrk^j!6fYuK)l507*qoM6N<$f(2Ajvj6}9 diff --git a/graphics/pokemon/seadra/front.png b/graphics/pokemon/seadra/front.png deleted file mode 100644 index c782ae3e151642170b4546469722a45c756e14e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)Px#Fi=cXMVQc_YJ;3gYJ;rR?hp_VgRISaVj%zjtoZo&-o;WdIADON$N&HU00000 z000000M39rSpWb5-AP12R9J=Wmf4QOAPfMpaZLFCA6_3ENxE%-Jgl^;RW)jx8EiwK zA$;SX2jDXt;v)gXXaYpn)awi{0>r9`k*4{mnDTa=;=KUuSuF9fWU*<`To<76+lH#3 z;O`5(j;E-B@rENYR{?)Eoq5MM#ku0?b1^2c8Em+WPlXr!h7Y8quAtrF65??D zjz=k4`Hjv3t0Ud>D$oRw_AZdoEk^i28_Dpv9}++SKul?f4`C-=0aUu@0_kNQ~#1;3az^&ts&2F`jw!>MaW~@Jn0;_UL-z5=sNsR%S2a82OqJ3h3)zK2Xjo zc#CJImx@#%2K$~;PT6_X0880OjbCV^bnW{uoLB|MmdG{U&~B(abLQOG1O9br+f;{&u zW9jX1xL>xlVFP7-$<08QA9&E<*$V%1H;v7t8hrX!|0VP_Ja?{^0Pu5h)zJ1OTq^?l z#)L~L95%+K6l53ClL28h1*iuCE((;Z5?B@ZiL}8J0XBZNi8TXbm!`2b4;L3wfgd~! teJfslmPx#Fi=cXMVQc_dxML;z0LOa|58#~5D*am-o3>^DU>l7=5s;zlw#iA=2}`}q&Y$V z#m)A6TB6Pd$p8QX@kvBMR9J=Wmg#b90FeO_mmNK6E63 zy)1w6Uxah+cY5#rPYKS|tFr#*fIwjk0>mr9efA{)W<*V31US3GCxTZ*Bmj(n%n$d3 z7z%*^gN3617T}dYfQud=%E{vC3Lv>A5&Hy09|52PTnf^p5IO+qffInx14chBpe3*# z^xXoK;N}3bQj6e27Zvc;Hx@A^uspdInc(!mMb89Adk9$bOjuW_1a9TNf6_0} zX#y16N`<80P9!Bf07wd=Uy;slj9`G}!TSBa0vstNG`%|x7f?M=9`Zc^uKGpQlz5PV zb(?uu8Gz8}y`KS)%ccMbjtht8fqVfn!58@rU^53+`D7j#S^(bPSUAsh5Nw-~(6EpR1} zCkd>GbbZp((|H#_ewqw~_dPptHG-m3wD3}s*wZ`KD(of}A>lnf7I z2e1dikivPMdV0%4ET8N~R;LQc50n8=$J9nrMi^-olzX9dFmFU`0b+rRho<8Lj{$lY zBup8QpJ7n{m;jWpvt86E2|#UKt^!<#(FO1p89;Aa%AwOw9ncSHRuCHiN(U4n+GzPl z`MT<Abs!kbTDrT;99s=uO(;@D)-bs_W&R}5zhC}@yqfk zGvq!4WX;mult1_YF-&cDfo2dV&6ha1Q^#=>fH1&Jxh3vJe@8e(M}z{%|ML+Z;yit~ zWoSXgn(Yx`=eB_^&7TQ9PBw`L+YwW|w#pPeB{!ZGM;3Qwze3~gON>iE2mlaK-Zh5j!l@ej(}B>GxqyZitE002ov JPDHLkV1kXffdK#j diff --git a/graphics/pokemon/sealeo/front.png b/graphics/pokemon/sealeo/front.png deleted file mode 100644 index 87d8fdb2fc3d391cfb4245eefd337591b21d5eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)yij`m^>f(@0@enKJyZXb{2TyO=95fxqUKpyk~6eMm9*en0jA*|EF)A3@6?g zb{PBi%f(wm zLdOgqR{JA#xg$oH{?+jufsU!ytGrILosRx60(FUtLB#=)G@zONssvHAh=G|5vP_yp z1IS)nC5lpFMr2A!mB^6WjSmcn5+GKuuo?-l$O6^wI>0RE2~f?~E71zLPKbPc1qA*q z%_yv13M}F|NQgkQ00fCaz<`>MKt6%vgT!FLBJN{|SOk8jEg&$j%}bug<7Er;Fz&I? z0(a+0aC1!c^%l6gmfYox9fG>nLQ4Uu#_C~mNUD}k;0bhSuNHjtCM$^ZjH7n@z7UnjLtRQB+5r{aeq^K|-s#Y9iRR8VbG!L?O8T4oTzOdp7e z>T)JpiJGJoC*?AKP?SBjL2tMQmZ%&=&wvY00000NkvXXu0mjf0F_MZ diff --git a/graphics/pokemon/seedot/front.png b/graphics/pokemon/seedot/front.png deleted file mode 100644 index 2ffd8d6668c8f53b136031e66210d39e0e55c698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmV;y0Y3hTP)Px#Fi=cXMVQc_Qc_BLb7}wp0IaO6)z#H8F)4#$TD`1;tdw)!y_Em%y;3=@+qAeAV_q`9}AB7c*4gRbIy@A4bj?9R>O`0+;v@9OMt^~K=G5$R)*IQ zjaxlnbs7NWS-|MQ*+fkF87sqOhK`vMIR?_| zE%b=<76^}WC8||)spd$YuQi@;y_DX;+9H)r@pTgf*aW&@C$%z@PY{a?7Q51i;QRMT zrP$eBbOT8h2pp3{P5CwrCeJK&fK9*Pyw_ r9)ju?{K_z#{70~##{>S&n}3lXNj(iUu9wwK00000NkvXXu0mjfEfBy+ diff --git a/graphics/pokemon/seel/front.png b/graphics/pokemon/seel/front.png deleted file mode 100644 index d2cc2bc3148af8a7517bd4162fced70776194900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+IcRP)Px#Fi=cXMVQc_K~jU1oV4cV_SMbq5D*af`1mQTq-t6aw3I>i=Dmn8Akc7F_^7DJ zuz&yn0Hp{^3jhEC>`6pHR9J=Wmg|y(APj|@gRuzp{a<&JaMS9xU}yHvHqLacdcK?p z5^lF|eB+OUB*s+$l8oRaFo*!$Bq0cLIfh(V(#a5$tIp3j~vA!bXl>0;=ZO z0r%?B08_SOHT43rUPe;nU}pO#us#5#krN$5^?FIulZ;6hz#dQKa?;BsP0xJ>43Hmf z0N3k37g0{8GKHx-{WhTEaN#?uMg}MFN&b%rbv|ALpv~t?gpK?P06Tr171z>V037s# zH5~O0BNpgHKLQ|kAjq09P(xi!wgv_WqzlJU-(3R~0493U_X4Du={ic<$#(i)fGvG_ zB{#%`AwX)QwG(hj-wUAH4-(071N4kS8^GFGxXXatzgaWDjB36(c@Kboy88Cz;4Gv$ zj{)dy0dU2x0PYze9b`&FAT`iS187T!Ulw0Z?+P&Mnm%;|I@>8({)F%$gvEJbEK88X zqX2ZTL}Z(dLvv~~R`nrxW|5~bLV5>N4jlFeZNB;dgccwp?DfA{unm9!W(qMTCwi^` zHblt}I%%-PscCbdd8WrB`l$K@VB1}6JkW~{%>sz)8rMgRWB_B!dzYVrc-f)lxpjT4 z5^`qx?LDTmH}H%ofUuWW$lFhnrG_EMMbUpjR{#J207*qo IM6N<$f^GB<^#A|> diff --git a/graphics/pokemon/seismitoad/front.png b/graphics/pokemon/seismitoad/front.png deleted file mode 100644 index e87b7a4a047529ab2453d964cde3d01911a28263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmV;?11|iDP)?f>R-GOEZ8tk}?vvRfCFHgcNzZ zC=NGQg1qU?CwsmDtoBRn9`>}~WuJHK#&!rjaM)LhBIo(}{XY}O`Ty*ukk{%P0~LUf z^5!>yZFQ{mk3#Pce_0Q_Iu5jcu188eS*zdZLDy#tsI@L`NNoW5^DOjAi#t3V=bP_Se8}?=8gv>kK5PVwGv#`(Y7}S(hHs$9>gb0Y3cw z*(@%{B``*{D=y+ci0Jap?pO-SKXE&5tpLzz@z1-z1Od?d>gQ%VHf9XapZ|WQoMLoT z_GBZ*_AF=M@(azMk#}b6-K#qoJbh?`Q1ZLVy$(De*_w+@)qOx0(4*UGm{L--Bbiiy z9PMP32%*$4^oay?j~3NXHub2xC3a9;7>Yx95(3>YrXo6BFWL%WeIb9M(oDWsrV+uR zVA~0$EcK~hn;P0+I-#}u(pHR_yF}R);2M+40yqj@8rH+f6jj%O6J>$Hk*2BGGv^Py z8sMAsw-;PPI8cvu&J|>Rx;U6uz+M2r+EBm5+>G%qg3&?QtCmTfU{C_808$F{{-a6J z$Jk7rKrI2yKzxByGUPfp0)2pvQ~4i>P7Wcyf;s17`4Afxv(VM%p=b}+gBu@(60x1B`=Fs*MhtZbl zFah00Nb_Xk6+7uA_9IN%vG;>@V2to1x44U#bK4uCUlN55yIN`2I@$_v@oU2RpEUvN zXeaEOY*xOD?`Z`T#(;@Lfutrw#3s<<9FUAfrv7=@PaC@9Uiox!03CM?0LPQ+2_c%m zbT%_-Rz3S@OCtl^7Fj*-Xr+i2&Amlb{nkRo4ZzLkXlQlIw^BcCRw>&4qV`J*#jX%# zLraS(^7F*`wjrJyUkCUA^7I;j<9+p?@}2e{SIWh7?^Rr*00000NkvXXu0mjfGHu4Z diff --git a/graphics/pokemon/sentret/front.png b/graphics/pokemon/sentret/front.png deleted file mode 100644 index bdc69648941c47262c1557b30932bea69cb23499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)Px#Fi=cXMVQc_N--cg2moS1F%S?Cv>-v=K}w5SLCvIty@Oi+|No?ON;w!1&CSIC z000000OEgp(EtDe(@8`@R9J<@mdlpJAP5D6V9+-G|Gztck4&H5#JiYb106a5wEHM!#7=~me00!a7Ny-TkP)ePXoO1$dFfK(3lFy7Rg3#GPInNUj zED#nrnR^MK;1HQ9V0m-Pm|^yWSXN*5aU0009K zNkl7{*5^<`x>g)Gibf4?RmLd+TWn{Q_@fTM(C$NplIdkYxW9PwNt- zmpv#9LXV4h=uue){0993r3Yb&9v0>^^qn!;ipkPj>3a~J=Qq#$gyMk^w6|*FY;~&>b|O56f{*u0)nf|A+>`{x%W{cmP~j7XS^yJZ*Id&bZK6 z1L$PkqAT!A02k8idDgDOiU0{A%b+>nvu_1mq(Mw{iRj=kR>&xzgHI9m(K$i`wkbr! z{i3a6gc3-5g#ZpAu8dJlu>%6S*ttv^q*6t8)w|;MLjlYD1`3LR`i-l%E>PcCrq7n-Vo3u@=%`aq0oS(uI*$7_%W5E?@ih&EN=@m; zS3vUxP9LCVH6{xLmNYNH&m>SY*%*faCsyNNLC6IcTR9M10SyG$7#FTBv!wto{R452 z!Is#-lmM1-ZP^mg4xtQI$7%TsB$}q+O8pvIH*EgegGnH1HA@L)+La_Re c%Ky541IU2G9_W+4#Q*>R07*qoM6N<$f({{!(*OVf diff --git a/graphics/pokemon/servine/front.png b/graphics/pokemon/servine/front.png deleted file mode 100644 index ab5a141b957c5a46f590c2132e9ca5299ed00b00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmV-20?qx2P)s0005K zNklxII_lY{gLvD zY!J9klQ&3p%{k<)GR}6pp4mP>xcWclmt_5lqOT|w9|7zUK%I%MF}VaN3t+xo3h_V^ z)^J*m00=-0@Us+vs~Xye3KAYDuU{U}vcPQX{=9C{E;(R8_xgcw=(smAKcK>~3+hD<;jYs4}E$}zEWF}(%x9zZI=7?``* zd1Lo`thWTzkf_r8*e$8*`-ie=5Z5%q`K2;`;vwh;s>XjJJTc^(gH;aA&|vLh?maCa zaR>Y8u%Q{~{Y|*13G;)U>VOzN)kbC_f~pllzw_zeP54A~PwV%-ow9bCJ+=5Il~4B? z8^I@l9+H1Y0F)v&Kj^@vh_^c}4j4m(J$`9@0AVM4iM7Yh)6I{0001RSdd^C7^pxvpm5;OP)PXr_)u7I7C#rq0008c zNklBjE6aZkk8fv^LmTBlHmDC*ysm~+_b_W$1Lg`}gLCF|{y0#dc3NqN1 z+g#gpRsdTM@!LYcTfq`i>fp+NU$fWllS7R}bk!33)8DKt+hS^;?gC-O`7m-tIiOMr*AJDDbw zff@HHfcpoq9dMA-GGHuA2z*#4wMx>{!RktZ%K@rrY{iplXqw_M@H+@2-7?tN?34BQ zwL$Gvbmj*8Y(MEudyRoI`{8;#Zer2p{SfvnZnX3l0CZ~&$LkX&-}Y>THb28Lns91FlP8PMV)4J-jpGF&=sHpP%lP%g6~1UR^opg!wDjv*8j&4+I#sE0lP3_Vs-@I(N$9nO5-#z26I31DD~CO*}}{Vo)Vv0-`$ zE;y$7WCtCE`wp}T06`EgL_K*7@|RtQcgY8w@#IE;EyvlDaU5SUlfa1+BtRxf7WyNP z>%}wzEd9Gs`NJw{E`e$@IjZVwcvd2ocva)9(M&hP4uEGir0BCaDIy&qyO^GWswYdN zOqE(ioP#cU2~e>RRAH-AwbSW diff --git a/graphics/pokemon/sewaddle/front.png b/graphics/pokemon/sewaddle/front.png deleted file mode 100644 index 7f01fe90c945c5b2670552c6b4f1af1b97d1637f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)9@*_}DP``1nXjNZ^17kWd)N$k6zxNB{r;nu17H0004P zNkl2zX0RA ztk%VZ!KB7rl70fegm0Pej@ihQbb5Y$pQpV)gdFuxMV$jc0M3ccXAnVX8^WNEh=m9w zL=gZt0s^E2l&J?pua8gHTmcnX0D=BsYys+MPtqHX9jF$d5T|kK647ljZBGi5)K`rW zgPzdFF!0qlQ}-ib=)vGBNtIHWF#HQKNRk8rRo4S9902MNC;JGM^|%h8Fs=N|S2Lk6 z*{I%DcPoV@Lygae;|gf5X1HdW1O~(A^g92@{2BD60l3Zcw-ghkE&&(YnZKUBFB2hk z1FF@Y&UcGNSq9nxgm_W+;pO?f+y$Y2&rwf0Wm)dlfoV@x#OeC`Q6I1;T;5(TKQG*t z5h1n9r=P87o8nu6on~3-peR{fKo}i*1FQx!HFd!fn6Z3bb$tSmlkmL4%Q1~aDT>h z@B`!tT2J!U80ereO9#D6FKNe6^g|ZtT@2`aNpWKLK(G^({b8t4jy%5S9xN7+Np@0NNls9s!p+fb>uY#Cih-XmgSd z+8&HR{BJ-1XcbYnSy=hgu> zR64y|poT@=!%pYvTuw2NdJ`}g*EEJ3C|z0{hEJlP5MIa@V(<73(#7pjsD7C^qjl*g z7vktR?w*0KLN5~%IGID>V>mgEK_x-q?Fn01&mags#~8$%D_w}Aunfqna`lCP37>FB zEfMaHuz#p<2)Iiyn(!_W-j>+8y!$2f9s))Qo^swr&K))IE{@J(4e%;kAuT42hdIh0 zj{8%^--|_-Wow+M&w1Wwh*&!Gw>ZsIZBWYjedVlJ=YAzugyA?>RRdVE9{tRc;?M0C z>DPeHd9<3oFN%xhEfJfVPFW<$RZ)aD%kQ*7xLN1HO?|UV4DCoG6DA5 d0IKkTFlfKp2KUT}YU0*_F9uyiIJy(Ey z^7;Sl9sB|K)t#|Z_K8>C(N9Pf&rw$FdW0y%%K%EG>JvSl-PBjN(+<1oeo3XZCVt9R z4Q#-$+0Z4n0-}NKSSq%H^_Hq|vw@(ci!3`*$2#q#9%e=1!XfRp25Jpr`QHW3c|Zdi zihFFTSQu_#U+mag0ENvuW{CnKYYuR}`DRffKQn>u=7B|P5i|P+fM;A0 son0}JkwbA1uLdA8bA{{*^T`K(08Yk}7^7U}rT_o{07*qoM6N<$f*$nQOaK4? diff --git a/graphics/pokemon/shaymin/sky/front.png b/graphics/pokemon/shaymin/sky/front.png deleted file mode 100644 index 190c4ebf69b367f2dc7014729ec18d6942452580..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 zcmV;@0xkWCP)Kl(BBpP!xtQQJkp*Nkr(Fq@v8ph0Yan zVvnK3u?L1rP))^v1afmcb*Sv*Or5Ay^%Zym-l6Hp6jw}4D9^yT*G`(^YbsX684^qX zcmMzR_}Gm7ufMJb5AOj=o#s6NUlZk?mUzp%sZ_R(HRsy|@TLJoSTJB^)7;-{-=YOsnHU<3qTK1)Df#&8DV z*9$lmZ0qVu15~mZM`CN9B-h{bfEth$PNkkCi)D^DBE1LLS2~r*S=fO?k-mH0006f zNkl2Hv=CyNNn-Yk=J&x6r%ybtMbJtEtfFkk-EEdF@uU zPl67nv|4pGX+)>xTYl&1l>=qK*CXp%MxByRZNQ0U*O`twtNFVN>1(3=LQKnJm}wO!-70JzqI0>qKVnpTbD@ep5)@rf1@plHb_@t9&X z2&EMK0qnQv1v$VcOk}=L4(x0Esb|smK5!VN?b_Ex0kJmkJ{#2uIq0 zqjaibV`iEnprjy<4G?F@PByHh6zE#Tv3v$>~`%;uGV z16K�H5`%0iq@dY~bsdI zbqV-ucUQNGsULv)@Gw*L1G1iG`v6?V_5siO2mJ=Si1p~WGsKAi0000A9*ad00009 za7bBm000ie000ie0hKEb8vpKlfQ1;Fc61bEnUk{=p0eBow!}(qaHvM zy=9310NphZMY^>>8h8v)q;Jr@gIw?dx+FvAK0t>&O^=c-G(5|my5&56pYL}^p9h2I z`d`IPj&OiOMwEau=Cohn9J$eb_yx-vE?5ueDfd_!^J?#SG6QZjVt`^F*T6ABA_mAW zX@8SukSX180Gbi&(kIB416_nKfJ3Uw2CG7l1dv`}4W2QsPKm(rGfh38^F2dEh?i~r z%yY=7kpIhJ8f2U-m#vVu9N6@!Amvtww;X~o(`mdI;*MFltOjV}P~&UoZq9GbuAXj*YmTgQXJ5bc2@&Wk=Qcn1JZ^ar3Z))9 z=LDFUAF&YONky{A#TvInI%jM}|6Q^GSP1AF0bgoW8pz{LAXht){slTgS5&|^G)33I zh8gSczJuO17!l#66Q0OIB)-8;A-|`>=la6~8ncPDQVibwA;QE~zXn2H zJmTSDzY*CY68B7uWy* diff --git a/graphics/pokemon/shellder/front.png b/graphics/pokemon/shellder/front.png deleted file mode 100644 index 4c3e7f5228d021233186feb939e525ee0ea7a032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#7oP)V1R&-`1tsE5HP@CXy~Z00000000000000008Ez?j0P5`M> zfG?L>9!++YE=45%!c)xWZ)RkB-X)j(Rp3}E0O0Ib+O^KW z$9gsdn7b4K6H-b58Ho180VEg&caj+pQ*;8+$?-UCcU@P+rjHDSE$osFgrV$3rXNeh z%vMxl^R6@xHYGL?hOJKAItT(3^S&);0c3FBVM`2M`-qz+AS#5g$76bE3z`b&M8o5q zJ$nN`nCGv=QGyL<0}1wD^uiEX#1rN=(Dl*-@K#`mqHd4qGf)tXv`!+-8WzAwQwCD4 z3(P^;XL{bqj7SSzDA5Rn-LI0Sqk+^A9G_d&Y5YN?H4W5o5Lky+W1!V)L!$-p20mDT zAH(ftyIm3iG#<=VKLL!^`;r034d4ik%g=HTkYff;z*{r0%N3Gv1J@;Ihl0E(X)R!K zWq>c5@H&nk_6)o`Tcb;z6b9fRSzQnkQ1t|y0Hp_@s*zAhhXSu8-7C}sM7{t+L{}J`tYwI^ zbg4wh%2v~fsUkf9s&ap2)m;XImwyabA*{c20uQz}B-#!XTHQTOgR>k|| zqM<>lZsUNA02)n7&us(fFo50_*tThpHUJEU&^G}B;0A5x_e>KAxXf=4)gG6IGq{W~ zJ*MBnfi+U#QGq){|7^&Zf3NzcfG1$S{+}B9mQMF(>ZGO#st42fIC!`|0<5_U9#vp$ z=#x+-P!-dCHGnh}F`t8blc=w9cE~8_TtsfrnW$dMUk)><5PZ1^#*?I+ahM`gXqLSv zK|m*II75L&9QnCWf_nfFzNyp^pzq8>4^t_2Q2;R4poM|2qKMx>7e{x{U>EH{f(BFy z1;TyA00l&WB2F}TMlMQ$k9|Z25E#H#f$ucT76wppWRc6&QY6_D1q_@o8&>hM($x)DL$Yuu`^$UF!e<002ovPDHLkV1lp`-@pI> diff --git a/graphics/pokemon/shellos/front.png b/graphics/pokemon/shellos/front.png deleted file mode 100644 index 0d1be14f6a0774f045f5b6fae2378b87b502aefc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmV;`0V@89P)=6=#bqmDc$UnGao|; zE!kYX7I9S^oD}3fgD=!E?`Dzy*ZbxD9~U^rw)vmg5gqIKeiMA__dySWrm%r_5OiI- zrR@iSf9}#PZ6AU&G37AkSEoH=p zjSEVY<+6wxqmTluuU~U1hCl+YpK>WhEZC3$MlTBqPJA$`2fM~B3V;?I65!pK&j-A5 zFCw-;@HInlLR=>{YykDgI0BPZ9WbsPu>ms_a(q_{a0l~|uoousku_{Pp|*Rtt%|C;KI|00000 LNkvXXu0mjfMV-V8 diff --git a/graphics/pokemon/shelmet/front.png b/graphics/pokemon/shelmet/front.png deleted file mode 100644 index e881e714955f296daaba99a8a8186451e02b3c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)KkTFgIK@^6^unktuq6c7LV`tEHdt7Iz zXjt~eP}q@4XiZ2s0#^_zD6n7)3rlMoaT8-=OJno~9>6!VV6wZz9zgxu|C{f;%XvC@lu8z@e!Lj5X6h<&4oEfYKa5T2iozOUNnb ztjd^e0Hp7X#^d9Fx!598&nzKjpD_mll)F_s4=9CTsJKGnq>3}rKsizh;f#jr1NB;v z1#aRQD*8SHK)^YNEYOY@R!dIihk6DG@N&Q-u?A7(Ukuf%q6?4)tav#ilPH?26#zm6 z(s$UM#>>S+gbLL|=w*Rvtb)Xw>LG+I(0+;#c)smji!~5t4%sX#$z7-)gO>yJo^gEt z@p&l{pqT^ktMT&a{WTQOH3 z(jV~r2BNNO?T7t*Pb{CU?ZyF$;QEFg!lvI6-A0X`wFGcGLfaBxUSNDvSZn9$L1;=~CB1%)3MIvNT*4$MgS@#9B;hk=F$ z2my5fL1&&9$R^GLkH}&M2EM}}%y>M1MGDX|e@_?35Rc<;FK_faY#_jvAg-LIm&ZQi zgJ@^#!p`W69V?GWS~Wc~*Qjm1uy%#_qCUs0J%^5QAGl?HSTCvT@uuzOuD|x*nX5Zf z=5+!0gFEw;H#MriFVMD8;1HO=Z^J8K_+d*26SKv)Xvd1Z%xjG`rt|NXT&r+{dC@wT z_tO-AF>Y=DBmO{lf&3fBlllhVAFwU&uRhSpB)wTcaaR$uD$5eB?u03p>$O66Pf`r_ zzr*@0%ws0Q;n{z#GVc03bBeIoq1buP^)ImOEo3~|1#c<2+^1t z+xA}Ic1@u9L5;~-pHAL9*5n&&>K1Thon`W$)S|r+S9}lTS1NtERdV6h#-_+5?u}xp znMLLbPHT=>>G{TF?k!;`3KP-J`X`=jyEgX0P7Ss%zO!>?gz6dm-lx80xpsA$`hsV5 o)-Ovk_urboL1J>UY?k0B=IHE%9^PP=37~NIboFyt=akR{0O!=nL;wH) diff --git a/graphics/pokemon/shiftry/front.png b/graphics/pokemon/shiftry/front.png deleted file mode 100644 index 15e263cb9436c689f44568b896e2203dbea3c9ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918 zcmV;H18Mw;P)l^;DB&wfLK5<7x&2|00009 za7bBm000ie000ie0hKEb8vpKlfP@*KorMiB4@4@8yD;jJqV(ki#-_9 zL5fdyoOr3xp`}Bh!CWP=EhA6rzOOL!M7B$_J8S}6xXuy z1G<(zI3e!)(R<(bc#@?5@i&op;B79HXX07nr}-=`k8`PI6%6^rfL@p^MLHS{f>gmp9zmcVA({A zrKr2=dTo~kak#8I-FOYT{l%-5?|_%OQ;fIKYIXKcr+}k7WS&@TyYBgEI@HO5V>o1< zXuHP%XLtVqwbb~CMQzG;*F8BEzz=?Uj+JL@H1DzMd2p#mdSgP4m}3tZi`#@yD)(5A z5XM+8#Q_$dl_XV|?-O>NV!0gknLmo_(!#sf{&?^LGD;C;m+@J0BR{R&IQ^@^CJ2~} z#!c|Z;;TwNcT8WnY_&XZ3MAF^noh(3CaXZ z%5@lRv&Skh|7OHs4VyatSoO}gqPn!u9el_6#;9SKaD(a{k4GyClr{Jj9GD{$A(K+N z?s<6sV%CKCr{w1(>x@tc3_Ir@{^a%}M8eWj7-uq^*bpi9w=MvP5D5!sF~)lsBUA~1 zK6G79OaTQ406%*{jVs(QRb3v_6sxKORBT%uLgorLaqPaAAV;Pt4B!BO%^g($mmF|k zeJF}ut4=*2WN-OV07*qoM6N<$g0usrjsO4v diff --git a/graphics/pokemon/shinx/front.png b/graphics/pokemon/shinx/front.png deleted file mode 100644 index f6d437c6e55fbc78b977e3de2bb952ce7b86d6d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmV+m0`&cfP)7KSoq*r`1ttXNKlYCP)JB%Ffc&iXm|hs00000!j^VK0004& zNklhaB>EsqSHQf|h6ImXH<3Q85ZNz+;Xu3l2J7*AdNh zT8VZfcM8|r8o6wd0XTigE69c4$urSkKfS(VdRkJe{>nXL480jC)y zN!$mbO;o&#Gzmvh$Zaauq|v4LAu5peE}g3ar7dN5b3#8AQJybFw0iBV`b zNSJ8aOSy0!hANoP)W{@s>n`h~$?Vu5*mONTNiSL(I;2u{4?N_*=Lc3AYiAHF&1V1r N002ovPDHLkV1kZ_=JNmm diff --git a/graphics/pokemon/shroomish/front.png b/graphics/pokemon/shroomish/front.png deleted file mode 100644 index 0a438920462943138371d6a8745eb70c7ac15f8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)(O@Lhv2arMDt>`Td4Pz)>dNG;1CyV! z=l(AkFWIVm0x#cBclVtx2rjzl99?_e@G63>4`3O?>dpf^V1?)dVnl3xE#iiIfv5!F zDCYgu0ldUYJ`(_lh1(A|()z%6og27;PwkYmMA-0z^bR;nggl`wV8VbaXH*7ADJ!%& zoMTc(2KL*?8GtgTcE+RJyVe=e5>gNZNGaXG;hx;>JaGJ4!;t_?CcyWaXvjS-Cqx3j zg!r@^-A$D1KLEBPfa!ky1KbiZy4?!0GVg)vtaE_%^zvd+FLcke?z06!0x=z@h_!~2 zfYv^>5QPKCPSm3Aa?R`4>7wE$t4|H^S_y2;)DHqt7*(NAN{L68Z;P10`evB%gIK+o s!5H_!eRNS>VgFemu;HcwFZwrn184kh-~vy(8UO$Q07*qoM6N<$g6;vyJOBUy diff --git a/graphics/pokemon/shuckle/front.png b/graphics/pokemon/shuckle/front.png deleted file mode 100644 index 0b00c414d1de82ecb83de636a838d6381ba836d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmV-c0;&CpP)BjE6bEn>ta$B z$S9lMUQ>LZL&Xi~yX4Lk9IMiKDRgL`2ZR1UPVebXGK~NAHwpmsx#N(YCV%BP&IR$> z!C(*i8gTBM6LQs>cgRToi2MEofL36VeL;Jd1C_hbK4>W80KjeqW(X1JfMKc}G!Mcs z&<9Hk)F^r&M>zpTe*m=a)-Uk-6!5gU9P^DX@7`MOJ8X{^NePgYZKAs@cL=@s2OocE z1b0u@6hk}Ci^r@POuo?)k>y1dH=Vm~CN}glV=P@&<3=$3{%}K?5|6h{_vlV3-Q4`l zXDpqSO~4eCicLD7aO0ZsV z_Jyx&OUPF)NN|^n?Rr@)zDiJQLT;jKV^VJUlG5rE=Xdok(E@uIXMDZ8$0Sq0+c$Qo zz_)vQfB~|}iut`@;Ce@Q2_epTQANJ3KnU_pegT5Ox7@et2}Iz=liAQ$;4n((QhuGT zaL#$0S)`AVXQD-39Gs5)e#r&TQeMPzWHOZ3hDQf$A}BP&*|f(xv#KBmjD0&07*qoM6N<$f?)&{)&Kwi diff --git a/graphics/pokemon/shuppet/front.png b/graphics/pokemon/shuppet/front.png deleted file mode 100644 index e2633121a5cc09e2135eca624d35e64ef1d70b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)9U zrXkFlHS0@77|burnD8IKm>@tJ5g15A0CIjvs6Ya#dw}Ls1XXV2qojopDZ2?=4xl#T z+)Ew7RmeU;^1Z--Ly#R>S`RfY`TIabBJ>C`bwEVk1Qo0R=J))%s$c{-ko)|j6c!Y) z>?QFt=lO9S>G4+-0EjW?Ujjfm1zy1oks2T;X#(&N5Vq$NsR%%10|EmZpMy5A19Ar1 z01Ll?RRJv-ArMaiu;neY0C`@Tl?7BnPLk|Efc@d4cr=K1AaDb1eMvuA<`_q(@*u~{wtO8Q|4fSOPAjuRz@}@;NfsCJo`F^d!JK?#Wn^5mFfBXVe z!hZZmzTT#X;>=e-K3XAvK0tf5#{J#kenGbDZ@=M2{wv&n$IqHI%Tq5CdJ0hM4{RX- O0000YENqaCjfkmRsPez`oo#+Oae7NEe?R`d?|Z(B8Jn~Ug~B8`|3iq%1U>U} zSqPr4L-F&nF(|x9^{>hb85HNo=E!?BQC&0zKvZ!|Ax|k0-G|sIS{VOkl~QQhqyR;^ zB<5oRbbOIlF0u@UT>t?K4u1}Ks?K0mMq|K_LMb;=bX?;|ad`7i#$&)~s#p&%?Pd(P zS#MRy`$$+KVmAb$8d>Fgs#dwzsWuVYVFn#qfNA1c_e8iRJlZ+}>hv^3@3K&sLfm%)+YqOxUCMC1FiMn z-brvlJExf>ki+HGrS1j2)=irL-Aw4Z31{82ldIFSE?sJTd{>dZ#wN6Mztz?K8{Nc_ zPKno?d;=Y?CbA@A^SQQB$N}k{=mbHxu>65MPJgwd49|0*V6a@#}(Yn=X{b6GU1!geiyH4x8e{P%6CkJI4PZ-_>!{PAO9G+yzs3{x{hJ(`( z7{6}uZPSL^n>0Ot%VF+2!*t-9<-hryjg0vLp#ALob)Kd(mOG#`qnvc&fc|N`@Svvw zj=O8QDtR^^D=41;e{TX%Qrz0kP5>+il#^9yDgO%;Bfv`sDxL!iQ(i3%n5}G8Kvce_ ze#`dPx8CO_0*m{vb8>xuc{d$c$;rKanFbv4mn$H5(;W^Q(;O-c?!RFpE6*Ze!WTQk f7@r74>q&)w8|@ILwi4E<00000NkvXXu0mjfQOA+J diff --git a/graphics/pokemon/silcoon/front.png b/graphics/pokemon/silcoon/front.png deleted file mode 100644 index e6f2a614cd4e08aebd48e30c5d1efcc8aa0149c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWU1SC{+%vkZ_!-oSG z9ta2stk|((gM`J8fC``zOu$sjR}B>9EbxddW?X?_wfUqO7#O=fT^vI^I^SMC z>v!0Ihv7j<(7P>X-%Z%Yf5Affxyia6+g>ZZ<;mc0IAZ+amdf9m+gdU_6n30B{&V$P zOHRe@KjwR^Ykc%>yTg{NOpB)O;|?p`;%eP^Ry5$)0j^snk6WJnj?$R+rbxx`Lj z@q?!v0jv!?hn_lS&CaXPtCkOVu+5Gk>&CuiRm}(G*gUvrFmKcijbPf$>Jj40AkVb)f@K$n_YWkOu`o4JKt+tiG~A*w#k*3su~LfChV@|%8_C4IN$wdOT(_Za$PC*YsbD6 z)O{?=IQTemh2yP~l^c{h4aFA}F1YXUy|(S26vx*6haY}OyTBN(!0=7awzeScb#%g? zJ+?aKH!q2}e>l3?W0h_3?}K5Amj&jePWqUY@6WI?eX8Ue)-Rtktg`ON94l$ztK)Bb z9J1{C)=d#Wzp$Py=x8S<~ diff --git a/graphics/pokemon/simipour/front.png b/graphics/pokemon/simipour/front.png deleted file mode 100644 index 3ea50454c9d743cf5be73d06af52e1bef4ad9911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmV-D1H$}?P)uDcsRho!1%~`P*6}fI5==nAefk#^_A%o0008W zNkl5!X_izesHo&0 z$k>3vTdKw8z-vp!E*-igxP!w3{S7_Irl9BN?(Hoy+(-BQzPr=2qWp(pJT|uelJ2!2 zXv2D<1z-U5TGpC;11Q==MQeyAY@1L;B+aXS3&J*pMiXE|3iRmRI5Z(J;{&O}vOYl2 zlmc7uCpw-?qXfLA$yGo#Hf?}SO7_}PfSlW5P`yrGrkdAS9;@357uLREC;FrNQS=m2X0S=D|`0*3RXRj*Y zWnF?ajv=@hyhHr@{T$+b&ld+~#%74a>;VUFZy=%qb$}@D757cx z8O}1~@1akfsO1ZEv%C+{q!`cK@h@P^s0r{1pWxns85J36P!~G~UQL1O;#NeN;Mf#2cEjb2}P+o|`d5 z!alg@B6eUay&Vl+>-Qkcni`!e4(2R9zaE?pEDd5N0Q#Mxb#Z)Y`$PZvhQe5)tcHfT zyZo&5l+MuDRs|#7e7SPgye!ZLQ*feLCeTKQ3&5bCfp8J1(4rcFACW?%T)cKHEDhr& zz`&WgDpe}g1f!g~^=QnT1n(DLhz#hWlU{Pm@QDyFBb}Bh=%SluNG`~+SU^WKBgABm zd1={zz`1(2&w$|shhvkOn0C`G9~Pv__s^EB;C z?m~`Br|H323yYku1rD>&jz^iJLx>KouhJ0GJ zK+CQsGZ~ONd1h5)j$BrPF}L!j@nr0*`^#9=a+&-T|8V>U1MV()LC7fD00000NkvXX Hu0mjfwHJoL diff --git a/graphics/pokemon/simisage/front.png b/graphics/pokemon/simisage/front.png deleted file mode 100644 index 22e5dff398f11828fb0b8a2e03e0d628ed3986e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)g50F0$wCC{f0id*iY9pir+Eh3oYXKfPAa7COWr(dZU6s~~?EpRi@CC44*NIl(5V5yiW%Tr$!^1Wpeum$_&h;Gd{M{`owHDUpNzCpMyrWC&?+u0X zYs^*-+lc%pZ7oiJ)*{0FaoGf1M4y|$oj32b^REIj*NFZH2V9LnqaIrzY!k!^+o4`F3AK;}jMGNEI0_97P$GMQzov*Y<9A(~8y z=(P(iRgSV*h_$^VIwJdX2fa)oHbv}AY#N&VFq@qXehJ-(_i*Jlc8)`C_H2Br(xE#j zVhPO*I~1}HSF=71Qu9|~I}pXt=%v5=WDtH~uHVciUmIg$4KS~g*N9X^7wMI`etY?^ zG1o(_%N#R+=}8@-dqkB;N9Lc)@2*E9fO!51^=S!sn9!?Or*PHnSEFGX+Uc@2bm?UF zc>#d!QCx5aeX6?PGIPu@sit*^N8O`ICv>$~n+xL#Me^h{IbQ(LbGqm;wmZE80K0Vh z_vx~XD1uJGL~jmM9XIeoajMSik?6=s0h1j%cub;F4hVoH)vMc9MZ(^YERq9tprZLI z40c&^dN)(RLe`0tl6j;sPz&I;k9CwR&m)wJMd#@?FI#MwvR*=)0J|TSOUR}UHZ1{( zwS^l2w+0IUuxXU1H>?Ngc732juu0;35ljA6vxk}3|%7Gv6(6)`)tvo(7}1Pv5@l>33aRL4?w9LC=(r878ZmW z0aII4DT=z5i2)M{qQeVo)QPFG`dxUJ7>MJfo#B*3@%?}IzjyDwO9=S~htaq}x83Uj zyLF9dnKu9^8UXB?{lPUX;4YyH0174pA6()u2-JWU;7fQg2haifxEukbs(=NdNdf#2 z+DNr=La&%Mmr+x1-IA9~dp%wA?I#m6}tI&T0T zc6T%#ZfWYcb;ZV*N1L+^_zEvlu-Det*m8vob)ai4jhRNszWK~C^p_F>9 zR8M`ee|Lo}<(rO1N{`W?-I(Z6ShDCgGj-8dS3R*ZiLVA`8TfR0(Yw0povrL|PYgs! zUpn7?b=kwg4$k)`z*HvW1G1DPANLqzYX|2^f_qpE|8EEqxJf%mpvAi+(SXFV_(cr$ zpSlakAqtnh{^5R-?CJgokro!s&$`BDx0AfYQ+`Emo7g-G^V};EkYkDM7F|u=Bk(Or z_Fqs~K590zqW|xyz*_csAXu&wb*IAuuchv$Sy~jVnPsYZjBV(Sfs|n>faU2AzX0la znlTn|Rv)K2B{YaUXes~C1)+@T53*4JMhn{>TN`GsdhPx|Av1LK8ONgn$N^V_55kCw z`{9;>h(iP$krc!pueWBKW<1S-3r~)}i5Z;)lZ~Ye^f|e#0G^EWd|Ni8loq~cLLjv5 z;H-3{kVpkp0ObZ_p458;nyLbA4F!vU8emumhza0Sf~@Jx85$5{O3waj8@jECBe3wO zdQ!}WpcCa11GAxlHZx~+ZPCDc&gE?+Dp?}rEQmlL@Mttl=lGL)zdz7dB~ahhh*fn$ zGrYEFY~-2B=jep24fA6y&^5N;FM-W7{!hj)cGdmJ`g4=;00000NkvXXu0mjf2U3rG diff --git a/graphics/pokemon/skarmory/front.png b/graphics/pokemon/skarmory/front.png deleted file mode 100644 index 719acd0f8f7cf9df0ba62eeabaeb8c3d6785300a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 952 zcmV;p14sOcP)PVS#ka*})^&nY`Fx(%|C}Qv4rBk;`9V@j-*QW1ma3F>>QjY{)O~Sc>-bMBitq*LP4ObP&v((G=4R=VBp)L@e- z!1Jl^`4E6o%2&GYj*pL~2CRwzpgt`^bPIH|`(_OK>)4ri2U{+802$vLW|^`* z;@C6=6zGFKyVWnhvkEt>?UAgRCK&Wvkg;>C8$a4CK<)DgXeoUV^|(5WfIq*X2V=wl zNOPqN9{zpxBpO_Ujns4d901(xv_vOrQJ(EiZbrl#vLPFLX0yZ9g^*Ix{o(9jE1-Hv zN*J?JZdJluN*T-nh|9`zvIpnNKAchfSjy47j`DH@C%JjZ$(aQ`f%Dc zZ=0PjNLk46Ne}vsl*tlkJ05_-wOhZrN&vC0|0)KC_cK`|2DYFSzgb%f7-5uG%Yj+! a0qZY?_#MlZ9*VR80000I52QnNPsvf06-uBxL5#iIH0Jo`1tr(U}(r#5I8tMA=4ts0005} zNklBjE6vs~_5HAMZU{fodq%TmcFVIlgOQt~11Tqz*N1)j|1Pob<<;|O( zHgDF^4jMWo8MMadp<^6(@YJoJA@7uCNOYI6L+PJG9K4_Y|98hd#{TPXD|}b4&2;h`+*<&W`NwO8ialj*xUFJ=`Jh=Iwg)HYq18BBz~nFMFW61vU==7 z0szSn-dlko0Rq6a0mlI6>ia0M0gO6OYAH@j8!#k;d!DfbDa&q8{%ga-K?*lb6jn*Ee*^ z72*PMf;r+#pvNg-xz<(8Q*35ZrE5JlInwhXr1T+3ZqEc93Sfd6PQy}XY+MvU%71{&|7zY#gMNo0YY*S zI1LD@Fam^BRZ~EfVESU7XhKC?z^GUU)RU>QN)yX~HBbf`po6V}7PzubC~OTHhKXIE z3cm{wpb-e#FX~JQ0LYFRen-`tld>BS`a6+be^#%5uODewvaBk2zD@uD002ovPDHLk FV1jO9#+Cp8 diff --git a/graphics/pokemon/skitty/front.png b/graphics/pokemon/skitty/front.png deleted file mode 100644 index 2a7321c2682322f996b8b430cbbbe476c563d53e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)-rF$ZmsSVY3T0BTm2Us<{{8nx0B`l*m$mr{@UH&~(C$O)ul{V)>NZc& z{;q{Z!1kX%0|=Er0~i+MaO^%G#-ApZ3xN;o7BG>nPiZ; zii2W;KoI4GJth+5vy|eZ0TX8nMTDW&r_yun6C%F=fOq!mM5aWCMDa2K*dQWV+Wbo< zRgYrT&mMtU3E2CYQeM;LwF1%?z~QC3ECelNcI6u2dkL^Vt61k5V4I&x&iO#j>jA5?tK{Ag zjbKYThcdt&rH}X;NUA`m!$hKlyn)2N7>U9_mP|vunou31J6=HCYjR3KlQC=CP!PwTd0Ipl+l8hb?O^B_@?Nc& zc5tghuGKB2;5GPhYUxyLbd-!HplpE(gSu8r^#Pp0-a0BDs^_-GlCj*WLm@YaKe``x z|GSffxR3ulYK^}EZFMkjL9=sGnQaKmGcVh3E33DJhj>v9H0xFnV)NbXAaHRNRRQw6 zHAj3OMfED+YQ%sW%_^rji>?7cRZl4&KVblLznV}nz!0ZUNeDY0&I6+A8bWrF01p5b z8o+VkMXhc@QCfz#U7SO}kS+qvVqds`I9!}Px#1ZP1_K>z@;j|==^1poj5Fi=cXMUcptFc=UxNJx-KIB>w|5D*YxFd$f%xR6+g z=rBOQc(`CdU;qFB000000000005vyZGynhq32;bRa{vGi!vFvd!vV){sAK>D0gOpR zK~zY`?UTK3!Y~lWZKPz$63Zf@Of*7bPEX_k5D(xEPEos*M#&RUb!K2;XJBMNLhjP8 z@NzvHDpkVgwL^Q7li~lnPy5)v{gUz2{qmdwWa0GbR1pDSeAWpdmKNxs{_6M7zyd?m z{Q+ulz=+ag)S*h$#XD704$)g;n|^?!yV%Z5rkE@V;AXRZ zG~LUqxi%qI+s*or#=7=RJNaP8gPxh$ssiYGfaCkgn6=T-vi6ViXpGrwjosp`%jat# zdNO-gdtz{yzF{YqhnAR~ANY~14g>ro??OQ5*2qylp!MNfe>Yl8NCMZYzk69sCp0ig zK0`n!AMmAmpw^$Yco2v*p~rwj?sXYy7T`jKfI`sAYpsH^ML^IYv~Js!2QQx`002ovPDHLkV1g;7 B^$q|4 diff --git a/graphics/pokemon/skuntank/front.png b/graphics/pokemon/skuntank/front.png deleted file mode 100644 index d188535e26b79e0fb0a81d85769b75f938cd16ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmV-M1G)T(P)z}|IlNT3^L+toP8a1U-sphF0* zZb;n>oj6_r7#QG(N|z6BWscA_KoxLQ72DqHEd$`F0`qX#W|Pn8g&qanl8DU)(iD;(y)K684d_<#0)&3b?nnYdtN?d+ z%YglNM2u$Toy5a4!iP{cB1hW)@^MrgJuep;B@w>rlP~2Evc}b$7gygG*E*sEr-oKF9R)d%9pO=G`R(kx&&}0)6JFv?P#Z02SzJEYurgWeWZ8`u`e#0I59}RCW@5 Qwg3PC07*qoM6N<$g24!Fm;e9( diff --git a/graphics/pokemon/slaking/front.png b/graphics/pokemon/slaking/front.png deleted file mode 100644 index bc7ed93b02e70ea3e7acd55545de545d269df203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 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 XxtSy-gPT|k00000NkvXXu0mjfjG=!4 diff --git a/graphics/pokemon/slowpoke/front.png b/graphics/pokemon/slowpoke/front.png deleted file mode 100644 index aa53f9c5550040cfb8c171a5d45073bf8d27b396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_pvUP)#xR#J(E1qIgwUaz8!)N~xRc1~)Sx1VI%uMS z!enqkK7rKl3Xmw2l^$k2P)Y zBm$5@-_eT6n*v*X z*L7c5i_s+YWEdhyw*z2^zB^`Y3J57cQvvWK0JnoBrrPn=AmVu}fbY)PA`r|YF>*&p z^gd>QbuZSSMxyhG{*UuIIf%-Ud`>L%T<+QnMX zLW;*({lYLq&uKNeRI2+eSlpIc^=g?f{xu0MhNF7lTa_i-58~Xf`*0fRhtlj7z*_%P Yzp?+C9JOq7g#Z8m07*qoM6N<$f=)&Dp#T5? diff --git a/graphics/pokemon/slugma/front.png b/graphics/pokemon/slugma/front.png deleted file mode 100644 index a64ce0042ae898f2eb5bcc96f35a86f21eae6adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWUoG_56kYM;Rp+G=D z;Dv|7hk}eBFDicg`0-)~2ao|&hzuN)v=bN@7!y5R978-h-%hg4J8ZzyntGU><1L4y z*=c(Xqhl@KECMG+_I1iFc)@t-=v&@R&yFo^>RWWJ>_qg>m$v^rRxbbN60rQWBwyx& zL&=xwLvN+vyDT&kO**_;RwaN8NI568KPN?yZ?(Kl@shU?q z9oO7E;qcBP!Kda=($hN`lN|WgYbMMI37)FCAVhYZqM_?rD=r6RrBgcu7ff7twE2+p zu8BTei*2X4nOXAAS~0iD`^ut=^B9@pjS4$T8srXHa#Z<69%o2ep!olV36n@eP44Z< zEE>z5JNV|ao$}z{lM^xf!!1vB?U>jNKLek3=30x_|G8p+fq&~YSO17T6Apj^-_zC4 JWt~$(696Pt$+G|e diff --git a/graphics/pokemon/slurpuff/front.png b/graphics/pokemon/slurpuff/front.png deleted file mode 100644 index fab831b363cad9bc410d54d4b28dd278887a855d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 620 zcmV-y0+aoTP)+>=@7dIbMQY=Zel)EAfG0d~5;S0|I^v(Es(? z3Uuy&BfuV-0Y(;WfJ?gH0ys$cP8&ecZ7$M!d>7E{VA%oce9jy7@P&1`lt~j2Cay10 zPZ|h2Nxt8ZjA5)JOwKVgC#ZxW#Z@4z0S1o}SY831-||S^LkMaxjdx`VsRLq(cTx&~ z2#Hk6MNlK`@)mX2MMUCxUL}eag}6fiZX>yf=sed8jJI3Z0}OA)x3S*H3CJ@T-YGSr zb6W9;iVpUL#gA-n0I;Y9yv1IP^--ZR!Ft2L_P$W7)h;X{ zThdyZ}xAAodJZ{E|Do zd|m>}WSOEc!e?zKPQjDt8Lh`*8qN$Q5W&fsEX?|U9e)9aZzC|f?j-C00000Kl)aAAKoEd^^2tgQgbzgOOyWoUuTxRko>VDvPO|g}DebjsQ)R^i@C<41bR92%Xm|rUYIZhQ#J?xeAu)}A=G*z7 zHH`oAmvZ*<8Q`MdrnT)?FlfS+tn~zg|Yul$jI@?d%J-tw+`<$mM+qO@m z?Cj-1l8J1rh}RLaDj+49uyhd-!@DBTm0P*fK7`iKLhG&sNV$U>P56kxDl|-Snnd>? zFMk6+eu^dMetDq2%1a6Q=Zo(i=M2igHwiNTX)@KX^2BuyJAetJSEho9tBauyISDF4 zw^HR=nQA)7kXoHY39XJ{1mZMP!&+kErYX)A=Lsl#6Jm>YmKmfeopOiDL`uF2v09Kh zg34pU5l9#oHqeTLRZ7M3z}Fp_7=CdBh3R7&PR@tXS`99S%2s(r72yuNc&ZY0NM}{{ z%T(PQMk_tmwE)e7Gc_Wme^j5@uv{+!MhoK_ajrrLU{tOrP3<}n??QI{C0GKKJx~os z7(0Owf-VA4(JQkHkzWzDdYwt8_d96NtF|VBT+CVRMP>qb=8sgw>R25U#b{2OZ9YAW zt5ZWF#8N-qF+4O~mRi;c`inNe6rv%Ge^h<}er2JpyQHB{00000NkvXXu0mjfH6=Rv diff --git a/graphics/pokemon/smoochum/front.png b/graphics/pokemon/smoochum/front.png deleted file mode 100644 index 6f492748097e0725172a990d9b6bb61314eadaa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)!sNtH*VHpPI=qS<4T3f=}@ItUxa(=#b=XE(fjQeH6TFEX8W z9tP#7^n$cI7iovT#^sBjE6vv;?pvfQ!gV*ZN*ukzM*+Z8aLDzyfo!f3Ty1Jd@1m_BJCu5Sm zknfOAh0=P6I|Y+PhHfo5{w{rz?IiY{<__(fg#N$#zkBcA9l-zi>tR_${^{L)X;v6^ zC0(b@-ST=!+(!x^+UjnXgsKcQ^1K)5Pn^0c1Nc$EdC~;iv5DJF6#(i;w1`azX(%e| zToeF*>s09as}0~iA&yY!pudkXK|AUlHx&6XvUfp}h=8A2N*UlypU2sih^GudC_MCQ zp7bB*r<@`%zFErvkNMF!7jXg9=Gjk)*mQvpDB2tI)lvdZeDpx15-<`E^+AyVfm<1X z(^99YWfHO_d^L>NbJpYC|wkP<6tT0RhJ6xp9CZOHB$n2VWi3z>feq(RL{4%2GpMw00000 LNkvXXu0mjf>k>Uc diff --git a/graphics/pokemon/snivy/front.png b/graphics/pokemon/snivy/front.png deleted file mode 100644 index 040a32f832c3ce6c628d8451c544fccf816fcca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVIW+lrP6RhTBN!!&S$)DQ$7MR);% zMG&yO!Bs;@dICeAf!P+v>>&|!RFnVf%-rq@v8{hwS~u%+fH)+yUgsnNz=HO<>q4MK zKJb5c&UFJV6ygB(3AiAbB95-E?=FKg5b@~w;Wh}S9z4AeFuozX1c94xU=2Ux{Qj|< z&~FJ0P^WDohZjL0#^?b>O%d^%W&}owkTHRT{gN!lxgj9I1I-9k%vbLcvAS zTt9+{E>&_I(qC-=00$Hv_eDjZ^ng9g>Od?bNP9ex?MW5;V~hh} zFUL=Mv=Uk+zrrqJ7^!cI^NLW7|E+%K$xGrzt%uMTm%1i_6098J$&xQJ> d!M6Uez5q1?VOnys5vBkD002ovPDHLkV1f&g&r$#Y diff --git a/graphics/pokemon/snorlax/front.png b/graphics/pokemon/snorlax/front.png deleted file mode 100644 index 62b04645a55826dc89b3802dfe5876f794dec7b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmV+)1K|9LP)Px#Fi=cXMVQc_5D*9uIYCm3tT9@95II3}q`l_FtoG);`1ts6aB!q^Qufuo$jHcI zK_Cz?I246>RsaA3ok>JNR9J=Om+N+{APj|PBQ&B6@Bg?b;U;pMW9MhnuGL!EA3K=D z>Ff130{Bj^HvNd_v^kM^On}xq1%lo=GU2}gqUX>_&+(7|O+lu!J`*m$y0&o%bHpr=#jsd0 zK$R36{6k$9U=?75F*Oi1QGV1(M1a(mF>?o!!BG%<3qX9n0|yy7ID!P=ZL?l?4%oIu z_~Q+5P<4vpJJ%Of3$SK0(N;Xfko;kBGf?VNc549Af(9jr!yd$rk^_>bz}gmWMt^aV`rVDYGwF{h{< zkz)rPqpzZrV4ffVOGCJr#2wKlPzdRaLLItGzF$LO-q@&ak4mvV$#ENCt-lCu4Yq`t zJ`>b@G6e!?3Q*ajni8-wP?9i<>DbMIfd#XgCa)#H#ikU(uk^t}d}B@t9|7hofFtz* z@JW9GCIq;Z{!4%h-L=jEGzUce3?PLe-!vs8{VWHW((=Nj86oHq2t4pc01NvDXiRWX zZ{ki=kb#tJnq|eK`nTGT9D?l{heOlHU2!KKu14MtGY1v??Rs<+D1Vp{88n(>!`{i}as dv2yt9_y?1nHg>$pYWDyD002ovPDHLkV1ftzVyyrG diff --git a/graphics/pokemon/snorunt/front.png b/graphics/pokemon/snorunt/front.png deleted file mode 100644 index 02c9560981d5d32fb1de0dd2a1aa4ec9933d11c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmVv9G z@Dqr8L6DA4HlIN8f{u6Rs?ayw@_xzx_ueInvaNqxtzY^Lt0M<=t0xCE3;NQ8ZUFmI zz$UshLu-@3?Z^O<5M3hCIE*k3B^eESfj6=Yjii_pN1UNWh*;>m;)EKINT^H!aT*Ah zSt}ru5CX7bPGKD!^iX~LLL`o^fA_>F3d}6@kR3u@vuWI0#S#mSf?s=U+X)d^O zmEF`bNm7bM$lbQVhPbUZ>s(}M*k%4%ZK~HaCcwK6<76?bf%jF+wNx!TntfDn$@Pka zT;SLt<-?54rdAmwBR(! zyb*gI4me{Dz=VXRqW~P8yQt>S1fS*%0Mq0288HAKYoN#PGs0tv7ki#B`X+ZU^ZHE> zQTXSaEi*;&=l7z%lF*5wjO#-v(f>KN^%v_4f;*Jkis^E~00000NkvXXu0mjf-S6nU diff --git a/graphics/pokemon/snover/front.png b/graphics/pokemon/snover/front.png deleted file mode 100644 index 9dff7b2a51dddb8cef84a11b9ccd10e6cc4a8599..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 zcmV;n0!jUeP);0006( zNkll&H6vrLOLKT~F=o}LG0OS=_VoJyrStSdQlR6?589qSeW5H#7RNeBV^WgvQ{{MHrXTx}_|5Rree*x_4lXB$@KAiN2OK5dY zgwWO%wC)Bc8bE+vJrv%%hlG|5eV{k5fypR0Ky?q4M#ek$0C>3ps_2mc3u8LVHXBoD?v*=c*>qz-~elnG~3K zjCZpH$6tDQ4jY<~0ezJ*VKYuLz~s&n+pG>zQ~*@~_Qe-|{z16U=ir*OiU58JN-;wL zKKHXjaPIs7a7nd~UBZCUM*n8=ld;*1rxsI=H3t|G(!kAD&8k$o0F1FQNdZE--zgo! zpz@_dZY`@;C*-RF#)rEwJCsrw3_jjk=Y$}H29$n#eqCrjY+OUlI-jG*`#aPhUfyZ_ z6K&u)^(zQjI99K96_efrTv`^!6?MZXXMnmaN=Z>S$^gGIphfFN*)Z17J^;n3#0nq7 z1l31ePxL|u#4-kGs}&W;7VBP0`3NDdKs+4-;vK38OM8F z4{SrUNH8D@HX7Y9*Fwfg6blhXTEOU`br6amO2kSRkphtl5W*Sjh_c9Q)pMr4h6q3B zda&V(eBxgi$X!aTS6k`mfMAR80CwID2K1VhC c-|AoMH@18J);(6;cmMzZ07*qoM6N<$g3&iA6aWAK diff --git a/graphics/pokemon/snubbull/front.png b/graphics/pokemon/snubbull/front.png deleted file mode 100644 index fa6456d891f20ea2a5d0ba06377e094ecccb955c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y06STG2Q%KDwRlhhfjc zt}gY%(Tkh2T(PSFr5GXhR4Vw4?Qp9Tpgfd_6%nPq4CuzVU(y)L7$(LHi1jr6$A?7m zTVqa`$RKvg0}DXr8qfox^38gU3F$uo7+|O@x7Gk873~^RwJumk9bkl4xi;pt(aAON zcb2{wsN!Q~PIjrtH4-}Nw#qBM4%P)Si-&mBP^;^a04t35GkRc<|9O;NG`m>6cJs>1q@t(C^0(qH4Rie`~hy?ChSwx!fIn?sJJHx`A1o1W)31=7z3+vsbW!h{KePC z48TYd78qtQBetyI(y3n54>8Kw@3Ml{RaI>@FW4Enft_H5;QG_%N;nypDCny?7cORP zk4Y){=3M&Yn-`i2Ls!Thw=ud>fiVh`7jkYWieg{f(sGC$kSTghKF_?L00000NkvXX Hu0mjfN}#d? diff --git a/graphics/pokemon/solrock/front.png b/graphics/pokemon/solrock/front.png deleted file mode 100644 index 24336f16be3a02cfa3dd28718b3d4c54a23c57b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmV;L17-Y)P)s{-0b_@_r3Ssw~MCDJd3kSp$Adpl|bUP0Ah21 zczzzRZx!bNY%Z`Jv5fH;upSb1=AABr>%Ud8I&cp5Myq30B{QlGW8bg%Y)6I~|C)|=!0uj$* z>dyML*?#jyDJg?S-f_J8j2pUCNx_?EM0k1l+fzUC7oc#b?kkJwae^fn1&mL%)t*{+)Z?8pl?wdk`23}X5R5r7b8WF( zP-?4dDl-UzaRoXl3C>tC1y$|b-U7|+x<4K&Mb2G5CqLh13Xs1 zxR)FN>y++-75*fkWjsjH{Y^Zj?lY7+=9Ge_XFQzxUd-e#RF8m%=ClG7N>GOu`#|db zF96y&4D@~K@M>aJ_0GQiOqnun83<1i&AJI~_V#Ix0N}vDO%WTU15I>YYVFFfWv5!-Y0w;-gZ;bvC7+rgR7F4JFb2Rw64qH-y}P3oaZ%?%JUw z8-5$h&wy;TS~Wsk3Y(aHArQt}FwQWu9se>2YDI0`U zNeMc-OwhTot7|JOt=2F;@)42e$xI5TVx)70VYq>fDHpNJ>Ykw!7fx2gx=wmwi{Mfy z*9Rvyk-PSrtiX9TOz6Bg%$2Y!Z~as;>6Qv%iRV&~%{kPSa!bckNwgQBe_(XirqRHX zZ5tyX8x==;!wXL5>@UF49y=V=1bY>gW9dk^hr_DVc_SJq4*^YIiv&)@^Bt+_Q2;s- w|Nbx0@bMe~jEYkJ4?s)KNued?0cbYEAG`b&1okf?pa1{>07*qoM6N<$f@z4V(f|Me diff --git a/graphics/pokemon/spearow/front.png b/graphics/pokemon/spearow/front.png deleted file mode 100644 index 052422e9ad18f9010f8043c388c4ea2757ab8d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmV-10?z%3P)Px#Fi=cXMVQc_oKhIYY9MMs81Af60002)QcA2rO6JwH|NsC0)y@B;i^a5@dnqZ4 zdtzczN*M^^SpWb5uSrBfR9J=WmD_HGAP_|vaAt}K{Quu}&!DGm(&QiyeW{Zu(XbX< zE-{3so_gv}ifFVktqL|X#JH^rq6y-*%)5ZLRY8i#z7YfzBk_s>V@JDiTj7Vn9WjQ4 zTH`%JwC}mSn0(@ijgCCUiv(4DMNp0Wk>~Ls`!043MdE$e%z2&l}SM@Xa1i8!neFPSjSLBeo0`4`d)y2Z(*;}#HWHW z1v;?~WG5G02M&Ze89prt$rcQKM*(XVp>gXx#ajqU#4kbbFmP)(1QsK49Xvo7yqVp} z=T~6og9B}Bw|1WQlWU`T@a}EnJ}&@loln%VV=CqYd=!Iq*1c*V&{{>vrz|J}Ryzjual(7)A@Wm#}p?weOah^k*J^|=&56_Z|B4UTaT zA!4gnQXmeH+YVy#KwrYqK_15zrnd=MAPNvU+5-<;eG<46UK+*rAS?m+Y28aO4*P*4 z$tL(o0f6x6E;;-F_rC#10oNd$3<%DGv`Yi^5Hr9Qq3n`RS?N@xB$bvpmtCL$=t${H zDIr@PDWK7CJ2!4-N?#4B9+-M+CqyHp~;wEDe@Sv6wq9SP{Yih&M1Ioj)MFZ^z?0B0zd)i z3u>GNz*fMBh+(#KV+~L_E35srPfg3$8*+CFv^RnAc2K6bwA}@`n>OqOHFE^m2y(Mc nPRq)a7~GKR4zGq)a?kz)P+divYueRcs}l*jH(Xa1d#)_< z*ZJCN(7PT?#)WUv4t<}#clY-8cG>0MVjXU-??cBzJU4@GuL%GS8bOo!BXBJ+i5ffe zePC`23{z~#f!l3CuNt%&&200q7qsU@$_|Pq_*sk>If>Qc{TeDL)b+ zk_R3Mv8VIA{~rPKtv_DKQVzaOZ3NEz=gv#QD1|1L=3b|tU;Os+v3V9>e+7) zU|VSse*;Nih=IE9MqIYYWC4b#f>|O-q?8=kwz{i^NMlLKsKb(g)}WESP32dX=pky0 zpbwmiD=A;mo3y#Qh7!f{MP_qP{rSf-IG18>uIHiKK5qo|XbYe*o9ny$Sv~>Iz^g>% SP^5eS0000ebCPx#Fi=cXMF6nq5D*YBNDvSZ5QyL~sPJG=uxMbIpo3~D#k3e|YIFGb`2Xfgy~V|Q zF+uKHT5SWU^8f$=dPzhXL7=-&KJKw94+*x1;wkh2Pc z$Nn~eXp<08A4c(pQF*>epcq9W07;rE!y`htu~GQ7LEyBr`5M7{&jILdM1XnQuy+9V z)WTN)TQ&)!5R^BOY=A@0=z<^s;1Y6|9{KYVFFj-<0=vwMyi`3W)l1jS>Q&8;(WI yMrZj2usgj2s7-X1uk(KIKlQECeKoEsjx`N6+Isf3EX}uO+q^puhM}1HkD)a!5J$VIK z0rY)yRizt^h)d{ z^`Dzk>cMYvus~`7uZ8(BdWCCsI0VMHyaS%!eo>(@S$tQPH<+FQmgQTm#OolyelBID z!k1v|n^GUnoXVs$6V|t32gbUW_Ya{N2Z`Xfa;)9o0Cv{ESHA%Nh|imh<9j0j0000< KMNUMnLSTYn_Zy4= diff --git a/graphics/pokemon/spiritomb/front.png b/graphics/pokemon/spiritomb/front.png deleted file mode 100644 index bcfd704f636359310eab9bc8bf74217c8e3c4077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmV4H*FrZ7m?&f$?I2nv%HP&dPq@sYVOt_ZM`c(MT$Ne#$UO9?1}V*{jI zjO9Yff*^*v0Mba>QSXG}DfAeilPBq0`U{Gg)d2U8JRHQ~=wqLRijmX+54o3On8d+o zG^v2HnJ(~y#8p6ou(9oy5h=x>l={m<+W} zi$X)w$_j9$Oac+9Q-$6uPxoe!%e$IUPN`mGUom#^*#_;Go$deaCz$n$)aUoP_e wuJN2Dir67Q65|D*e;@BSrx@P)KlCe(1KoCR^DN>|db>RzgMv7={QqdsD z45#%xFcJhIh_d=G`|K&@ch+KOD^)CF+rMK(ZJ c!bymJ0Jd15A=ddq&Hw-a07*qoM6N<$f(km$h5!Hn diff --git a/graphics/pokemon/spritzee/front.png b/graphics/pokemon/spritzee/front.png deleted file mode 100644 index 76f1554b856c93a4879421687fe7ea1adeaa758d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-A0X`wFGcGJBu<-cMu>vTtBcbBKiw_GnoY1gvc%dQj2=)jtDSQ{^ z^l`89$jY~2Ja8wPLE$rlqboyI7K=xreS!&B#cUbo4BmZQIvp!K1*;x8b#R<=R1%7M z%`5248MN1&C1uKqsjdF^G}c|e(((F*(R6*a#%a>K+LNa^>FIv>rRk}+K-bUg;K~=f zu5Hx0C#SPvO8dId+5;A$a((6tLjQ6xR?al4VK!A2c*MsbD7NXwJui>!_aFEgOycz3 zh`7&ETu>q3uqNZ%?!IFYD=xiz_1x%ed(N#lcC*q}-xu_?Nwrn*RqwqRmH3t6hFU^e zqs00He|NgDriMr<`K=SJGJpPLD~I>4rj4qmDpk9m9D64jH#I?1ZjJWFX`iJR%;|T2 z))Rd_`Hbkby!XdFrzZL=k*Sd0v#fWu;`v)v#f39lPx#Fi=cXMVQc_TAZXQbAzi9DdwzN|J7<@ zDFD@!QqrsuH2?qsj!8s8R9J=Wl|greFbIT&4H`|f|Nq~XA*60kCF!NF&)LHseDehu ziOcfn(W5^uQZfI+{!*nhi*P$MMc~^%Md0-2pCPb2X%fKH{Tc-RM+q#w0$Ep3WE8M@ z2_mvGO#s9JS@Jdo$lk&>2jH&=bIu!$1LTGI`xt2gutg%M7|k1q98 z!B1m;B>+(h{Fq|{%H_{OX=)0^%&5W$avT@z;oZjh)`J2nb`pR-o(SOv=oIR;0?@CS z&;@k^%IN^H+X-Dn28tQBF`|Y;0dm=gMiDW1KIqEP)BjE6vs~-3Y0FrC>i8J2iat{B6*OZC8vn&{q+9-|GU#M)|B^%{k!(N{|9)% zaraJ&klXL2kzl;vbRxPP$dQctX>J$Au?z4t=V@0WaL`SnXp}faddT>5Ss)rkQ7@7G z`@kf?--uZtNm2^fTkzbpim-h;awI0ftB>afum)YgpNw9AFaYl@3dW6@dkv&qsL2Te zNAKn&aC(p{8{+7bVrCxqB~&WqsR8o2;?e~WN$q1U)p;t4N`rA#bq+9jH`Rj#~i69s&%$*QKx8Z2IW&g)ZBcaSoWG)`#stN8|dcC8eqQr`9^AwrQtO zzW<^1xGe&D{POnZ4iLg6)Qt*D(MSjYiV!LmEA!8*Fc9HJ2@y5`CI$lFLTKG*o=6O^ zq5urK6deF0YGS4w*EPPo0q6iV^!P8ZhAXWJiA*%WxAhtU;@ZnLq1Kf#xUNI(&Xhmh z{AyYN=!`fPUIQ3HYwFl!JHQsPX*_(g*@ku!G$8bHYk_Cm%na0NP+6d=5twOWOv8E^ zTyB5k9&EQI1zaqH!oR#Vz^$U@I9sAGe*jS4jzy-Ij!WMjCLeb(76AgT%W+^@RCS+= zfQQ2UK;p*+z<_ve`iXEq5MLPC4E@LWdMq3bZoAG9;1+N-#&d%qVEl3dm>R&xUEnC@ zyAsUa3><;j0xcim0|Q_JpBRL#;fnE>ho%#8Xf1Hf_NL0jr2#HJ7uL)44K3j>nsokr kP6N|vu}jo)*}2dE00^)CQ4!1DVE_OC07*qoM6N<$g2Z5SUjP6A diff --git a/graphics/pokemon/staraptor/front.png b/graphics/pokemon/staraptor/front.png deleted file mode 100644 index dbb5a2f9592fff6632c8d5fdc1cafddf06a7bfae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 781 zcmV+o1M>WdP)D{cn}Z}SWsA)KtS+NKu|bHn1G0ISYWWQu=x1+ct9ZdkSMrd00000+B)1(0007* zNkl*bD!Sd3viT;MZvs@#qI!&c-k>UICz3<*T$(r_G>j5s-@xEae z>V{DWlt8Z*0s8kPZbv$JjXRy~#J|N`O*x?_GY5auSne>*aiU8Q&w|MFKON0jWCr7;TQ+H%?9=r8_)_OsSdYodB!OK z3^Uen*#)lDQmaMbnVeEv0#KgCUF_pD0QMoZ>6E^Z0JBD%U*J?q1oki_*rvS({1G1x zGe8^kEiiCNW0<~Oi0S}fymcTWpZn=!)}n-;=JM!^};XgovT}$ycSWo!m+4r$T*1NIW;y06Mx~#_=3}MDyGx*75S&Dz@auW_6cC zAfF#ca~Khd?xT}sjsvm$_3_~G!?*HAxtT9Kh>r^YAOR|t|8e~WKqNE}MA)XI00000 LNkvXXu0mjf@GxID diff --git a/graphics/pokemon/staravia/front.png b/graphics/pokemon/staravia/front.png deleted file mode 100644 index bd7c8ab4f143f7d5146230b68703d1c3b00bed91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0d@gKp=2fU^qB9_*g&y0000000000#4bMd0005m zNklyYv3%n3_zij+;4LZ zCG|eHhA4d=AVeaO(;4cyEQ#fLzyt6cz(!{PG6U?C0w~e|8x25uqYyX)ohim1RB_Q} z0Dm&S5Dh#p0U_YVclx-2q91<*{pqDH{BkvK;RzV&0HEH9#k|3->OZt@UK&tQU9NOH z^b|dg0EB$d7zk{s!$G8|M^k+@#Uv$ET2FWgJRITtE6lRmYi%Qd1x&Gz;Tg}{uxm2y9;}lReZuH=nrt{qznOHalM~FwW|jpOhHz- zecDz^DbqPG0tYD`v~Df7-8ll09OQa8ZB<>PZhYh?2wkf_YGZmJ*8Hbmd%zrw>Eb7p zt~aQgZUCaaFQgg#P4b9Sf&S;U@II{6f0NBdIFZ!J<64M=`;*k!qv(jdNgW;L|K7?i zIk`#bbiBG-T$kj2kw~GE%hgX&vgNPe@iipKFR0jJ{G*6l2-^#`WJLlXw0wHG{8fp} cEBc#^f61D+g57(w@&Et;07*qoM6N<$f}!aG;s5{u diff --git a/graphics/pokemon/starly/front.png b/graphics/pokemon/starly/front.png deleted file mode 100644 index c188a7ff5a011a0d28d4f529f18e72f012a3f8b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)_|Vwcct{xVfH<&ND5#j2a9CJyU|{%AKmY&$wv+Rp0004> zNklt91bTtk}9En3& ziGy*ICOX_-fqVZK-@<0^+R>QsB%PjLpXa^1UJYZd|0UoHJ##4-`PT^0)#P`3=!m0FANRC8t?&3k9kK+S94qV~%qI)*cQM zUS(za0*>R{0g!#cdHy$G@rUDACkOyi8iauaXT|fw3w$5Nu6RAvz#s!F$vHc#g&GXA zVF3Z4P?d6?3D0PxiKOKQnG-1`r-~0Ros(?TuSzPV$EhkICr5Z1@&kQnsuRQ#;GEY$ zabD&!VJN*8`l`!e*6c4Ku07rY1j4>y5N>}CZJY1nRw!?eX<@tPaZZ6K8c>OVK-IPX zhy)G%rp`8!PcznL?EOs#Y>l61_uEHf#V)SIT$WF|?o8+7iQ`k4Otip?($BcoU+V{R WU4Jbr6jdGo0000M diff --git a/graphics/pokemon/starmie/front.png b/graphics/pokemon/starmie/front.png deleted file mode 100644 index b3c4861d73012c520b25e74ffed7987a7cfa61e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk-=P)Px#Fi=cXMVQc_T2h=bIdj#l?u&E1w2RdM003G+G491m|K^m%lpvIILH5Po%^+I# zQge$CQgedJLI3~)y-7qtR9J=WmdldkAPhwV27yg%{{L@BR|tdC4xuKCSxjrwRcY=) zZ~S=t+J9iieyLyFcLcXM^PL06{cyn!e0u$#`w6htz0Zqv*MFJ?fJ+S4I6DCF@gCs> z(7C|ZkMs=S0}Wxk=$i|;z#2nu0hOSL3UKXu=*Ivh0AalkA-EcY#0UMTF&cmg)`u8_ z#vs>=e&oQ_1%Cn@@$Xgt5g-Ko@nKyz1wg3!acc{pobw&Pwcp1MC?N!KfB~rx!Wyf7 z0>Hu;B!d8ez@)gT{?l**u=4p3ViMy#mLKLEXoR>$u>?ofRP|E;BQ94D5+Vs&f{6uH zvIzYXwug-woCs?_cTq8JLDBD`KMp2rl1gXCgH%00{^kCC&-r;MfdSt8(K6EOaV!-5 zaXg>-$a&8~2p%?00^|V&TvO2>N8b0HI1Lfy{D3I8uPB-Tpzi@Ok{=)p?=Q9!kVRhs zux-Oky+iQ+Tu>&CAjJaU7!ITW02aes8PvOS);)sB*|r!sbw^1-R)D+M&vKHz5>Uj9 z`}bPL&g^YFP-QS6u@9Pp(n!>+-*%H#1{xs>;KL7wPHWw+Y%p}29N3_Spe2(^eM ze};I$D8Q5lYM|#6QF@L700H?o1pT>GZu_9=oezXpo$p<>e8y3GAH<2fR;+wq-&6tU zYpeZ7RK0v9kjBp^PJrVW$n*q=D&!SV)Q|2_=kox7!1L$&?9)vPx#Fi=cXMVQc_oN75@F)`k>VgLXDdr~>ooKk~oLI3uoT0t@H-Z9OTDfU4@_Qk!d zAQ1TY_!E&I9{>OW%1J~)R9J=WmfMblFbqT+*TjTC`~QEtV<)7lTEM`*>!3W88~5~82AOi(H!Vr0Y@!RtonlhieCXl zYZ(z%e*rWCk=A9IKpoO943XFXB3#vYg?GytQ2+r#BI$dHk~D%ov#AxiKHD=PswfQ> zcOP{K|+nfrmB20+s1d&yrrOCH?%DSYJy0gWQavnHV`Q})X zmAwGez|iA^;1E7%V$p(n?`51Gj}gg~S|;yMlFHTk_ z${-H49Y$cY;02^)he^e3qnxdY>;&K@fi{Wm3aJh=@4DG2Vs4U7a7nxkvKJ5(fW3zo zVHW@yMD!f?4PcKPwr-MlKt1?yk!}9w+tEh|Gax8{P4BqOJ`EsB|H^fE2%r`y#zt@f zLepbzbpDuj0h$4Ntu6>Bfr_5qm$Dzg3ZRdLTz)A%fN%2hg%5CBJaRB`?my!S`-&_6 aLHqzhsuSua6f*_@0000xX?H_Q26-xzyJW)*ysQN00000000000000000000k$YlD000An zNklZ5Z5s)Zx3vzf1N_us_G*=Pzw)4d;}JolR#eZGelr% zvJZ}@iicDXJA}U_s=#f{E&=6omw~H008xb^z`P`;=%d%1S!8Ju1Be1d9W&#fdMZSZ z0yDqy{vE&+LNCkhm`}U#3-32~$phIc0s(-wwJY8L{w@PqB7{~SI0J4050P1ifog;a zq5<%obBHrttN}dvwQv&wedr)C4Zt$+=rd3Wf*S~_b`Y3qK6+R_`l}eiTEws&P|Qt* z7+V^TK$n1fUsXbEA>eHW>X1*_H3?X^FDv4f)NcsDgo2qIWSM})?|)xf!!1Iy*b4ze zhI6sIs|Zy8v?LBeQbnuL5sidntn^|ftvr-VHv!TSnk=~5K7die?9&yOBJ zg*V6-OIn;7XsIs#`1KlZt(%Gxw-&+Sm5p~8z+SLleu?+0D_rGW@;pyn5`me&l^?GH zyVr*%38bFT*a=$za|{K<1G~TLnkbNK7;iaq9xKOn=lD>j05Y)W3_P8H2MI-)?5osP z5lG&S_WL9q?WH{w^IkXBW_R+&p5?hNLiM~c<~Xh7>75;S$fBUGwQ@LZk@sV(wDq2N zlJQVnSlzRFYQorD0!jdWbGnqDEF^mG*BmbTNWgs{`VxrM`~uJjd=;eLlL?oAIj>kB zF*CyjU@#7a8ZeeGd|;l@Kpo4<>f>kT)rfg-CMild`f!YSI21C}x;N+y#M-^fWqDl; z)Rc@~RBMu{?A#lmb4Z<;$h!Dl$a~8-QO+QXvCxrmy*A;zP;Jct?=gJ1--Yu!l~l9i zhTEM9Q*7^#0!wOm0?;cuTSE9KFjEu8AdP6#tirW?v}53gxJ!C7;WC~juP8$nZFlZk mKCuHh9CLB;`+o$_?Ee9KZ3Z9TlU=R=0000>P)OBNn@Z_Z$*gdb;+0cAU-$G%z~QY=X1N z=%%to(1a!cc;GhFGmzjZ=5>H?m21G*`XL6#hhRkqLcZL2`fh74(9IS3iuvr}+mlzi zxuO9vpv7ti1o{e40qS0WZNRog0wu8RCogToHe4%EPGR7ZI+zF8);H86VA$dis9rc6 zp@=59fvQ5K1L9%e0ehGVVfY=#*eQT&SGw#~F6fTtr6ZQQ8; zg7ja9YyClVGzUI7v|&1K4x(W{ijH>iyR3yz8M-Y>0}yjyM#NDxWMu*Is&sc~x0l~) z0Yu0O6|p7f@vs$0;Lh`GVT;ag^i3oIu;qNQ#Q|O^KquonUTGsJOx{QG2>4$2bkW_u*SZ#nQV|L}Ms!7B-9GQI~|9KSt1o}`EAWH`+7 zk=mo==S#L<0zIyu-lgeHIyvkkz?Z*0PJUth{8Fyc<2s+EA|~mN*CQOjPLkxDbH1Mg ztye%0;F$z0Bvm}S!TJSAXhH>ej+f6b7!Qd!yAv&L(k#oil6HbclJ{Hy zoP*?m|9zF-WLE_cpB$WW&SZs;>8<#A4w4*<>q2k~?^Mk2@ov2UpAs2d0$vQs&(^P& zz<4b4Vg~GS7I;>cE%Zn}d?@nb#n#R|+OVbvB0bBdvVg2`o&>YNJbARJUf?ZT5L~JN>TAejlnu{k|BnCgG7-%jguz-5WOPw)S@W+bd0 zut%P`erJ_;z*y0vdh%CZtV;H_%uyp`GQIGh8-6ZMs(as`pk?`nlu-@yT8ydFs`v+$ W1_7g{n)2!Z0000Kld(?1P!xu1=-_%$Y#gdjAa9^}E}*p7+trxxCvBSiU;qE~v^9*S z{!omi+AEA(due`_=d!t7J&@&mi}N*o0G|MSUk7B!WOQunfHg8Lm7j2a7Jhn+dE(IXDf@uKz z*kc6L2uOZkcBM)U6Cm*^s9_2?2bzY8#}v?T4iW>Pjsvb{a2-hW5wAJlK?TGD0KR<% z(3t=c1&R{r27yY0TRQoTIACJ))NnAO^EhA>u_^F!Sl0q3_KSXS^ccRX0qE#007jvE z;s?Rg`11wtgF6N68v^XoJmD1aYWNnuz5BrfRrMSId4`>zgu{+%4#yww{(TVCu_g-2 zpD$w-+63H;M$dQ|3=v%^TT!1%PSoRv&uYjz_RF%3-I5X2VRQ{W%CE(iP4BTC0iC;$Ke diff --git a/graphics/pokemon/stunky/front.png b/graphics/pokemon/stunky/front.png deleted file mode 100644 index da228e831ad1709448d32fd0d693aa6ded82d2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 579 zcmV-J0=)f+P)KQ!z`!KopKQ#I-M}6r9p)s!&{#4=jj_ zwsCN5b9EIY6`WcFc6Jb4rAuAi>Q8Xa4D_r1G&mh~UM9Yoc* zgYX9&UKK6?r&7R2*rW;)*j3tPcuyxf5u>wL2X`%+gJ0>m7u83==n zpnwvWiN_Y=XsC-wlZ`|&AzGOzX&~_urFv%EzSG%zO6dY9G@{#*2Byw%~45SMttntv1`8I8~cKEoXzVd^@HZoy!g?hB1 zUn>&&OVs;%3k(h{>n4gj%Q^MkHL4FQCvo&}{B%_ zmS{Gb-msQU50006O zNklljA6vxje)w5ms7AE)TA<9PGENo7m89bmm_3OZZB8Ig61THHBIBN!k z$5dvqntp+NgAROv4on&0JMhkF5V6n6jyTCa%m1JM_ujjwGh_dUVOY)%;OWarmb#|Fe{FOyw)Y)ae20Bu>%8MG{ zky&TFnCdCn57DTPNAiI3*cVI6Dq{M!+tnIHWwzg5VfT0F%C$NuS{&IDvls$+(G#8QnZwEYcddxb_=> zrJX%MtR3vn*V6{T^(N3>0-Tb+o##z}9nNT{N&*~q@!{FmNgIe=7w!r0wf|KyY62W0 zgohd+|MONBj2%D~7cp&u7?{7=zDa7}>;9P(EzHLBB z#NVO){%_#Tk7x^^2v{21X$?>WFx#?%m=ln6pDs%Le1I5@hsPuEYZ+s;1;BTRSbg)m z05K#T-*y5VU4=+cH{fuEt`wa?kiwwHbP*8w?fcW_M&=3%q;P}|s*tod3Jh&}~000B9 zNkl098vgmQXx5f#;$GUp$kO*c^S-Y}@))82 zZfK?5eXKkG(xupXO*$O3!!VE@`yspB0<;!5oG<`FFMw;1 z3d5@`j&#D*q1FR-A%O4<`GO2X3G4+jf~A9l??E;2+P);=R0?#n2;kr|PnH?;#ZdtJ z&yWX6aH%39GA8GRUD5YK20$m+14o1%A;2<$Ox%-cz*9N^&~gvR!5UCrq43H8c+zF? zP}9|S*lBwgK?YFEb%`(ULQI!w7;AS}_u@Q1B(^_^LP@i?qnGI-k~^pi;6c-7as&L<@G;SLT0h9VyR$twV882}zRKo)B$`3eB+ zW{nE9^8gev0o^>1yA8w5)(gWd>|}tJ2dZi(*TA=WqH^T`?5bh~0OK=&mIJ<35de6+ z5l|73-q@UL8=zWVXKY|+4d;M++lTYVh!7>)($@QIr#M#nKmGIX?7-M-{a+pbL-+fKR5kR42zgiu z$Uq1&_A7uRKajBl0yU%oAqEIU(^w2HNFo+dS47&m&`CQ&x0R9&1n3lTMIB`;zKWQ`eVgX7R=Nz9NB!zHXhF%PX@u5mQ1x5(Cp} znHB;aaX#D!-Xee@ucTREN&=7w1ZkSipMhW>@Fx9F&GhGwnVC=MQFg}(0^euJT#FCX z96SU*r^ze{v>sE}l4){KLaXOF zT7>K_V|jj0=uZGhuw`+R1MK#Rr@~q!-awIqwVU0ZL9qc8?t8EU3s7vz7CmsqSMKA^ zMcIO51X!^QV4Kw)Ve=B<^Y!d<@v66amhySuIIpIazGwzRj|0}1pBD7ecBzaS)m9dP%{ mH#-{eLjH2#e-5wpSN#Sp#?%@U#aFBV0000-_+X)sAW(2Y zLqI?v!NcIk4~7j33@)4iGJZrfGG9`&4d%x`EnB(x} uowxw!otT)A+Vq0E+{sSn)~ToF|75Lw5PqiJv*s=+$UI&BT-G@yGywpGxu>K6 diff --git a/graphics/pokemon/surskit/front.png b/graphics/pokemon/surskit/front.png deleted file mode 100644 index 32508e31f5b0e7edfbd2c81fef656a087f199c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*BKWUZ0KP4a3MoLK;Xs# zhKd9Og@}xf3okrYT=?$*)P5N>Ae;t3{qW`5QwfAu`R7!K~ury65yVbH|io2su;Img8 z6FPp(_{n-FUisW6>-@8;Gy;;Qt>2UIw}JH;_cxaVX0>{!iyY$umb>V?9Jy@law%uu zQagobv&*?dyiR*Ev|Ux-DJbSMWkr_g%`f4%1V7j4G`vwyJeapX#qW$q$kx@4TmC0R zGoDH8UG-D>Vwd@we{9A*4QdCPJT$N6afc-<%$v1VuSVh`)8F87k%wAa7SwL@{_Z$? zc^!X=#p3@=_ZgfVGWcJ3@f=uCbUmoG;f4I-^}Y{2#j-KHziK1h;UxS2*)OJ}e?wGb SVz+pM0@Ksg&t;ucLK6VMsjqba diff --git a/graphics/pokemon/swablu/front.png b/graphics/pokemon/swablu/front.png deleted file mode 100644 index b7d58d06b0e3444f00abde73e375eeffadfff4aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 519 zcmV+i0{H!jP)pvHF*0k4}!5ZDNIZZO{NTTAMAwWG*d zG7QOS+inx$@Zf5jkNIKGVvX;Ljx)=Ao=nY?9a(_6lqSO|8r)Ujx?nC-nc_>wH~w@L z_#-!yS}CaoO}(Dtq7vaMB^3fS#={0K3%aBv%Rs+mobwP14KOYP3N-M-$4E3>sVh<_ z5edK;D_Y0${<0fR%|MvB9>W7z0KD~Z_|}jkkYT5iuj`1J0WL7O$M7zd%43j=N=E{$ zBW2EY04CrDr~(VYIx3qOAk{p;BPkC7!1ydK64HqP$VKH#;FcSnz!T>uQpTExybO54 zgF&|=@PDL27{5G%k$9$E?Ni@NHb*Gr&_ce+1F`87GAMv+llO~H97FijdTz*9L}?SL zhQ&Wz_M_+lkDd(}#UEsue_9L3?R%e$Mz(XQg`VSV@%Q@g`Ud6Ln#M`84Eq28002ov JPDHLkV1gN_>hu5r diff --git a/graphics/pokemon/swadloon/front.png b/graphics/pokemon/swadloon/front.png deleted file mode 100644 index 1b7f74db5f76317ef68573fba81cb06e7b1f29b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 510 zcmVg@G^+O5FU5ub^(;r;*_uxU3396Xwf1uib zpzYS(KdN{5i`F~r=Hg2T3EvOz-W|a(&ULD4S7eU3>b^cNvPuA=y$AX=y#IhYR097v z@Q#DZUBCq#2URCYfr9H-h?>a78d}i^AONVCB7mOE!P2y-0d$K7v8F{r*T9a|J85OK z7{SL_Jw+=ECGc&Ws6irt_!6B_GEtval5*++$saQ{X!KJ)^GH5@mY}NwcbpS0>Xs_c zs?ooH|K#)Ka-ji1Kl~Q2zpk!Ac^KD+pf{6XzFN#Q0B+u1KI9lwg2QbHz^D9+a~E`= zE4T2p&XoXMPFxRkKzwX)U{`A3@A96b1VFcdvA->vL$d@JV^;J#AH^mMwrhx-*;wuo zjc_~=Pn~Vd28h;h|2`s)naKvZ$u?ypCh4#YP-LC_VUvpnm}TjH2^&es2Bed_YhWRU zmnC4-h+&YnxRF8-BZ`bB*$+`J*CACu__h($07*qoM6N<$f&`G= AQ~&?~ diff --git a/graphics/pokemon/swalot/front.png b/graphics/pokemon/swalot/front.png deleted file mode 100644 index 6ae76a4f36d82c8a36ca452ba9d1848f6feec993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)5U09&oZ4m4M?6l}hK&Qn(076Hv!$PyTerAZu;Br2l03|iM?gWm$UCw=oD2I;(EZS4fmbA`*06$wSvbYUo zS9Hg`g`Z|w(gyT|VU;vXlBaeQyU?BmIWezsGqts!wsvq=xToex+7#Hi!eFvZuAS~Vyu({#DZ5_yqqTo~H9N-pC z-9i8lyaNX|z^iWYxez_Z#p7lNK-d9bz9Rj13DmCiQ#k`gSdPF;ewn(H7dNES_@aU5 z(Z@PG8$E*ib-B&q4J^y5_n>S~s>W~vI|tbA4d75>Z{-kn0iM|Gc_Ya{2CQl`z|&Sb zMAUE?@d4zVbbiC5!wlO9Mveb3c|39bPZ_e#SY7XZ0h>ucuT?q=#UwWWG&uqX2q@FGcYH0000# diff --git a/graphics/pokemon/swampert/front.png b/graphics/pokemon/swampert/front.png deleted file mode 100644 index 7a86a418d8d1222701f62e80b12f0afc27386f7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmV;W16urvP)*!2?-KY^u5ka|Exa>5xYOe9W#Aa*X5a;WSa zIi-F94!i=qLDO5Mp3;g#k5KUdD4kh5iBlr(Rrg|GKhMt2OoCzjPs*5qRdVzr11ll}WlllOf!oL@sbAG8q_<$;xhp!>i zOx6OEfZ!aJT7ZV@E^B7GQUU>y-hr<53MiX^ghQDfsX?wUT$Z2?lj>0BXX@ zA_RlDk4@h9w`a3j5)nY$kE3}CgE2Leehz#%n9b@z*tc7Vy*RkY3Q7G#0>w|jU^9s{ zz#tx`0gmFRkH_3o0zaQeN!+(Pw=`jKr1#rMSs~40$QS(m%o$ZWw>Q{}f-_DGyA-ZV zr(IF~;jum%N4WFrlt36W@UcUJFWf;Y#zBovAiyt$Itl+6n|y$=L5Weds$qo3Pfs2C zWnTl^!w%n(Lebya0(*T1Hiru?OH0t^n|UVkBJhxQw8US+8f-v?c1k9m&_nDzS$5h{ zo&>N7ZU}zUFk2_&Eh(hbqWOV@;BRshM61hze5j(ZEG10Z_hC6w!sbsl0~ow00000NkvXX Hu0mjf{%frv diff --git a/graphics/pokemon/swanna/front.png b/graphics/pokemon/swanna/front.png deleted file mode 100644 index e1b58cf394ce4378e7ef09e7f983f5e34b79e456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)Px#Fi=cXMVQc_l$@+uYJ>m({{R30w8hn8VuSB{oH#&O_V!Awq+&sHtYVb3q|NR* zN@{9qL2NK*8~^|UA4x<(R9J=0mJ5!;FbqU%$F5SE=KjasaXu|{p(LraS_>qQn3u6r zY){jF4B}~Gz5{T~PHq6$u^R`#yJ!ON7=x9C6j{KC3>1P{RiJmozfO`vIq#iR;hd1h~~z{sZ7nUrRy5074`KJAm<2w?Ef7 z8Gpqi17xh4k%&IWjldfxq(A&{rQBr0_e#=9T3zE(6#<7ghT&I zy(~i5LeX#QlL>CrPqY>QK=H_E9y~6QuwOp*HAmn+G%5!i$a50^f|FCH1sD zeVq?U?)@Za1$kuysqSsuFdMvueK0~@w<@D=UJ418C8~>8&x9-zFTYlwZvEtM0%R26 zMXZ$K=OKcJ4goo01b}+a_VzN*euw}@#?1Yfcd~Lr{1@>98bKA&hdZj?00000NkvXX Hu0mjfLmMqH diff --git a/graphics/pokemon/swellow/front.png b/graphics/pokemon/swellow/front.png deleted file mode 100644 index 32345b406635d8163814cabcf580523b5edd426f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmV<10wn#3P)Px#Fi=cXMVQc_DJfFLT63H+QbAgKDM4alAUO~a5K=)P|NsBAwAJ3EG3K;llv)rm zF*#aVT4nbo2mk;ASxH1eR9J=WmeF#9AP_}^%kEWE?f?I6cL4MoLzZ!T zijeW*eZLVhWWgcJ`26~ME+WoR5U?qnHMSc-2Fij_Yk5AGMTpG6S{8$=v6RrU8Njlb zWfT)IJN=xyDbxuN6pJayN|<389O?nk4$*L$4J14W7>C9(?1k&IVKMa7{0(};;0M##?zYAajQv_ZOHJ=4nyc)WKmjVn!;wytKikkpVVgP12 z8+1}j{z9NTN)n))1eblv`zG%x@?OF^KzJyVqu?F+CT|zWcp~dU#J3~`A0D!102aG@ zh#`^Zy&Q6Y4zCZs-JdA-5eL3l(T-2^y9AXpEKKgv%UjNb)PZO!5aol6>l4>IY589k6Y9@dy9_ N002ovPDHLkV1lYkLeu~N diff --git a/graphics/pokemon/swinub/front.png b/graphics/pokemon/swinub/front.png deleted file mode 100644 index ec191500981b5874ca047e5f823234adb928a092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zz|oLnPIXqXm!W`wz}Y#~mYNLTy60>uuAUMV1yqFwd@riV0fjzzx;TbJw7#8kny=Y_ zhvlPH;e-G6JIdy5aay%7$bX*m%T%$=d^ynqERF&e3(o~h=P)doBKKnFt4KzdcWwfo zE{GcDsZO|8_VdguW^nBb8R%;)2;7tIt%)hkty_@9fE}1>_5Qte|w(+~k zvJ$Sq;4jDJ?*BCEozOVb)4l#f?Ci+f{AB_x2k%!fzKY_Q=Cv;@9~2y(u6{1-oD!M< DSuB_& diff --git a/graphics/pokemon/swirlix/front.png b/graphics/pokemon/swirlix/front.png deleted file mode 100644 index fb40d972f9e3dcf801c080ad8abc1682140d3de7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 534 zcmV+x0_pvUP)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_kbs!@@bIX3i1@(J@Yvw!sJIvy7|_Vb z`1ttfKzQ(wppY;?00000000000PS~Lw*UYD32;bRa{vGi!vFvd!vV){sAK>D0dGk} zK~zY`?bE+%!cY_j@EbZfE0ku6NXYZhs zlb{dPb8du6b86>;2Qz&?az1Yob(+&0nQHZq9N?&MfF=y(@GNZ70)R`cn<8lGF2yyt z(z+|&KJe^tuQ4KfyVHk9rPo7SwyCnl5)} zY^VbtSBxd#><^l1t{Id{I(g9_>QA2lC>(?fX+ZxoFso%6y8@`>K^j1iZkO9f%p}0~ zHz^R9Vpi^;rcu%1dbvVGR{*ovK8Sd?`2`?9N+0crEAU{%l7~Rpz#!YFn3Z1#8iVs< zjcd%E62-)V%nZ9j@!M(-Mhq@=OSeQ24ibZCCIoK86%}I?|C07d{BXXznB)0r{_809 Y1wb&4E!|L%LI3~&07*qoM6N<$f+%9&D*ylh diff --git a/graphics/pokemon/swoobat/front.png b/graphics/pokemon/swoobat/front.png deleted file mode 100644 index 7a4ccae93c5750ecec244b06e9f078cd7ecdb1b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmV-<1BU#GP)WBU6(p7G3Nqz9|^m4u%*y1Uhu;+#z$o0k4L-cPGg@ zNp?H-fx&n0r|*03Njd>AE1)qm73RI_U-O#h*)a;I0cHZ2-V}lhRF(gEf(y9nB1`a# zCJy1Mm=jR81mLFfVn^+ADJvlaRF9>sLyx^dl^7FxDdv-BLox= zF&Jnj3XYeS5TjKc5QJ6!O97tJrw$QvOx44TON`bI6rp%z0bK$R88*1H6_sG7CMhKl zcnqN1I{+k?O<^Iy}V3nt@IEg zpuE}LM7Q?^z&b(x#L&u{e4KsbF$azrV;^(C#-acoToJND8OwVty!&ts;my9kOja0c z=JEylX8#gC99|((qsOe12hI-4i`RoMzbx)>Jf#FsXb^aL<3Qq2%4^6=oKb@q$RbGO z1GJhGIHwfu5Fb)u5G;key^9H;qb8*dxIiV)BDTyAMi*%f9_PFO0qE=C?rpcyO@M$& zf}OJtV^;0Su=jfi^q~qce!ZA7I}NPbXk6*rKvyi#D&zJX=(K#a{B|^|jOw- diff --git a/graphics/pokemon/sylveon/front.png b/graphics/pokemon/sylveon/front.png deleted file mode 100644 index dbed2310832654d64317777522c96b36bf6f8b09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)4)iG<^Koke?Q?!UoRRfXn6bx|*T?7ZU zBjr=rxZu^r0(VOcz1Uq$J=ntO64P1_b*L+-;kKe7QE&9p5`TdX`7XVaWv7-d>R9N3 z2lM~w?%lnUjnMx!bhKB>%N6qUxSk6xjvHnkFv{&(?h?f}PNQ*@0~W-o_Z|>bEa}*zBn6EJzoj!**?V3502Y z6c^q(Ez&oU!aGyj1-doY3*aBN2*sjQr@mW*Le33x2{(FSj8mOShB%)~Mo16L_~0{_ zNAJxD!FVLV7$B1?igP)Px#Fi=cXMVQc_F-m({YMhigQq59xASqH15D>k+&Hw-ZIXN+;b209{V&;?(Qc5Xs zh_C&tH8%d zbsOo^B9I{d6>Cb7=>lLw9;|uWykLZI0Wcf(6uE4oQX^avaDON7f?yX3q!jrb0W|pE z20<1nC1+44Fr7UysRWA105ky0gT^2H6M#pR_tnp=?I@3CzW@%2zxA`ju$l7!U7-Vn zU=I+wKgh!FAT$@x{T#x}{tKW9xbDRaK;cv^y+>eXy0-QNkVXKtrkI{BQ0o3P5(p;0 z>_I&J3ec&b=h}9*!5Sf^)CtrGu+0XEklOMmKoCl>%@&E!72`oL)qh5K*#&TmfOz;X z1oL=AY)bl#6H(8&X-wll#4DoSR&0ROF>=_eL6;u-az;RwldQIO1WFrg?H@}SGMo3Z zqrQ?lRbcFZkx)=qMcxZjxpPNjfdaN2+l?FggLNEjFxn4qXoKp^<|_^5b*m^`{J00009 za7bBm000ie000ie0hKEb8vp4%0|YngKiN&`$PQ ziqvE<;YvhOmi$1d8wxy@Yy_MkV~beRGF8gf1*B{&73xqS!E!?)MXC~st$#@0-GMQw ziPSeCeLw!b?|XNgreQ5>PuDYhfuJ+So&a=~CL}2VC#r{#E!$H-gasocK`E7h<+uxU zTXxVa%YNMBn7lxpSQ7`!^yc+A)KNFlLI^QR6Z1g4P&uTc9N9tu8*_RQ4wOzb1vus$ zaNev)-8Sg50_-`5r4}~W^r>S_rc6+~l$S4v*kfKsKK>bq>hOu<>m z04ET-lQPtXbtt8v8d#iH=w^+on(Qx&fUr1{9dHD{rkH6m9bNO; zD7yksJuAvCOMrlwQY<0>0D*c_0!0v879AWjI6_?j#j^ZezzA}Pkbwj$&9WB;95V!n z9!1y{KpZNYzDkf<4g-}Y?4C`48YVEO2QlqYgt9My0;rpSN1YCxkB$aq-}le}4u!ut zJ*Y{=i`b#gm|g&p5ob&hOhAGZ#TEd=q`PQ<8O54iFGhkCORW}^anxfF2DMF0nDSyT zyPYX;jz9&Vj_W#dlr=$uSx6 z1c8BJCk-3lhBfuNU>&iKd+%ZD!14b?X`1v{e`>MU$^FTyDK9u5iaoe}*6;VH8Lr;6 zr9nel46D?)_fZZEv<&&}KEQ{jxT$}2@via)oDK!xCL?rB z+hMF~QG?@IM?da6ripL2K_6Y$P!Cf)Wid)46KG=$vEeNS#+{pdTMC(UREOu?m)G}q z^5@-Ul!39fb#*0#@lF0NDuI#Sy8Vg3xO;sc8IkFi_Pyw|ri>yg?LK(e$-e!u0MK*a z5ZHG!>+J==7zJI+W%A#nf!I4~t+%5?;vDNr$Sn$~Pp;5-L5G=B;)YjclwX| Y3mQ2^R3jIZtpET307*qoM6N<$g73?`Gynhq diff --git a/graphics/pokemon/tangela/front.png b/graphics/pokemon/tangela/front.png deleted file mode 100644 index 6115b5b62d4f661ad48897f43e1daf9ac8a78abf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 642 zcmV-|0)737P)Px#Fi=cXMVQc_L3@;x)%IGX%^*Qi5D*YjQc|?EwD|b=b15mTDM9~(gWgJN00000 z0000005wusvj6}B07*naR9J=Wl-+iNFbsn+vCB{U{?9v0He{!xBy4AQ_=c8NUu;Fm zFx++5UH@Hz`ip!VODUqi)fei$^b%t0S*Y~do}CnLJN~JKTBzkpBRUpkAF(zmTO(a= zuw&Ra;#qX>K+#eMfq*ime@aS}I9ECl3e||FX=71mrIo@rO@MG&jq#x$xingcHyuMz zU(7Vdae#j&q)EV(E)_Ud6=EXswJ`+TmjIw`$=(SAxzz&0%f%x?+p>|x+>`(u?uMlM zx*q`!p0pY&2f&p>0N9xUmwPE6HI$JoOmqNXUztJIJ*IiGt(c3PfVaevez$?kx_%DA z#HZ`gqS0OZq>n@FgF9eGh29BF2ewnd{3Is;*8563fX{gc=!u#>#MXNY^CL#s0sa#C zXaF*@?wX~E(<4Wq{oKH_GikB$##xniriq*Z+2ZdffaqWgALGOM;W>*fLiMYI~&5eT)X;GK3>VECZBHG`3;T{nQl(M*)DVk)g8`v1FtJBpA>0 z2GF=x8UP$78yNk_KZLyBqMPOb0{sx%$!k&A03!fqLk?yB$8y7r=3A$_*0QekDk>e` zy~!5`ELOX~w=4SR^YvQS6>f5E2RLHs2fR=KL_rT`cM}1qO*?>Z`lonLoGljtZRA~d c-Swls0Kzj7Wn3>eM*si-07*qoM6N<$f>_xbApigX diff --git a/graphics/pokemon/tangrowth/front.png b/graphics/pokemon/tangrowth/front.png deleted file mode 100644 index ae389e74a8e42e3867f46cce8b4176faca856582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 zcmV;&133JNP)c>%C{<65u zu5ZSG>Aih_lP%Nb2r#9cxXH5ln1|{8R`btkIv+D2x4SJ@^V=~4lbyB9Vzhu{4ZRej zax#Tpt;Y34L6>jn)8cJCnK0{bFwuWx7z|9;cKh0lItS1wN3`1e?=lqJA0jJu8!l1v zB{AWu4{zqu5!Pz}r#biQ%~38RpFL27r|u)GvJxSNiU86_Cy4*i za_a;W06pZG1YjDX^3Hk3P1v!kB7jyQL$LU1??WS6M4-W?1aQCM^#}I*{l3wy1t2c~ zJ++(Ce(=u#{;G|2EXYK+MI@{Q@bdEae%~FOb)I4XAxsZEf9{?Eup^>60%ifwI|udU z<#T%ka{Ukywb@GF@>AC#NC0YGG%=9mD6R}Z_k2K+suJA9CeTO+!1=EGCv-t^)4B^_ zg17*1S!j8SUIU;whcphyOn;G~(~Y_WFhOXxkU>`t<03haT~2Vk=A5g3?67sz#A7)L zQT=I@!j_#Ovx*3@D>+(Juxuy>yxp9|3T8;74WuI={{~bTCklXW%E$xZS4&(~Av{SU zRT8zlih$Nul8T~$PEwn2T{;3VGGT_ODv*IRq0Wj74>_bH!8L^ii>BaQF*WJ}FdiQ| zAdo^sNk%3_FebG;0?1zDGRQvc-Y)Q(H9%l`ZbNrY2LD3*4cl_r90F-5Z zzN_@=`VPRM^o;>s6PNyO{GMt3iVUFZ`Hsqyki=%FGPW82<0`rXK{WOnYTV+ z0IVLjEr?Kh!xE#fC~paF^#w!-k#|QHP`1|YS zVr0{-=abd#&&nNzEU#whBn-=6sb%yRKn@{GM7Yq!j!a+sK7!_nm>gYHt}&YUV4>%@5kQ$&d}tJ~ ziTm#9b{IGi7ZaR?*TkKbhQAN3EG`fR6PR_xISZ|omdprI!jNVXXoZ%dfVaW=36pUk zPEXQnfZjs5JmRHv0Pxe~`hMsP&2D=9Y(D^GJ_LMd)S+ATQk#?x)6(mj%aT!@$}>(k zXx;b)z& z&08~awv6MTY|%8slR2-^2)+ZlNotXKn7lxDlQh(axr`~LwOC+g&dj)Pj!r3U!~#uN zs92yu8?iuQI-TCenlx(FctDT$2yu85D*zJeGi(w63j76!c^*cs))w&q0000lFhCFx5EvLB zSU7-?!1x$QfLMUINLWbt`1p{Jh%mUQI51!U006a{svZCU00Cl4M@0Xn2lB-L00PfR zL_t(|oV}DmZxTTi$9EGr-c<8~zcLM&udG9}uH_x*EOW3#n29!*~E)-_I zFO_EXLXph=l5>AQU>686fhPG?#4Zvd#B2#GaBpmY?g)8kn1U47IYECWl!>wB1Gzf;3-&Ygg^<>En_K!h#033E}?V{1wzHR)_SGuYZQpom@+<@xQ;*h zhy$-4T(Hi>CH~|T148xsf{ubo0svwnC&F>_e04PF0H9q2*lc9LVUUpfbP;g%w)S<9 zHl2EiiN<)S-#_+_1L(!-0R|inwf^qKgSJjEAlK-rw$}CCUNAZLk$YMjQVrW@01P_k zXtVROaBtYG-<2x(M`^>R7a1rHYeY%oPnNK889yE7BfuR0X&6#JWNtR^=qwC-*9P{ z`~6rBeLo4+NY<7gnp?=;7)jY1zDax!fP>|^9TCG~k-foFxQxm^jtwH0W>EDlop_pQ%uAsv>r7;9-G&I8V5{dfJh1Ryk#*4`mWrsvieSoHIPMSt;2F@^s3b3NtBzb zkO9PL0Z`pe5H;QTgj7xe;NKPl?YKv)ZH+yODey$@Q=VWCb84ZY8z+1_K?n9H5OQ!3 zp?U@+6t);{5dc_!)pQRsT(@$R@=YPcA|09y;|?>uP|yAjti%5pKL9NR4mPGSW%U36 N002ovPDHLkV1km|l0*Oi diff --git a/graphics/pokemon/tapu_koko/front.png b/graphics/pokemon/tapu_koko/front.png deleted file mode 100644 index d6a5fd655ab76cb75f2c56c074ec438d93b743af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmV-T1hV^yP)_)0C+ek z@OU7wP!J#>7)V%1I5;r)`1p{Jh%mUQpm-<%004f)A}s&_00Cl4M@0Xn2lB-L00VJJ zL_t(|oTb#UZ`(!`2VfF{0F4qs6md5`vqsE`Hsz>s(m~XvP&pMy#ALS7V~mbMOd&xA z#~CEmi>04m^hWzoT}`@9gH6 z0k+Du)&frE@jM9}$h4cL;I4*hHj3*466p@*OE5x7>FW&+siDu6>h8^Emq4#3C- zz$#EhBNvc@%;s|k;v%5Z|5&lQtW)Xt8UA2v5%6a53pCTe38~(==*#7U??%3#v5PC!Nl*(K}^B8vz73EvBnT0H^xlKEVR7 zq6;>hc?dL6FY z&XXQ~rz3Ee=e{9I69o4f#`uVwhcg#}4WkTj{Sd)-_vrW^X(zM+!4Zs>ugF)UG@b^Q5J0YX#x*tmb2T$9{jnD z%Upu{v$O}UJ+Y#?fUEGs*xk;62jLI6iuUf^&|v;op=D382hk5_BRd23->bNaVO?nj!Q~E~g+GryF9S-y@-V)f64LrJ zkXbxUX=3|1;PGTQtRr}bp#MgcoIoR4K=`(ufXBx#_bSfwCh@%-VCwvtJtfK>J*M>8 zoSqPkCry$E!BkEQ+K_MF%n zGyfTbV7LH{o?}@BH|-!e#R{g5z$yy(1dId}UDbmisbK1dCW6%llTk@QSMMSicZ)!> z3kYN^F*XZoEP(t}ZkU6;BETebkMV;5Spm2iC9}(vZv*Q`j0rSV%x9Fvwtt z`1tsckcbcv5Xd-C_-KHLC^#Sx7%;e~pg?E<008WrJT3qL00Cl4M@0Xn2lB-L00MDI zL_t(|oYj=SZ__{&$DPem8JZvil~}kmQlxg`+%`n8)K1lmjeMd5O9eO#jF2!em^N)4 z(+*WK_!1V>rG6)*!hrCF2`||@^3U-4V?goQ%)H6+`}q5P@9sTo+J6{@`G4d~5AuQA z>y=!If@_jo;LeM6lIKy_un5WXFsR8$jz^)qVG`EL_9$8I^L0|$$`n{!b+L==B8)~C zgSE1X(4ThP%XrJG89=AK0K9nDZNJN~I9!k*WOUN$dTQXSSekrWilCSQ%)!qKTK+A7 z`)UCxL_q5w1;pOmL@6-&a!j8bOBsg}&J_aVxlb3AUc^#x31-^im4lyfQMIFuJsZLKeQs5y>T5P{Ln}adQ%DCeZrWR2F|qm)ThA+ z`a4Voh%+sz(JSC(B@K*V66#06px6gEXjP0^Kns9-r7C>`it4QUZq!i3|ah*nieQLS5oDab!1`Vi^7+aKH2NNMsjq6B&Q7|2+Nx XEJO3-%rv2I00000NkvXXu0mjfYSwT+ diff --git a/graphics/pokemon/tauros/front.png b/graphics/pokemon/tauros/front.png deleted file mode 100644 index 0d47d8939b133e0eaa00535af7854f326e7dc845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmV-Q1GW5#P)Px#Fi=cXMVQc_IXOydYJ&g(07^M2i)vD0N->LKAl{@(tc!Ea&EA}xtWr4;=EZxo zgE9E{_}bGgzyJUO$Vo&&R9J=WmfMo!Dhx#ff>)h(rqVEX;>B=uj=wzh~NbWtaV!{MK54*|{z%Nb>VBWTZU;@N3U>^g3_s?7Q zbbQx}9H4#am&MDZSQe)%C<~*vfYbrXi^;D<@KiJ^y$~o1 zU-c1oOXvXdW|0B4F7Nlk1O?CuxNHG?2iOOIl}zx#uavr!fwpNG>>Yyt0~O%PxQA7P z0BONeDPy1^lKyG{r5nJB9$-)JH(iGY2zwVj;Ni@>ktet8mf#J1pYUM7=oFt-Xt#oAVDR2~e*-vc66v$_QtG1hL)Ws+XIqgj)+KCrDugP{JL6FFG#^ z-5|h61AKCr05%3dov)C#ZD2qw3<11eSMedxIbsiJBAirFGSDZareTNNy?D~ki=aOF zQMqE6J_gL5$;^a4Kuh)UY7WsD;Qp9hB|$(%U^xWrx`s2D-6TbzGXNqSKS-%5ufDS2 zvtJpZ(6`;~H+EZ&d6+HuFTRi!un)6^%P-`faFgv_$Vc{%fN!&%0RAA`fAL%V2d~X3 Uo3XS}Gynhq07*qoM6N<$g8x~0-2eap diff --git a/graphics/pokemon/teddiursa/front.png b/graphics/pokemon/teddiursa/front.png deleted file mode 100644 index 9412d0c7f3a6195e7c88e6eaa80ee350411fc42e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVPx#Fi=cXMVQc_YC#yZVj%y6Io@+I5D*am|Nri+Quz4z|K_A>YJ0S_z24s500000 z000000Kd_ZP5=M_dPzh_(T zSe8eR9(_z8ddH4Mgtrku#q~l+WP;%@_#;#hA%3sn5@Gy6A%X?~b^xnpC@n2QU^9vZ zaTV1n)tes?Ljbv*0ubx!s>MSwB87^OKY}Ev=B@H|lp_R=L{P%;i|Q4CA;7|X0Zf6G z74uuytCv3lKq16%00ZE9^iZX@m)6An(7-dm7)vNb~5?K zik88(XD`dd&OjQ$c5>_!jTPHPuK<|4bsUE9Q91~75y%+ot76Z!63%;D8>l4xbOH!8 z&(@Ns;q+TSTV@{^0O_#XGTKrV7~v{TzpQ@&(u6t1)1L%vL}VsoK;o4!{9go()Z_{F y?17YL)`p3(?U0Px#Fi=cXMVQc_AX0;B5DcbG3D?%K!iY_(?=TR9J=WmFte{APj_SN-lN?y#L#tu}#u+S89NNdsJ51I<0AmQDProcvj2HbhO^&qtB9}+8Itrk|(x0lhg2$>~;6o&hb zP89ZugO>vY4#JHaQV$?urb{a^lFBUY?oWMf2n0!^UQEX1O{f#sXw=*4&9YBTy?Rd{ zZO(ZC?)539N+7I%7E=-ldjjs|`@TCuSS0cm^>eUovayxmh5&gMDa8p0_Vf|X5nsg3 zmmxt9Wj2DKVsaF4vozeD>o8yzrAW1q9pL#BuHAGCNGWT(KrdtpT@0%qfBFQd7IMxy ze*yqk%_A=Qq^uzTCT&cZl#Jy=7oA(d9+Q!6JyOaVm`IAFp=&#(x_B0F=%f U4s_dl`2YX_07*qoM6N<$g3Uk?j{pDw diff --git a/graphics/pokemon/tentacruel/front.png b/graphics/pokemon/tentacruel/front.png deleted file mode 100644 index 52e70a7343ea6d14010c9a70c97f7d61ee5b8aae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmV;Q17Q4#P)Px#Fi=cXMVQc_AX0;a&E|s;5NfpML6ocz5D@l3QvbcI|NsBADInF=)lyO*w5)T3 zgF)uiq|M!$LI3~*9Z5t%R9J=WmD!T&FbqT^94kQV@c(~%yIao25@4q8+o-07Eb3!z zcDnA*{Xaluo%-yZb4*}k1%b5`TDumEyJ0_U*nWb{&p5V_&R)Q0E zxI6;R?#iG0A>~#EA(AUBe~E~?Sq@b?bH%xr4$EQ4>PWv>Vk%21sWi)TU7i9w=ez;r z#5LFZkcZEU5Ex~+E{nE{O%QfOAVXyg#H_QqEV%_?N6mB=Y#bf^Gp%Yijt!BQVjlI9 zE`IURv>p~4fdfy0c=I^WcU`F@jBL6g7{6SIRP=8LIrPQ17W%MK-Xpx$GKD+BUyP5+ z1bd5c=%)~z@(QSp2gES}0YHqO$?cRw!@nsA9TA5Fr@j_g)*Omz|vGA+}prQ|Kix5xrrF2}NAVP~%NO}|&uhiNa+Yk(R zKkC&(08r%(z_B$d=_IXfxFaZjO(9mpYXL&vaVAvV65~NVV0%IYpbFs1yA6P%E)vHp zbwPl#1w;VI-D{w_tiyxt5}?!mQWUpVLEQO0V44&H0kQkB)U0Rc-RMV-$IPw(#ut&b z5Zd`M2jHPMUkNPk9#DJ*Aa@;}z5w`-bA`991-nrYp>n=lRb)1CghdUxeW=&!4=oU& zY7ccH6wbn&L;zeX&I9lW=(N*njL8ktpxIpr^Zs2XC?V diff --git a/graphics/pokemon/tepig/front.png b/graphics/pokemon/tepig/front.png deleted file mode 100644 index 0e706ecadc998edc44eb62f521ff059c04da3710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVFfbq>XgDaaSUBKlD9AuKka#HYfJperK=}Chz^I_0NI(Dp000003*Cj300009 za7bBm000ie000ie0hKEb8vpK)Ui&(Fc1b{JM9A`DHTFYaa9Q#mee32 zrbeVx9UI~ykAbL^y<;~}GTfTcJ5!$k@lx1HVCmVJSWs`W^nbd$BvuGH)!!8D1HRkS zfc1iakO8+$P+%|*tbl4{1{3Zx%N~^Ti1h%~z%qe04XnVoPH2H=&bc?T=c@gr$%lz4 zXVZl~J{61Od~l_~b*axQ6zmz}EC(H(7s!*`%iZKK2hc4jw&{bcZ@xYoKwa!&&14;h z9{_4bK-qEb>}4HXcECYam`S;7!JF$KD>#YVu{2aW00b`5U{!3VP#tm&-U9^0FU1-_ z=o~8Sdp^Eu&=m%T#a1O{3sUULcsjqZ043rshcvJ0n(CC>l=002ovPDHLkV1h|W#m)c# diff --git a/graphics/pokemon/terrakion/front.png b/graphics/pokemon/terrakion/front.png deleted file mode 100644 index 53b731785005c1557fa9b07e57ab482e2704338d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmV;x13&zUP)gM3EvmE{&z>t_sJ*Y3^9#wG3g4H6fWU zu*DTuru24hQVbja4{5G2bNK^;QiNg9uhBndsE(uJ)z z_+uUZD=UEK65DMf+%rPwfCLiXcf4Gp_O=k%M>S1=Muwl4g_9%hiTx9 zB?mjK&5yPTsPO_o9)ZATjW9U?h5$bT&#t9Ip=+2}5m*xSSvT~7T;Lc0Lw?+_OTcGQ zI>7dUm4J>TyQl!|Bu#Oflz$5F5^x~tr%vuc0i67yCA7one-gc`JFE)?c?6vNc}2i+ z4zw*+4}As=aYlek`N_oXao+o&fjt6P=X69)#ROnp1Dy8h#5jj2?EL)xFPa6laDw?O zeqMAL5|G3{5fJ7rXn{45(5RDNJ}ET}bqgf$F$ZWH76N8`sMMT**lX~k$prFU5Jam^4vD1oGlq#kH*EM#dE+g0lqmP z<#j&?#uuX@0qgTW5-X7RQc71pIX<1%@n2k2KuuiU$eRjiO1p+uit!UbtnTH5lv4sk zbBf2F3nA<$z~wh7AMSIYRi~sv1Jw{?ES?FGt)>;wLO$(-uF=!dtBh7< zeoJLbkhTGkxg~%t%jFtSxYQL1$neQ6yfLeKFmaj%(8`uAlCG^Je66e;;y7|WYnQ|{ zFmH%8@OYPj7KnCHYl@d!pVhKbsAcMw=dMJT>J}Pk;R2OrWs`X1ZhIQA`oAkzkjIN4 zSa0*op_(sSQw{v4+@82JUIv5IF99nWAgx!Hzf!ZWVr5$?z7wDTB3v{Jy(XUDStf0h zfa1MurGqpLnp3@M1_0VK*a5Js3h5vy=pd~Rpzy2;JaHvWYJ&i7Hox=JJ_5n!PlpvD i;Q!O7#jL9Rcj7xgXMBS1*m(5-0000jkd6bEoDEM*NOxXQ>wD67Shq~2O_f_My(8?~E-`@mZg6HcBhVP~vt z*}An-zh~c}Cg!X*QPnlK+3&~y-8-K#jJNgL>R7J;8~XnPtizA~^-KN18&g2%@Nd8b zH-Ib4cK08&o^~FjLF&4&2RaUbB|bC}LFxn8d)uJ8?;lT;=w{%9bFI(O@xf2QttPhw z#wmaoYW1!SDShiEnBN*zePz47Tm!L9snq1S!bDUxW<9*s0>;oJKv+!*B!F0GfR9go zNI@uok5xfnp?4UU58$8jdj$#wicISekHh5twB$hp=2&B`4VmEhnkOY^)B@vrA?qc! zK{v-9$Ou)yrgAY`i_bPhP&6vMUDI>ZZ{1f%eNqz(!vl1mwB0mTCG z3_=0$j=(gOa-{`a){70!+;HZ&Hwvs6)9T%tCdcy3V{leh3K;r|8<0lAF?z9Cl*`a>Vk%X#!BTN3^}TSQ4OJ=84k;pxo|&3Glwg(4-3Ff+wvp?&y|$dX#;0%aban6j5?M zZ|!nUceOVpfb?J}RGEwR7#8^U$#7+yBZ)Agazb_a+=Dg=a5C&GfU}Z-sAL=1u15)x zVbYYCMdgLSDb>Yui@+N=?z(RbByRu(5fHlsvoF58!Z_Fp5?Pc->Ksd{9rhi)Dh||W zB8+C7v5UDR-U23ps!WDbhLOqp14$9QYX2{pVW=aLD|1G`B*1lG7zgSnK)UB9GfcTb zA>wQgSOk8zJ%7?|;DFTzU#~13n5jQHVox8=(Ez~&z X!%Y62kSkO#00000NkvXXu0mjfpX+N) diff --git a/graphics/pokemon/thundurus/front.png b/graphics/pokemon/thundurus/front.png deleted file mode 100644 index b8ff39958f1fb3b069fae0fef04b37783d4d8809..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmV+m1oZofP)w>Wv_p%3XT~F*=K7dIYC}#Wxgy*~D9ogAvY;B-}kq+-q@1N%x&sf&~TZOV^ zRlWu|Zn=OeUx6GH6p$AdP*8l<1kXOOMVYsOQ7XTmO0ORlgc-AbS zbooaZh#Y|atTQl#YZ&9`utxFM-W}%D2Np0yapA* zTphZ+agO`}j`Bu;^$j2V;2@vi;OH7)^w&dB!pDJ4a>5ns)~mPgAVcF&L~#KRr}8lJ zj}eMT!T^L2QY9DKhwtBkinVyeCRt#iHcF`tY!=ix_9B&NBoAa(AgVuB~&7oR+A7u8N{5O&3MyHA(~>Y zUonR@Vl&R^69c&HzqkUXjKPzh8Yw>ZPnPhKlkRvlWmDE2?g7tEms`#1XKdPux!|-N znn3z0w#U;ciTO~sk_C#pmWrGY2p{udn|BT1CjBFQ-{9kzQ~f!gb&M(GwuPDgS_72V zvk6LTwb8^a&Y^xA5XucH*IP3INQI!Z%?BNs1I)w-Mx+`LkJai+1?{C;LV_U$n}C2> z#9|{dEr6Lz%WecqA;;YRfHPddxPUtX5QfB~2dDTI(f^7--12D4A z-Y{Um-;*yQNO7snv~1oXHtTD^lC6y2E79s{z#^c|Kd-@Xkg?Uv2(@bUb`4dmzbT*b z0r-*utWpcy5<+kM@{EGs;FJMqJB3p6TL;|*DaY}7WgmF`n-=T+u^XR%$0OfCA?X{t zvb6=^fU0_MPP&edelmdKLIWF=StejDBmna);D-h;Uae1QSE0xGY z04&#fK1C?~pT19t&`2<8h*lqn^==#!C@DgOAbomzl8!UqFJTkAN(ds9zEm5z*7JIv zd63yye?%Uc`GD^q1vTu#)s#s=^d*7=h)alT7`dU7Nda3DnA(q060EPJ z`}=KfnF1uS2(fFx=AHPKT?hp002ovPDHLk FV1jVH+>!tQ diff --git a/graphics/pokemon/thundurus/therian/front.png b/graphics/pokemon/thundurus/therian/front.png deleted file mode 100644 index 4d1543d595ce76b6037201d9af990a5ac67b13fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1061 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 P00000NkvXXu0mjfZy2;w diff --git a/graphics/pokemon/togetic/front.png b/graphics/pokemon/togetic/front.png deleted file mode 100644 index b1a9db4df50e7ad709f5a308bf65395745bc20fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zpt!pE|Ns9$fi*|>UVZoOo}=Yn2@cIE&jgb8LfAklI7r?oH5F)1jHioZNJQ(~X{XmU z8}PV%s%%EHYWE)Cc}}H z>}h+xdMmz)YG~Lc?@=kQw#-M(+`)41Z)b;-V$1$&y3AwUaP}1E>irB~c@!C{m=DcN z+mkKe$GgN;RPoN;Jcq?gdA%I19o}!cGPfye)np~r^AoICO*e}=oRU2g=jbjV=}=YP z`Qlpesy5NuFJD<_{EOV1ywKtF%ZsjZlGbN9{%>CB{;@}Hh2snB|Cg-IFCwkaxf_;t2`}LDn9^Wal zO|_Nf!Llh03mCln9W)vq25hWU+mM@3uCPav!T-w%7dh5~)K9mv?cee{{9qS0WbcEP)D=i-ViQXYfKg_8bxym!9?i@}C0)LU!}#vG+RiAVhP6a~wD*Fb;{!83J6U zHyk7VF88}Yz**n0!6o{DF+Fi82n=?V`3^+@jk7VOeei~!%Cih9P`QwKMk6p6%}l|( zR}`%{hroSNJT@SM3a-0=*sOqd3fiD6k~Rmw6(L@dEBIULaik0=wZYtA2bY{t z3jVt;ZvflJ8iea}FNA>Q3vuhYF$hSSOErxzz?`H?sTe6BR;mlI_dv`j8ogqGe9gZ< z(Squy9L-^HR@Uovg&Y}G?{$qGX@=%-h!nKO#Pi+!VV45=>Fl2_Mh_U&& zd1_p`HpU1W4#KFI0*>QQa5#*a0F=il3s{@9jEp4#gc7ha2N+tkDVP#@bhpiGRIAH@ zYICRRCdKar?n@cSZ{Qt%jA>H1`Yr9@w`NneI|3D5w23hUg_U=UmAsfGXf}6Rvh`Si zYm>7ike|ZrB&%MD*1nVat~DT1r3a4!c5#EzcW{qXi&{3!l`bJlq72-sjhZ}S z1rP*PYPfatk2)I+RG409fovQ|A9fXM;6$Bv6~wz@J550Ffs{wEi5loa6%T4G0Q7Qty5ZAQE29#c{N%(49)l#jNHBo%a3=NR>I&W}fq!41#!HpIwmdbP7xG?~Z*SPLg9ucCFsWv%CJ% zSA*~rh1%(x&%joA;-arp;GX;=3?mS=Tl~t`(+KNcdtbBkIgJoo_oVtn-nPYzR{*XabNo_!2x0>q_PQM&r)y`x65!!-b&C(hWOuXTKW zK85v#JhyIJY)>C9E;_-tcL1qftnSrI%K-b)dHiS@U`4hSEd~Au`xh=nUVY++{WSmp N002ovPDHLkV1nn= diff --git a/graphics/pokemon/tornadus/front.png b/graphics/pokemon/tornadus/front.png deleted file mode 100644 index b121301ddf99a460d3f2f0ffe6c9932652869452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 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 diff --git a/graphics/pokemon/totodile/front.png b/graphics/pokemon/totodile/front.png deleted file mode 100644 index d8ecc06a1ceef9e0264f6aff95b00a5fcb936689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)Px#Fi=cXMbMbIF@wc1T7zn|=9Ja{5D*am|Nk*sgS51?dl&$;N>a^1Am)2}tb-~4 z#ZtIvXgMX0hyVZqm`OxIR9J=Wmdkd-APht;31Nf5|Nptw1KM;aSoCz^N#a%JdL*Pc z$MNdbtA8#4H~?|iPLvV=5drV{Q%Xp#EdmX{hS;eB5~&{{XV{9M_m%gVbG}aEqFM#0 z|EfYb0dG+pKy;w{IoBotiLm6C_Mw(=p4_-D10W?oya|vV5H1A3;g{YsU)-{_gBJjP z_8-!Q@Etw{b_ep9Lu9+^F$588F3rL&uSW2ULh`3CbPHfr#Xz$mZ`|CtL{SjsZ+IhrLg`5$+WL zidzHpF-QoCkh+3?X(TA1kBuAzt0V|;0&N29B<%asKMBDAs7-UnH$Z{mg&KGB&dpt5 zUYJJwK`^X8XJzid5Nz|XQv3jrP0p-XbKpvTwa`byqzn35d(8g2A(L*$-k%K@t{uUv cSFiqFUkV%zPrc_UrT_o{07*qoM6N<$g2O}b-T(jq diff --git a/graphics/pokemon/toxicroak/front.png b/graphics/pokemon/toxicroak/front.png deleted file mode 100644 index 27acc59b7794da48d4842af4294b5392d667f5dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmV+#1LgdQP)OP*|8aIIyt5`1trZI8gYQpm=zQwaG~S0007| zNklyF>ljQ5Xapod5MI?*?3{HpXI@kGB{TcWlcUn9qWKfNDNg!0unO|thnm% zykVw1iKS~RF(9UNY4?5r76#T1<({1;jqNroyd|;k=X-bm|GQ^d|IgZax&;u)7DC__ zLf{r+$K6JR$V9LOc$BDt#|W4-g#S>HlPQPOLmWQH>4WuR%Q41KDc-a6sXOFU$oOKtvuAv6F%oe~p==q$$H0qloT6+YJ*19YNxNIng z1kr}xf6;&zy7l~o8&j0mxQ)r% zi;JI)o8f&=gy8&qPV4DKJ-~KVD!m*PV-;$MKL-m#YHNg1h?6d)3SX{0~ zC{`hQR_0;?^5%?p0w?q0B3J?QGUSI0%#t!-t_JM885{6PVvlQpN5bYGM?^8px&kVg zv3Pu%>XBi`t}O9f`F8^}P@~Lr6v50kdWp+x$GURLRhNTu6qsZpaI#un5x~fkdM)Iz z5{(`ZH2OaQZgE(xy=*pClyK6v|LbB1k_d_OGx5yo9>b7hV?d3gxUYi6kf9F$-1 z$XUjt?mZ)<4wL3H;Yt;CZxJB_h?;*GtK$B7YBj^%#$^TFduY9+)UxlcyPxaP@ISZy Y0&nWgH&{MQBme*a07*qoM6N<$f@5fN-~a#s diff --git a/graphics/pokemon/tranquill/front.png b/graphics/pokemon/tranquill/front.png deleted file mode 100644 index 2294a1f13ea1a36cb474f13ac3748001f0f25a73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)lk3KMe{q%gw(d;b9TEc^lB`=K`2i5ZxxK4nSXNB%m`HX;97t-aEBg0}*%`9|PC zz(PA{f(>8{VA~~vD$4>CUI8(5x(Bv|c%#b)7U050Z*cr`F{1Gj9CUgYSN#Q`&E4&G zddXEkVt;<|w7k99?d*F$fCiRl?&$yMZZTL@GOEbSB85=9~6iU&rq6rPWNM@zu&&OEdM#O?XR{%SxQbHqi4zBY{P?k8#e#;01_uWNph9FYFLliw1_nkOPZ!4!kIuJ~4E>l51zdYY%tLDC zxL!HUY4-T-<{J|=u1Dn`VVzLKRJFv_%d1P|4#U$aH%_)?rMbF0*8QIU?|X&Y%I<%w z*EP)c{J%|Q_msaklOz3v^nN~Njy!q&u9CWdr{Kb6uHTMwgkRRMOLDswY0nv8-u6M3 zv%`dSM^5U2V^M56l~H>wz6stnRJ^vO?roId302KRsSOh&6y`84>SEpUQ+5IuhfTw0 zt$>2Msusyw5pPBVwc8HIE(_eqZI1BilnZ9KOs@7m!=S#1{O9*Zz3VJlj7Bul7D> zbpQHbdv*BMLOq6~*S~$f5V*QJvE$pX0*~XWXBHgNwD1sLcgTe~DWM4f2{gD! diff --git a/graphics/pokemon/treecko/front.png b/graphics/pokemon/treecko/front.png deleted file mode 100644 index 6869c279b36de87f8d1a7794317b27ea372be434..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)K)3I*bFc1b{l0&utqCmAP#YjkMz+M7B zfYeiWDLy|z3gitscWBYIQ_)wDy9DrL_X%1JMRun__EK+Pm6DMFHYKK8hxR7H|EJ^W zBop$#{!Vds>ala_$Z3|JObZu4aD!l$zC?7KVZg-`AVEaO8378+pACbf00Vq}mJWlD znB{Ly-wh670KWS4;`K0io8kQP*`)(aasJ_I08oz*agKQP9$G-HmlmXiUQ7|^mmLt+ zzT(28W=jZZ`@$jLKyjL>Oj=07BC^EEj1zVWhY^ zm_Y$>kIr%^np>i;Qr=T-x2b&`OyRX^);X9 zrrBOm*z3&0SzkwZSCVB{@=7_p(?)v}(IgV0YZ%t_%a1wUlR@Zf{ zwLTn@A_tHx0;Rk9Wq~3}%zq++@lIGL(0C>i$pnlyYGQJG4e=~42op(qBbicmPM8V` t66X-~WDi6dfDX{LLFY$l>Z$x+t>0=Fr{u&jEGPf~002ovPDHLkV1k582ciG~ diff --git a/graphics/pokemon/trevenant/front.png b/graphics/pokemon/trevenant/front.png deleted file mode 100644 index 5dae0e09a4ed029ada37552459a6aea962331cb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 969 zcmV;)12+7LP)8nu5XWf{9kiKpQNVx~(j7ZE7DOalzlQEA1!xQy9-;^66BH<96fLL( z5=@}z3-k@T*=@m z^qkOlaQ6P7kPZUpuitb4o1U{ov`LG77MoHOqQ*E^}G1l0erD* zcAbj_-*Z0eLjU@^eQ$m2m^V$ciSJ#jST%|42Rn4oh?Cz&O+gepnaeBKsNcK|7ukh2*A z*cAj~brH5Ls3Yu_?SK-2+yfc`xZoY|wcc*L6@+!k<{bdClyEWc#^&>%;!|t6IXeKc z$x7+d@oQWBE;ja>sG&lesuE*$QxfExqNqE7SO+flc3e7l*b7X(b*a6cGe_EcfxDet zBehO5GP(k63#9ot;Clt|KcH6l?HV_D7_B^zf{c{1!9#|EUInU7BQRCwDrN5j*mUg_ zcoCJtbw3sA9~P(q-L|&oJxE})t#Z~^1!z>_21y#}qq|CA8 zt+*P~aPg(;$B=;2t1vs2C16~jY(G)z%Uh|8dLLjcsj{FK;{aH45-TMK0OBRIwW(Bc z093EqsG$QWs>D{bzkVGoX~&CHmMVLhk$V6>YNWaaD*Ts?0D+}wt`O**d;iy>XvVNa(mY`1okxXovs+08ltEZNbmz000A1 zNkl-LaF+;hWlSiMF7DWK&~p27!lJqppmq76{>`VcUG37 zX<>C72=r5wds1<60-RdMBBbBX>StV?ChyL;XC?vtt{!0*Fi#jHO8AgNOC92C51u zpaKAC@qX7YOd>H&oycGeCDNZyDC}X^boOx3MgsCnBTu8|Y=w-l}x0(__ z4yJi#eAcePHm8#>&y{wTNDP69NK%x zX3Pi>SgdGuP-o1GVuLjb+3uhkg93rfR@mymj=2S>!r(H1G4BNd-OKnVI`dF3o*+m+ z(cKv(U=Kld$fhUVOB0z8%> z@QB`ekmFTKb2c8M+)xP>1z>ubQYBQ64<;Hxz^TVgun{hXpVWI3lx|5+3J#v%A^h8uBiZh9oWvb9+EQC&zFF= z!Lo)H7?oS>q79%haq|(Dk3haC+g-4Mc?7TJHXpFjCGfZ)U|L$m-7Z>ydw93P)Xeet q;l1sU=TwyY_%She`}4}UD*Ol8yfgaip%gLz00008;<_a-%BLfcr z8&AM%u<#7rB_NU3P6rkwdQy`{|L5=S?0MVzleM!6INIL?oc~bvf!&UYGm80opY{mjLGqloJ5X z9w~H-ygTioqWe3>7ctrYeII;H-JvHJ| zKsZ(o;9L!k)rAO^9bh3>!KG4Tpcb8I4cLwG3e!n16^Elx>*!_`*;{IyuuE%TKE2JC zD}u#RYh7%C`Ap_{E-S#@OCBRJ)mfI|Tc70l{aY1yG(^Oj4E>H-Jek)@i)UlzF&d~O zlg50!o1b$sBTdwiTG9ac-7*hVz>}Wz@hnz6iwKyv=BroH*L0TQsQ8o~Te~b)F4iQV gw&dE;ZT*}21pMh+r_{RfNdN!<07*qoM6N<$f>Q?3Gynhq diff --git a/graphics/pokemon/turtwig/front.png b/graphics/pokemon/turtwig/front.png deleted file mode 100644 index 59d3efa89d4049db933e0086b39eaea5a9b4f4f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 552 zcmV+@0@wYCP)(*_}Ea$s6hDm_y7O^_JF%p00009 za7bBm000ie000ie0hKEb8vpK)Gk0F|dP6 zK7mEDi-o)36B`m*0(_VA3F$!KCCX{D&H3BaA+Ut@PMP0qhT&pX>DbWFtxf8NaoHyX zI#|1NCjqbLHmLvu(ZcywoL5~!2sAM>xxY%O5IF$E!mLt8DRs^ufK1b*w8ch3z%zFo zvHU;)7X~R2P*=Pz0dGOz(+%1e;DEv)!)U)yWS{n1BEP061WXU|?X7SV(Y?z-YMm7#J7;0000000000h+#qh0003@ zNkl_>2D z;kr3k$bADpl`o=D=*u|^`LF*U@4XyhtVxr)oN#{X>RW*jp+mIJuV5(RS|OsF7%EZI zKPwpKg9xVLj_mz@G*&QK;E0d}g^or5FzAB_18Ts#g8Mm&IZQj6IKx9A5sa=O(OMs$ z;k{i#93hbKs#QsW7{=8NIdt@e-5l@8@eL}mhK}0R0X4%9nFPv~1n|NcK)hH(5`@MO zfbkww874V`CjziVihY{Ck44ofy`glX(f`7zFr)xX!q+ zV9VaKbCzs*_y2!&^ArgQg|qjbo%LdvqQLO~S@r*`4BwigHtaY7R1N`L_M2V+S@%6% z977^n-%h^C*W|$C`tsDb|Npb6H_n)maPY`-xv7Rns^9pWHZk?RY;yKLgTs;dM^8R9 zYgkE|JLI)9UfFOuU`AtiYtJTAF%{#dW)?cFe*()SF4z~`)0TL&{lLBh3};zGna`N$ zA5qa;Pn6^_+?njt;%iQ{ne uTP-oso!?zHOg?|;>=Spx^N&F;-e1XhD1*(=GV6mE$kU##elF{r5}E+u`kOWY diff --git a/graphics/pokemon/typhlosion/front.png b/graphics/pokemon/typhlosion/front.png deleted file mode 100644 index 79830374f872756485eed722907fe413da29f0c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)k6vl^z5yG2{qZ|N7JphmkG&w;U4Jhg+ZA5wk@ChnmSX5m^@_?*L zT|rz+beG^}U-bl}$l?~=WHEhjFv0VueVaslKY#Cg?+qbJRd)Z-17a;&FtlOUD^1A| z+Wv^M1bD{fNM|*hw7D+WD^K*^j6o2n=jm1x{Yz}y<%4ek<@3y0=PZ**unrnAC9)ePTBd9 z0o1~%1i--zJsu8|CFgShCU8|fWqo=-$_NQ1kZw$XBs1(fpJ2#zC778qA!JMvG??bO z5SB5>T`2DnKj!%-AAnYm0ym*&9wx_J^9xhl2@y7&0{!;PAmU0ik5Eh`eH;{x8q6~1fFlHzN zUjWGd14QT`G9^asiEBMFHAP*~Ej=`V8{(p|0!d+p#CoBvav872FYS<6xY{1V(icc*_nt>n rh0pWfD&T5~()7{#^7kJsm-6plw2$;HXPV4%00000NkvXXu0mjf?|p2h diff --git a/graphics/pokemon/tyranitar/front.png b/graphics/pokemon/tyranitar/front.png deleted file mode 100644 index 2032b956afb69dfc2cad3ba8906b4862e220a206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 874 zcmV-w1C{)VP)_ER&T&ok1K1nJ@YG$SI3HF}P8PO)mqG-n>Wt@WXD$GRWTqA}iRv{fTk=j@$Nv4!) zB=9t2>^pc+nI9{qGOW=Mc$hlR)cB{Xycn}hj5f>4lm_czecUWd-j27s1| zgNN0>pkYJjn07~jd{BVIO*lgCi`};TT1(dhf{B8?+8w_yi%TSM5CPE0J?G61V0LjP zjCyzXxLmGoYckear=AYzHJ75SPaamQ)$-QBpJiTTpSFP5=4>9p0F$-#z7!Xi!{$%T zUsymLjBOG3@$6~{pp!^|Q&@+t6~mrMDT9XqFg{QWm#CGA3W&;BH%t@Nt`(g`1+A6O zsv!kB&XI`(2wpR1LqKg@Kl``~Gv<7#!NmO)hG?rCrHFrTdRwqEY7M~4dkzS>NhH;^ z?Qd)z)e4R#0EluPW+P*r@4YM0?=?Eez8&*!}DF_w83me@1~&lcNsQjA}_j$jkU z(=J!n_RUo?xx_htTpV5O0kF6(#l)3ABA6uq0ksp`1S--ny8r+H07*qoM6N<$g7#U8 A7XSbN diff --git a/graphics/pokemon/tyrantrum/front.png b/graphics/pokemon/tyrantrum/front.png deleted file mode 100644 index 3aa035a52133f8733fb49229fbe5e507a1ffc0d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1032 zcmV+j1o!)iP)Fz>$asjrz`)p$n4nl-bqG9y00009 za7bBm000ie000ie0hKEb8vpjAc|LL^9@!#E=Rr#Z|qi$ z#|^wFQZ(=9|9kVs{|Q1Dp`f3H-uWq@`~Ybo1$Ta=0go4ewi3`3d<%E9_DZ0wV;yUF z70^VU07A!jYXj|$(Au61Xa4<0&?JTdm3T z4?42_8h|w2G{_+t@ac^1`@UQOsnFo;>9dHx=PBK*18SnZGB@Lh&+qWW^6M4Y8Rv{c zys`hi68P|6BGP;Uz&sfHHbkYud@j-%40r--LT0TC<764HJ9FFQh_D;9x{*Vcv znn!Au@tC*APmTm&jpaN-aa-Tk+o0^(0;uJYe*L%YC))sgCjEf={^FwqDBDnX>>tt3 zAOL{>Tq4%|BIxd85GZ!}yb7$3k0?A(UHYXEAcRN&eMl+ws7DB;zMO?Pppe*oXgScq zkTCXp4RF>E9$B7u09>Cj7M`zfTvYHz$m%sbDxx2oj9MwRoCHkXiCeBmYQhhgC4wSImw;k?byQlW}n5Ez-^bTf3xk=ulayyj3p^EFk2c~ z)6F~U-yps|9&m=Sne<<>rIDeg(?mB4;Ap^KYGAZtqL;_gbda)H0{skJ4n_lDXK523 zk=7Ex|9k!LCjJYX0b@aBkk_#Jry%ad;oqE}gehayJMG%ZNw)yJ=xhR`N+khwobm2m z0X&V)SSA4JQaqmUz`iTGOpd{YER_V%L;$u8T_zI_pH#k8p)TtRTi+|4E(-{N7r-x3 z;ndo-EF7E)z`hT6NhY@l0E5*+;#YA9wF(GDuuS#^A%0zP@vE@jak?cC)~rz!VF77? z?RKuLa9*TyPF@M9=gqAKqB0Y$0?;K;_b)hcLyHSQjl(#a)%O{jCXU35KE*LM@k~lL zZhv|G$+#hQvG_D?_cuvZqM7Fpa;My8&tbhq;4Uga{=m)M5@_bmYu5=}ry}42;Vxj3 z9n^3OAa|E*hyjZbYYmr>d_hk0m4DRWrqfROh4>EA)tyKlre6?KoCWDS8|1ruyJ~`w$sOB4uCxe zfH;m&3JMar-~h>4H~Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_h(G`U008iS7$_JJh*&^CKtND1DERpJ z$jHdBkZ8cbz=()|pjcqokeC1f01y`g4*&oF32;bRa{vGi!vFvd!vV){sAK>D0r^Qp zK~zY`?UKE2+b|S`89`9iw(bL{L}f~?msWXzG$5e@o=WhBfTzG{R2%6K7*+{%^iU|P z1~+;DFByw&>SSc(LzPsz$olEjp+L?=;e5R3-YcR<{ik|1=srP5Z-@M&H)!-%Aol5L zFEEN<#4!bNiqbydU3>yG6W*o=pdU^cz?y|Uz;h7B2VhYTz>F^_1I9Or`FwilyI}nH zn@nbWBh4ryzhNI=Cluf;&jSIxfb_z&)EGEhCo+@c+dSX_kTmyQ3XKw9ZFeFJZ-VI$ z80Q<)3vVRc?F^BOqw-}{1z}DEw15O4o0o;KKpB{h8wtlVVOMaD$r~eSq4W!%46r{D>Om+ZXx!jh4!aj1@dFLL+<+8-~ zEiPe^L>Ck}qkiZa!CI%z`0000Ml(=dU=+{%y~&L+=$GK)(Y3>Hu!(@-Xl~B>-oY>z}=X}LP zgH>Dy)kR1FiT4YzNmUCTw&53$jV11IYdOyocWi*F+ACvg+^ELo=a2ERv)aUou?Ekl z!>9{uWKx$}Mtn{HXclz|XtQ26-xA5CN<0008h zNklE=+UTL)ec5(J~lMASTVDIeb#d&V8J)DV;SRIY1%HZvA%%tcJ^DTNWs~bdtoFVtvRV>z+zI6kRwtKwst& z57)%2zb`3POF-1t37y3FGA_HmjvfwygL)jqIla}|v?Yl$^1Zz@+ryul=vSZI`=5yPp zA>X2)x#F)!PX{;zUdM&ljfJwm;^ynvo%@O1TaS?83{1OQfYlsW(a diff --git a/graphics/pokemon/unown/c/front.png b/graphics/pokemon/unown/c/front.png deleted file mode 100644 index c5ef1c457f71fa62d9010a780eeb70cc67a8c564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}^rO=;JR|c zj&L14fv{VBN##7^8|KO#ENIwJaJy%5hBlja>7Qu1`e%p5A6?N5<7IGr&MNr1K_gRE zNNWx2f#hvG0bf6_JAOz~$7yR)YqHKNy;VwX+LGP#qstn%>GZU6EoI%iT%lV|VQcC1 zwTzJ`Zp{wN-}cHT*4FJ|RYP>hjd#atF81gd2v1o4{^u*B68AHKOLN{O#LP2hPB0PR z{IHhaqv!G`8OFUc`WXH!RTchxsqa$a!Wq$T=5fzo>(1hFC;ifIuV1T6AHPz_UZSN? z#I}Vc^2avuriph}U-18tfAD@??!;*m8wCO`x5j>SZ821M@SfpC`Agjc@{E_{7?#^b Z^B1^QHdn<2YXU=v!PC{xWt~$(696~_tk(bl diff --git a/graphics/pokemon/unown/d/front.png b/graphics/pokemon/unown/d/front.png deleted file mode 100644 index c39b26120dd75fe6ff2c9a97d45b8eb956967f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}ZMynFW=M25!`~UpUm07xO*Q#)Pca17YLo)==^-6h=SG2o%M-F?dEY@Sv-~H+_|{?W8F*%`~x;Tb-biSQz$alzq$JIFW z)ZT!HOq|-z*{aoomX3wr1U}??&X~;~B>DMzjqUCGeL=CYyH#esV7m8J(I7p+!_lR| z@xJmwA*n~*ZF|{t109&XY)?<%_{gcq3@wfeoP1S4-C|kM9wDw(3KH&XZ5}s= zG*9ngsNb<7o+tj?K9_^11q0a*+OK}cGyTOYrz&PmrSOV(_mg)5y~E(?>gTe~DWM4f DNUVpb diff --git a/graphics/pokemon/unown/exclamation_mark/front.png b/graphics/pokemon/unown/exclamation_mark/front.png deleted file mode 100644 index 86f329f92f6cf8aa0aadc048d4f3311ede6a28e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}czHw&Kjjf36nnTD!V9wn+~>9|c4YXK^d-xo`pq%sPSzhPI!Wd?6O;tszdo&ag>|nU-+_p?3m;G8E?wAt z&})N>!;9z71H`X%v~M*xa-F$BUM*gH*Cx)+H|yLFOl%O^$Xs)OQt{*F32uL%?ElHY Y!{=MPW~pl#-? z4{>Z?7^A}3Y;MOgzhhZvedud$?nR5O?u)YjZ}|HD`~9zdi%y*S75enjhvzMOn%nrq z`3$afOmhs#6+f$RYT^7;*G!klXw9YD9_&$=Rxn5Pj`ot<3%jQ|{S98(?R02ChvQ?{ z%=`~E1%=Mle1Z?(NOcQXv?)zI=JaJ_8tbjFu+^qFTo@ITS?=mL<%kFfSd{)-=eckD z$HgDYTfJ?!8{|owt1#Riny(R&pXVa1v|U>%9zzrceFaANSWkg*)-p-lafaGkCiCxvXkrG$9CEm!!>=NlJxcz|fhuBM@ddI`b|L@1P?D%qg(tF_q+5N0m)l6U1 z8&a-2H25`kFiLVI3r>7D(^kV^_KLu+g6>q?2BGS$nx*HNi{_nj5C0y?ztduC=2Z5K zjb70#8+6@M6szhEP2l{n!#C+#LBL9u!-3pfJ>PYGdwTwT&68>pTk9=-*uhyM!Cr#h zXrGL@bw;z6_+u`{_w8k;m=7*#aBiJ8RcgTe~DWM4fC+CeU diff --git a/graphics/pokemon/unown/g/front.png b/graphics/pokemon/unown/g/front.png deleted file mode 100644 index 4f665124ad75e417bf0ace92ab8cdbcf4b30c3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 359 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}xmvF#qGy9d9)+ niFYw-Gp#8KejvzRC+Yu6I3c^L@cnV1hZ#Iw{an^LB{Ts5OVXO2 diff --git a/graphics/pokemon/unown/h/front.png b/graphics/pokemon/unown/h/front.png deleted file mode 100644 index f8ab66963baecebfe44700f3f7b026c8efb8c610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B} z@x#W|-U^G|1@bJ!l(M8ZTvYZD-T$<&tD}uya^sJT&$^vPl1yqZC&<74wa&Ju(0K04 zjL*lf>zes2YlzBy&3ygFja>%I?yX!C;i3@#pLL?&5~KTf#fl0Peob)>`#r(n&HN?r_^VGoyXba{bD^_6BHm2DdP_TH&td2LdpI-rLs!MlJ<1rl zsdOfj!t0yT{p$rE+-uW$F@g8Sty!G$!Aut69qmGb3k2Bi8$^q=Fv@@D7e6ZZ_7d-x k|J^4Ti;@}^{=dd9Snl|>@YC9Apwk&VUHx3vIVCg!0H|w)Jpcdz diff --git a/graphics/pokemon/unown/j/front.png b/graphics/pokemon/unown/j/front.png deleted file mode 100644 index 4c1f4ed2e7e9197af9358b2a4fe4cc798206f686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}W4!eYZ|-;(Yy;t>4O0cQ{kg)K~1^f@T4RU1sX% zG&{B&u+ct{y^i6%hofr3p#?`L$bCK$zvq|O%p+3gm6r1EzjEbD$VK+On}S!**weWM P=r0COS3j3^P6-+GZ#foFzWd6+lL!v%)RCLQ}}$X{^7FHB!! z{(s@ea*Hn=+xFKb;>&@Oe*Z_(ViEJMG_P2B$cn?SR!Qi!(21KO>fhT#C%?73CHHk* ctm|GzHnoU%HzQ4s0X@m!>FVdQ&MBb@02x!6ApigX diff --git a/graphics/pokemon/unown/l/front.png b/graphics/pokemon/unown/l/front.png deleted file mode 100644 index 6bb837167d2b6abb6a823155e817e4eabc8831d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}`7?`xW{V_FHDtaaVtkQBO!f3LMwJO7NeiCa@XAcL`zmOc6MpE=)(fuAEv&QR tc?I^Y;hJ-$ayru=d6fl1Gtcx}GEB^L|EbyJngjF%gQu&X%Q~loCIH;Zgwy~4 diff --git a/graphics/pokemon/unown/m/front.png b/graphics/pokemon/unown/m/front.png deleted file mode 100644 index 981c7f801cef39c3ded6b338630cd2aaf95fb083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}3_G+1T8sP^wzYeWkSM?<5h~g3LZ}Vu=oF*y~RFP zW_ujmdyeg)@j2VxLgB>i>CGFC%yA2xBCy(#9Txrh{vmqlH!wntDaBjv{p>IaE6;)0XYzpm^Tbd1O=0~wG zI_?uFvR4k-8(^HaNsQ^&jDCan33|sC%(-?vGFR~XT?tdunys&nJ>0NptANy@wXx!d v?A|5s>63i4`l-W_djGHDI}0AV{$QPB*e`wJeZ@gwpfPy5`njxgN@xNAbd0@T diff --git a/graphics/pokemon/unown/n/front.png b/graphics/pokemon/unown/n/front.png deleted file mode 100644 index cff797db4228f772b217d70ddc33c0798571e5fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}>b=CmoI2tW6dcwe{o*d`H{zV-nUG;T*1}cKlqsx?Ot^+>ai?&5x-)^?Cb9@ zY^|GLzWkwjU0}nVL(<`5@yvOgPmCNU6?-yUDEljK2x(wxpbJwB;%kTn)P%v_D9Et5lC|n3cGB z$3&(xN15b{PR{(ho2}>Gmxv{2U6PhF7|rKsF-ZPsdf?QWV@D=d@kT^XSAMcIHG^w| z?Yv%BJC{3ZyO^KsJ|T7J)scN{HJUB8_afH5n!aU~bNjyq^JJdn9xCrJ`~nOF22WQ% Jmvv4FO#q&SsI&k8 diff --git a/graphics/pokemon/unown/o/front.png b/graphics/pokemon/unown/o/front.png deleted file mode 100644 index 8b8e81295940d22f7179edabbbf62cc84b0302db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 417 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}YnhwMwK^O-`VL5b)nhrejYWT@>Vexr?>c7pXeuRmcQ{Bpr{r|T3qDA`F4j2d zYSO(s8&Al6V#~Qwu+isFhiK@b%c2Ra(`@XUU$8IcyvFr$^Sbz`#q3Xhe*OHV_Q9Fg z?AI9`GLJ54FmCu}dG>wSBJK;@O)AS8%<3i@CeOOT@MTg2gJc)I$ztaD0e0sv3{y9NLN diff --git a/graphics/pokemon/unown/p/front.png b/graphics/pokemon/unown/p/front.png deleted file mode 100644 index 99a7c98e23c354edcf868a958be7b666a9b5664f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}4^>bP0l+XkKN{Nbz diff --git a/graphics/pokemon/unown/q/front.png b/graphics/pokemon/unown/q/front.png deleted file mode 100644 index fe94c27fa08183942bb46d2893bbaa72b646e458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}wLOmE&SR@{iy0E+*0MzSh%5JQ;K=t} zZn?m9PRRc!{}-yVB**&r9`}iC$aQU7_WS*`pg=#z=o>o>)t)aAf3Hz2ckIQb;Jjm% ybs;wUUxughDg|u&$-G6yS|t4D!e!5HR5IFd`OXbr?Jf=U34^DrpUXO@geCybbci(o diff --git a/graphics/pokemon/unown/question_mark/front.png b/graphics/pokemon/unown/question_mark/front.png deleted file mode 100644 index ee0ad284ccda57aa62780dc10d723dc50b5abf51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}=jzuCRPj^mV*<-(U+okBmf>fx$KXO*!sOPMiCdq3FDY5? z{O*kym*!Pd+j@QvmJPzU7cAI!^_BAc2OFd|ayYALEIqd2knzeEuAeQB@7gg~A6EP` s)xWhTm-AgVWAvd7CM|x?zwcq#{noQ#p3urdpcfcCUHx3vIVCg!07UYM@&Et; diff --git a/graphics/pokemon/unown/s/front.png b/graphics/pokemon/unown/s/front.png deleted file mode 100644 index a144e27f539a01b6a017e2b8076c6c970aaaaa57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}tE-TIK6%-$gH@aEy6N!??sUV+eL1cC=0c1@odve zJAT8UBly7HlD!?vTP$olZ~mOndLkuG?^t(9a*VrHR+o6&#yv&0C6#AiPnx>;`cv-y r)9eprZ|EP3)IX-8v*(EUKcW4c_tPU1|G)7DdYZx0)z4*}Q$iB}%~vw4yv$htyu;11%s!npUXO@geCyq!-;|b diff --git a/graphics/pokemon/unown/u/front.png b/graphics/pokemon/unown/u/front.png deleted file mode 100644 index 39503f01c9d708ab1604482d8515d73c33b738b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}i?ouH`aUP#2UPlUy!<9sQUGRr*G=3`EpE7>U!wZ2CLLp>7VZ`UhemI^{&5+1>F2R zCcbBP3bcwT-gcTI#dh1lC1(4C<)I5x6`8+JpLxpFYHQ0^t3G{8=l<6dp0B*UqrP^( z!tIw5pTAm`PCTyNBPr3nhyNdiH;OULlDRZH)`%^f>BuW()zv%OYAmiT zc`%hjVUk})+5V@U6W^|VbZXL)EqRK822G7ScKE3H@r4{*DDrNGanXkyW%<+mT_R=e zCo6TNYNA_YCm&z>P5A;xXv`}4L)=Gq==ADOjea(7>rTPVSy^XvSr@#je|07P1s~(B W>f(ZcJRV@^FnGH9xvX#T) diff --git a/graphics/pokemon/unown/v/front.png b/graphics/pokemon/unown/v/front.png deleted file mode 100644 index f014289bdb84662f320e827118a5de202c2a75e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}SaY4@)A*U29Fbg}a8}pj$BxfG16D13s8^N1X6f7*boqPeeEnP1 zJr~Yy^m-xQt1cuL+PH+-(xPYKyA3}-*G_-M)+(@WIj>LKOZkJ3QV*{2nEW~T^jZg@ zryd8mCb+O97z@O>o!P_Sd8VVOVN*%A-jYQ|HEfb8OZ+fCNwRFmidHbh0vqUU46MppOsM*Wq;nG-GHHIa2GE-fp00i_>zopr0BhiwrT_o{ diff --git a/graphics/pokemon/unown/w/front.png b/graphics/pokemon/unown/w/front.png deleted file mode 100644 index 829804ebfcad4dc7f422be86b7bdfec7b7d46e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}N;z%4J%eUp?Q&9K0j^vB)g;HlSx2JYD@<);T3K0RS?)plkpD diff --git a/graphics/pokemon/unown/x/front.png b/graphics/pokemon/unown/x/front.png deleted file mode 100644 index 053e2ee08ca6b256fadc55cf69fc3229b746c057..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|eg8-ip*RyBW{Ac(NLHF+6`~UyH zfPlb~B}t5@%9@E&8n0Ix-ufzwe3EH}TUDv98olXEgTe~DWM4f?Yxu2 diff --git a/graphics/pokemon/unown/y/front.png b/graphics/pokemon/unown/y/front.png deleted file mode 100644 index d8f40e27edfe2f09c1d4e3d038f0c39dd0759201..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 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 Ef{p2b%>V!Z diff --git a/graphics/pokemon/vaporeon/front.png b/graphics/pokemon/vaporeon/front.png deleted file mode 100644 index 1ab0c7e466eba15458f1cbd985be244368eabf23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)Px#Fi=cXMVQc_5K3YYbCkWTT54h-i;Ig85D@?W|NrKs&CShP#pZ+F|3RF+QV?@{ z2r1Q4bETbcSO5S5HAzH4R9J=WmeG#lFbqY<33Xd1%>4h~?!9&bWhI()SF3%&8qk1x zPHe|%`TF|AC#FK=FZq;j|B+ub<*dt}^Q)#!*Hu;fSBHPcIQdKg6dg|~jSLct0Nl|C$McW?)w4-8k)C>mfp5Z#lA)Yg3tvy2z66iasvhh)=cD6 zf&n=A*)6>x)h($&01hGQ`20wqitH?xH>Myt&lb>&$Wmx1r5M}5c3zlC7{p3RctK#! zU#P&lpjsj@7k04%&p_Aed|D}BQC9``NI~y+wTd*Z7|06*>;VL&R9zM*<^`%tZ-KWF zJPq?Fk!RSjF4}-URDfCD=kac+-`^@`&My}QVX&Vc;=cZJji&%bKk%#T(||hy4rFBi z5OAue?(@6{;FiMI>h=2$i1=ho32;l%;2~)HCuNdHmOO^WB;e`&lQJprn~>oU8t7VU zU%$4Yn!$ON&7(4$5u4#3c;jJ^5MWDfT)-<{{au9uA4z^138GVRaWKj*%<RQp3+TqD)h9~ dpZLT-h+hcXA7ATT9rgeK002ovPDHLkV1m%DL{R_$ diff --git a/graphics/pokemon/venipede/front.png b/graphics/pokemon/venipede/front.png deleted file mode 100644 index ebabe585ceb1fc96c90da3618977218f353b707c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505 zcmVkiZxT0&a@ z;BgQT7%=1sKvs!5cdh6eumAzdbP1u>5&>$?2$7e}F(^b;r0RT6jq|Z!7viE>1zFhv z+v@^2Lx}(d4mycsQ|E8yh0ZCofJih**&K_d;gbbTAiyRmOWCSuj=d9KBOo9?`%L<) zqWCamC1aYK8BolR_4<=(w3V{^KH*ELZ02(9a(Cc= vdk@{Stz9-`qw_PDt%mJiZm|5MNf&(s^onQ)|7l_}00000NkvXXu0mjf=wZ(S diff --git a/graphics/pokemon/venomoth/front.png b/graphics/pokemon/venomoth/front.png deleted file mode 100644 index 895d4aeb97f62c46447127a7e12495ad1695af82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmV<60w4W}P)Px#Fi=cXMVQc_a9DVpi@o;V|JAJC5D*a6tlnZubMD3eoQu8q`1q{F#bQ!9q=S3K ztc&2_;Fhs?ga7~nUP(kjR9J=Wmg|CaAPKIvqos zLV6qvDjlOB(Yqf&Zw%@ANau7M*5QU>V-UeEfkV0o@Mjppc>*W62_yx1tFI~S1-kr} zj&3x>+TcA&&$faVkISWh&?Xrv!B7Q>>hcxun^MY3LA~@81NdaKq-Ocm3x8EJRYBYc zd@oeKZGv7d0=a}h3|@hc5;uDsY^Su*535!MtdMgR_#}+Sh>l|2>Yy7_Y5@NrPeXaU z(M-?E+KdXFwit- z6UjM%SA1cM;!qH20w{)wvYZNEo?)c}C%hU6WY(h?G<|!7$MqJ7r;l98!D`6xq-bbV z%`(aT1Qvr7k!Tz#6U!`_<0{fnw50000Px#Fi=cXMVQc_dwYBT|Nqt1)esO6VoH09YNS#S5VS#B|5{rAth6yHQgcBm?!BD7 zlxmQO$hdj0eEf6*vC&(=rN2_2m!iyfKL8Bt%6>@uK~XUG`9330Mm^vwE&1G&DGLV3xG2S z&g=-lGcmRZKzJ4~ZqoowLm?Z+{0wY*(@hB=Jnp?fsW$?<6O_x@AA|u0HNb>}(Jj0z zJx;>mG@p3WM&OJ=_;BDY%iA4em}j%JF3)(3k>QI+Z0Z40N{RO5>e|cepk-Mo85jAw zQp_Ghq$MpWf$@B~kQp+UCqPV^Km`(JVOwnI1SU$d2_mpC=lx`tASNx{M84JliNM`V zjGDlRNQtViK1Ghi1>8Q=2pUHPsEvFw@Cif|qsGP~4v{`rJl~HzA3Dg#PT&|3WIfUX z#C;&2?|}^na)gCR4PZRtG0{(kA_7HKAYY=9z6510us=I+TwLXtgtD&dZ}6(;E!ehF z|NbV+o>^qW1;Ixg&n!d5Ba}CW>gU^5=kf73L8#gWVn&}tF@JI$m^sQvDY48gM5WdP> wwr0a^!#Gf}KrhP#J@336r{|6RTmPbd0BU;}7cSO+H2?qr07*qoM6N<$f{_0bQ~&?~ diff --git a/graphics/pokemon/venusaur/front.png b/graphics/pokemon/venusaur/front.png deleted file mode 100644 index 0d21e669d9a6f4898ba752fb256616c2602a85cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1187 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 R%?khk002ovPDHLkV1jCOVy^%I diff --git a/graphics/pokemon/vileplume/front.png b/graphics/pokemon/vileplume/front.png deleted file mode 100644 index 4b0663612b371bd813cdb5be8f98c27356e0d9f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 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 diff --git a/graphics/pokemon/vivillon/fancy/front.png b/graphics/pokemon/vivillon/fancy/front.png deleted file mode 100644 index ad26aa4798f4fd2ca655f89f5574d8404b93b69c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmV-81jqY{P) zkaCa>0~z`Olyo?-n~)4dfx_yGE3i{iz(ByIUOee@6etk5&)ty_O-Jd$f~k9c{NHnY zk!8&uC35L4RU8%ic2J_U_CEmz%vuNo%o3FuIrTK4L}#>8cT8bcD`m#gGqIP2Hw7T5 zWz9Hm2mt0}(Um&87|{SP+eL}i*~N$kz!XpyiV9nt7NN~`zGg6f)VgKHxB1;px`tJ`#`)bV`pCCREe$pVcOkpTmF5OF8_7T&!F_;E zdOI5(^!i$S?_2NeV1Rdxiza}pL5aex#R34%H~G59^cockd~KWSou;4xKXBX!V;uw~ z+5mp9`6Z~G+W6;V3n15?@q3Ip8q}j_kt0JG8GtLuW%+T$qoKZE70RM0Vq+N&ra*=` zmjllq3~x#)7gDe!O;0qy{9YWhmt!1yYXLjYvcZ zeUX7-gp)E{(4dX@iR$6Sw+i$qOfXfXu|eKlN`Dq>*cB4tJ86Xtv( zUOEN{$`lB(2|ojp{h1_51`;ZzSp$JyL5AZWlT{6D%0%)-EX^9dmcJD0x|DwbZqr9l zPvDM>HMo5F^mIHnb@>#S1{DpI2nUnN$w^;R1w4m-inq91X9_5BG?`3#wXu#m%N8nt0m%bw0s#s&_np`R z&t1v)sK7je)ngr(0RF&{^S~wqXOk&dIlqDecrjPa+#Z5LfLcREqz|bMC;*Hg@OgSX yk9AUfq|^gf%^e4Yx{kEVA}WzswVpF9Ns0000@`1ttH*x-nmpa1{>U|2BVz<79gc$kQQ2nYzkxVX3&P-sv%g)cLa0009- zNkl5_&rA_ft;OBy8ZK~f;{2FU}Y%FOH@KHHeAeAeyGZ@+JLcFu8DkDSOq62;;9j{`a1 zFaAfs0IQ5pz*u-IbV^nr=dVa5D4W2lRMtS*otVqkLjnMHCrXqb5`bnZ?Ui6zB0vW} zO`-(N2OaJKUoJ_Y1C)J{<`67Npa3YF0t1T@1hkHff+Gkp5;=VG)&UNWtcT-Cuo7P6 z$J#T53EEAki(wVWqX}3G+2obk@MsX1-dxDtacRxIbUm(P+0(X?1PfP9v%V* z=y)^(Nb&->6nQFS^%x|kgc2_PB5VZ>isE=31OzRK^QtZzz??x^pok9qE?aM#8DJkW z0KY0ehXDec!5l!EWr{}5noI@YYX(qMD+AmM)UygGp|%((!5-dJRYILD2L4p05(WrB zODyzpU0ML9CdVE$T{Kz4U=N>@3rGQ&K(z}>V-k@8(C$RS3{X?8dEXWS0bF)4KWR!` zbX+Qwnqc*-=rP!i0y^Wq$;++qA- z6u4*m8(^AP$L(aa5l;@S!mfxIaMuAsb@CLlchb@x3a-~j!i%%>RB=nEm9-wGNy%Z6EH64Ds>!_bV{JmHQGc(rg{ zFl1P1M{{vdw0c$eS*ROALOTOsDF~>Cr+4F_AtW@SC14Uhy}cPChoiFyv`8TQJN-B$ zkj~mDWPnX9Ca%Bw^6iYR!V19aEFiEpxIF%J^?Ar%cpG8?z$9wEm<~)Kuxmsn2Um0` ziCVmC0d#2019;_Bs@-!pwgL;lCf!vSMtR3I0wA&gCqV?Q4LRP(=12gy)jO8sb`tY| zD@ekWpMl1_0|6vq)<(+$mjxC8lo06!yBio6i!DVBSIE4_3vrf6H@W@gI5+N$ bp1uA9iK9b+xK*2O00000NkvXXu0mjfm>`^o diff --git a/graphics/pokemon/vivillon/garden/front.png b/graphics/pokemon/vivillon/garden/front.png deleted file mode 100644 index bcdc18e854edb163f6e6b259d67d4c01b31df695..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1010 zcmVUuy_E7U;qFBXizxdz<8L*Xuvoqn23P*`1ruMxDZe%_EPII000Ah zNklrh_ka-G{g^~+# zaXe(}*e=N$Bu;?KT4xA>0`cO7yZ?j?F}!u}dv`~fvaFP_0r9<$-|yY==s2sd8e988 z7cVdPF;EMF=Klx`uqp@zCc<0c;Z{%!R*VupG>uiG+z~zdB+l~SHh~cKNmTT16No3J z+G~krMTiMOIYdh=D=1+O1Y${XH>LB5BWU2JLIc*|FanIChX0g%7cgS0 z%y2v*M4}a5>eSXXfP#CX+++l{VN?bB5Q(k%POug(BZ*1zN9z3a8U+b}7({k2YuIj~ zq6z>&q)vp%@DSJ%eHdN?eFT2nRg|%&HxdWJ5-ME$OEnPXrz*Mz25%7<8311t3Gy%M zy`GX1gxWg=%9sODoGTon1o|q^@u|la=m7NLxl(El4AiI3eagUY>fA{ng1s;5R0+=l zyGkVyWf*`2dHyLsVWmN-4>=a&2O8+20P@dy&UC~y;5g%p{1mGO=pYMwN&dI6fM_e^ z$vbp0qy{nWGywKXK(HKF2@;1$2^doUAgKU?QHe4T=s-vJ!2&J;Nds$W-kGka9TG&C zvK`^eN)f=VhIkujh>eZ&a}vaTtu%nw+LoY+;Z9MUogHF}aEy5p(CL}9^eqwNq9~@# z1P*i`a0H(KPw3mY1KCk=o;8zUVhVVm@ZCEu6Q(dsULFbI1uJN?R0D23GzvJz&oNlHHwQhI+0SUgt#o{q|5G&V1ij6&@3<3gwDS1-)mN#3 zh-Yc#Q_Sd^FvfnlWOU(OwXH3oq-z=+cJ&YSbdhimRgC4af9}@}@NP3*=!fb9mVN)5 z-|iZKZ&rXwT?6~_`08jzM1nv&tpZ$~NZFA0FVAMOE#-67TLKgc@YrWmJ*lY~KJQ zylXE4b2GXU3iZPRe**-K*dy>C5jeVosob#50(0;b;<}9 z0GFZS(HtPbLIMFag{l4CTM|$Pt<)Y;TEa~L6|8*0ZXNsV=8>WU=U0AbH~LypKIBf8 g`}*Ks)7L-$1L_-iswg~1y#N3J07*qoM6N<$f(>HDZ~y=R diff --git a/graphics/pokemon/vivillon/high_plains/front.png b/graphics/pokemon/vivillon/high_plains/front.png deleted file mode 100644 index d8bae72c4ee9b8d98c1331c295cf5a5930a72500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)47n$Y40=fJm4S7ytkOXizxdz<8L5fCvZ(`1tt1xVR9oNch+g<1*!Y000A4 zNkl z^VWX^4w%&l1+GOj!xMW!gU^VPY`Vg%D086wo0w(yHUWTt6BX%g0@$h4(ITwgBGA<; z8hjBtw|2M&xSCR62iWAS%CI!0KmlkU!2**C0^qeX1dITuXyE_6?*QF(-y?_=ctw;2 zjpYj16V)b1J@ASOpblLjHvMrv-T<%olm&N=QSb)mNg8VlG`J9`(7QFjpb@kJ+ap3i z0~m7yY#?CQK?jN(nI@nRKt+gu8D0egn(BBQ1T0}$!cR<*6|}Cv7$D zo$cSVQ)5hiR=j(d$CcqF%PbJy1(3)ab%dWIUzYZqV$dx2pHW|FVb|3@H*br(1ZWXM zyQ&9aUphb@eLw#u9k7vSwNEjpr_UIB^pnwpvwGQDo|i)@<$xbZdbZ2o<3#x3ihy?W zv>6jnmKT?GBHVv*MS^F|AI;Pe7k{4Bfc}C7Qh9WKcwh+x*0OP+l*3rw|9NtN+)$RI zNnliNmr{P@A2H=~9FN3Wvkr(+S(ftE*C)p|VtFwEFfqa&^6>NWmxCcL5+evU1q|Dq z@xl9&6e9#`8A2v7MEN`aMS$-x4q(bFEc|MPIRPk`1jLA9X7fSl1cKE83h{yn`t3c| zNl?p304YY7R)+%;i~%9DiV6@Y80$d50ut`GeK94V9t?l>m(&U-08}vH4>(-FI-9&w tbm5w{aXwMEit44XKV7#M_lCY1{soa>n`*1K{m%dZ002ovPDHLkV1jJLtPB7E diff --git a/graphics/pokemon/vivillon/jungle/front.png b/graphics/pokemon/vivillon/jungle/front.png deleted file mode 100644 index 1ab8f99eacb156b2a39aec96438eec9c6f1711a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmV;M17!S(P)5)V$iM&q0BBG+;J|p8h=2$P2>AH;z__@O5I~?{AW%3Uc^**s0009f zNkl1%-3<}*h*bb%8qsJ~iHhWK!6W4A!kq|}t>Gz(VB+J^}I;{J`EH+2H40MF(|3{#K zU4c-bLpVD;t`T&^j#T)Op4gR22V%3*d0xQ*%t}=F&k0~sshtC8D>z0FRT2jfJsV*I zh_I!=2yi4=mBXN==phiB6co@@^b#Z-ZLk;tTG7ETp&f}pG%+zOCj^kX?5WimDgXr> zstP$ArgByXa1Rhsn)*2V*p~^xpHu7Ah1!Ee0hXe#lH~Yj3QqtuqD04V1frnRGysL9 zC_o2Fg#-wv2`Oy+qza%VbQ}Z>s3=l`uK``g&;Wgmp!%bPVr+m2YJlpJvTFcNHE06l z^l26=5mo|lYCuf;(7;CE*A1wMy9#hCfgchu7c8t48sJ9YhoAvqdI5*X#vpi|)e1j> z3ILY|k_eMX2~ZJySpy_GrVn5-+178N`;(RfZz2IZHX3VPtY+c^D!ST2E7eOFr z7@-Y3mTs{8GW<&W+@loQz};9dF(;s;6zVzHjFKqt^II`Lqj`$Z0v^kXjq_73&A3!wzc#6k~r2ux11WAdzl#4M8=SZs{gq x*T(F21f%e3{k$=+mQ{=FtUa$T?v~zm{{iD4SCot}gD?O9002ovPDHLkV1m8yjrjlo diff --git a/graphics/pokemon/vivillon/marine/front.png b/graphics/pokemon/vivillon/marine/front.png deleted file mode 100644 index 5ec8a8c465931bb0c2829dfe7c2d83d8c198ae47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmVh9K%0!bKl~|mV;sH?S zPN-ezjA$1&)Cwt{+J(guV;AUu&`O=?M&Em9gOd0qEU|n7Vexu5nkK#E5p2X9@ z^|T9<&Vh-iar~@16+S+W58G77yKtNkfiiADBJhvC&d#2m%9$ScWWu+JfK7KHgK7X9 z$4T=2?9J*Sc-%Thptq+}rda?k96e8xjdJ_m>|~K{bUdgf##NQC)Yet1bb8hLy`;TC}3pqcsgQaW>x%6ohcGkF`H$ zL?OJ}0PI7B6NX8rfElekKp_wSMQdAF$0qX`2`C8sg;-`e&;oscX`zIB4Uj;e0|Asm zuWfom0^~uRrY|YAFbJT8m0hq|z`8Z~N}MW6MGCRX{esOQ;o5z2Na&VJ@ S&R)9!0000Xizxdz<4mQuz1+e`1tskh=9PjxL8n76uDXs000Ao zNkl-cXBeYL!5Y7& zilb;>4-{;>@*e>Wj50z2ZBZPd!xDjlJtB%TqYI;=jBz*FiCLzu65u@9i4yKr0(>Er zE>`)lgo6%t8luXFC1%m#0k=KQ2W&v~%O)otOtI7f)e3Ez_8aLjf0M13-$D^pI zki0=VvH(s!>_dAL5oihRkpRS_Yn#)B(m~e!M8d?sP&Y{;7(xSqnzuBd9qI{CAqTD( zni+sLkB$WF_CD8iDg_kj zE`(R>ZNpL=|2TfJJm@ji21cOQ)2UKu&t2PrM{yj#I$MU1ZJwNTnE>_TJl=Q)(Pn%U zoe2Ps>j)LRd&9KoGJL*x(0{oZM~6`pU_Ve1DrNO%J0-<0gNzR2m$#xC3_elYeA)^X zV3r)((1ZTgIgYacb_r;^R+M~=I*hI#yIehG_v4!Z^bqjfxwLMW9fp0c?eyi=&(rS` z0V&%o3Nv5Dh(;HGjP9J^4~}i)EL&D8j-=7G*Bj~sJjfH~bMSF_wR}{rYG7|J%+(z@ zz~#yEuku1e18gn>bV>?%BDYRAH;4!jm=3c5gT9m#^7hH`hFp;H8Ms3Lpn!aH{$@kU zss_qAU=eB)^67^^?=e7o!U2{CEH=N#8gldP**jE_E#@$0KiUwLZo6Z9z#vJTp<+m9juR3e zz@d@@Esz6D3nk_+020VK5I`yP+PXU=Kpxa-@<^$L%K%DP=>?l5tXr3#6iQrdqR-K# nx{^pYnVsRfdbt1Se;@w>`lpcY-6M?q00000NkvXXu0mjfU#q*c diff --git a/graphics/pokemon/vivillon/modern/front.png b/graphics/pokemon/vivillon/modern/front.png deleted file mode 100644 index 2bf593a485494b5f1eb57d0af76ad7c4c958623b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1049 zcmV+!1m^pRP)7*duuPgEIGE9_~28Z2VZmT_hwe|%8Js#hMD(%`+eWe&Ztyc zJj!b6JzWgfe?L(6{nh^wu)rcC2v`euflfUaDEkYdG`4JGQIrpKJAV>cK7E&f*7=i= z*m{?MZcU`!x}KM)!@-|~Xz11)undPO;OjYwa#t+WB*VPK3TdtL2mtDH5-S9WT%n|( zpf@dyfAK9pBGRpiN6Cd8*=-L?{@tvKcyba(YbboGclj z%40r;Bl}IU*!TSo@k^#LLKvXN>(b_L`q~0*f6o+ZJaS-C=45F4!=G|MfBu;P0)z+! z7|E(PP?CA1egV&}@ks-@bi*E&_>& zu(p6J0FOb8###2)s|YJ&$v6*kdZM~E2?FLpmSsO)4!LLglF<{u)nCdQvhiVd9$yYk z0F!YQ-@fFirU4M_@nIIfje915L|FCAnT;yiR(kQ6e_SVvE7i-xq%dW}c`xEL_D{Mx>Pb__dOORk3YU zRstFOepEFRx<5-e5hW-OymL=kpnIoCINx{Z9?G8gkEf~@(02+zv}}N0aCC8aAjA;B zPFMumv=;=`;G@^C4g#1wngeioAP_vedUg`vL)a)ebdh0j0OQ zdN(-y?al8{2>NS|vAEkhMD;CrDG4C0;z`dIDE0{CU^;5~YmP7L6< zI|o#7$FZ3qZn*3MeqB@%kPrYUk=gAsO8D=-5%3KH8>Km=wS1VBu( zwI8~30^$J)ogY$pg_{5*l>Q>0FQcz+9w|9+USS^J=o^X2Lryf`HwX8czMlRE@d26D Ti|Zf700000NkvXXu0mjfz%Al( diff --git a/graphics/pokemon/vivillon/monsoon/front.png b/graphics/pokemon/vivillon/monsoon/front.png deleted file mode 100644 index 5dc6429009ff96b7a43a963a95a3454c8d044b18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmV;819JR{P)BjE6vw54=$hwB0^2QA7dsu2B_Urx$t93YGLfOd85Cj_$3q}f*A_zO zLK@JR5;Ay;hd{Zh0dHEnCH)5NXXv|kCt0%N^sqs9_q*T!-T7q0SlmoldS(_|jXe*T zjCubNC}2?#3RFaGfoE9@Otzqu)`pr`RLTp!tyf|#Z=Vuyu2-UB<0%2(%GI@HKCf8D z1eO=k;#+fojR^(7_?*JzG6M1%<`pR5T$dnEY)(OdHW+{g?kgC-GS}Rc5qXADlejwe zz%bjo1m5ELA=f1DmjRiuTbu-VE7;$b@W;S-d9D+VIR^qv2C~D;fD-sX88v3h9%X32 z)&h{1&SW0&Tw&oSAb^$>fKse0Kqbf(903m#0MvkA0^|ZR5TG}O849p-LD?XO*5zy< zH@U_6MahsWd=2o;7T-&KdsH@DpyGImfLGf%kfzWWT}hxrHSDE)H?{);U>$6z0N32F zr?Mu;!VnW=tEXS5!01}`eFThvfLj7U0U-h-?9;jcfhIIX8L(Z zf#Kb%hoowHZT%mz0 z2netcph0nn?+|Mb=^3{Qk$#O1MtC-|^&kKK$=m|S=jBe7Avyg0_%k8kF0TB!$-Bcs zl)ibOBafoFe;uoy$kt(@OAmu@L3RFpDu?^d!~q3d_REBIFd)EjemUSO;KV5bVS|7; zIehGOi9i5?GC*E8dHrzTO)%s%NoIhX^b!Th89VDHNSvk!IJ1D8eE9P2Tt>MFj4A-! z3}i;{Q~PsQ?P3-f(JmRVjslY8s$7Gmfhe8=aTRFjQO}B=2Gjv30scZ-0c8M-(14Kx zak)kbkfKjIEvNu^C8|JNO`toY6I8~GKxRMzSR|MMPys3dpWPT{5|pA?6qasuMUgME j!uff_h@$DBHGTXC^RH*N#jE7m00000NkvXXu0mjfgE*0_ diff --git a/graphics/pokemon/vivillon/ocean/front.png b/graphics/pokemon/vivillon/ocean/front.png deleted file mode 100644 index fcdcf11a7bfb18176d7c8091c5a5886d0870c2a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1050 zcmV+#1m*jQP)OEO3kG~(NaPI$)fB|MTf`Dn^&Csb^feN2tCAex5v#iXC&{o3B(z^tN zu$7Pq-z6ZHOKINw9e| zG!pZv^T8bwKqQeHp$00v+sBu2AR&QB=pG)I^iB7$0CfN&1YIZwc~k3=go{tA4@o6a z^PT|&3HC|C)t@=JrYoZ49!z)`bdx07y%RtSz=#35!g!KP7Pw|w;v@zjm_l-uvZ*td z7=f;oS1quC$s*RX0EUPVRkSRianvnopq})k?Bg<4waFoeejgG&85 zq$?XDbkPKlbHnCKKq3GWt9Wcu4T!|#C3zTdTpX3$5Aoyy2t4guU5GF8Jpb`15Or}=w&NJLT_u1$ra6&?Y%|}tSq6ne?9z3X<%=E?8l9j>-?*7_sPWTT)A;sVGa3^{ykNl);LkA zbtrLA-KlC&{qo({qlEi?p~DN+->TdYFPgVTfWg@nqr82%xn+nKudk=0fL6GyK793P zOYvs}6#ghsEB;n0QtHa_l`W;jx(2EvfCu1NQ$20{a|hMfO#-Yyk9D>A?b{X&s>Zs}950~qn(vc)&I@2Z2$2Y_;QyIuS~4%CVpcaiXqT(=Dqot45L2fX4> zoTHQCh8{p-4IM@Sm{=@ukPgKjv{g|+V8kNfdqFb24cjRXF82Lfuvn{Q0) zhu2dA)PpU?u>st8#h(Ho!O9DE&s=8{9gM_(MYPW*@>-%SatG6S$H}sjpnJ0Y7kP2q UZL4SB^#A|>07*qoM6N<$g7dHNp8x;= diff --git a/graphics/pokemon/vivillon/poke_ball/front.png b/graphics/pokemon/vivillon/poke_ball/front.png deleted file mode 100644 index c474cf54c2498e987cf412bfe398c2846c2546d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1029 zcmV+g1p51lP)l*O6vxShU43UsfT^koUtATDqoHy70qmYWfF0kUrJyu$NE{c))U_Sb zu}A<99OWUyb+U#mgob+X#KjuYLAbG<0)K}7-;tC>%SsOtNZ$M1|NZaXJI~uZe6jU~ zD2Ajj13ppoKLQ1?DG>yU6mo;kb}8V~1}lwcMPQQ^U;S9Fln+ZZlqy$3;`@gL)L|tp zAFFkVZDgRz#I8DcFvAicwI+cKNFgc@>kah#vd5m!!v2ZYx}mBH0nmj+1vC*q(p4qIt^hD#_?OuG>Q@M)0Gj$_-~gYV zD}3k*c*{U~ex&s-et3?&0Yb}4CCSV~uch`!bO#q$D4&)LB+O}9z_9U>XnUj_6|`aa@lTnLb6KstcS zs&$mo9pD7?zBn!bwf}?G)WoJ85KbY$3Ie-`yfKLah?anX2}m615=aFD$IzVwNaCAG zn}LJo5=aFA817BH*a2n=pH004&NWU8Q^sro2u*1Iba5^AhBQhqOmOvLrJVFO!kT4gm zJkQ6`yoXoX<+i031A>7U)C(_?)BHM#<}d>Qjd~d2?7e`2lSArF&FAWE?Y>jr&aEBO2v7Wo9@XP*2Kt{`*R8oF%Rr3?Ud`qN zpxgSlWeEV$Z13X=Flu8BrtR77>Fb-mb126oEP)Si1Y}`@MUzVp)qvjn(g1#o_R~ zfg0!je*_v>6odjD;VkgDMo{AmO7Yh9!lF`Y5SyLO?FtXT>_kO$n*ds++F5~lg@*~e zEMf)b6_judaF|nI0<3dZ)-bO?0mP;R1g-0`vmj&Uj*Lk#ULP#F%F zSq#t}-T+OB0#L1}QzIumyq!pdZTv|rYq^I48Z8Y_Q=pv%8qjA54d7#fx(wAht^qBm z0 zbG(d~M))U$)?hX9sKiLu#d(5&YPGA1SX;Ze2vHF0bH)mAR=^NZt0>OT`#?pRMn1(y z+y;D->H)~xdf1UROZV@P+4i_{OJo&mUz&)%|4qo5n^>=x;M8Z61N-r_gZ zceZaj-#tn9i=AfbwnyesutWhirsryA4_`;VDil3}n5E`5>W84E8&|)67cK#9If9^E zM@1;N2oQUJuYL*zWSyyhZYhmEW9;E2qk(tH% zfz$meVZW6l0ve4!jX)9kM82*7{iYn92@#0BtKDryATUg(fm{ez+`l~EMov7-yR$%+ z)50M?+$QivF6FRM0hXl94_xv5+mmBKQTeHqohrbj?47w{_h|JiopTvWkZcARhuYb2ma#J$0dE=nTebIvV+QeJoCKoyfe|V);F8Ao>;}^@}~it^YA|c z4Xg`<0v*C#%W4*906&s}4>8@7z0A?pDx~l|mP^;YzEGvAB!0RMBu&kg6 zj{t`y1xA3FvpR=m1qwi#6cn(iAOKu#uowYaVdHPhM8H#+7?w*zUG~(n!y0hwEH%(= z0xAX0V{@H6tQGH5>-jMXMmSF5wp0LJEAIGE11C6@Cm=y4pkh!c36P)8fQ=jlpi0rA zLdIE$^A&_cjhDMqH$q2+Mw$_>0fyqtsncIs1#U7Z)_ zDFUk0o=Re8=i(wkfz;=e3UE7Mi0(mAoS*lAk}`#Si&xxhLrnxlQS`$EB2$`}za+pl zr96XdSX^Xb(#;LPL%e&-F@=IWIUE+*WfpDZdPatUdb2%K`TR7yEDm2~o*bF0V5tHe zkIGK%2wxxHR(;+E$ujd9_3(8n>F)K0oxGO>!?UnF+d!Bzy2yT5YGK`%c%7j zW3R6mH5{c2pYyYKlY1dVpAYb_D97WQ`On$;I3{2>xClHAjDIy9&ZnsYg5X;ac^bI= z+W>l72$UicN7usv5(;=o=Yer4Jn`b{d?2Fz6+nf+oe(jPG0RN?s)t|!m`sHD(moMl zznm@s41wG7et5k7c_7O27DpAE2d3lc0$P!57 P00000NkvXXu0mjf3<01_ diff --git a/graphics/pokemon/vivillon/sandstorm/front.png b/graphics/pokemon/vivillon/sandstorm/front.png deleted file mode 100644 index 7c9158050a637f9812c66b81533b12b79d4ad81c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmV;v13~p_362Mli_Lg8)5nu#fC$R*x z3W_iWILs(80<3aY=P;{40Z5yI2BsARfM*OXMu1T`_-)$=@bebwhTZSfjo^3VD^w$Ai@Z`o9KOv0V8MvQt!h6 zK`m$kG!)Y;RwAhd;57hAF$@3@n6bENK!t2;z=y6`AasZUXC@$y8X$lU!etT%764`x z0d!pqg4bDnK;R^S8UPf&yvwDK+3NfhD?IRds%z0VQP%`3jFXdk!@bR#i2K z5{PYSR{0YGJX^{$$akxYJW9Hy1$cyK-*RoCpiK65tNb#L7fLfCqfp=3%vQcU$uFzD zr@1dr?NP8)1FlbHr?!u;BVX2i)d$IP`x<2lC@o#T{`0%?g}(EBi0gS&Bv^fHV*l6m z4`G1b#GhMEEn|#5yJFPvDV=(qAG{t3Yy-YSKjO`3>fh1LzTV*YdUz4~niv&f)8T&F z9@20a{tRP76o(%hK-SSfEcUN=cMMS+_R<-^7mu&bcaT%V8K5^5Di-2^A7GXp)!!&o zFKhy;SW|tm@%`m7`DX#9ibEyD?$Po$+UFrgP;3%-H0+CYp7BAw3B?*YxJ+#qL$RL6 z7N7`|K&Mv}w9&|QtY8{Y1u8~uEb!uuC<>)m6QCrvkr>edEdDLDpphd1q$oa9-@#uJ zOaLxpN{s=W?@dM^po4@tV(d)|C$NJ6o3k*>;bzSoS%$f6yrtI&!^_KqF&@? gv-A4m-qN?-e=OTGO28Mf!TD_rxb z%h(DAd|o~P)ZCXzbOBhwfGj}D)+DzJpf9bUOTGm{tB@m(rcQm|3Lbacg#p_X^H@{> zRikw(72_VJ5r{EWuP^fj*~08x0G9uINK)q>$M?G> z@Z+wOdz?6OQU)R$m*+s(+vOpR8~|(v#0$X1jg*GK#M`r0+Gjz;S#YOB3ZO~S5`B5| z=IJR5ta4}pzuCd{i7*u1&hwL#7o5N>WgnOXWQ>`bB)5drD62d(oj_X$A zL*ouBv>wu}3V^NP!DssT?C8)ELu#i>!1wy=k0*!v&U5r>85lp)`n7m{sP&D9258Iy zp+*&dy#3*g*3VT!i-1SrI9B@Tuh!o%jN<_jdGi3NbT>loMYfs0Thu8LX^*AFQMqfzgBBx z;5v~W|6+6s+ZcQEfa_r$p`Mt&*`@gm4B!_cv||Un#(4qffP#ukY6J@a6kd72Zh*MA vc%`5?pTzxaA#N1qBzL+THy8JUzUcl3L#cXx(gbBY00000NkvXXu0mjft;6Uf diff --git a/graphics/pokemon/vivillon/sun/front.png b/graphics/pokemon/vivillon/sun/front.png deleted file mode 100644 index 532b4a019137250b45a0f0a331e1daa373f2a33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1019 zcmV3KX=tyAjfG_|60PyHYXizxdz<8L5fCvZ(xF|^Y`1ruMxR4l7<6u2=000Aq zNkl$#`1ZJ+m!j6};y2^k{q{oV6C_a0C7y!BT{-TFcm zS2y@F&oe>0_MR$!(R10*1HBpAUuCOl3hR*7l$g+KtfY$X)NW?b@=wBM? z?mfLK5y2s7LTu{vMu*QppjRZ|01MS*Sd|!R(z=cS;NFVFFr!3wor0%=&8(K_;O~}o z$cWO$!|Q6`R-&7G9TDCriD;;sCIcWR(EuYRimB;@+6)1dBJoG=ef1Io<71+TlFR~~ zAj$B+4e$zp6@ahx=muJzc(wpWr3gS)Hnf99%Hv~^@bSq39Lp4v5CUvw)JXXDv%#E+ z040*LiwGnV<7Hq*OMsU9*m^i%#5_VL+W;gum1>Sf@{CKuN|J|5KrA5~00HL50K#3D zLEO+;F1IZZjb|(uh1OykppS&srOY)zBMYQd0~rYBgohmaFxjAZXzNh}XlOByIX#ZO z+yXSV^#wp7Mr7^V03z8YPBYi)f#=(hB07s`ce<5F(&d@#CtX%^sB0x4&G6SzB}Ms0h9mO%mx7fcIDb{!@Kd1Nu=@_x#)10p{rMt2agfD${WJG%9sF#HG~T zPf97d4X>Z~4xbua)8MxU@_os_|In`YEbzX6-oJ1_oA96PUoytG`XBp7B$)ThUzdPM z&j@f~j;;<4-&(+!y}Sj?;jv@B`E+(@LeS+3fJvD8B6x9VOvsXGufGiJW7dxO>-CSX zB;p7T^A?~0%-9^f-1_qn=nM{X)duD`EhoVwn0_s<^yt)RwUohE+TgUD6we({LSnBC z^vq}?SF8ClZ)tI4KV-!002ovPDHLkV1j$D;er4F diff --git a/graphics/pokemon/vivillon/tundra/front.png b/graphics/pokemon/vivillon/tundra/front.png deleted file mode 100644 index 36239fbe94120a237889e08894be4bd8ce9cb894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmV;k15EshP)Dw0EamRMt~+~c@Fam6hNd?kU&{M0NBc4Fangq#Q#+t0e0W%7=}$lsjy?i zbaS9C@(M{HECMnGA)5L+c{f*ljE#FIDCprhnDinEnEa{09lJSjihvkH1f4O+7&aFo z0ubF>pe|4VvJ|US$Vm@}6M+f~|6;><-9rJjwgM<4==8oQK%F7bfQu1iH<0JJ0hFK! zMDiR8@Nz*Bps5zE#>PsJ3*cn|h$w~v06aC$oTPh&VD!_yK z7&>Cy@-zTjO5s6hVGw-I;ynW00CE6oFrg_-A|@c5i~(r<28e1x5CEG9crwM7F12e| z9J>(~7oq^#gZ0>>6hoC4=P?4Z)HRvJ#>R9SpdeD`j3i*MfhNLsnx38Yfs)dNe2!P# ze*!t-q-i>EFQBDM)8r2cuyrYWkc`r4;$DP81Kh>CH!P-aMg)hWG}%vn)bT;dEv_Tq zZ2!Iny2*ZeSWVt^dTOG&-b^!-fi zIYmHZwC(NZXQw*H62KHNI$8fT)Hw=P0x*ef-sb~#hzx;34i*!X<#y80zz#;31!R_( zr)!y7PzGcSe-#T{kpjVr03~ri1YJM{*GW*wkpNU==MCzcStbQDfW??V;=2X}3T7e@ zP(?yrG4{#=ih&BDHkndT0#Lz(zF@10>#Y2w=)pOKeo|VOihPsRpI?^`_m;lx{sVIz Vc_WSpzZd`j002ovPDHLkV1gzinCSoj diff --git a/graphics/pokemon/volbeat/front.png b/graphics/pokemon/volbeat/front.png deleted file mode 100644 index e4f17ee4d1544356a8b010c25631284f0befad35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV6q0007Y zNklo(1KP=<2X1D1 zgGka$2^fgjT6jHNTxu>;hnCiNsgt3+xYf;Fq{QcvI-Gsd?)pFotcY+`y!IwGZ_idz`#s(V@}F#U&>uk+d@D~Eb=3{{q#t_7q1$Gq+K^L>WmP* zNRB|bs~f~!CYh}ycqyU62k>g?f!l@85}@<7C(lcD^gxn};N$5y4-d5-bfGed8R{n= zDo-FT|9}Sii_Bz*oK1qaK7bwmu>EZapxc#i61%MblKVei<0;V%3Bha4;8dVtubZtg&DN+h_J5;OpwsP>3eS8W78blm5I= zrTHorlax!@V#F5Uwlz^;IHS90Y&sPGHHG_Wk4ACF?+6%QI1!NZ#)dTs{Hg3!{~5*= c4gSme4a7bgp-e|}fdBvi07*qoM6N<$g27u^C;$Ke diff --git a/graphics/pokemon/volcanion/front.png b/graphics/pokemon/volcanion/front.png deleted file mode 100644 index 2a35f607d3950e57134c5df044b3eba0b7dc6d50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1042 zcmV+t1nv8YP)Gnsz=$yTs6e=IDERpJ_jD~T00009 za7bBm000ie000ie0hKEb8vpze-E{Bdm4xpCM2b{v?8E->408sjDcVubYPU}F|D zM%?m$BqB!E2m~B&_;)c$F%BDnWSXiB!yMzR3Gjx~6g^C)IbsuFs-*>xA`TjWjw-IY z;PlHIQmmy)e}9Qy`E;rSW|EV7824PIg74@R(qW#0v@+A9e{>PfFi(bg(Y~2Cs5Dh` z$*`>KkZokB1jbs<`76VVRiQOLZ)hO{b;(CaS_jlJ*LRGmhNu!CPH0$M z2gsa6B|sc;BI*(fb6%D}hfLM?1C8)uT2$C3v@XH44be$+45A4pFUd!z4n(%aFh%Am zAfZgP3MNLje40jH7YU#;o(2$MZF|uh3J&RDiMmD_6>~hiJt+Xt20;MOx*`E4FF@)p zs0M@EZ;D;prf)m{ruq4*$CR-N$Wtdkm>CXG%Gjn{W2mK2L-1>B|dLAxh zkDQ;+?;QDl4{n``4ct28Z@=!3oOuGW@6UJR`zKQL&n^TDwmxz$Wt^yD`V5!}t-WP$Q%?cQ~SAcL1#3j)B=a7hO zwx|M@uG66?hrhD2a<~A5#j=)vv{@xKtS9eDW+f}G0PC55)Pw3yvt;=es5pdW3Hi*I zwWDS+<}!D-%8=5iKkfErdlNG4``JUf=tp07SwfC`Dn$GtE!pODNz^56p0DvFNoTAHb0C_JLe>j@4g>@-+OoGCrJ-@gkrIk|H^UX z(F1TOju7_DBS>EH>nP=2Aqzx^pdf(ooJb4Z8$rZCXw^Ge2FyIkzX0qt@B?xj6URbv z3?>r~u(5?#Q4Ah10GLoeAZ79x3s;hY2$?M!_X8x45xfzR-+d+Vls?NEtB>HW10zhrC2q{^YRTTh~uv%6UBGi3Au7SDAKbLXV>YcDa z3X)W5Jmu<#^D=p2^{msNffQ{#y5Q$u^LW4CJB1Jg`H7P9MgLYNS*vRqIfkK>1vwN` zN*Su<6BdjEp))3X^*F1oB`AHd54w4V-OY^6_4Qhkp>%mWD-5ij*lAJf^qz;;S+m7z zduRK?px?D%A2-F3)LbGAaFeqJ2bFh)1sn%=&g_-YkuYNd*s*%>1H^pCxU=dc8gVZG zW8nXZ3WM%3n+*{p;yk@=@b}=*1&5wlnE^H7k(&Uz#YGqqp*7L#iZrt@=#CSjZ6zG;}#9HzPy6~tzz+wUKlrr9x%CtEo`av&4~tW6#MI!1+wH(1tt z+It&A!!S5iP2-SPSUtI@LnQ@UeXepk0$|_(+TwLc-rVX(y1qL$e%k{`PxI-K*Y*{q zoEGe>!g#RcN=DucDd#F3-_XPRL9-nI!k4zV^aXo-b2t3S+ciHxe%-=%rQ5oFHw2*N z|M(^H;}%lb9jW&H{Q%KGcL0YgNTFcce};qa&`(`#pYHMbF`64C;pseHTW&i341 zUG#>CYEo36tti6LYv3~PJUJ^_&96&RF}U<##$VQ2VUNwfj&lG2002ovPDHLkV1mCB Bp%DN8 diff --git a/graphics/pokemon/voltorb/front.png b/graphics/pokemon/voltorb/front.png deleted file mode 100644 index ad4385d1bb1d5b7ae22ed66641ee99f6479e6e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`7zFr)xX!q+ zKtMpCSwP^bq2vD`g?EmI|C^)!ubBhn-n)8r%bLAEe*B0C27v`&fz&Tg z7srr@*0)m~g_;$3TooBbi~j#M6WDNdlSjc-&3d=;_dhwc&aGXuX3ZbZnzK5*3=$R= z&lx%%^4t=gze8i*$FRfZ`NlmJ-3ve5-gZ{H;b-mr{k&d|x&|T|+69dp6{J|MOFC#T z5boK=Fv}se;UHhrngePb3w;;X1}|;!ENHP}YnbBa7{*z_RQF(lAtzH|m&{w9Z*SR)qU-#OrvhG|KW540OxMeeR_hkRB zJN}jFd1{{1@|0&c6)r1#<=;6Z-mLQ6avtwbvCjt|=y$E$e6sv_^W%>FVdQ&MBb@0PbR*m;e9( diff --git a/graphics/pokemon/vullaby/front.png b/graphics/pokemon/vullaby/front.png deleted file mode 100644 index a24b2aafbef5cbf1828ddc99e859496c2520b3bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)$S@dycyMS~Sg@dg=;**$P&jByv2PkN6vn~HTB*KMRh4w$d?ghzm2$S)2&N8c_kc|2RxNwgKO%ErayQ5n zZ}n=j+=^Mq2>dU7zCilOKSbTky-ga}w9AYb4B@R|$! zJoaaxPnU1cE}!*%OO2!9kIBV%F_4~+_C)lV5dH4hmmt&bc+hHhy$*6b9(2c2%1VoR z1d8m+3Fs9LbsRHtBa7G~LcSc_-%>N4gF2Zktf+t+p$(T5J*ksIL7b17NmxX_xb*#t|`h<+WVt zj|RBmJqGpY-KdbhdVof2F#H0)hoe{3 z08y>tdTNb4w-h4EjfYgDF|D>h#rSBZhzEGU;JEu1>YuIOPrTFCuZTuW00000NkvXX Hu0mjfPx#Fi=cXMVQc_b07f!lv>_%DZNT55D*Y^F#x@DTIQ5$tXc@odny0_|Dbqqr~m-= zy?X!v09VHb(f|Mf_en%SR9J=WmEo>}FbqZ+TicBrdH=_~U)v2)nSlPeH=zkcjOVQF zIvj>8uDIe4M?icSQLORS5E7P7;3236 zTNj2H_YBO84#aT`nrx^7=Oe{k0gDLI*A9RNuR=Ah1nr?G0H4M&MeR0o&Y9U#4;8I^ z+7=K?z|zJODV|NiO4bClL&&W!(Bc&ru5>Ad(!B!DW1Dw_c8?_A@hS)po$MHh8R;d; zYkt!2s^Gp8y&5Qo6%WBQO{5zV(gWXZBRE`S8<0g9I3*XfEOf{_DNtRTeoUae<2Dpk zVix4HkwW8jGy-C0KC`BrK03$EoP@1br5IgJZ?_{ zpNP)-W?*@ar5>`8+!5GY>BZp*X+yn^cYNPrl=Xj)SH(QP2-s^pf}7w~!AHooq17?Z zbY4L07|zAq1g8xq$TTy_Cn*T~*(55(XG#vWZwVlFxNsf{7XLs{?9HxxDLjzAolgl! z3Niphh3$S?0Kg%g9V%x92IFdvYPx#Fi=cXMVQc_F-mh{oXtvuv@u$gATde+006YT#qQOlYGO+N|NsB)&4Y`aoQq=3 zw1WTu03?=20{{R4=}AOER9J=WmEDqqAPj|CP!B-VRh!NnDefJ-P(+F1#696O5`)vu8fam=caa_fd z1OZ@}D4rugoS6^*2ZD1D4FN9zc;On90XE$LTSF;V0|oSo3&Vhw(gfkm4*BIocxyo~8z$Yzkz-Cr7R}Km}P_1Jz}NQ1p-A5dXC5z@Bw=CuX0rF zQ>^ufRk6SbGt&T$XhPr=oh#!V98vce*db{7D6X3wl>MP+EPNH4uzC zbr~pifHvWr#(b_a4CnT0gn;XG4l4j%a-N>-0<<16He$n%G~#eICMMU7x$7j7h{3}- zg$vrXKsbihLYyb3Hwj~W+(W?6S-s@~DpLxsIQ$26^W4vA-!#gg-x8AG-_%S8E5JSB z`La~%(%q|BJ%)1;B^rRkZwGXB@KtC7DiEdZ-~bbZFg9Nq8bFUc*i+^v@CJk&2^Yc+ zP`ZfTfRLZY^|-VCHsWQVlcUmnLq-T?2{5<~4G8&FX1PIcp>Rf(ZRq5|J+!v*FkiNL z9*I9$P^w@#h+%DzSD6yUP!jX9X_2=exvttyp#BE;w-k_Gqy`x9bQRElo;DPrj&kJV!K_> zLWPt>^*tNy9Xl&*$h+NYhx2reLg&@hyW#yEyIpEguZjRq)u_B=BLr?t+NIRvIT9b( zZDaNB#=cxj+vv}4c;)sFI!Ru~#aTL64R555hSl>y!wlL+^Tc0ovDrtBUffsN?645Uvmy*}tomr@j4hf*Oz0&E??vgi}o2!)8r6zFg9 zLx};PY%b$p)joiMIoj--r6J&s$Dd%sv+Um6ASS~)J3ZRM5()v zN)%;05!ICMs=Shz0qS!@9npm@bRG$F3e-^6bjTP8MdUPeKG~(w@J)OvIxd<}Lywh0 zFxw@j>XTn*e5Lz=J3Ia~94vuM-^@>I0@I=B%@LRo0>s5!z;JM$Q7xDcpjT{oehDoy cuZO(&2XgC^7+HA3vj6}907*qoM6N<$f;W%6)c^nh diff --git a/graphics/pokemon/wartortle/front.png b/graphics/pokemon/wartortle/front.png deleted file mode 100644 index 4768f5f480668d42d69855295f741a7cd6607db6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmV+n1M~ceP)Px#Fi=cXMVZp1i>&tl|NjsW5WU6bDM4ytd&Sl6_N>MKYDyTCVq&a|VlhEV-o=Z^ zFaV2MAklTk4*&oHib+I4R9J=Wmg#cBFbsq%OR{s6$@{-;cV!0>2sz5XPSwIN8SiIZ zmh<)XZ-3B4KGdhAA7KHo7lPoap9bU?0OayYePf>NnGpI909W<$1n^X#mkSQqnm}YJ z+zE^ycF6(ny6*P?TLVx*1aP{D zL2y~<;R0<5kb{HeE-QP|ixhO`9>O0r5dLIR7kbEHCBFwKx*){RGM?H!fb38OD@z_tJsHOCouq;DMKXKQM>K>+^qMjvSONK0Lh z)PH|N-v}rTKSqE6k+xh=ljuAG#<7R~cDv004}el{IV!nDsLQB_vZww|h?G!I2jJ^w zD`BNqKqzmwnV|7lLl1x#%UgG_&H+3F5KnE#(4z*d=T zZCwG(5v&&L6#(v5KzzNp&DN7KC}V&2i|-0&iuji5FVKJcL-qsg#vJG-+zDs^0000< KMNUMnLSTYuuV4)T diff --git a/graphics/pokemon/watchog/front.png b/graphics/pokemon/watchog/front.png deleted file mode 100644 index 82cfc39e58bd6be940a80909a4bcc8c9cc5e9e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)EZjn74VR`tp0s+~= zV}J+8L%Rgz5U!j8JUc;PG7VfE$8b6xMhNI-csGjUlkqVN8fPQfY>r>x-{6p7GEwS7 z^JN%!gtJeA=V!V4cyERa;YJjgPM&;M7#1|Xe7(D;RN2Cf5jl&ggLU-@Y|*1ZIZ z)Hj?31B4+j@;BvX9vI-lT$Ui@fGj^O55b)7 zLiQy@QWv71&_MK8@}@=*7IfXpveim2mZHxrq?M-G-$k~xG}FTUv`S%VW(eT`%NayG zfGSa+1HD&eeUN$#u+mLDW{k$es+<7}pcH=q3KncqFk`#~2@B?1fN-mG6u5;J!hQQIC5!{|6ka#b z#zWo-cz|cTZ8CSwItE@w?3KC+e%>{+ti+c3|KuMWuIbPGVM1O20000?P)@vjPiU93ccMEvKsCQAspON9`j z;Fq5hO&U+(SV$mT@|D^N+O&uRhe9O7;q;cPK!eC`1`!f3UN1jr>XQe}3^MVhWvf(;R1!FY4A zVpyl9*Cu1kF!Ov97%aNhT?QFrnKw+Kz6_;Gp36*B1(+yMU_!m|r9mNJ=2<1MF&+Zs z7UatEh2{;uFVXC0gNho@wm^5f`@WX(_SN@deHT=m!nxNkR_(+T7Tt+tpRBAth Z_zPlL`RX8+NY4NO002ovPDHLkV1nkvO;!K^ diff --git a/graphics/pokemon/weedle/front.png b/graphics/pokemon/weedle/front.png deleted file mode 100644 index 12182258f850b6d598bd0e0a0cf3e3b135cd4c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmV;!0X+VRP)Px#Fi=cXMVQc_i;I;1|NmNAV#US9lv)VxtU=9l5NbIH|K@ub7#N%>Al_P1?wpJN z-pv320BTKM^8f$=K}keGR9J=Wl)oiW zEiEnmZ+*V?hxl{AmxMipPfBUp9|IJLW)WNgOwbg8iTBG-Bs2cwV7~msegYpRy5$B4 z(bMlQL4wj#tX_b|=4>GL12SaR266*57l?ZUen2_Tvy|NZ-XUtK%H8iBK_k>DFi!zC z)hxod{C-1pyXfmC#<4Y_tpZhkU*$NuXhgM9UW6D1d&>Flf}Rd6ihYQX&tinEuQ3h- zkR`mp;H!@w;=Ydokfjx18063i*t3KFD@vOL_QUN-u8Uo3V2grOu%44h5>Aeb)sqAT z>lud&OBn}9k-Lf7hkdg;3P2FTHBM=al+|&*5fl${utM-+(|FFm+Ca_L1xm4rc55SE5l70XH002ovPDHLkV1g>>$bbL< diff --git a/graphics/pokemon/weepinbell/front.png b/graphics/pokemon/weepinbell/front.png deleted file mode 100644 index 20b61b8d5f6fa5a27f03d155209eabb54882fb5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmV-Y0Px#Fi=cXMF6nq2wE{YtXiDjgJMcCqlL;0zuLBfV)?n@t=0;&Hpt- z-EEpTZ{D2582cm8TJs~&wg&wDrh z)dH^NACvxh&q3^aPh6%Nz&Phx{xyxvo&=BH*KRNZ62pDx63~0_zIKD!ci1!FGr%*{ z0pu3IEhmV=(>}NeIQIb<&S~E+eMrR>0Bzg&l$;PI1E~EaK8|3FYc+=gSp{$yaNlPj z-r*~Ofg}t71AG8_gS3AI;6RiBegQB8+y2Q8Z6qKAe3U^hihd%_Zi9(}1srmp&%&2- z09WP=AO(5=9|3*?c^2v0n!XCl`V=5Jzy`Q@Dp?pM3dk}9SZ?qw(1dZ4Bm!iKX@HGz z0fc$dgedSC;s!Rr)n|5?rb6(Ve1B8y)c{kG;I}{$`0ou6h{8@#Ky$gm*e4}s%7Uo} z!Yuu9B<|0LBV2zp(LB!)80BgmfvBz@0a?O01_9O)nnc`xGweoC0i`EryQ|9@@(AS_ zD!&uT5kd((>1Tin;88!HfoD(vANH3Up*yTv+zyauD5Y-iM}j=a^Y~3W3i2k%F~00` g!gsU3dGn9+2i`#=K$bzK&j0`b07*qoM6N<$f+O7nFaQ7m diff --git a/graphics/pokemon/weezing/front.png b/graphics/pokemon/weezing/front.png deleted file mode 100644 index d165c84785869db9626733fb8f75c1bf2d14947b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lluP)Px#Fi=cXMF6nq#np@U?v%x}DT7*zy^GCaF?*zHwAG~E5D*am|Np(cy{x2CtfW$$ zQexF}gAbIC?f?J-BuPX;R9JPb6(m!}0v zrfD3r#KZ5OgS9V>9}zC+fM4`b^f$m)c|8E;uS|iZAkTSjU!VJFU46l9Vtw8T_q49% z2FUvB>m9(oVc_fc48wdgkjj4efpwpo7WW9gDTm#c{#32CHfWByYE(prfSjjmB8UgauVG?_g zFajPNCj-U~QnAs-CUQ_B$WIaDdGOyxdenWRrKg?8h9g!!jw1p32CRRp4-TT}c@I~F zQ*s#Tt!zje)fJbC3P@PTpaANg(zrJftoON~;{sCTac{cLRYdDXuI8|VvgxF3-g4=| z`%R^aQNz}sq4z%|mU$(5Z`&^V3NTGEB``Sez5J|x|7oy(qgVix2rve)QCXU`WRCX= zKqvt6L#PLk#W^S+0!!AT?qsr44qyO?nz$W&ObNb$nnAEW^a(tDB1bxP*OcD7gAC}F zA=)7nNT&W&f{wo#urBx{Ne(@L4W7#6aTvg5I!%@V0CZ-7g5@m!)j^eq=wdaAJ-t~> zD>wR(){WyqP8QI_2~+gpld`s;`yPMNvjxhCpB%CeEByz8f}KfdJ+ zy%~?*Y3_YveIj%i`6e_Z_^n;PuiRe)OJNKscl5-$y#OO~Wd-}1^XlI6rw@9+a{9%; zPx#Fi=cXMVQc_tdv@6T0!RC&Be5f5D*X;N*F4m_9L=4YzvON*;R2OIN;r0aAJT)Jg^Fu)-mNyH04it~a zgH7n^L_CM!zI!zHb0mDiM-84TZ=-*#niQ&lwuPL5)@J8D=h7*xz;}i~NwzEL#ZFmV z7^;GQ2~usbPqv(jDub4HU4YsjzqA#(B$bt;3zbb9Xb;;2F)W)w8jrrxbfL~WAb}{eFSU^BfFfceMC@64Xc;KiI`1k;jIB=iC84~?2MZWknu(tf}>-kTaHZXDp~c=V1jG*AJYRnf>Fq=QUC z62<_~sqE&5js{tlYK1;xqRKv9KSujDNHJWi`;09$&m8% zrXjkhG@D(#9plLw0A*-0+W_3>W6YwE0rlBfJA-cJ+BmP$LE4WPXue(pdQm1E%(5}! za5DdX$S!B#waQ28hJ%zFy=$k3-^_F$0@H%iQVNd`F#%=w=f>DiMId@Wr4$-g(Vkm7 zKd{pq20SXAn6n0oU2E;WEmV`g7*jIg@qP*Lg@K#urR0!Jo+%F&g__Q1jBWrLJh;1+ z1?Tz7rJ7Y;xZu59-fK_*R{)Ee5jJY?cKHKT0p}o#x*0b+aQDlAW<*2n{C0Qt?!mw| zw102@#9tq8ega5nFFU#(5U!D|o31eR`pSr5`6(W2`~l@cnfpqNqO<@2002ovPDHLk FV1jPtDp&vj diff --git a/graphics/pokemon/whiscash/front.png b/graphics/pokemon/whiscash/front.png deleted file mode 100644 index d62e69f3c3aaa361ee7c891423015213bb6b1253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 zcmV+~1JL}5P)HV%7{(99NLD8tGgNH3s1hhk+*47750?5? z8CUDe{3;=iz04P*OI7)7xVq$De%*l@_qUlO%9z~rk)wb%<9sOa3c>Xoe#u4>*yjCq zfY7>)NLBxz>b_)`ph=_0T`zzQ=Id1b7BGbvZ%==t_mvRk>_t4G{_qAMTWHd6wNt!^F94t&<^KF6O}Gq7 z_b|p!KGx!RN-32QD~Io-Df&duFX?V=afjcTw4UIH;jXvSFODQf^={z|i<^eVlEoA{F%du=oJ25OjB*Ex`; z3htm42mrvTZth&xxpK~=}Xgg}^H6JzI`zhb#& z!AoKLBB!a=1no@e@xd(fr#t|QcEZkB1LEz359Z+Z4!WG56B^QP(rFlaV})W;+I&Eh zB%yQ8gCmQC;$@m|n~=5+!Zy#eWm(oL&^cg6CXd#-((Olc2{gM&a$X#j_k1|Q5opWu z1h6`kO%%ZKU}%nT#R7SK;UhED`%dXZtcZCe{YRX)hO%yPHpClzDn*e19v=1@=vHk; t(Re8U^FA-m<-a8wUJe-1a{o@Z={Hg~Ah{u>$@BmK002ovPDHLkV1fXTeOv$l diff --git a/graphics/pokemon/whismur/front.png b/graphics/pokemon/whismur/front.png deleted file mode 100644 index 3a4c69d47bea97b1cb29267672a887fdd18d0d74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 509 zcmV_aPY|R000000000000000Pf=uX0004q zNklWm2&HS{G9O-1h@K+br(gm{U`>Q6A|Ybz@tB(BW~gu@KOj-ZL*~|08xul z%>fibcFc~`Pr<7J)xPib5XAXZSWsFJ);JZR?iZEpEI_RI_&5esQU~;OY_TYc@o{u) zDfc>nGHA6GyVd9&t(0_l>LU)2*M&YYKa3)Xg5V+H0}w*&Mqp4(>FeMv8jw4HI_dyO z+gbzR0HJw-u3Q!#0M}}z{;Jz4Xka~nm6TXIhHPME+FFs6(goJ4GtYw&d*=wIHz;xh zgfPrt-{V?6bBIO8lvS?HGT=mX1}{h>$S)V=2ka|eo=-6>6F1P`p-JOBgZT3um9-5c3HQ=Xr^`@jVe9nmvF z5K6@7`x?=)O+(o=XmRTaFydf-5r6+yf4hDFHo<{$Oqz;X00000NkvXXu0mjf#!1)? diff --git a/graphics/pokemon/wigglytuff/front.png b/graphics/pokemon/wigglytuff/front.png deleted file mode 100644 index 5f5ee7e91801dace18d21d092adb4cdb4ee23446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)Px#Fi=cXMVQc_i$OvE|NnDybLQUW5D*amtiASol+9{l|K80~q>CV0VwB#^b3qv9 zF);uD0A0M?LjV8*97#k$R9J=Wmg{c9Fbsups4s0d-v4puO9B~bsjL2*b|fUIdcOFQ zINWZ3O#m1DrCcMx{UQOTiv*bP8bJZq2%3Tth%OKq5s66Z&#krsY(5U50k8r<=sg&< zN-^ybkTnNOLJ2^w?o|;gRr?`O3&EBr=>TBFxmcB^{URZ=hagb>)bjNQ7N7b*0BRBh z4FDoyuX{jv?5_l<1rRMH7zNt$$n$5vcLE6MDTq(l@63F-OVr;3&{L_)tMJGl<>Kb& zU}<7^wDV!sy4=?p+s0kS&oLe*~5~kvfh?zX950IRp^RBLICC zri!3%jeaE{CaZ|N2`F_lB!)WjE}+iXL%=j``KO8VfB|8TvVa>-RlWHIIKCSqgbif@ zuMoBXnagP>gtUK;koRvBau@rP00RKvjGgr|m(DGazT4Ga{}`wVFl2w!(gi@ShvsEK zv*!Uc96OAGc8<`OyfM>FbZrEcZ^Jt=eG1Ys{p+`W0H`4wi#Po7X8-^I07*qoM6N<$ Ef+#vCF8}}l diff --git a/graphics/pokemon/wingull/front.png b/graphics/pokemon/wingull/front.png deleted file mode 100644 index dc5fe2e80aa5f955bf24b635d77b4baf98e9216e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP)&?C2@pUlbFt3$^%sNUI5h2RhP~%l}G4S zRwiK0L*Yv$CdXMA7-}g}B!BvC-~B$Nj`5#DpLGDkv;%OUWgr5OiVU==Kq}&ZBA*Hc zkn-M71PKK1{alc6V*)Cn&uF>ua-Vkj1oEgBD-b0P1W9b@JDE(Gkphvb4QQhtW`52S z*oV6~8$g`<8CwO{u!gKG5biJ8K8kSYDJHl&=MomM(y}E^w~)q= zW5K7@_HFl?(ZyoP=RYoX^)~@nTzzr*-b&XmqnsK*%_{V?vGpgV6CyZZZ*FR96B+=K zHTnMf-I6nC07uux5cc;kcvN1LAR!Wsgh(_J(7h=FK@zkG!Y)O4>-{67?LK!4%1b_{ zRcg%BE@7X8`LGoFq)AMRa}Gs_kl!{UI^MR(6*53~-vJ!sZ{r92I#AIVirhp10000< KMNUMnLSTZYG|5c> diff --git a/graphics/pokemon/wobbuffet/front.png b/graphics/pokemon/wobbuffet/front.png deleted file mode 100644 index a8efd17ef78e378797e6bc36293753931c27531a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)*CP=J7d`1tt1z`y_i00000v1AHL0006Q zNklyQS?ScFZfAyfk@y25d&0fGmM7N0ss^c(+YsE zLjYI))rV>uB2pa?uRc~10RHa0BS0g$3I$S250DcQ{>k{7p8&OLQYy3FbM<}FvC)I} z(r*hWcn~NB0=z}2n9k5ZVa9XB_!Q6`Fc=1iWiCL}DGDy?Bj1MrH3MUAZaQ%U*#S1@ zCd|X&&uR&DDACD~9aSY_^M*v1S3uX5Bd`KKM2tW&0P)tmvW%z!-gieKT;LkOi722x z-k(lizkmgj?Fe85gZlP_YAukgz%G)G0Ddn4Ie`g*z7wD#0B$W%H<7sBx&bBvi5x#^ zE`(Ywa9)+@hibuyF=7X~}h#&cbOT>>awhWw!={(ZAB zkXnBZpsBVgT?c_^L#<@T#iIx8tS>t*p8AJbKvwwN_kH7)&|+9&@vHy)=Nur~Pi2M0 z%eNmd=YVY~|N3|R_uoG~K$l3d0(t8Df6v}Ah)o~|1fIQ9*p`P!6#CwTXroIUghYhz zCsYH1W}$tF;+!tsyY^JDT)U+R0*QUf9O&*9EE n%mTz*jhH#*DAB&|zeW8AyYkZN(3_)X00000NkvXXu0mjfG}0I| diff --git a/graphics/pokemon/woobat/front.png b/graphics/pokemon/woobat/front.png deleted file mode 100644 index 793607dc895f1ae8c555e8809ae6759e7fc0bdfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^dK!`|CG_Si@0004~ zNklvCXD@fMfceGP<7~hO!#);DFL)(q0mYjmuylv+2qt*0i%XUP9Pfv*#gZEaA44vC zE8CCe4-4^(w8N?H%{cyU4ISTwyF#F4GL$)kF%(7+`Tc427lsTVm=pu>yfQao3jn&s z5int&n>G4phQ!|HW-S^3D+I7bz=R*1@kz@DxKNK7G6VqqiF^)7di3q$3Aa5ITPB4& fI3O3@tFHP7;R%Gd%gkvw00000NkvXXu0mjfK78lV diff --git a/graphics/pokemon/wooper/front.png b/graphics/pokemon/wooper/front.png deleted file mode 100644 index ad14f25b21eb0954f869e912b0550e50fde9dac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMv3P)7SXH7<=pY{M^b z>rg^W8QJ7V`CeseZ*_9(S>ABIckX>B51>}9e^TQwyJZ6yQeIa8En5NTF31~J0bP6K zx-QWJOZ0>-`j0t49tT80PxO_)Pylfe&2C3H_ahxZgaGX#U|x1R&hjJo)r`hf5qQ05 zzL3As_DIbr17;`&UVdH2B)XHL#DE+P=or;Wue9Z}MZR<1p}lIZ$^h(XveUjZTQLBH z3Lr1bvXo{)Aebeg3=CJ>oX8WZ&AQSSns+22~ilu902A9QO2Nwkn9xMMh zK*}TsOx}lsJT5g?VFNfP^7Sc)yl*^FMrwLm@$bN()1DGYrxpJWtUL1e^9+%GCY2w7 zhc6r>;*`cLFi}O_WVPx#Fi=cXMVQc_5D*YrT3R_dL34X*IZ{C>F*!>Z(;+*qhk!g%u9Bq!B!6e<&I2y-_Nod8 zaybY>Kyvsy0{7e7=X|J~4p0ON+o#Sb^I;#{m+ zic}MOZ>p^UT;G~!@aTacL~wLu2Y8MS!Ae~Pt>O9M z@HJ^TrfSEu@t{mkHB;c4#!T-SZ;oYM@Lb@WVN2yew+vp0FSJppJzh`naFa=zRk zI7D!BW@iR0B~2BvyMS6!v#XDgLuu~;VBs06dK>$FLkP+-enaxp0!C+4&tt&_9Cu*a zYLIa1ZS;Pdqo6X}-w_bY6hM~wKMbGx)UVVRe)<)6K5fgp00000NkvXXu0mjf&}8nS diff --git a/graphics/pokemon/wormadam/sandy_cloak/front.png b/graphics/pokemon/wormadam/sandy_cloak/front.png deleted file mode 100644 index 5d08516fddb4c74b9d4a85ad79029b8a2954f336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P)Px#Fi=cXMVQc_5D*YrT3R_dL34X*IWaM$ds<>jIjod(|NsAsN;%cVb7E3b?sHOu zb7BAh05`@C761SN$Vo&&R9J=Wm+6j!FbsriLck<}_kY}-vD0Js2LZB&R;r~|h-N-} z>~QpUd&kd*NT+`21IX~l0O&(!0im~tq0_=R_5wOR^g8I@NBBRvNdj7gku`cwW=)Q09hQMY$ZCg@50in0me#T1wqsSZ05cTp+2RYRcZwTa*8uu z-)KX@%Cx48_0vRk2o$G;uNb{ayM&@St?QZ$FnR8r(}T$-H%f3oHod9g$4{9F?uUIn z@~z1L;&K31FUkmw%|t-1UA*gwG(8B-*M;JW4TPtjNcAWUJqX3*&#BZq~-2TmS$707*qoM6N<$g7?h>^8f$< diff --git a/graphics/pokemon/wormadam/trash_cloak/front.png b/graphics/pokemon/wormadam/trash_cloak/front.png deleted file mode 100644 index a15ba6b90670d4895d2c1904e996465bbbe6e542..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 532 zcmV+v0_**WP)Px#Fi=cXMVQc_5D*YrT3R_dL34X*QaMV+TAYJQb9+i!v}$|*|NrikoB#j-00000 z00000090*;5C8xHl1W5CR9J=Wm5px0APj_aAqE`Y|9y8hB;BMbp`dNj6bn^NmHRj! zKV6ome!hT7{W=H0`o{q3!=!;Qn_-x2VcTW_lReCKFu#xf2Via|E@5sNh0EwYh{%vW z@-P`dVjS`zF*ra{8U&aDh9HuLIzZTXmYjfhZ$^feux?u=tVk)z8;r!zm|t)}s2&(Y z>_k*KxCd98-*aFL_G=e{GsO(Wy02b)jX~83_p4!gzFn}R0%uJR1Rkrn(+zI&ra17k31ZY#M4Bg47 z;al^Ae@;$t17rFH;)KBls)HIq9wQ*18(Uv#YzqzQmv%#q%b$Ac7wZGW WBomvY+;ZRm0000A@n diff --git a/graphics/pokemon/wurmple/front.png b/graphics/pokemon/wurmple/front.png deleted file mode 100644 index bad155a3def5ea2e55429424386b655b61aed1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 595 zcmV-Z0<8UsP)(R7i>K(mzWBF%$ssNVOt#dA)YgEv>j3gNshq zb8zb+QR-1}X?vrJ*nWX(cc)%Q>2e+AhBJ#G4nlEr5UiU+!QN*usR-Jn*TF#tAKY-f zA9;Tgg#P1?2299L;pHEKI%3PK=fe9qiLyD(gDA0 zfjl6V-E&5V7y{0S0I_8vfU+;w^*Wpr0J>u2vb$vk*a7Fk6#x*t0UJg|0W$^8Z66?M zrG$dj(Yz3hac)5_1AsHIr~-tD?7<|EGD!;SE_K}#Jy4L}j-dgudGAtWb8-?+)OVA( zU-P;a$R^T3%VG*BzBJo|X9|=UtA1ZMMY!KAzRFeE+z)RwJ+cL_ZF7>Qybv($%Ov79 zf-9Tfg002ovPDHLkV1n+*07w7; diff --git a/graphics/pokemon/wynaut/front.png b/graphics/pokemon/wynaut/front.png deleted file mode 100644 index 197d67fdf8d4ea0f20e751a59a8941e9c64ae31d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 489 zcmVw_002msxS%jVcqlm7SYUv7c*w}W000000000000000!HxVxOA=obGnl2Q14yih?Q=5tUw05SqlhQRXz00Jp80K`y=2UsDt zOFo5g0HNYLsU2vQVnJLF0QeMB5-k9m;%+`mkUCv)b*64o5SYaeU}hoU#f`G&L7BU^ z>A`$dQ7L+Rc=(HuEqn(9vSmG#u;hTXyT|DcO2vU@v(Go(c-=t4fW3=X0@inauLyK+ zhrMKgnBk;5_NN023OPCSecxf@AEhYP&5^)62U0Xh;v}(Zy&I9DCXqV(L~&KpzSt*2MdTlsD=>6Y8H;OUj8xmp+1IMHG;bRl7v8NBNd=8||L4j7 fRV;sWi@%Of#K?WQWUNi^00000NkvXXu0mjf?3>UD diff --git a/graphics/pokemon/xatu/front.png b/graphics/pokemon/xatu/front.png deleted file mode 100644 index e90c44fadf83ad6e80182169700b909ca0bab413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0Px#Fi=cXMF6nqN|ZsA)j=t0DYT0qbG=t^xtJfZ`fy%wS)foTSJ7#KSa3s2M7zqMq{mYdcd-*&^FKHLnJ*x?CZL0v$I6x zNeMXp07wl62^=W^+e)-8)qltt6=0htMBf^_Q2|8O80Sv+fS&=a^ng2ok{-|!DCZFZ zkucEDDGdQYsKV7y1fq*D5`kL4Km=?eSb4^w2mzbWqKhDuI1(X{bI!_-P=uh25PaMd z>}j{Yl%kIyfZbq5pR*niy!R2?$(ZO%u7tGj{R9D^2@V%IFFA7rEr1EU0eD@Ff-=JV|%F z0f0)&15lfw0GxxT^gscK6n_FVB>->@S-1m=6J8FJ8-O(SlW{xRMwD_j($LYKpe(nh z0YFUXe6Gg<@#_dQjU5jm@4772W9E!cF?RdqEzq_Om-~)~yA$!U@A#%*bM%Jz4g4P9 bqhIv}aBv~caCXlo00000NkvXXu0mjft)%zU diff --git a/graphics/pokemon/xerneas/active/front.png b/graphics/pokemon/xerneas/active/front.png deleted file mode 100644 index b291e10f4f7db3b443707f267746388812aaed88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmV;U16=%xP)H z002NhKqe+8fOc71i{#9`kN@nlHZo#FTA_DOPw$^k|5a6=U%vpN=>PvBNhEu?00009 za7bBm000ie000ie0hKEb8vpwJvu!oZM^gPX|YzK$wKVTZ! zcI+@D>aEHH%Wc&x)q%pWBq9i#8c8p*3f;?P^f0Ql{R_IQr{Tf#pa)OlQ5c^6Jx`au zBT-0kJ>|G%1L;&-dQnsHdWv-Ac zvb+fRD1ehH>GnRG)d*-|Yx^7_YtYIFVE$JH0btdHoY~Cw;cX5)Z{Zia0;pyCUp-@J zfW6Hwh&;xd@A#ES;b$q^vz#bH%j<&px&^Zq7OwIE>2_))0vyjR`6>ntw~zARr>oz7YBd^!RrI@DagJbmxDhH3P^ zbrw)^Nc4|snvUtXbSXvV1gLuzhthNz8o1y*Em!L0SvsmOZm^BTAfDa?aKKnTWFufM zkwcX=o(1;kdG2-`@Q$n|8>di=1J>3}kJ;lCinpe9>@mjdi5e5Y7U+9p16|c(A@0$7 zcs#B_Rf!ZYSw3!zYfuYBN%W*X28yai<1r8lCV+yPNMaHQRTW~yb-5V<;U@s5%jDmj z%#Pr`%O{{~QwA~z>I}-1BVgJ==8F_?AlQS+!$b<)J!C9w$aWcp$Dr%6ofWW<*~|_D zMr2zTW4Z_#mg*2LRt}i1DWJ!?zyY5FjYldalA>$zF3_g!H(^2FsRd}EM3Z}y9#)%n z7#0&Pibn3kN&pSa@fM_R?Oa_C-U3jV39RXBu*kYLD@LxMXnH}>=?nlrE@*T|qx2ep zU=EPnEI@}E+% z4WW;6Ob0{+NkouV({`oeb3iCkEe*IaVVnA&kT~`D_zUea+-)JUAP4{e002ovPDHLk FV1n`kpJD(2 diff --git a/graphics/pokemon/yamask/front.png b/graphics/pokemon/yamask/front.png deleted file mode 100644 index 28a564b55b48a6375a08a05dfffffba672d96990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0CcP)lmtr zNM>??WHw;tY5w;gA;hyDw;<#D3FbVJC^Y;Cg;=l_5ZMt4-T_nqI1K`J2L=cVuSZ6M zfL&c5wt=AVb`PlQ<2GPt4-Akjw_vv6!VJ{gfCQQW5DOy7763p)83Clt!=o&TC}R@J z1Zxu9se$rOB7xO_991S{snhf5G@4@Wua;ub+JaEao7jLwyazD&ulR_ak5g zO;;t#p}XF}gaAyIex3VI$mn2UDD3z7P<8=6cir0z`~^eH%N2Y>0CLO2Me*Lg@6 zPF>Yj0a%Dg9^U(Y1_GfYfqMVa56%4QTx=uqyC0@D()b6aX&RYr3$Z_SBm3*^D}Dg& iGv<9=QSZ-socaaUd_m%r1+b6+0000aP!JFhz(6?oh+sHaD5%g-V3;t_@PKG|fJjJChTvjs0006s zNkl(C)$>fnu9SzM_S^xZ)bEP^J0o<^K^sbC_5cO4 zhbWM8dLMAMI###LOj-bRSwe2W%Sre|M@S-so(V#3B2;q{J|SrVP@R8&(nPZDBz+=! zP|82innVM7mQGWWeZ;P+LPw;xcn`1#iMj42f<3~%0b>yGJpX1|qq zfYsS7M9lSAHw=H(nLX&+UJ^Kt9VLog&v>|ErdR9L8B4ZMk-BhVrHvl0y6w6VZD*X# zm>L6ks)h?^+lC$t&B0K^9RT!D7Aqir6o5@B@HUTBCE5W9MUTWg=zq~4;r+J(YuTBjE7=~rs#zIpiQ}B{OX98}aU^|P)4rxu+;2Yd2lX6{xp|zEEiPV66 zh-wK*T@QtJDMHv|A)t2X7VOhtvN%rk5Aq{=Cp&R1o!y~J={KG9KKFj_r;{WI|4GRY zR_iH6T}`9_SV^R01ps+f0-#c2g$3KM0Cgn*)MXYaI$@duKmmDfduAO0)Z!^G9$*{G zjF17G5xWbzS`>sdBk~VnEt1y`e$&-#k*y-43z@~*!5tt+(@mo>0(Pmz?i{!W)LDe6 z${Uap&#Anp8SKW^4tsn66mJ{q5W>@sXb(++t$HWYH|HZ!qTZ&m#enc_8u7!EXAoBPi^}EMJ{kI$kjW?)CN0v1Zy#=k z{tx9ndGf`@Ng#E6<=dxVf>K;{s_7gP_HbYLM~_kwG3sncrk5h)1mK&QVGxK-r?;aCdX3`+yK9{q{Y zn;_b&3Hc6vLn2>M6o(%I3%#+Hc;6NgV}346>hA&Z5Bk4XzW^(13$t(SMq>Z~002ov JPDHLkV1mg`TVVhI diff --git a/graphics/pokemon/yveltal/front.png b/graphics/pokemon/yveltal/front.png deleted file mode 100644 index 7a259c51397e8038c25f2adc304acd0acc900bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcmV-|1bzF7P)Px#1ZP1_K>z@;j|==^1poj5Fi=cXMVQc_ARs7kaBwgD1KUYN zK~zY`eU;5_B1aI%yOTL_qG)JOoXavY571jJue7JZ-SWrY24x-q4eGlkOM`qHVaa1| zXb)NTM6{8NxaO9;LLMsB4Y3)_ZXd9j|8J_Q>kGC$oE@CxUGuw0o8KWHy<+vN$ZP?0GxM&(ZXn>rj>rg zu^x+*JPW&Zf$eSlQED-Mf-jG10-C!E(AyaLsCGHz!d@?z%UbGNE!|MtV8Qmmhfnw7 zLY+MA0OcllRhC4Y0XR1fLC69%0iRW&Z>2M~rqj#e-0c9;y@$^V3LLtL_Ij0PUf%&| zKh)ksMb~xarmhitxg=Q$Uu0g`2q1)j!}E#$QX!Cs->kI;1(k?T7)SNAT*MS38K^L> zfogR!ttf>$WMAM_y%1MY565~b5UY$z8P|7~2ueaK5y_mkGL@5?&#DGB%JZxiu(n2} zA(xgJGDg6!e~Sl8cOYPt!?ai6~64@Y0NGhL&AX!ShT|Aqr~|_W^+vEwe0w z9Ml6P>VaCRy9ZdiYh2S4arN>3-UEB%@OmPpYVqm5T-)OS@6O^{q^svYjXnf6trf+h zj0ad`5KR-{bv&oi;k5_6eh3U8J7xUiX07IbXs=srPW@n%$E((JIaTX>(zV4ypp%vJ z=dzr>&mJicX>=GP|LLTxAIrP-Agki%G?cJ;pmlfsc$cmRr=9F5&^vvI%9MSBd9Obw z(YyghZ7K%)7T3L#ec)w}@bF)YG706J?Ye-@B{b}`s4t(VtGy@Yyg{rLdAQ$y65%;) zR&29j|9j|VF92_QfX4UhW?G#R(jo&D^ye>c`vEn|FNoi35pOo@SzHPIY1IHYz%N8h zD@CJC-J52fJ)N=t0AMdc Uy@MBuZ~y=R07*qoM6N<$f_|$S`v3p{ diff --git a/graphics/pokemon/zangoose/front.png b/graphics/pokemon/zangoose/front.png deleted file mode 100644 index d9640b8428d216f95090af1e53eac7eb79ae7399..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmVPx#Fi=cXMVQc_iDKRlx zVq%MwlrE5CasU7VeMv+?R9J=Wm*JADAPj{i5Xh~l@Bg-Y60m9&TefrmZKgZhZaH5L zA%@vu_={#Z`cm(|1GujN{*@5=fX?#)5JTz$IPaNvieCLIAf!&c?qCB1=;IfF5L34S z12`u#nEl@wKpDIjF@3)Q{^v`WyxV~GVU0&hoMJyAfAI77#|b?2;2)GhC1R$)58GwPAAeXaExw30bqb%EzrA(huVu5 z2(1DNI4sv$c8x{s3?$wa%JUkS_r4+}%}P zCLkIwmtp9u1=gcYI}6wPl=OuGv<_3IU`l&^j=0)}PUUZJ_)vJXG9;pRb2(O}d9QhP_ z!plr+k_!hLfZbUS02VCM)B@<<>sJjxPyn?pY$0VJp9st|JT@&H09OP;0|7vv0a#85 zlHo(ZP)Z;|2mP~B?*VIaL0i$d2YeW^mymP=>c#X_=rHyj0J{~&-A)bAK@iN;Px#Fi=cXMVQc_oO=-e=A=?N5C8xG)vO2z5D@>>LHPLi|GjGVlo-Wo7?_AK-rnA5 zXlSD_Fe!FReE+OGbadvn%0RbYRF zBp|oj|Mo9i`c*$kfBc*^4BY?&>hCtsZEPp>$CP(~vpdnE^Q=^L0v@IPj*`Z06S^8r zsSy;T+we4*19F~ha3Fj4ygCf;+O%j^8gv*>teFeZFgW0DY3OrGHc{`*28{!ZLa`(P zSUE90r}BBI&bI1<0F9svq-0PB0MB$FC5dRl0qTY7LGO-QAWXQR0MHfu<11Hc2#d+8 zrs=jgiI$8`VIbp`t(0S=fJ5ITnZ3|=f^qU`dyansSAd<=M(g^S2~_DFS?q-|e!B)n zqvcZ_u_rW7`*JO5KI&&LJ~z)zCu9)XaNXo5J=3|_NXQ_xick_VB4X> zUQkATKI%tp3hOyy;upLvjtRg)zn`3YXxjQibT6ox@G0*jfSC^7!+q50s7J}%rPNM4 z#()sna}puppj*Kom*nA09)vxEULQRHBu5%l?nNr2iphb{lit!f4~^jjDMhG_45*GC zoND06AfOh>UE1tg>K2(VWl)BllJ`arKs^D-_)w37WpIEswl3n5fYZcOZc$o1!?fz5hyaKk4EC=pTIr531z3U|Hwl*#RI1q%ee!)dM^b zp!WrZA$mnX{h$I7fyYQd)ibdo_vMNpwE}=25*RrDtpHT^Ew4_J(JJPzWN;1Qkrx80 zC>ziF_+Z#VH2~_H)r&y{1odXQsKp2(hxXGp_5<=$99`ZMaE@UB7qPl3+=CPWfYfMt zz9qEqpbmqO7zJbbDYiFzW%+1B>C;{1ft2D*tV>(|RTNf$@;0!YJ^(yF*onKP@POP7 zF{J;Ky*$|ZWgZX0ZwPT`v3Ak;p5V7N-cRDoLN|nWqK^r}`x3SBxs*6hC4Wx9wF6%R z-pNwKWNxC%y)fz}?qu$V`X_3>mhF~7Jvlb%EWEFN4G><5{g|Bn?Mvf&IVW%X^X;4E kzwqQI`x$WiRsSEbKNvG49CUT@TmS$707*qoM6N<$f@LtQ>i_@% diff --git a/graphics/pokemon/zebstrika/front.png b/graphics/pokemon/zebstrika/front.png deleted file mode 100644 index 8d097028270e0d2b6d69cf5e677a0be0eb1241cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmV-m1E2hfP)>nC;K zs2#XkaNOp#;NY}O5W^LK5~>Q^rXmHP)?GVGTOL^oq<^3xXR+cN%%8=crF7a=!F zHZ}p~7LCBtXdB@?2{U?Y^YP3%dp!a-y0$nK0>*VCSO@9j*bye$1sV@c$}pDE2Ef?D z(NYBh;R$H%R)BYCZcB@p5PC}hHu5a%fM?gzmf(i~?L3PV2PL!m- zjRlzdd*8(5py}sI`6;6Z5_hbz21Adv2t77^?&k!?Qmsod9L|?uKJ@+pa}d+6*Z}kU z;Q|=Lz5k6#ge>9f9UJD+-to8J?|3&ESudVY;gJy@D<=+rgW?l#_tHU z&e)U2TLdOJU@%2>zVnpw&)B6YCq6^qcL8;2`5!O{=~uxjL0Si>xV7MH1#qMILj{PJ zptS>f1bPGp#a=L+)3G|E6q3c&o<;CC*njxA9~kVO(bMqE(2{oEPMpT2kSwqMJOwn4 q8Ivrp_Wz^4f2@5y;~CrcUi=G92=nK|WBVQe0000okfE+9(TkclRgt(!RU7u8cl}e?<;eVbdfFC}7{q$)cL5uhSpr3#HeV>kq`h)!y zzYd$7rz6ojyLd(Y(>7|M)ik_cK%8*${9_axzuHs;)4#!I3Ap|uXd^e&NY*(=(7Eu8yDHhB?l7bViWW3sN2bzSE{>;aZ z)4+SmS@25*G=bG07v8g+iHpJ>V9YBFyFHgNSFzKb1$8Zd7NFlXNKsRBZ^I%;(tMJ7j>XJ)RlJb;x_nKtJ&rqdPFO0-4Vp zr@QNbeN1M~g|!0%1A|y*PWM18hw$3XG~G5r9&)qEz&zv=HVEKy=5}2OQ9$x(Z~i0~ zo4fJjWgx1yL$u`M{&-<=wyG)5aGcu*fEE@Z>-Q_ww}sF?&2?+bJsC->}a Z%D+SzHT5m0#=8Ij002ovPDHLkV1o8W=Oq9D diff --git a/graphics/pokemon/zigzagoon/front.png b/graphics/pokemon/zigzagoon/front.png deleted file mode 100644 index da1a3a6ad88d3c9e7595b63de6c71a5851e192eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)Px#Fi=cXMVQc_b7EQm006zLoaWxmw495Sdum!zNmN(7y;9ZpaFwzVP%TB?8e5!j0RSC;%FC9Ni&Q}%K&bHCdEIp(73o+M z-ni6SUBHYW?}}NGXI)SrMGA+k;umHWov+nO)}9Oh3PMB+ox4o68oXa&<;xB(6rhHX ziN5``3;2aq^Y8HfI0P}8t|3!GBaKw^3LE@X_g#2IiN{|OA_3J1Q^AjuRvD(?3V~Nk z=Tt!$v*6tVJ*10~Lif;zOeZJxW{5i#kd0`LF;002ovPDHLkV1l*{FUSA@ diff --git a/graphics/pokemon/zoroark/front.png b/graphics/pokemon/zoroark/front.png deleted file mode 100644 index 365e9ca96cbdd73aa84fe05e5cf3fdcc54977086..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmV-k1EKthP)dnX2NzcF0N@$M zERZtn@dKUonnzN~%QolE0pP>6lw%ojSBlU3fZ46o@nzyl8SNpCCOIH)+H{HFV?~Eo zl7Kl#In)&A@1e{j6Dj2U{82{N8i+XOCBG~JuI2gDW3FGy8@KGIbw|tdyRYrM4;iqE z84UvF>&Zg~KqQ11UzCA+8BK8-XS%EPD$$lx{En1Bc-$dC%mkDGM`E(TQz1sJ90wItnTOb906tn8Gjm{PvoqY)_O*$C*AeK1&;)-?cKwML|dD}Z4# z8*Cc02jF!OSq(6Z7WDLc;0#H}S_uk|>pj5m_0yBiFs#S`OKx+WU+b}`02Zt z+U$TVkgV^oGTe$gaVHr#W4L;&eQz28^a1FPm=@^+K~<3PkLeCOo*MKH)t>MdPOxb1{#fy(_KJMG4+-9 zB;M#}yM8sah04nSY?}27I)P$Mw#op5Whr)#=pZ3ox2%EK(1ce$;!5SeJ2_ym>Jjd$ z+zoRB)WTHD{DxtY?)?~U0fVLKYHtR$ea=>@`Wef5Q1P#CbV`1trRfPgSCKmY&$000000000000000PC5bg00055 zNkld295JhP~>{l`pxD|sOK>4DO(hkYpRtiZK?gGU;gHI4(Z?Fg0DyPg) z*=kAJRl1A{0h-4@^JfS#_8ngmKdu4o<@9EA1!!tfL1`Zj4}jtfPz$6z-ns&^pFnO9%gN4 zL;iL{UE;ZC3i3B?LkD)aPm*V3e5SAh(0 zSZGk~mTda9VAAO?g`wRMptUDYd0=;5;I-CcHKfz377TyROHYKM)ukJwZ}@$VPTk0C zy0JPx#Fi=cXMVQc_5D*Y!d$qmJ|BSWoNMd$qMvoO2;s)^ol8|Nqd?&|_m`00000 z000000PmO4E&u=lt4TybR9J=WmeG=fFbGAJKt=2SfA3x(nmF4kK38V?(CRrMgd`n? zC!YAp7%dX-5#l3j59rcBR7yDtz;Y?fVv)hQ=Z$85y}(YBrf>|^;f%o@o)UcEJr9~H zo#L5~0^x?|`GY|9KHm&TVCSy{J>LW+%|o!`P|0nChi^RyBUx(nL&_&~XDe>(Bq+ z4KPsYkCaU$4GosQ+)lyUNkB(IL%+i@h;7~FjW?th^y8l2i)cc;v5dXJuR=NiF$azrL2kfg*Z02NqM`BpHWI!%AMU v_8{%BzXD%MzB#T8XDgOm&nKRE;uqr&snZX{sxsLK00000NkvXXu0mjfN5AyZ diff --git a/graphics/pokemon/zweilous/front.png b/graphics/pokemon/zweilous/front.png deleted file mode 100644 index d6e4b809d91fa1717047f752fe22f3312f7195f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 778 zcmV+l1NHogP)fRNrrpdyg-Vaz(9(0 zK?)zhjj!P*x5-f2kExaIB26+C#rO2y<8bJC|4{L_2;u2p6Vm+}W;0j*sCBIv2)Yus*tfDY zwE}=RJ+X0g4jHpa7~8f|s$7slECPz7TTmRHH;l+Bup9ta{@UF3waQ>5Y(^+3=!BTi zUbYlfS6j8%X?dVPDEplyxlnv?v!8N*?IfDnA7a9Q46H+{oMy0yqKFXbu#7{bs64kg zbx=k$P5^nd@(#-vL=eNk&Ej+=WJ?ODqQxv8&`pA!mF)wYI@n?5vAybKR>9(!j_o;k zxP!w6wQs1J^$7Vuuq~1o^Ag*VW%FW)v6ju8M2nf7*ECj@S>GPw{k8fj3)`prOLKjG zAaQKW*(1FTiDwTqc4a*!T$-Eu{-Ks-@$nZug6<$@Z#sSUpi5mpcAB1nUQHZyuXX*Y z)B4MOrpb5cu!v52$Reu*i!A=l}o!07*qo IM6N<$f*by3MF0Q* diff --git a/graphics/pokemon/zygarde/10_percent/front.png b/graphics/pokemon/zygarde/10_percent/front.png deleted file mode 100644 index f475e6cff3df0f42e8fdcc2b029c494caac1821d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 776 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≈{`l1PtD`EMie+c{rTXisy$UTmZS@CL zt46V3*_n2Bg>5+sa7HQD&aarIc^weVVhtDs?6oAq7cdKEU$ky@t<^%x*>-F8z!f%c z2k_aUL}PAOh9a~NS~uK8N5BFXq}J^}4+;Tuca+4+EDQnP2v9sa0T@$J2!%H#ln!<^*Q_0bq7O>r$BdouU}c#$PpDO72e^M~Qo6utwY`EQ#}jbzro&v_)hHpq*G- z7YA)o;jKI2U#GgZ?vwzA*}Cm%ze~i9w}r9)0Fe_cfii%E{r~^~07*qoM6N<$g7n$M AI{*Lx From 31595086030e959578124b2db97bb49ecd061ba5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 27 Feb 2023 23:08:54 +0100 Subject: [PATCH 161/290] fix dex size inaccuraccies --- src/data/pokemon/pokedex_entries.h | 2717 ++++++++++++++-------------- 1 file changed, 1354 insertions(+), 1363 deletions(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 83b58c1d16..0b01a836c4 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4644,15 +4644,14 @@ const struct PokedexEntry gPokedexEntries[] = .trainerOffset = 2, }, -#if P_GEN_4_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { .categoryName = _("Tiny Leaf"), .height = 4, .weight = 102, .description = gTurtwigPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -4663,8 +4662,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 970, .description = gGrotlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -4675,10 +4674,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 3100, .description = gTorterraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_CHIMCHAR] = @@ -4687,8 +4686,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 62, .description = gChimcharPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4699,8 +4698,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 220, .description = gMonfernoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4711,8 +4710,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 550, .description = gInfernapePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -4723,8 +4722,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 52, .description = gPiplupPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -4735,9 +4734,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 230, .description = gPrinplupPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -4747,10 +4746,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 845, .description = gEmpoleonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_STARLY] = @@ -4759,8 +4758,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 20, .description = gStarlyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4771,8 +4770,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 155, .description = gStaraviaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -4783,8 +4782,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 249, .description = gStaraptorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -4795,8 +4794,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 200, .description = gBidoofPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4807,9 +4806,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 315, .description = gBibarelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -4819,8 +4818,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 22, .description = gKricketotPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4831,9 +4830,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 255, .description = gKricketunePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -4843,8 +4842,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 95, .description = gShinxPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4855,8 +4854,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 305, .description = gLuxioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4867,9 +4866,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 420, .description = gLuxrayPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -4879,8 +4878,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 12, .description = gBudewPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -4891,8 +4890,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 145, .description = gRoseradePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4903,8 +4902,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 315, .description = gCranidosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4915,10 +4914,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 1025, .description = gRampardosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_SHIELDON] = @@ -4927,8 +4926,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 570, .description = gShieldonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4939,8 +4938,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 1495, .description = gBastiodonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -4951,8 +4950,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 34, .description = gBurmyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -4963,8 +4962,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 65, .description = gWormadamPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4975,8 +4974,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 233, .description = gMothimPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -4987,8 +4986,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 55, .description = gCombeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -4999,8 +4998,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 385, .description = gVespiquenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5011,8 +5010,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 39, .description = gPachirisuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5023,8 +5022,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 295, .description = gBuizelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5035,8 +5034,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 335, .description = gFloatzelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -5047,8 +5046,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 33, .description = gCherubiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5059,8 +5058,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 93, .description = gCherrimPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5071,8 +5070,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 63, .description = gShellosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5083,8 +5082,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 299, .description = gGastrodonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5095,8 +5094,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 203, .description = gAmbipomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5107,8 +5106,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 12, .description = gDrifloonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5119,8 +5118,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 150, .description = gDrifblimPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5131,8 +5130,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 55, .description = gBunearyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5143,8 +5142,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 333, .description = gLopunnyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5155,8 +5154,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 44, .description = gMismagiusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5167,8 +5166,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 273, .description = gHonchkrowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5179,8 +5178,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 39, .description = gGlameowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5191,9 +5190,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 438, .description = gPuruglyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5203,8 +5202,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 6, .description = gChinglingPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -5215,8 +5214,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 192, .description = gStunkyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5227,9 +5226,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 380, .description = gSkuntankPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5239,8 +5238,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 605, .description = gBronzorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5251,8 +5250,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 1870, .description = gBronzongPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5263,8 +5262,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 150, .description = gBonslyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5275,8 +5274,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 130, .description = gMimeJrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5287,8 +5286,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 244, .description = gHappinyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5299,8 +5298,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 19, .description = gChatotPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5311,9 +5310,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1080, .description = gSpiritombPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5323,8 +5322,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 205, .description = gGiblePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5335,9 +5334,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 560, .description = gGabitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -5347,10 +5346,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 950, .description = gGarchompPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_MUNCHLAX] = @@ -5359,8 +5358,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 1050, .description = gMunchlaxPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5371,8 +5370,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 202, .description = gRioluPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5383,8 +5382,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 540, .description = gLucarioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5395,9 +5394,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 495, .description = gHippopotasPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5407,10 +5406,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 3000, .description = gHippowdonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_SKORUPI] = @@ -5419,9 +5418,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 120, .description = gSkorupiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5431,8 +5430,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 615, .description = gDrapionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5443,8 +5442,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 230, .description = gCroagunkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5455,8 +5454,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 444, .description = gToxicroakPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5467,9 +5466,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 270, .description = gCarnivinePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -5479,8 +5478,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 70, .description = gFinneonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5491,8 +5490,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 240, .description = gLumineonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5503,9 +5502,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 650, .description = gMantykePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5515,9 +5514,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 505, .description = gSnoverPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5527,10 +5526,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 1355, .description = gAbomasnowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_WEAVILE] = @@ -5539,8 +5538,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 340, .description = gWeavilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -5551,8 +5550,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 1800, .description = gMagnezonePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5563,10 +5562,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 1400, .description = gLickilickyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_RHYPERIOR] = @@ -5575,10 +5574,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 2828, .description = gRhyperiorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_TANGROWTH] = @@ -5587,10 +5586,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1286, .description = gTangrowthPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_ELECTIVIRE] = @@ -5599,10 +5598,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1386, .description = gElectivirePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_MAGMORTAR] = @@ -5611,10 +5610,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 680, .description = gMagmortarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_TOGEKISS] = @@ -5623,9 +5622,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 380, .description = gTogekissPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -5635,10 +5634,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 515, .description = gYanmegaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_LEAFEON] = @@ -5647,9 +5646,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 255, .description = gLeafeonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5659,9 +5658,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 259, .description = gGlaceonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5671,10 +5670,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 425, .description = gGliscorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_MAMOSWINE] = @@ -5683,10 +5682,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 2910, .description = gMamoswinePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_PORYGON_Z] = @@ -5695,8 +5694,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 340, .description = gPorygonZPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -5707,10 +5706,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 520, .description = gGalladePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_PROBOPASS] = @@ -5719,9 +5718,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 3400, .description = gProbopassPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -5731,10 +5730,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 1066, .description = gDusknoirPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_FROSLASS] = @@ -5743,8 +5742,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 266, .description = gFroslassPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5755,8 +5754,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gRotomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5767,8 +5766,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gUxiePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5779,8 +5778,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gMespritPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5791,8 +5790,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 3, .description = gAzelfPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5803,10 +5802,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 54, .weight = 6830, .description = gDialgaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_PALKIA] = @@ -5815,10 +5814,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 42, .weight = 3360, .description = gPalkiaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 411, + .trainerOffset = 5, }, [NATIONAL_DEX_HEATRAN] = @@ -5827,10 +5826,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 4300, .description = gHeatranPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_REGIGIGAS] = @@ -5839,10 +5838,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 37, .weight = 4200, .description = gRegigigasPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 610, + .trainerOffset = 17, }, [NATIONAL_DEX_GIRATINA] = @@ -5851,10 +5850,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 45, .weight = 7500, .description = gGiratinaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 614, + .trainerOffset = 13, }, [NATIONAL_DEX_CRESSELIA] = @@ -5863,9 +5862,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 856, .description = gCresseliaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -5875,8 +5874,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 31, .description = gPhionePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5887,8 +5886,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 14, .description = gManaphyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5899,9 +5898,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 505, .description = gDarkraiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -5911,8 +5910,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 21, .description = gShayminPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -5923,22 +5922,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 32, .weight = 3200, .description = gArceusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, -#endif -#if P_GEN_5_POKEMON == TRUE [NATIONAL_DEX_VICTINI] = { .categoryName = _("Victory"), .height = 4, .weight = 40, .description = gVictiniPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5949,8 +5946,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 81, .description = gSnivyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -5961,9 +5958,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 160, .description = gServinePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -5973,10 +5970,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 33, .weight = 630, .description = gSerperiorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_TEPIG] = @@ -5985,8 +5982,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 99, .description = gTepigPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5997,9 +5994,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 555, .description = gPignitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6009,10 +6006,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 1500, .description = gEmboarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_OSHAWOTT] = @@ -6021,8 +6018,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 59, .description = gOshawottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6033,9 +6030,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 245, .description = gDewottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6045,9 +6042,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 946, .description = gSamurottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6057,8 +6054,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 116, .description = gPatratPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6069,8 +6066,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 270, .description = gWatchogPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6081,8 +6078,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 41, .description = gLillipupPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6093,8 +6090,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 147, .description = gHerdierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -6105,8 +6102,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 610, .description = gStoutlandPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6117,8 +6114,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 101, .description = gPurrloinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6129,8 +6126,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 375, .description = gLiepardPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6141,8 +6138,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 105, .description = gPansagePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6153,8 +6150,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 305, .description = gSimisagePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6165,8 +6162,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 110, .description = gPansearPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6177,9 +6174,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 280, .description = gSimisearPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6189,8 +6186,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 135, .description = gPanpourPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6201,9 +6198,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 290, .description = gSimipourPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6213,8 +6210,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 233, .description = gMunnaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6225,8 +6222,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 605, .description = gMusharnaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6237,8 +6234,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 21, .description = gPidovePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6249,8 +6246,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 150, .description = gTranquillPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6261,8 +6258,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 290, .description = gUnfezantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6273,9 +6270,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 298, .description = gBlitzlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6285,10 +6282,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 795, .description = gZebstrikaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_ROGGENROLA] = @@ -6297,8 +6294,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 180, .description = gRoggenrolaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6309,8 +6306,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 1020, .description = gBoldorePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -6321,10 +6318,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 2600, .description = gGigalithPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_WOOBAT] = @@ -6333,8 +6330,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 21, .description = gWoobatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6345,8 +6342,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 105, .description = gSwoobatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -6357,8 +6354,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 85, .description = gDrilburPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6369,8 +6366,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 404, .description = gExcadrillPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6381,8 +6378,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 310, .description = gAudinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6393,8 +6390,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 125, .description = gTimburrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6405,8 +6402,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 400, .description = gGurdurrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6417,9 +6414,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 870, .description = gConkeldurrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6429,8 +6426,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 45, .description = gTympolePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6441,9 +6438,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 170, .description = gPalpitoadPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6453,9 +6450,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 620, .description = gSeismitoadPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6465,8 +6462,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 555, .description = gThrohPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6477,9 +6474,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 510, .description = gSawkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6489,8 +6486,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 25, .description = gSewaddlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6501,8 +6498,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 73, .description = gSwadloonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6513,8 +6510,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 205, .description = gLeavannyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6525,8 +6522,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 53, .description = gVenipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6537,8 +6534,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 585, .description = gWhirlipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6549,10 +6546,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 2005, .description = gScolipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_COTTONEE] = @@ -6561,8 +6558,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 6, .description = gCottoneePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6573,8 +6570,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 66, .description = gWhimsicottPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6585,8 +6582,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 66, .description = gPetililPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6597,8 +6594,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 163, .description = gLilligantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6609,9 +6606,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 180, .description = gBasculinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6621,8 +6618,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 152, .description = gSandilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6633,9 +6630,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 334, .description = gKrokorokPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6645,9 +6642,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 963, .description = gKrookodilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6657,8 +6654,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 375, .description = gDarumakaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6669,8 +6666,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 929, .description = gDarmanitanPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6681,9 +6678,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 280, .description = gMaractusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6693,8 +6690,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 145, .description = gDwebblePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6705,9 +6702,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 2000, .description = gCrustlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6717,8 +6714,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 118, .description = gScraggyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6729,8 +6726,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 300, .description = gScraftyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6741,9 +6738,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 140, .description = gSigilyphPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6753,8 +6750,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 15, .description = gYamaskPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6765,10 +6762,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 765, .description = gCofagrigusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_TIRTOUGA] = @@ -6777,8 +6774,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 165, .description = gTirtougaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6789,8 +6786,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 810, .description = gCarracostaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -6801,8 +6798,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 95, .description = gArchenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6813,9 +6810,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 320, .description = gArcheopsPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -6825,8 +6822,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 310, .description = gTrubbishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6837,10 +6834,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 1073, .description = gGarbodorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_ZORUA] = @@ -6849,8 +6846,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 125, .description = gZoruaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6861,10 +6858,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 811, .description = gZoroarkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_MINCCINO] = @@ -6873,8 +6870,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 58, .description = gMinccinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6885,8 +6882,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 75, .description = gCinccinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6897,8 +6894,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 58, .description = gGothitaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6909,8 +6906,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 180, .description = gGothoritaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6921,9 +6918,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 440, .description = gGothitellePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -6933,8 +6930,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 10, .description = gSolosisPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6945,8 +6942,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 80, .description = gDuosionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -6957,9 +6954,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 201, .description = gReuniclusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -6969,8 +6966,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 55, .description = gDucklettPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -6981,8 +6978,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 242, .description = gSwannaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6993,8 +6990,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 57, .description = gVanillitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7005,8 +7002,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 410, .description = gVanillishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7017,8 +7014,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 575, .description = gVanilluxePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -7029,8 +7026,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 195, .description = gDeerlingPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7041,10 +7038,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 925, .description = gSawsbuckPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_EMOLGA] = @@ -7053,8 +7050,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 50, .description = gEmolgaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7065,8 +7062,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 59, .description = gKarrablastPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7077,9 +7074,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 330, .description = gEscavalierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7089,8 +7086,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 10, .description = gFoongusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -7101,8 +7098,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 105, .description = gAmoongussPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7113,8 +7110,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 330, .description = gFrillishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7125,10 +7122,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 1350, .description = gJellicentPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_ALOMOMOLA] = @@ -7137,8 +7134,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 316, .description = gAlomomolaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7149,8 +7146,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 6, .description = gJoltikPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -7161,9 +7158,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 143, .description = gGalvantulaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7173,8 +7170,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 188, .description = gFerroseedPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7185,9 +7182,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1100, .description = gFerrothornPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7197,8 +7194,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 210, .description = gKlinkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7209,8 +7206,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 510, .description = gKlangPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7221,8 +7218,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 810, .description = gKlinklangPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7233,8 +7230,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 3, .description = gTynamoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -7245,8 +7242,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 220, .description = gEelektrikPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7257,10 +7254,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 805, .description = gEelektrossPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_ELGYEM] = @@ -7269,8 +7266,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 90, .description = gElgyemPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7281,9 +7278,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 345, .description = gBeheeyemPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7293,8 +7290,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 31, .description = gLitwickPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7305,8 +7302,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 130, .description = gLampentPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7317,9 +7314,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 343, .description = gChandelurePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7329,8 +7326,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 180, .description = gAxewPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7341,9 +7338,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 360, .description = gFraxurePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7353,10 +7350,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1055, .description = gHaxorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_CUBCHOO] = @@ -7365,8 +7362,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 85, .description = gCubchooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7377,10 +7374,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 26, .weight = 2600, .description = gBearticPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 266, + .pokemonOffset = 8, + .trainerScale = 339, + .trainerOffset = 4, }, [NATIONAL_DEX_CRYOGONAL] = @@ -7389,8 +7386,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 1480, .description = gCryogonalPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7401,8 +7398,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 77, .description = gShelmetPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7413,9 +7410,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 253, .description = gAccelgorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7425,8 +7422,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 110, .description = gStunfiskPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7437,8 +7434,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 200, .description = gMienfooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -7449,9 +7446,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 355, .description = gMienshaoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7461,10 +7458,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 1390, .description = gDruddigonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_GOLETT] = @@ -7473,9 +7470,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 920, .description = gGolettPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7485,8 +7482,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 28, .weight = 3300, .description = gGolurkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7497,8 +7494,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 102, .description = gPawniardPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7509,10 +7506,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 700, .description = gBisharpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_BOUFFALANT] = @@ -7521,10 +7518,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 946, .description = gBouffalantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_RUFFLET] = @@ -7533,8 +7530,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 105, .description = gRuffletPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7545,9 +7542,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 410, .description = gBraviaryPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7557,8 +7554,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 90, .description = gVullabyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7569,8 +7566,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 395, .description = gMandibuzzPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7581,9 +7578,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 580, .description = gHeatmorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7593,8 +7590,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 330, .description = gDurantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7605,9 +7602,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 173, .description = gDeinoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7617,9 +7614,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 500, .description = gZweilousPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7629,10 +7626,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1600, .description = gHydreigonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_LARVESTA] = @@ -7641,8 +7638,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 288, .description = gLarvestaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7653,10 +7650,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 460, .description = gVolcaronaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_COBALION] = @@ -7665,10 +7662,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 2500, .description = gCobalionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_TERRAKION] = @@ -7677,10 +7674,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 2600, .description = gTerrakionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_VIRIZION] = @@ -7689,10 +7686,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 2000, .description = gVirizionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_TORNADUS] = @@ -7701,9 +7698,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 630, .description = gTornadusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7713,9 +7710,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 610, .description = gThundurusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7725,10 +7722,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 32, .weight = 3300, .description = gReshiramPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_ZEKROM] = @@ -7737,8 +7734,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 29, .weight = 3450, .description = gZekromPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7749,9 +7746,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 680, .description = gLandorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7761,8 +7758,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 3250, .description = gKyuremPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -7773,9 +7770,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 485, .description = gKeldeoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -7785,8 +7782,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 65, .description = gMeloettaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7797,22 +7794,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 825, .description = gGenesectPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, -#endif -#if P_GEN_6_POKEMON == TRUE [NATIONAL_DEX_CHESPIN] = { .categoryName = _("Spiny Nut"), .height = 4, .weight = 90, .description = gChespinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7823,8 +7818,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 290, .description = gQuilladinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7835,10 +7830,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 900, .description = gChesnaughtPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_FENNEKIN] = @@ -7847,8 +7842,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 94, .description = gFennekinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7859,9 +7854,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 145, .description = gBraixenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7871,9 +7866,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 390, .description = gDelphoxPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7883,8 +7878,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 70, .description = gFroakiePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7895,8 +7890,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 109, .description = gFrogadierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7907,9 +7902,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 400, .description = gGreninjaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -7919,8 +7914,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 50, .description = gBunnelbyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7931,9 +7926,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 424, .description = gDiggersbyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -7943,8 +7938,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 17, .description = gFletchlingPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7955,8 +7950,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 160, .description = gFletchinderPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -7967,8 +7962,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 245, .description = gTalonflamePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -7979,8 +7974,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 25, .description = gScatterbugPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7991,8 +7986,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 84, .description = gSpewpaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8003,8 +7998,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 170, .description = gVivillonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -8015,8 +8010,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 135, .description = gLitleoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8027,9 +8022,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 815, .description = gPyroarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8039,8 +8034,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 1, .description = gFlabebePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8051,8 +8046,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 9, .description = gFloettePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8063,8 +8058,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 100, .description = gFlorgesPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8075,8 +8070,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 310, .description = gSkiddoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -8087,10 +8082,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 910, .description = gGogoatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_PANCHAM] = @@ -8099,8 +8094,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 80, .description = gPanchamPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8111,10 +8106,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 1360, .description = gPangoroPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_FURFROU] = @@ -8123,8 +8118,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 280, .description = gFurfrouPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -8135,8 +8130,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 35, .description = gEspurrPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8147,8 +8142,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 85, .description = gMeowsticPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8159,9 +8154,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 20, .description = gHonedgePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8171,9 +8166,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 45, .description = gDoubladePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8183,10 +8178,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 530, .description = gAegislashPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_SPRITZEE] = @@ -8195,8 +8190,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 5, .description = gSpritzeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8207,9 +8202,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 155, .description = gAromatissePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8219,8 +8214,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 35, .description = gSwirlixPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8231,9 +8226,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 50, .description = gSlurpuffPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8243,8 +8238,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 35, .description = gInkayPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8255,9 +8250,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 470, .description = gMalamarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8267,8 +8262,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 310, .description = gBinaclePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8279,8 +8274,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 960, .description = gBarbaraclePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -8291,8 +8286,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 73, .description = gSkrelpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8303,10 +8298,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 815, .description = gDragalgePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_CLAUNCHER] = @@ -8315,8 +8310,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 83, .description = gClauncherPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8327,8 +8322,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 353, .description = gClawitzerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -8339,8 +8334,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 60, .description = gHelioptilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8351,9 +8346,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 210, .description = gHelioliskPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8363,9 +8358,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 260, .description = gTyruntPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8375,10 +8370,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 2700, .description = gTyrantrumPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_AMAURA] = @@ -8387,8 +8382,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 252, .description = gAmauraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -8399,8 +8394,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 27, .weight = 2250, .description = gAurorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8411,9 +8406,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 235, .description = gSylveonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8423,9 +8418,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 215, .description = gHawluchaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8435,8 +8430,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 22, .description = gDedennePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8447,8 +8442,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 57, .description = gCarbinkPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8459,8 +8454,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 28, .description = gGoomyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8471,9 +8466,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 175, .description = gSliggooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8483,10 +8478,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1505, .description = gGoodraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_KLEFKI] = @@ -8495,8 +8490,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 30, .description = gKlefkiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8507,8 +8502,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 70, .description = gPhantumpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8519,9 +8514,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 710, .description = gTrevenantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8531,8 +8526,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 50, .description = gPumpkabooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8543,8 +8538,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 125, .description = gGourgeistPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -8555,9 +8550,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 995, .description = gBergmitePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8567,10 +8562,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 5050, .description = gAvaluggPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_NOIBAT] = @@ -8579,8 +8574,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 80, .description = gNoibatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8591,9 +8586,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 850, .description = gNoivernPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8603,8 +8598,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 2150, .description = gXerneasPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8615,10 +8610,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 58, .weight = 2030, .description = gYveltalPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 360, + .trainerOffset = 7, }, [NATIONAL_DEX_ZYGARDE] = @@ -8627,10 +8622,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 50, .weight = 3050, .description = gZygardePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_DIANCIE] = @@ -8639,8 +8634,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 88, .description = gDianciePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8651,8 +8646,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 90, .description = gHoopaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8663,22 +8658,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 1950, .description = gVolcanionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, -#endif -#if P_GEN_7_POKEMON == TRUE [NATIONAL_DEX_ROWLET] = { .categoryName = _("Grass Quill"), .height = 3, .weight = 15, .description = gRowletPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8689,8 +8682,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 160, .description = gDartrixPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8701,10 +8694,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 366, .description = gDecidueyePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_LITTEN] = @@ -8713,8 +8706,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 43, .description = gLittenPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8725,8 +8718,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 250, .description = gTorracatPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8737,10 +8730,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 830, .description = gIncineroarPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_POPPLIO] = @@ -8749,8 +8742,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 75, .description = gPopplioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8761,8 +8754,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 175, .description = gBrionnePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8773,10 +8766,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 440, .description = gPrimarinaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_PIKIPEK] = @@ -8785,8 +8778,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 12, .description = gPikipekPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8797,8 +8790,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 148, .description = gTrumbeakPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8809,8 +8802,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 260, .description = gToucannonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -8821,8 +8814,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 60, .description = gYungoosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8833,8 +8826,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 142, .description = gGumshoosPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8845,8 +8838,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 44, .description = gGrubbinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8857,8 +8850,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 105, .description = gCharjabugPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8869,9 +8862,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 450, .description = gVikavoltPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -8881,8 +8874,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 70, .description = gCrabrawlerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8893,10 +8886,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 17, .weight = 1800, .description = gCrabominablePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 1, }, [NATIONAL_DEX_ORICORIO] = @@ -8905,8 +8898,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 34, .description = gOricorioPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8917,8 +8910,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 2, .description = gCutieflyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8929,8 +8922,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 5, .description = gRibombeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8941,8 +8934,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 92, .description = gRockruffPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -8953,9 +8946,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 250, .description = gLycanrocPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -8965,8 +8958,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 3, .description = gWishiwashiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -8977,8 +8970,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 80, .description = gMareaniePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -8989,8 +8982,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 145, .description = gToxapexPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9001,9 +8994,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1100, .description = gMudbrayPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9013,10 +9006,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 9200, .description = gMudsdalePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_DEWPIDER] = @@ -9025,8 +9018,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 40, .description = gDewpiderPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9037,10 +9030,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 820, .description = gAraquanidPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_FOMANTIS] = @@ -9049,8 +9042,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 15, .description = gFomantisPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9061,8 +9054,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 185, .description = gLurantisPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -9073,8 +9066,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 15, .description = gMorelullPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9085,9 +9078,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 115, .description = gShiinoticPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9097,8 +9090,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 48, .description = gSalanditPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9109,8 +9102,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 222, .description = gSalazzlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9121,8 +9114,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 68, .description = gStuffulPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9133,10 +9126,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 1350, .description = gBewearPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_BOUNSWEET] = @@ -9145,8 +9138,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 32, .description = gBounsweetPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9157,8 +9150,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 82, .description = gSteeneePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9169,8 +9162,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 214, .description = gTsareenaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9181,8 +9174,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 3, .description = gComfeyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9193,9 +9186,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 760, .description = gOranguruPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -9205,10 +9198,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 828, .description = gPassimianPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_WIMPOD] = @@ -9217,8 +9210,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 120, .description = gWimpodPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9229,10 +9222,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1080, .description = gGolisopodPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_SANDYGAST] = @@ -9241,8 +9234,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 700, .description = gSandygastPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9253,8 +9246,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 2500, .description = gPalossandPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -9265,8 +9258,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 12, .description = gPyukumukuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9277,10 +9270,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 1205, .description = gTypeNullPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_SILVALLY] = @@ -9289,10 +9282,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 23, .weight = 1005, .description = gSilvallyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 342, + .trainerOffset = 7, }, [NATIONAL_DEX_MINIOR] = @@ -9301,8 +9294,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 400, .description = gMiniorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9313,8 +9306,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 199, .description = gKomalaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9325,10 +9318,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 2120, .description = gTurtonatorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_TOGEDEMARU] = @@ -9337,8 +9330,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 33, .description = gTogedemaruPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9349,8 +9342,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 7, .description = gMimikyuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9361,8 +9354,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 190, .description = gBruxishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -9373,8 +9366,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 1850, .description = gDrampaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -9385,10 +9378,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 39, .weight = 2100, .description = gDhelmisePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 510, + .trainerOffset = 11, }, [NATIONAL_DEX_JANGMO_O] = @@ -9397,8 +9390,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 297, .description = gJangmoOPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9409,8 +9402,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 470, .description = gHakamoOPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9421,10 +9414,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 782, .description = gKommoOPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_TAPU_KOKO] = @@ -9433,10 +9426,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 205, .description = gTapuKokoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_TAPU_LELE] = @@ -9445,8 +9438,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 186, .description = gTapuLelePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9457,10 +9450,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 455, .description = gTapuBuluPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_TAPU_FINI] = @@ -9469,8 +9462,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 212, .description = gTapuFiniPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -9481,8 +9474,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 1, .description = gCosmogPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9493,8 +9486,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 9999, .description = gCosmoemPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9505,10 +9498,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 34, .weight = 2300, .description = gSolgaleoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_LUNALA] = @@ -9517,10 +9510,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 40, .weight = 1200, .description = gLunalaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 411, + .trainerOffset = 5, }, [NATIONAL_DEX_NIHILEGO] = @@ -9529,8 +9522,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 555, .description = gNihilegoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9541,10 +9534,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 3336, .description = gBuzzwolePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_PHEROMOSA] = @@ -9553,10 +9546,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 250, .description = gPheromosaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_XURKITREE] = @@ -9565,10 +9558,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 38, .weight = 1000, .description = gXurkitreePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 610, + .trainerOffset = 17, }, [NATIONAL_DEX_CELESTEELA] = @@ -9577,10 +9570,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 92, .weight = 9999, .description = gCelesteelaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 516, + .trainerOffset = 13, }, [NATIONAL_DEX_KARTANA] = @@ -9589,8 +9582,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 1, .description = gKartanaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9601,10 +9594,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 55, .weight = 8880, .description = gGuzzlordPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_NECROZMA] = @@ -9613,10 +9606,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 2300, .description = gNecrozmaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_MAGEARNA] = @@ -9625,9 +9618,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 805, .description = gMagearnaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9637,8 +9630,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 222, .description = gMarshadowPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9649,8 +9642,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 18, .description = gPoipolePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9661,10 +9654,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 36, .weight = 1500, .description = gNaganadelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 405, + .trainerOffset = 8, }, [NATIONAL_DEX_STAKATAKA] = @@ -9673,10 +9666,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 55, .weight = 8200, .description = gStakatakaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 721, + .trainerOffset = 19, }, [NATIONAL_DEX_BLACEPHALON] = @@ -9685,10 +9678,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 130, .description = gBlacephalonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_ZERAORA] = @@ -9697,9 +9690,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 445, .description = gZeraoraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -9709,8 +9702,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 80, .description = gMeltanPokedexText, - .pokemonScale = 640, - .pokemonOffset = 23, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9721,22 +9714,20 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 800, .description = gMelmetalPokedexText, - .pokemonScale = 255, - .pokemonOffset = 1, - .trainerScale = 387, - .trainerOffset = 2, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, -#endif -#if P_GEN_8_POKEMON == TRUE [NATIONAL_DEX_GROOKEY] = { .categoryName = _("Chimp"), .height = 3, .weight = 50, .description = gGrookeyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9747,8 +9738,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 140, .description = gThwackeyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9759,10 +9750,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 900, .description = gRillaboomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_SCORBUNNY] = @@ -9771,8 +9762,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 45, .description = gScorbunnyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9783,8 +9774,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 90, .description = gRabootPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9795,9 +9786,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 330, .description = gCinderacePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -9807,8 +9798,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 40, .description = gSobblePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9819,8 +9810,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 115, .description = gDrizzilePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9831,10 +9822,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 452, .description = gInteleonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_SKWOVET] = @@ -9843,8 +9834,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 25, .description = gSkwovetPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9855,8 +9846,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 60, .description = gGreedentPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9867,8 +9858,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 18, .description = gRookideePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -9879,9 +9870,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 160, .description = gCorvisquirePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -9891,10 +9882,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 750, .description = gCorviknightPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_BLIPBUG] = @@ -9903,8 +9894,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 80, .description = gBlipbugPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9915,8 +9906,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 195, .description = gDottlerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9927,8 +9918,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 408, .description = gOrbeetlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9939,8 +9930,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 89, .description = gNickitPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9951,8 +9942,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 199, .description = gThievulPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -9963,8 +9954,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 22, .description = gGossifleurPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9975,8 +9966,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 25, .description = gEldegossPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -9987,8 +9978,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 60, .description = gWoolooPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -9999,8 +9990,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 430, .description = gDubwoolPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10011,8 +10002,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 85, .description = gChewtlePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10023,9 +10014,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 1155, .description = gDrednawPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10035,8 +10026,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 135, .description = gYamperPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10047,9 +10038,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 340, .description = gBoltundPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10059,8 +10050,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 120, .description = gRolycolyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10071,8 +10062,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 780, .description = gCarkolPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10083,8 +10074,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 28, .weight = 3105, .description = gCoalossalPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10095,8 +10086,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 5, .description = gApplinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10107,8 +10098,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 10, .description = gFlapplePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10119,8 +10110,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 130, .description = gAppletunPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10131,10 +10122,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 76, .description = gSilicobraPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_SANDACONDA] = @@ -10143,10 +10134,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 38, .weight = 655, .description = gSandacondaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 610, + .trainerOffset = 17, }, [NATIONAL_DEX_CRAMORANT] = @@ -10155,9 +10146,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 180, .description = gCramorantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10167,8 +10158,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 10, .description = gArrokudaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10179,8 +10170,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 300, .description = gBarraskewdaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10191,8 +10182,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 110, .description = gToxelPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10203,10 +10194,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 400, .description = gToxtricityPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_SIZZLIPEDE] = @@ -10215,8 +10206,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 7, .weight = 10, .description = gSizzlipedePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 365, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10227,8 +10218,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 1200, .description = gCentiskorchPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10239,8 +10230,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 40, .description = gClobbopusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10251,10 +10242,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 390, .description = gGrapploctPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_SINISTEA] = @@ -10263,8 +10254,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 1, .weight = 2, .description = gSinisteaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10275,8 +10266,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 4, .description = gPolteageistPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10287,8 +10278,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 34, .description = gHatennaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10299,8 +10290,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 48, .description = gHattremPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10311,10 +10302,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 51, .description = gHatterenePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_IMPIDIMP] = @@ -10323,8 +10314,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 4, .weight = 55, .description = gImpidimpPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 491, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10335,9 +10326,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 125, .description = gMorgremPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10347,9 +10338,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 610, .description = gGrimmsnarlPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -10359,10 +10350,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 460, .description = gObstagoonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_PERRSERKER] = @@ -10371,9 +10362,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 280, .description = gPerrserkerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10383,9 +10374,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 4, .description = gCursolaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 305, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10395,9 +10386,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 8, .weight = 1170, .description = gSirfetchdPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 366, + .pokemonOffset = 7, + .trainerScale = 257, .trainerOffset = 0, }, @@ -10407,9 +10398,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 15, .weight = 582, .description = gMrRimePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 268, + .pokemonOffset = 2, + .trainerScale = 271, .trainerOffset = 0, }, @@ -10419,10 +10410,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 666, .description = gRunerigusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, [NATIONAL_DEX_MILCERY] = @@ -10431,8 +10422,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 2, .weight = 3, .description = gMilceryPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 682, + .pokemonOffset = 24, .trainerScale = 256, .trainerOffset = 0, }, @@ -10443,8 +10434,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 5, .description = gAlcremiePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10455,8 +10446,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 620, .description = gFalinksPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10467,8 +10458,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 10, .description = gPincurchinPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10479,8 +10470,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 38, .description = gSnomPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10491,8 +10482,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 420, .description = gFrosmothPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10503,10 +10494,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 5200, .description = gStonjournerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_EISCUE] = @@ -10515,9 +10506,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 890, .description = gEiscuePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -10527,8 +10518,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 9, .weight = 280, .description = gIndeedeePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 338, + .pokemonOffset = 8, .trainerScale = 256, .trainerOffset = 0, }, @@ -10539,8 +10530,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 3, .weight = 30, .description = gMorpekoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 530, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10551,8 +10542,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 1000, .description = gCufantPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -10563,8 +10554,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 6500, .description = gCopperajahPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10575,10 +10566,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 1900, .description = gDracozoltPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_ARCTOZOLT] = @@ -10587,10 +10578,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 23, .weight = 1500, .description = gArctozoltPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 342, + .trainerOffset = 7, }, [NATIONAL_DEX_DRACOVISH] = @@ -10599,10 +10590,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 23, .weight = 2150, .description = gDracovishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 342, + .trainerOffset = 7, }, [NATIONAL_DEX_ARCTOVISH] = @@ -10611,10 +10602,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 1750, .description = gArctovishPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_DURALUDON] = @@ -10623,10 +10614,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 400, .description = gDuraludonPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_DREEPY] = @@ -10635,8 +10626,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 5, .weight = 20, .description = gDreepyPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 432, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -10647,9 +10638,9 @@ const struct PokedexEntry gPokedexEntries[] = .height = 14, .weight = 110, .description = gDrakloakPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, + .pokemonScale = 265, + .pokemonOffset = 2, + .trainerScale = 262, .trainerOffset = 0, }, @@ -10659,8 +10650,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 500, .description = gDragapultPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10671,8 +10662,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 28, .weight = 1100, .description = gZacianPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10683,8 +10674,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 29, .weight = 2100, .description = gZamazentaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10695,10 +10686,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 200, .weight = 9500, .description = gEternatusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 1352, + .trainerOffset = 18, }, [NATIONAL_DEX_KUBFU] = @@ -10707,8 +10698,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 6, .weight = 120, .description = gKubfuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 422, + .pokemonOffset = 12, .trainerScale = 256, .trainerOffset = 0, }, @@ -10719,10 +10710,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 19, .weight = 1050, .description = gUrshifuPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 1, + .trainerScale = 326, + .trainerOffset = 4, }, [NATIONAL_DEX_ZARUDE] = @@ -10731,10 +10722,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 700, .description = gZarudePokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_REGIELEKI] = @@ -10743,8 +10734,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 12, .weight = 1450, .description = gRegielekiPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 282, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -10755,10 +10746,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 21, .weight = 2000, .description = gRegidragoPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 365, + .trainerOffset = 7, }, [NATIONAL_DEX_GLASTRIER] = @@ -10767,10 +10758,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 22, .weight = 8000, .description = gGlastrierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 348, + .trainerOffset = 6, }, [NATIONAL_DEX_SPECTRIER] = @@ -10779,10 +10770,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 20, .weight = 445, .description = gSpectrierPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 261, + .pokemonOffset = 1, + .trainerScale = 334, + .trainerOffset = 4, }, [NATIONAL_DEX_CALYREX] = @@ -10791,8 +10782,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 11, .weight = 77, .description = gCalyrexPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 320, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10803,10 +10794,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 951, .description = gWyrdeerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_KLEAVOR] = @@ -10815,10 +10806,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 18, .weight = 890, .description = gKleavorPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 267, + .pokemonOffset = 2, + .trainerScale = 286, + .trainerOffset = 1, }, [NATIONAL_DEX_URSALUNA] = @@ -10827,10 +10818,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 24, .weight = 2900, .description = gUrsalunaPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 256, + .pokemonOffset = 3, + .trainerScale = 369, + .trainerOffset = 7, }, [NATIONAL_DEX_BASCULEGION] = @@ -10839,8 +10830,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 30, .weight = 1100, .description = gBasculegionPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 275, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -10851,8 +10842,8 @@ const struct PokedexEntry gPokedexEntries[] = .height = 13, .weight = 430, .description = gSneaslerPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, + .pokemonScale = 272, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -10863,10 +10854,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 25, .weight = 605, .description = gOverqwilPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 257, + .pokemonOffset = 10, + .trainerScale = 423, + .trainerOffset = 8, }, [NATIONAL_DEX_ENAMORUS] = @@ -10875,10 +10866,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 16, .weight = 480, .description = gEnamorusPokedexText, - .pokemonScale = 356, - .pokemonOffset = 17, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, }, -#endif + }; From 90021f3be614cf9dbf800bfcd50b39840258cf94 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Feb 2023 23:49:43 -0300 Subject: [PATCH 162/290] Removed zMovePower field in gBattleMoves in favor of a function. --- include/battle_z_move.h | 1 + include/pokemon.h | 1 - src/battle_util.c | 3 +- src/battle_z_move.c | 44 +- src/data/battle_moves.h | 930 ---------------------------------------- 5 files changed, 46 insertions(+), 933 deletions(-) diff --git a/include/battle_z_move.h b/include/battle_z_move.h index 94a9c3568c..a87109fcb7 100644 --- a/include/battle_z_move.h +++ b/include/battle_z_move.h @@ -26,5 +26,6 @@ const u8 *GetZMoveName(u16 move); void SetZEffect(void); bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex); void GetUsableZMoves(u8 battlerId, u16 *moves); +u16 GetZMovePower(u16 move); #endif // GUARD_BATTLE_Z_MOVE_H \ No newline at end of file diff --git a/include/pokemon.h b/include/pokemon.h index 05b9d1ac9a..6d27d30c0c 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -339,7 +339,6 @@ struct BattleMove u32 flags; u8 split; u8 argument; - u8 zMovePower; u8 zMoveEffect; }; diff --git a/src/battle_util.c b/src/battle_util.c index 1625ff919c..3507ce15a6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7,6 +7,7 @@ #include "battle_controllers.h" #include "battle_interface.h" #include "battle_setup.h" +#include "battle_z_move.h" #include "party_menu.h" #include "pokemon.h" #include "international_string_util.h" @@ -8532,7 +8533,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) u32 weight, hpFraction, speed; if (gBattleStruct->zmove.active) - return gBattleMoves[gBattleStruct->zmove.baseMoves[battlerAtk]].zMovePower; + return GetZMovePower(gBattleStruct->zmove.baseMoves[battlerAtk]); switch (gBattleMoves[move].effect) { diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 536080aa96..9c9c5e0fa3 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -535,7 +535,7 @@ bool32 MoveSelectionDisplayZMove(u16 zmove) static void ZMoveSelectionDisplayPower(u16 move, u16 zMove) { u8 *txtPtr; - u16 power = gBattleMoves[move].zMovePower; + u16 power = GetZMovePower(move); if (zMove >= MOVE_CATASTROPIKA) power = gBattleMoves[zMove].power; @@ -698,3 +698,45 @@ static bool32 AreStatsMaxed(u8 battlerId, u8 n) return TRUE; } +u16 GetZMovePower(u16 move) +{ + if (gBattleMoves[move].split == SPLIT_STATUS) + return 0; + if (gBattleMoves[move].effect == EFFECT_OHKO) + return 180; + + switch (move) + { + case MOVE_MEGA_DRAIN: return 120; + case MOVE_CORE_ENFORCER: return 140; + case MOVE_WEATHER_BALL: return 160; + case MOVE_HEX: return 160; + case MOVE_FLYING_PRESS: return 170; + case MOVE_GEAR_GRIND: return 180; + case MOVE_V_CREATE: return 220; + default: + { + if (gBattleMoves[move].power >= 140) + return 200; + else if (gBattleMoves[move].power >= 130) + return 195; + else if (gBattleMoves[move].power >= 120) + return 190; + else if (gBattleMoves[move].power >= 110) + return 185; + else if (gBattleMoves[move].power >= 100) + return 180; + else if (gBattleMoves[move].power >= 90) + return 175; + else if (gBattleMoves[move].power >= 80) + return 160; + else if (gBattleMoves[move].power >= 70) + return 140; + else if (gBattleMoves[move].power >= 60) + return 120; + else + return 100; + } + } +} + diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 50e10d414d..c5375dc34b 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -26,7 +26,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -42,7 +41,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -58,7 +56,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -74,7 +71,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -90,7 +86,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -106,7 +101,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -122,7 +116,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -138,7 +131,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -154,7 +146,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -170,7 +161,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -186,7 +176,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -202,7 +191,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -222,7 +210,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -242,7 +229,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -258,7 +244,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -274,7 +259,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_2X_IN_AIR | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -290,7 +274,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -314,7 +297,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = -6, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -322,10 +304,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 90, - .zMovePower = 175, #else .power = 70, - .zMovePower = 140, #endif .effect = EFFECT_SEMI_INVULNERABLE, .type = TYPE_FLYING, @@ -355,7 +335,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -371,7 +350,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -395,7 +373,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -411,7 +388,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -427,7 +403,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -443,7 +418,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -452,15 +426,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 100, .pp = 10, - .zMovePower = 180, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 85, .pp = 25, - .zMovePower = 160, #else .power = 70, .pp = 25, - .zMovePower = 140, #endif .effect = EFFECT_RECOIL_IF_MISS, .type = TYPE_FIGHTING, @@ -489,7 +460,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -505,7 +475,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -521,7 +490,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -537,7 +505,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -553,7 +520,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -569,7 +535,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -593,7 +558,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -613,7 +577,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -633,7 +596,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -649,7 +611,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -658,11 +619,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 120, .pp = 10, - .zMovePower = 190, #else .power = 90, .pp = 20, - .zMovePower = 175, #endif .effect = EFFECT_RAMPAGE, .type = TYPE_NORMAL, @@ -687,7 +646,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -703,7 +661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -719,7 +676,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -735,7 +691,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -756,7 +711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -772,7 +726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -788,7 +741,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -804,7 +756,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -828,7 +779,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = -6, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -844,7 +794,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -860,7 +809,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -876,7 +824,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -900,7 +847,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -920,7 +866,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -936,7 +881,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -956,7 +900,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -972,7 +915,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -988,7 +930,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -996,10 +937,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_HIT, .type = TYPE_WATER, @@ -1033,7 +972,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1053,7 +991,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1061,10 +998,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_FREEZE_HIT, .type = TYPE_ICE, @@ -1090,7 +1025,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1106,7 +1040,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1122,7 +1055,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1138,7 +1070,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1154,7 +1085,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1170,7 +1100,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1190,7 +1119,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1206,7 +1134,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1228,7 +1155,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_DEPENDS, .priority = -5, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1244,7 +1170,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1260,7 +1185,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1280,7 +1204,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1300,7 +1223,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1316,7 +1238,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1340,7 +1261,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -1356,7 +1276,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1372,7 +1291,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1388,7 +1306,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1404,7 +1321,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -1420,7 +1336,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -1429,15 +1344,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 120, .pp = 10, - .zMovePower = 190, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 90, .pp = 20, - .zMovePower = 175, #else .power = 70, .pp = 20, - .zMovePower = 140, #endif .effect = EFFECT_RAMPAGE, .type = TYPE_GRASS, @@ -1466,7 +1378,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -1482,7 +1393,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1503,7 +1413,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1520,7 +1429,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1540,7 +1448,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1560,7 +1467,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -1568,10 +1474,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_THUNDER, .type = TYPE_ELECTRIC, @@ -1597,7 +1501,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1613,7 +1516,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1629,7 +1531,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1637,10 +1538,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 80, - .zMovePower = 160, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_SEMI_INVULNERABLE, .type = TYPE_GROUND, @@ -1670,7 +1569,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1686,7 +1584,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1702,7 +1599,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1718,7 +1614,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -1734,7 +1629,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -1750,7 +1644,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1766,7 +1659,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1782,7 +1674,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1798,7 +1689,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -1814,7 +1704,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -1830,7 +1719,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -1846,7 +1734,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -1862,7 +1749,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1884,7 +1770,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1900,7 +1785,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1920,7 +1804,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -1936,7 +1819,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -1952,7 +1834,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -1968,7 +1849,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -1984,7 +1864,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -2004,7 +1883,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2020,7 +1898,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -2036,7 +1913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -2052,7 +1928,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -2068,7 +1943,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -2089,7 +1963,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2105,7 +1978,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2121,7 +1993,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_2, }, @@ -2137,7 +2008,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2153,7 +2023,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2173,7 +2042,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2193,7 +2061,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2209,7 +2076,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2225,7 +2091,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2233,10 +2098,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_BURN_HIT, .type = TYPE_FIRE, @@ -2270,7 +2133,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2291,7 +2153,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2307,7 +2168,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2316,11 +2176,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, .pp = 10, - .zMovePower = 195, #else .power = 100, .pp = 15, - .zMovePower = 180, #endif .effect = EFFECT_SKULL_BASH, .type = TYPE_NORMAL, @@ -2345,7 +2203,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2361,7 +2218,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2377,7 +2233,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2397,7 +2252,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -2417,7 +2271,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2426,15 +2279,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 130, .pp = 10, - .zMovePower = 195, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 100, .pp = 20, - .zMovePower = 180, #else .power = 85, .pp = 20, - .zMovePower = 60, #endif .effect = EFFECT_RECOIL_IF_MISS, .type = TYPE_FIGHTING, @@ -2465,7 +2315,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -2481,7 +2330,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2505,7 +2353,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -2521,7 +2368,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2530,11 +2376,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 80, .pp = 10, - .zMovePower = 160, #else .power = 20, .pp = 15, - .zMovePower = 100, #endif .effect = EFFECT_ABSORB, .type = TYPE_BUG, @@ -2559,7 +2403,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -2580,7 +2423,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FLINCH, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2596,7 +2438,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -2616,7 +2457,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2632,7 +2472,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2648,7 +2487,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2668,7 +2506,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -2688,7 +2525,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2704,7 +2540,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_3, }, @@ -2724,7 +2559,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2733,15 +2567,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 100, .accuracy = 90, - .zMovePower = 180, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 90, .accuracy = 90, - .zMovePower = 175, #else .power = 90, .accuracy = 85, - .zMovePower = 175, #endif .effect = EFFECT_HIT, .type = TYPE_WATER, @@ -2766,7 +2597,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2782,7 +2612,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2798,7 +2627,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2818,7 +2646,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2834,7 +2661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2850,7 +2676,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_STRONG_JAW_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2866,7 +2691,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -2886,7 +2710,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -2902,7 +2725,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2918,7 +2740,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2934,7 +2755,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2950,7 +2770,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -2972,7 +2791,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -2988,7 +2806,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -3004,7 +2821,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3013,11 +2829,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, .pp = 25, - .zMovePower = 120, #else .power = 40, .pp = 10, - .zMovePower = 100, #endif .effect = EFFECT_THIEF, .type = TYPE_DARK, @@ -3046,7 +2860,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -3066,7 +2879,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -3086,7 +2898,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -3102,7 +2913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3126,7 +2936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3146,7 +2955,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_CURSE, }, @@ -3162,7 +2970,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3178,7 +2985,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3194,7 +3000,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3218,7 +3023,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3234,7 +3038,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3254,7 +3057,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3270,7 +3072,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3290,7 +3091,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3306,7 +3106,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3326,7 +3125,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3346,7 +3144,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3366,7 +3163,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -3382,7 +3178,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3398,7 +3193,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3414,7 +3208,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3430,7 +3223,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3450,7 +3242,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -3458,10 +3249,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 120, - .zMovePower = 190, #else .power = 100, - .zMovePower = 180, #endif .effect = EFFECT_PARALYZE_HIT, .type = TYPE_ELECTRIC, @@ -3495,7 +3284,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -3511,7 +3299,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, @@ -3527,7 +3314,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3543,7 +3329,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3563,7 +3348,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -3583,7 +3367,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3603,7 +3386,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3612,15 +3394,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 120, .pp = 10, - .zMovePower = 190, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 120, .pp = 15, - .zMovePower = 190, #else .power = 90, .pp = 15, - .zMovePower = 175, #endif .effect = EFFECT_RAMPAGE, .type = TYPE_DRAGON, @@ -3645,7 +3424,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_WIND_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3654,15 +3432,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 75, .pp = 10, - .zMovePower = 140, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 60, .pp = 10, - .zMovePower = 120, #else .power = 60, .pp = 5, - .zMovePower = 120, #endif .effect = EFFECT_ABSORB, .type = TYPE_GRASS, @@ -3691,7 +3466,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3711,7 +3485,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -3727,7 +3500,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3743,7 +3515,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3763,7 +3534,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3783,7 +3553,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3799,7 +3568,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3821,7 +3589,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3837,7 +3604,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3857,7 +3623,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -3873,7 +3638,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -3889,7 +3653,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -3909,7 +3672,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -3925,7 +3687,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3941,7 +3702,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3957,7 +3717,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -3973,7 +3732,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -3989,7 +3747,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -4005,7 +3762,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4021,7 +3777,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERGROUND, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4037,7 +3792,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4053,7 +3807,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4069,7 +3822,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4085,7 +3837,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4105,7 +3856,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4121,7 +3871,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4141,7 +3890,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4161,7 +3909,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -4177,7 +3924,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4193,7 +3939,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4209,7 +3954,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4225,7 +3969,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4241,7 +3984,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4261,7 +4003,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4281,7 +4022,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4297,7 +4037,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4317,7 +4056,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4333,7 +4071,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4349,7 +4086,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4369,7 +4105,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4391,7 +4126,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_DEPENDS, .priority = -5, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4411,7 +4145,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -4431,7 +4164,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4451,7 +4183,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4467,7 +4198,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4477,17 +4207,14 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 120, .accuracy = 100, .pp = 10, - .zMovePower = 190, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 100, .accuracy = 100, .pp = 10, - .zMovePower = 180, #else .power = 80, .accuracy = 90, .pp = 15, - .zMovePower = 160, #endif .effect = EFFECT_FUTURE_SIGHT, .type = TYPE_PSYCHIC, @@ -4515,7 +4242,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4536,7 +4262,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_UNDERWATER, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4556,7 +4281,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4580,7 +4304,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4588,10 +4311,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 90, - .zMovePower = 175, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_UPROAR, .type = TYPE_NORMAL, @@ -4621,7 +4342,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -4641,7 +4361,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4657,7 +4376,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4665,10 +4383,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 95, - .zMovePower = 175, #else .power = 100, - .zMovePower = 180, #endif .effect = EFFECT_BURN_HIT, .type = TYPE_FIRE, @@ -4694,7 +4410,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4714,7 +4429,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -4730,7 +4444,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -4750,7 +4463,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -4766,7 +4478,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, @@ -4782,7 +4493,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4798,7 +4508,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -3, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4806,10 +4515,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 70, - .zMovePower = 140, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_SMELLINGSALT, .type = TYPE_NORMAL, @@ -4840,7 +4547,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4856,7 +4562,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4872,7 +4577,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -4894,7 +4598,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -4914,7 +4617,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 5, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -4930,7 +4632,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -4946,7 +4647,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -4966,7 +4666,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -4982,7 +4681,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -4998,7 +4696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -5014,7 +4711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5030,7 +4726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -5050,7 +4745,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -5066,7 +4760,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5082,7 +4775,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5098,7 +4790,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -5106,10 +4797,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 65, - .zMovePower = 120, #else .power = 20, - .zMovePower = 100, #endif .effect = EFFECT_KNOCK_OFF, .type = TYPE_DARK, @@ -5135,7 +4824,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5151,7 +4839,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5167,7 +4854,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -5187,7 +4873,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -5203,7 +4888,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -5219,7 +4903,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_FOLLOW_ME, }, @@ -5235,7 +4918,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -5251,7 +4933,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5259,10 +4940,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 80, - .zMovePower = 160, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_SEMI_INVULNERABLE, .type = TYPE_WATER, @@ -5288,7 +4967,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5304,7 +4982,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -5324,7 +5001,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -5340,7 +5016,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5356,7 +5031,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5372,7 +5046,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -5392,7 +5065,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_FOES_AND_ALLY, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -5408,7 +5080,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5424,7 +5095,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -5440,7 +5110,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5460,7 +5129,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5480,7 +5148,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -5496,7 +5163,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5516,7 +5182,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5532,7 +5197,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5548,7 +5212,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5564,7 +5227,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5573,11 +5235,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 90, .accuracy = 90, - .zMovePower = 175, #else .power = 100, .accuracy = 85, - .zMovePower = 180, #endif .effect = EFFECT_ATTACK_UP_HIT, .type = TYPE_STEEL, @@ -5606,7 +5266,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5622,7 +5281,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5638,7 +5296,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, }, @@ -5654,7 +5311,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -5662,10 +5318,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 55, - .zMovePower = 100, #endif .effect = EFFECT_HIT, .type = TYPE_FLYING, @@ -5684,15 +5338,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 195, #elif B_UPDATED_MOVE_DATA == GEN_4 || B_UPDATED_MOVE_DATA == GEN_5 .power = 140, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 200, #else .power = 140, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 200, #endif .effect = EFFECT_OVERHEAT, .type = TYPE_FIRE, @@ -5725,7 +5376,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -5735,12 +5385,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .accuracy = 95, .pp = 15, - .zMovePower = 120, #else .power = 50, .accuracy = 80, .pp = 10, - .zMovePower = 100, #endif .effect = EFFECT_SPEED_DOWN_HIT, .type = TYPE_ROCK, @@ -5764,7 +5412,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5780,7 +5427,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -5796,7 +5442,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -5812,7 +5457,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -5828,7 +5472,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -5844,7 +5487,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5860,7 +5502,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5876,7 +5517,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5900,7 +5540,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5916,7 +5555,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_DMG_IN_AIR, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5937,7 +5575,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5953,7 +5590,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5973,7 +5609,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -5993,7 +5628,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6009,7 +5643,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6029,7 +5662,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6045,7 +5677,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6065,7 +5696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -6086,7 +5716,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -6102,7 +5731,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6118,7 +5746,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6134,7 +5761,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -6151,7 +5777,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6167,7 +5792,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6183,7 +5807,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6193,22 +5816,18 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .pp = 25, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 120, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 60, .pp = 40, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 120, #elif B_UPDATED_MOVE_DATA == GEN_4 .power = 40, .pp = 40, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 100, #else .power = 40, .pp = 40, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, - .zMovePower = 100, #endif .effect = EFFECT_THIEF, .type = TYPE_NORMAL, @@ -6237,7 +5856,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6253,7 +5871,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6269,7 +5886,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -6285,7 +5901,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6293,10 +5908,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_4 .power = 90, - .zMovePower = 175, #else .power = 70, - .zMovePower = 140, #endif .effect = EFFECT_HIT, .type = TYPE_GRASS, @@ -6322,7 +5935,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6346,7 +5958,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6362,7 +5973,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6378,7 +5988,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6387,11 +5996,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 140, .accuracy = 100, - .zMovePower = 200, #else .power = 120, .accuracy = 85, - .zMovePower = 190, #endif .effect = EFFECT_FUTURE_SIGHT, .type = TYPE_STEEL, @@ -6416,7 +6023,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6436,7 +6042,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -6452,7 +6057,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -6472,7 +6076,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -6480,10 +6083,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 70, - .zMovePower = 140, #else .power = 60, - .zMovePower = 120, #endif .effect = EFFECT_WAKE_UP_SLAP, .type = TYPE_FIGHTING, @@ -6510,7 +6111,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6526,7 +6126,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6546,7 +6145,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6562,7 +6160,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6578,7 +6175,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6602,7 +6198,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 2, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6618,7 +6213,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6638,7 +6232,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -6658,7 +6251,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -6693,7 +6285,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6709,7 +6300,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6725,7 +6315,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6733,10 +6322,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_ASSURANCE, .type = TYPE_DARK, @@ -6766,7 +6353,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -6782,7 +6368,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6802,7 +6387,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_2, }, @@ -6836,7 +6420,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_2, }, @@ -6870,7 +6453,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -6886,7 +6468,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -6906,7 +6487,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -6922,7 +6502,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -6938,7 +6517,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -6954,7 +6532,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -6970,7 +6547,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -6986,7 +6562,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -6994,10 +6569,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 140, - .zMovePower = 200, #else .power = 130, - .zMovePower = 195, #endif .effect = EFFECT_LAST_RESORT, .type = TYPE_NORMAL, @@ -7023,7 +6596,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -7031,10 +6603,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 70, - .zMovePower = 140, #else .power = 80, - .zMovePower = 160, #endif .effect = EFFECT_SUCKER_PUNCH, .type = TYPE_DARK, @@ -7064,7 +6634,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -7080,7 +6649,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_BOOST_CRITS, }, @@ -7100,7 +6668,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -7120,7 +6687,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_EVSN_UP_1, }, @@ -7137,7 +6703,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_RECKLESS_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, .argument = STATUS1_BURN, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7153,7 +6718,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7161,10 +6725,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 90, - .zMovePower = 175, #endif .effect = EFFECT_HIT, .type = TYPE_FIGHTING, @@ -7190,7 +6752,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -7206,7 +6767,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7226,7 +6786,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7242,7 +6801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7258,7 +6816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7274,7 +6831,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7298,7 +6854,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7314,7 +6869,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7330,7 +6884,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7338,10 +6891,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 85, - .zMovePower = 160, #else .power = 90, - .zMovePower = 175, #endif .effect = EFFECT_HIT, .type = TYPE_DRAGON, @@ -7373,7 +6924,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7381,10 +6931,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 70, - .zMovePower = 140, #endif .effect = EFFECT_HIT, .type = TYPE_ROCK, @@ -7403,11 +6951,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_5 .power = 75, .pp = 10, - .zMovePower = 140, #else .power = 60, .pp = 5, - .zMovePower = 120, #endif .effect = EFFECT_ABSORB, .type = TYPE_FIGHTING, @@ -7432,7 +6978,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7448,7 +6993,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7456,10 +7000,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 90, - .zMovePower = 175, #else .power = 80, - .zMovePower = 160, #endif .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, .type = TYPE_GRASS, @@ -7485,7 +7027,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7501,7 +7042,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7517,7 +7057,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -7533,7 +7072,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7549,7 +7087,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -7565,7 +7102,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7581,7 +7117,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -4, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7597,7 +7132,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7613,7 +7147,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7634,7 +7167,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_PARALYSIS, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7655,7 +7187,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_FREEZE, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7676,7 +7207,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = STATUS1_BURN, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7692,7 +7222,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7708,7 +7237,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7724,7 +7252,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7740,7 +7267,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7756,7 +7282,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7772,7 +7297,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7788,7 +7312,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7808,7 +7331,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -7824,7 +7346,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -7, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ACC_UP_1, }, @@ -7832,10 +7353,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, - .zMovePower = 195, #else .power = 140, - .zMovePower = 200, #endif .effect = EFFECT_OVERHEAT, .type = TYPE_DRAGON, @@ -7861,7 +7380,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7877,7 +7395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7885,10 +7402,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 130, - .zMovePower = 195, #else .power = 140, - .zMovePower = 200, #endif .effect = EFFECT_OVERHEAT, .type = TYPE_GRASS, @@ -7914,7 +7429,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7930,7 +7444,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7946,7 +7459,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7966,7 +7478,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -7986,7 +7497,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8002,7 +7512,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8018,7 +7527,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8034,7 +7542,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -8054,7 +7561,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_OPPONENTS_FIELD, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -8070,7 +7576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8096,7 +7601,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8113,7 +7617,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = HOLD_EFFECT_PLATE, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8129,7 +7632,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8145,7 +7647,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8161,7 +7662,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8177,7 +7677,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8193,7 +7692,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8209,7 +7707,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -8225,7 +7722,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8241,7 +7737,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8257,7 +7752,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8273,7 +7767,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8289,7 +7782,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8309,7 +7801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8325,7 +7816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8334,15 +7824,12 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 100, .accuracy = 75, - .zMovePower = 180, #elif B_UPDATED_MOVE_DATA == GEN_5 .power = 120, .accuracy = 75, - .zMovePower = 190, #else .power = 120, .accuracy = 70, - .zMovePower = 190, #endif .effect = EFFECT_TRAP, .type = TYPE_FIRE, @@ -8371,7 +7858,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8387,7 +7873,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8403,7 +7888,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8423,7 +7907,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, .argument = MOVE_EFFECT_FEINT, }, @@ -8440,7 +7923,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -8457,7 +7939,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -8473,7 +7954,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -8489,7 +7969,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -8509,7 +7988,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_ALL_BATTLERS, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -8525,7 +8003,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8541,7 +8018,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8557,7 +8033,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8577,7 +8052,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8593,7 +8067,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -8613,7 +8086,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_ALL_BATTLERS, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -8629,7 +8101,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8637,10 +8108,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 40, - .zMovePower = 100, #endif .effect = EFFECT_ALWAYS_CRIT, .type = TYPE_FIGHTING, @@ -8666,7 +8135,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8682,7 +8150,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8698,7 +8165,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8718,7 +8184,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8727,11 +8192,9 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 120, .pp = 10, - .zMovePower = 190, #else .power = 70, .pp = 15, - .zMovePower = 140, #endif .effect = EFFECT_SYNCHRONOISE, .type = TYPE_PSYCHIC, @@ -8756,7 +8219,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8772,7 +8234,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -8788,7 +8249,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8804,7 +8264,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -8824,7 +8283,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8840,7 +8298,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8856,7 +8313,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8872,7 +8328,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -8888,7 +8343,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -8904,7 +8358,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -8920,7 +8373,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8936,7 +8388,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8952,7 +8403,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8968,7 +8418,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -8984,7 +8433,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9001,7 +8449,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECTION_MOVE | FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -9021,7 +8468,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -9037,7 +8483,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9053,7 +8498,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9069,7 +8513,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9089,7 +8532,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9105,7 +8547,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9121,7 +8562,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9137,7 +8577,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9145,10 +8584,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 30, - .zMovePower = 100, #endif .effect = EFFECT_INCINERATE, .type = TYPE_FIRE, @@ -9174,7 +8611,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -9190,7 +8626,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9206,7 +8641,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -9222,7 +8656,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9238,7 +8671,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9258,7 +8690,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_2, }, @@ -9274,7 +8705,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9282,10 +8712,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_PLEDGE, .type = TYPE_WATER, @@ -9303,10 +8731,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_PLEDGE, .type = TYPE_FIRE, @@ -9324,10 +8750,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 80, - .zMovePower = 160, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_PLEDGE, .type = TYPE_GRASS, @@ -9353,7 +8777,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9373,7 +8796,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9389,7 +8811,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9397,10 +8818,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 60, - .zMovePower = 120, #else .power = 40, - .zMovePower = 100, #endif .effect = EFFECT_ALWAYS_CRIT, .type = TYPE_ICE, @@ -9426,7 +8845,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -6, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9442,7 +8860,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -9458,7 +8875,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9474,7 +8890,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9490,7 +8905,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9506,7 +8920,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9522,7 +8935,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9538,7 +8950,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9558,7 +8969,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9574,7 +8984,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9594,7 +9003,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9610,7 +9018,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9626,7 +9033,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_DMG_MINIMIZE, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9642,7 +9048,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -9658,7 +9063,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9674,7 +9078,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9690,7 +9093,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9698,10 +9100,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 110, - .zMovePower = 185, #else .power = 120, - .zMovePower = 190, #endif .effect = EFFECT_HURRICANE, .type = TYPE_FLYING, @@ -9727,7 +9127,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9743,7 +9142,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9759,7 +9157,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9767,10 +9164,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_6 .power = 120, - .zMovePower = 190, #else .power = 85, - .zMovePower = 160, #endif .effect = EFFECT_CHANGE_TYPE_ON_ITEM, .type = TYPE_NORMAL, @@ -9797,7 +9192,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, .argument = STATUS1_SLEEP, }, @@ -9814,7 +9208,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9830,7 +9223,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9846,7 +9238,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9862,7 +9253,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9878,7 +9268,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9895,7 +9284,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_PARALYSIS, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9912,7 +9300,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = MOVE_EFFECT_BURN, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9928,7 +9315,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9944,7 +9330,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9960,7 +9345,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 220, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9976,7 +9360,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -9992,7 +9375,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10013,7 +9395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_MINIMIZE, .split = SPLIT_PHYSICAL, .argument = TYPE_FLYING, - .zMovePower = 170, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10030,7 +9411,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10046,7 +9426,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10062,7 +9441,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -10078,7 +9456,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -10098,7 +9475,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10119,7 +9495,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .split = SPLIT_PHYSICAL, .argument = MOVE_EFFECT_FEINT, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10136,7 +9511,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, .argument = TYPE_GHOST, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10152,7 +9526,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10168,7 +9541,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -10176,10 +9548,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 65, - .zMovePower = 120, #else .power = 50, - .zMovePower = 100, #endif .effect = EFFECT_ABSORB, .type = TYPE_ELECTRIC, @@ -10206,7 +9576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, .argument = TYPE_GRASS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10222,7 +9591,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10238,7 +9606,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10254,7 +9621,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10270,7 +9636,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESTORE_REPLACEMENT_HP, }, @@ -10290,7 +9655,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -10307,7 +9671,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10325,7 +9688,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = 0, .split = SPLIT_STATUS, .argument = TRUE, // Protects the whole side. - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10341,7 +9703,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10357,7 +9718,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10373,7 +9733,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10389,7 +9748,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -10405,7 +9763,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10421,7 +9778,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10437,7 +9793,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10453,7 +9808,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10469,7 +9823,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10485,7 +9838,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -10501,7 +9853,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10517,7 +9868,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10537,7 +9887,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10553,7 +9902,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10569,7 +9917,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10589,7 +9936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10598,10 +9944,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_7 .power = 75, - .zMovePower = 140, #else .power = 65, - .zMovePower = 120, #endif .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, .type = TYPE_FIRE, @@ -10627,7 +9971,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10643,7 +9986,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -10659,7 +10001,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10675,7 +10016,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10691,7 +10031,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_2, }, @@ -10707,7 +10046,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10723,7 +10061,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -10739,7 +10076,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10755,7 +10091,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -10771,7 +10106,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10787,7 +10121,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10803,7 +10136,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -10819,7 +10151,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -10835,7 +10166,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10851,7 +10181,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10867,7 +10196,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10883,7 +10211,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10900,7 +10227,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, .argument = 75, // restores 75% HP instead of 50% HP - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10916,7 +10242,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DMG_IN_AIR | FLAG_DMG_UNGROUNDED_IGNORE_TYPE_IF_FLYING, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10932,7 +10257,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10948,7 +10272,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10964,7 +10287,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_RECKLESS_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10980,7 +10302,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -10996,7 +10317,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11012,7 +10332,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11046,7 +10365,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -11062,7 +10380,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 2, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11078,7 +10395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -11094,7 +10410,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11110,7 +10425,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STAT_STAGES_IGNORED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11127,7 +10441,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, .argument = STATUS1_BURN, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11143,7 +10456,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11159,7 +10471,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, }, @@ -11175,7 +10486,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11191,7 +10501,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -11207,7 +10516,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11223,7 +10531,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11239,7 +10546,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 3, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPDEF_UP_1, }, @@ -11255,7 +10561,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -11271,7 +10576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ATK_UP_1, }, @@ -11287,7 +10591,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -11303,7 +10606,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11319,7 +10621,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11335,7 +10636,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11351,7 +10651,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -11367,7 +10666,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11383,7 +10681,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11399,7 +10696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11415,7 +10711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11431,7 +10726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -11447,7 +10741,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11463,7 +10756,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_ALL_STATS_UP_1, }, @@ -11479,7 +10771,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11495,7 +10786,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11511,7 +10801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11527,7 +10816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPATK_UP_1, }, @@ -11543,7 +10831,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -3, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11559,7 +10846,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11575,7 +10861,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11591,7 +10876,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11607,7 +10891,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, }, @@ -11623,7 +10906,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = -3, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11639,7 +10921,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11655,7 +10936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11671,7 +10951,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11687,7 +10966,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11703,7 +10981,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11719,7 +10996,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11735,7 +11011,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11751,7 +11026,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11767,7 +11041,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11783,7 +11056,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11799,7 +11071,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_DEF_UP_1, }, @@ -11815,7 +11086,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11831,7 +11101,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11839,10 +11108,8 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = { #if B_UPDATED_MOVE_DATA >= GEN_8 .power = 120, - .zMovePower = 190, #else .power = 90, - .zMovePower = 175, #endif .effect = EFFECT_CHANGE_TYPE_ON_ITEM, .type = TYPE_NORMAL, @@ -11869,7 +11136,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11885,7 +11151,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11901,7 +11166,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TARGET_ABILITY_IGNORED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11912,13 +11176,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .effect = EFFECT_EVASION_UP_HIT, .pp = 10, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, - .zMovePower = 160, #else .effect = EFFECT_ALWAYS_CRIT, .power = 50, .pp = 15, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 100, #endif .type = TYPE_ELECTRIC, .accuracy = 100, @@ -11945,7 +11207,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11965,7 +11226,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11985,7 +11245,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -11996,12 +11255,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .pp = 20, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .argument = 100, // restores 100% HP instead of 50% HP - .zMovePower = 120, #else .power = 90, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_ABSORB, .type = TYPE_WATER, @@ -12019,12 +11276,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .pp = 20, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 120, #else .power = 90, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_PARALYZE_HIT, .type = TYPE_ELECTRIC, @@ -12042,12 +11297,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 60, .pp = 20, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, - .zMovePower = 120, #else .power = 90, .pp = 15, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_THAW_USER, - .zMovePower = 175, #endif .effect = EFFECT_BURN_HIT, .type = TYPE_FIRE, @@ -12065,12 +11318,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 80, .accuracy = 95, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 160, #else .power = 90, .accuracy = 100, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_GLITZY_GLOW, .type = TYPE_PSYCHIC, @@ -12088,12 +11339,10 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .power = 80, .accuracy = 95, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 160, #else .power = 90, .accuracy = 100, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_BADDY_BAD, .type = TYPE_DARK, @@ -12112,13 +11361,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 90, .pp = 10, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 180, #else .power = 90, .accuracy = 100, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_SAPPY_SEED, .type = TYPE_GRASS, @@ -12136,13 +11383,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 90, .pp = 10, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 180, #else .power = 90, .accuracy = 100, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_FREEZY_FROST, .type = TYPE_ICE, @@ -12160,13 +11405,11 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .accuracy = 85, .pp = 5, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 190, #else .power = 90, .accuracy = 100, .pp = 15, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, - .zMovePower = 175, #endif .effect = EFFECT_SPARKLY_SWIRL, .type = TYPE_FAIRY, @@ -12193,7 +11436,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12213,7 +11455,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12229,7 +11470,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12245,7 +11485,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12261,7 +11500,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12277,7 +11515,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12293,7 +11530,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12309,7 +11545,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12326,7 +11561,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_POWDER, .split = SPLIT_STATUS, .argument = TYPE_PSYCHIC, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12342,7 +11576,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12358,7 +11591,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12374,7 +11606,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12390,7 +11621,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12406,7 +11636,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_STRONG_JAW_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12422,7 +11651,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12438,7 +11666,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_SOUND, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12454,7 +11681,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12470,7 +11696,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12486,7 +11711,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12502,7 +11726,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12518,7 +11741,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_BALLISTIC | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12534,7 +11756,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12550,7 +11771,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12566,7 +11786,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12582,7 +11801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12598,7 +11816,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12614,7 +11831,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12630,7 +11846,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12646,7 +11861,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12662,7 +11876,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12678,7 +11891,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12694,7 +11906,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12710,7 +11921,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12726,7 +11936,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12742,7 +11951,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12758,7 +11966,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12774,7 +11981,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12790,7 +11996,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12806,7 +12011,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12822,7 +12026,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12838,7 +12041,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12854,7 +12056,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12870,7 +12071,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12890,7 +12090,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12906,7 +12105,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12922,7 +12120,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_MEGA_LAUNCHER_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12938,7 +12135,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12954,7 +12150,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12970,7 +12165,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -12986,7 +12180,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 185, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13002,7 +12195,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13018,7 +12210,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13034,7 +12225,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13050,7 +12240,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13066,7 +12255,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13082,7 +12270,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_THAW_USER, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13097,7 +12284,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13117,7 +12303,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13133,7 +12318,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13149,7 +12333,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13165,7 +12348,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13181,7 +12363,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13197,7 +12378,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13213,7 +12393,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13233,7 +12412,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 195, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13249,7 +12427,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13265,7 +12442,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SOUND, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13285,7 +12461,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13301,7 +12476,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13317,7 +12491,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13333,7 +12506,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13353,7 +12525,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13369,7 +12540,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13389,7 +12559,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13409,7 +12578,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13429,7 +12597,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13445,7 +12612,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13461,7 +12627,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED | FLAG_DANCE, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13481,7 +12646,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13497,7 +12661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13517,7 +12680,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13537,7 +12699,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13553,7 +12714,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13573,7 +12733,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13589,7 +12748,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13605,7 +12763,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13626,7 +12783,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13647,7 +12803,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13668,7 +12823,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_WIND_MOVE, .split = SPLIT_SPECIAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13684,7 +12838,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13700,7 +12853,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13716,7 +12868,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13732,7 +12883,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 4, .flags = FLAG_PROTECTION_MOVE, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE }, @@ -13748,7 +12898,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE }, @@ -13764,7 +12913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE }, @@ -13780,7 +12928,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -13796,7 +12943,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -13812,7 +12958,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 1, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, // The datamine master sheet mentions uncopiable by Metronome but that sounds odd? not yet implemented }, @@ -13829,7 +12974,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGIC_COAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // The datamine master sheet mentions uncopiable by Metronome but that sounds odd? not yet implemented }, @@ -13846,7 +12990,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE }, @@ -13862,7 +13005,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 40, .zMoveEffect = Z_EFFECT_NONE, //Supposedly uncallable by Metronome? (if so, needs implementation) }, @@ -13879,7 +13021,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, .argument = 1, // Remove the active field terrain if there is one. }, @@ -13896,7 +13037,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE }, @@ -13912,7 +13052,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -13929,7 +13068,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 80, .zMoveEffect = Z_EFFECT_NONE, // Supposedly uncallable by Metronome, but dubious }, @@ -13946,7 +13084,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -13962,7 +13099,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 60, .zMoveEffect = Z_EFFECT_NONE }, @@ -13978,7 +13114,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, // TO VERIFY .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // Supposedly uncallable by Metronome (unimplemented) }, @@ -13995,7 +13130,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_SNATCH_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RECOVER_HP, // Supposedly uncallable by Metronome (unimplemented) }, @@ -14012,7 +13146,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14028,7 +13161,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14044,7 +13176,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SOUND | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_SPECIAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14060,7 +13191,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_DANCE | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14076,7 +13206,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // TO VERIFY .split = SPLIT_PHYSICAL, - .zMovePower = 175, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14093,7 +13222,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14110,7 +13238,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14127,7 +13254,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14144,7 +13270,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, // Uncallable by Metronome (to be implemented) }, @@ -14161,7 +13286,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_RESET_STATS, // Uncallable by Metronome (to be implemented) }, @@ -14178,7 +13302,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, // Supposedly uncallable by Metronome? (to be implemented) }, @@ -14195,7 +13318,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = 0, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_NONE, // Supposedly uncallable by Metronome? (to be implemented) }, @@ -14212,7 +13334,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED, .split = SPLIT_STATUS, - .zMovePower = 0, .zMoveEffect = Z_EFFECT_SPD_UP_1, // Currently an exact copy of Hail until we figure out what to do with it }, @@ -14229,7 +13350,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14245,7 +13365,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14261,7 +13380,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14277,7 +13395,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 180, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14293,7 +13410,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_TWO_STRIKES, .split = SPLIT_SPECIAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14309,7 +13425,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_IRON_FIST_BOOST | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 100, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14325,7 +13440,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_SPECIAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14341,7 +13455,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14357,7 +13470,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 190, .zMoveEffect = Z_EFFECT_NONE }, @@ -14373,7 +13485,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, .split = SPLIT_PHYSICAL, - .zMovePower = 200, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14404,7 +13515,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_HIGH_CRIT, // | FLAG_SLICING_MOVE, .split = SPLIT_PHYSICAL, - .zMovePower = 140, .zMoveEffect = Z_EFFECT_NONE, }, @@ -14420,7 +13530,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14436,7 +13545,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14452,7 +13560,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14468,7 +13575,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14484,7 +13590,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .priority = 0, .flags = FLAG_PROTECT_AFFECTED | FLAG_SHEER_FORCE_BOOST, .split = SPLIT_PHYSICAL, - .zMovePower = 160, .zMoveEffect = Z_EFFECT_NONE }, @@ -14500,7 +13605,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, //determined from move type .zMoveEffect = 0 }, @@ -14515,7 +13619,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14530,7 +13633,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14545,7 +13647,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14560,7 +13661,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14575,7 +13675,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14590,7 +13689,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14605,7 +13703,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14620,7 +13717,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14635,7 +13731,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14650,7 +13745,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14665,7 +13759,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14680,7 +13773,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14695,7 +13787,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14710,7 +13801,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14725,7 +13815,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14740,7 +13829,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14755,7 +13843,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14770,7 +13857,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14785,7 +13871,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_HIGH_CRIT, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14800,7 +13885,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14815,7 +13899,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_USER, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_STATUS, .zMoveEffect = 0 }, @@ -14830,7 +13913,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14845,7 +13927,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .argument = 0, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. .zMoveEffect = 0 @@ -14861,7 +13942,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14876,7 +13956,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14891,7 +13970,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14906,7 +13984,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .argument = 1, // Remove the active field terrain if there is one. .zMoveEffect = 0 @@ -14922,7 +13999,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14937,7 +14013,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_BOTH, .priority = 0, .flags = FLAG_SOUND, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14952,7 +14027,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14967,7 +14041,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, @@ -14982,7 +14055,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -14997,7 +14069,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_SPECIAL, .zMoveEffect = 0 }, @@ -15012,7 +14083,6 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = 0, - .zMovePower = 0, .split = SPLIT_PHYSICAL, .zMoveEffect = 0 }, From 3b27b602fd520b2fbcdff0b35ee1ac6db4e4b134 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 28 Feb 2023 00:09:43 -0300 Subject: [PATCH 163/290] End of file --- include/battle_z_move.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/battle_z_move.h b/include/battle_z_move.h index a87109fcb7..44ed434549 100644 --- a/include/battle_z_move.h +++ b/include/battle_z_move.h @@ -28,4 +28,4 @@ bool32 IsZMoveUsable(u8 battlerId, u16 moveIndex); void GetUsableZMoves(u8 battlerId, u16 *moves); u16 GetZMovePower(u16 move); -#endif // GUARD_BATTLE_Z_MOVE_H \ No newline at end of file +#endif // GUARD_BATTLE_Z_MOVE_H From cc2778b8bb79c8168b9114a8e9a9409e498efc95 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:08:31 +0100 Subject: [PATCH 164/290] some touches --- src/data/pokemon/pokedex_entries.h | 218 ++++++++++++++--------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 0b01a836c4..5f63df64e1 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4651,7 +4651,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 102, .description = gTurtwigPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 20, .trainerScale = 256, .trainerOffset = 0, }, @@ -4663,7 +4663,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 970, .description = gGrotlePokedexText, .pokemonScale = 320, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 256, .trainerOffset = 0, }, @@ -4687,7 +4687,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 62, .description = gChimcharPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -4699,7 +4699,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 220, .description = gMonfernoPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 9, .trainerScale = 256, .trainerOffset = 0, }, @@ -4711,7 +4711,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 550, .description = gInfernapePokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -4723,7 +4723,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 52, .description = gPiplupPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -4735,7 +4735,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 230, .description = gPrinplupPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -4795,7 +4795,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 200, .description = gBidoofPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -4807,7 +4807,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 315, .description = gBibarelPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -4819,7 +4819,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 22, .description = gKricketotPokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -4831,7 +4831,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 255, .description = gKricketunePokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -4843,7 +4843,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 95, .description = gShinxPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -4855,7 +4855,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 305, .description = gLuxioPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -4891,7 +4891,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 145, .description = gRoseradePokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -4903,7 +4903,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 315, .description = gCranidosPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -4927,7 +4927,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 570, .description = gShieldonPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -4939,7 +4939,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 1495, .description = gBastiodonPokedexText, .pokemonScale = 272, - .pokemonOffset = 3, + .pokemonOffset = 4, .trainerScale = 256, .trainerOffset = 0, }, @@ -5011,7 +5011,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 39, .description = gPachirisuPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -5095,7 +5095,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 203, .description = gAmbipomPokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -5131,7 +5131,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 55, .description = gBunearyPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -5215,7 +5215,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 192, .description = gStunkyPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 17, .trainerScale = 256, .trainerOffset = 0, }, @@ -5227,7 +5227,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 380, .description = gSkuntankPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -5275,7 +5275,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 130, .description = gMimeJrPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -5287,7 +5287,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 244, .description = gHappinyPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5299,7 +5299,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 19, .description = gChatotPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5359,7 +5359,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 1050, .description = gMunchlaxPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -5371,7 +5371,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 202, .description = gRioluPokedexText, .pokemonScale = 365, - .pokemonOffset = 12, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -5395,7 +5395,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 495, .description = gHippopotasPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 11, .trainerScale = 257, .trainerOffset = 0, }, @@ -5407,7 +5407,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 3000, .description = gHippowdonPokedexText, .pokemonScale = 261, - .pokemonOffset = 1, + .pokemonOffset = 2, .trainerScale = 334, .trainerOffset = 4, }, @@ -5419,7 +5419,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 120, .description = gSkorupiPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 12, .trainerScale = 257, .trainerOffset = 0, }, @@ -5431,7 +5431,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 615, .description = gDrapionPokedexText, .pokemonScale = 272, - .pokemonOffset = 3, + .pokemonOffset = 5, .trainerScale = 256, .trainerOffset = 0, }, @@ -5647,7 +5647,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 255, .description = gLeafeonPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -5659,7 +5659,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 259, .description = gGlaceonPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -5683,7 +5683,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 2910, .description = gMamoswinePokedexText, .pokemonScale = 257, - .pokemonOffset = 10, + .pokemonOffset = 6, .trainerScale = 423, .trainerOffset = 8, }, @@ -5816,8 +5816,8 @@ const struct PokedexEntry gPokedexEntries[] = .description = gPalkiaPokedexText, .pokemonScale = 256, .pokemonOffset = 0, - .trainerScale = 411, - .trainerOffset = 5, + .trainerScale = 650, + .trainerOffset = 16, }, [NATIONAL_DEX_HEATRAN] = @@ -5827,7 +5827,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 4300, .description = gHeatranPokedexText, .pokemonScale = 259, - .pokemonOffset = 0, + .pokemonOffset = 1, .trainerScale = 290, .trainerOffset = 1, }, @@ -5839,7 +5839,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 4200, .description = gRegigigasPokedexText, .pokemonScale = 256, - .pokemonOffset = 0, + .pokemonOffset = 2, .trainerScale = 610, .trainerOffset = 17, }, @@ -5924,8 +5924,8 @@ const struct PokedexEntry gPokedexEntries[] = .description = gArceusPokedexText, .pokemonScale = 256, .pokemonOffset = 0, - .trainerScale = 405, - .trainerOffset = 8, + .trainerScale = 495, + .trainerOffset = 10, }, [NATIONAL_DEX_VICTINI] = @@ -5935,7 +5935,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 40, .description = gVictiniPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -5947,7 +5947,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 81, .description = gSnivyPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5959,7 +5959,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 160, .description = gServinePokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -5983,7 +5983,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 99, .description = gTepigPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -5995,7 +5995,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 555, .description = gPignitePokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -6019,7 +6019,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 59, .description = gOshawottPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6031,7 +6031,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 245, .description = gDewottPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -6055,7 +6055,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 116, .description = gPatratPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6079,7 +6079,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 41, .description = gLillipupPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6091,7 +6091,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 147, .description = gHerdierPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 9, .trainerScale = 256, .trainerOffset = 0, }, @@ -6115,7 +6115,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 101, .description = gPurrloinPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6211,7 +6211,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 233, .description = gMunnaPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6271,7 +6271,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 298, .description = gBlitzlePokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 8, .trainerScale = 257, .trainerOffset = 0, }, @@ -6295,7 +6295,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 180, .description = gRoggenrolaPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -6391,7 +6391,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 125, .description = gTimburrPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6403,7 +6403,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 400, .description = gGurdurrPokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6415,7 +6415,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 870, .description = gConkeldurrPokedexText, .pokemonScale = 265, - .pokemonOffset = 2, + .pokemonOffset = 3, .trainerScale = 262, .trainerOffset = 0, }, @@ -6427,7 +6427,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 45, .description = gTympolePokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6439,7 +6439,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 170, .description = gPalpitoadPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -6463,7 +6463,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 555, .description = gThrohPokedexText, .pokemonScale = 272, - .pokemonOffset = 3, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6475,7 +6475,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 510, .description = gSawkPokedexText, .pokemonScale = 265, - .pokemonOffset = 2, + .pokemonOffset = 4, .trainerScale = 262, .trainerOffset = 0, }, @@ -6487,7 +6487,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 25, .description = gSewaddlePokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6499,7 +6499,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 73, .description = gSwadloonPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6511,7 +6511,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 205, .description = gLeavannyPokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 3, .trainerScale = 256, .trainerOffset = 0, }, @@ -6523,7 +6523,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 53, .description = gVenipedePokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 16, .trainerScale = 256, .trainerOffset = 0, }, @@ -6535,7 +6535,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 585, .description = gWhirlipedePokedexText, .pokemonScale = 282, - .pokemonOffset = 4, + .pokemonOffset = 7, .trainerScale = 256, .trainerOffset = 0, }, @@ -6547,7 +6547,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 2005, .description = gScolipedePokedexText, .pokemonScale = 257, - .pokemonOffset = 10, + .pokemonOffset = 2, .trainerScale = 423, .trainerOffset = 8, }, @@ -6559,7 +6559,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 6, .description = gCottoneePokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6606,7 +6606,7 @@ const struct PokedexEntry gPokedexEntries[] = .height = 10, .weight = 180, .description = gBasculinPokedexText, - .pokemonScale = 305, + .pokemonScale = 316, .pokemonOffset = 7, .trainerScale = 257, .trainerOffset = 0, @@ -6619,7 +6619,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 152, .description = gSandilePokedexText, .pokemonScale = 365, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6655,7 +6655,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 375, .description = gDarumakaPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6679,7 +6679,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 280, .description = gMaractusPokedexText, .pokemonScale = 305, - .pokemonOffset = 7, + .pokemonOffset = 6, .trainerScale = 257, .trainerOffset = 0, }, @@ -6691,7 +6691,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 145, .description = gDwebblePokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -6715,7 +6715,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 118, .description = gScraggyPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6823,7 +6823,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 310, .description = gTrubbishPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6895,7 +6895,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 58, .description = gGothitaPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -6967,7 +6967,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 55, .description = gDucklettPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7027,7 +7027,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 195, .description = gDeerlingPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7063,7 +7063,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 59, .description = gKarrablastPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7099,7 +7099,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 105, .description = gAmoongussPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7159,7 +7159,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 143, .description = gGalvantulaPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 257, .trainerOffset = 0, }, @@ -7171,7 +7171,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 188, .description = gFerroseedPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7195,7 +7195,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 210, .description = gKlinkPokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7255,7 +7255,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 805, .description = gEelektrossPokedexText, .pokemonScale = 256, - .pokemonOffset = 0, + .pokemonOffset = 1, .trainerScale = 365, .trainerOffset = 7, }, @@ -7327,7 +7327,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 180, .description = gAxewPokedexText, .pokemonScale = 422, - .pokemonOffset = 12, + .pokemonOffset = 13, .trainerScale = 256, .trainerOffset = 0, }, @@ -7363,7 +7363,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 85, .description = gCubchooPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7375,8 +7375,8 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 2600, .description = gBearticPokedexText, .pokemonScale = 266, - .pokemonOffset = 8, - .trainerScale = 339, + .pokemonOffset = 3, + .trainerScale = 399, .trainerOffset = 4, }, @@ -7399,7 +7399,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 77, .description = gShelmetPokedexText, .pokemonScale = 491, - .pokemonOffset = 12, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7411,7 +7411,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 253, .description = gAccelgorPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 9, .trainerScale = 257, .trainerOffset = 0, }, @@ -7423,7 +7423,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 110, .description = gStunfiskPokedexText, .pokemonScale = 365, - .pokemonOffset = 12, + .pokemonOffset = 14, .trainerScale = 256, .trainerOffset = 0, }, @@ -7435,7 +7435,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 200, .description = gMienfooPokedexText, .pokemonScale = 338, - .pokemonOffset = 8, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -7483,8 +7483,8 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 3300, .description = gGolurkPokedexText, .pokemonScale = 275, - .pokemonOffset = 7, - .trainerScale = 256, + .pokemonOffset = 3, + .trainerScale = 300, .trainerOffset = 0, }, @@ -7495,7 +7495,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 102, .description = gPawniardPokedexText, .pokemonScale = 432, - .pokemonOffset = 13, + .pokemonOffset = 15, .trainerScale = 256, .trainerOffset = 0, }, @@ -7591,7 +7591,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 330, .description = gDurantPokedexText, .pokemonScale = 530, - .pokemonOffset = 13, + .pokemonOffset = 19, .trainerScale = 256, .trainerOffset = 0, }, @@ -7603,7 +7603,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 173, .description = gDeinoPokedexText, .pokemonScale = 366, - .pokemonOffset = 7, + .pokemonOffset = 12, .trainerScale = 257, .trainerOffset = 0, }, @@ -7615,7 +7615,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 500, .description = gZweilousPokedexText, .pokemonScale = 265, - .pokemonOffset = 2, + .pokemonOffset = 3, .trainerScale = 262, .trainerOffset = 0, }, @@ -7639,7 +7639,7 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 288, .description = gLarvestaPokedexText, .pokemonScale = 320, - .pokemonOffset = 7, + .pokemonOffset = 10, .trainerScale = 256, .trainerOffset = 0, }, @@ -7676,7 +7676,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gTerrakionPokedexText, .pokemonScale = 256, .pokemonOffset = 1, - .trainerScale = 326, + .trainerScale = 336, .trainerOffset = 4, }, @@ -7688,7 +7688,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gVirizionPokedexText, .pokemonScale = 261, .pokemonOffset = 1, - .trainerScale = 334, + .trainerScale = 344, .trainerOffset = 4, }, @@ -7724,7 +7724,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gReshiramPokedexText, .pokemonScale = 256, .pokemonOffset = 0, - .trainerScale = 405, + .trainerScale = 445, .trainerOffset = 8, }, @@ -7735,9 +7735,9 @@ const struct PokedexEntry gPokedexEntries[] = .weight = 3450, .description = gZekromPokedexText, .pokemonScale = 275, - .pokemonOffset = 7, - .trainerScale = 256, - .trainerOffset = 0, + .pokemonOffset = 2, + .trainerScale = 412, + .trainerOffset = 10, }, [NATIONAL_DEX_LANDORUS] = @@ -7760,7 +7760,7 @@ const struct PokedexEntry gPokedexEntries[] = .description = gKyuremPokedexText, .pokemonScale = 275, .pokemonOffset = 7, - .trainerScale = 256, + .trainerScale = 356, .trainerOffset = 0, }, @@ -10686,10 +10686,10 @@ const struct PokedexEntry gPokedexEntries[] = .height = 200, .weight = 9500, .description = gEternatusPokedexText, - .pokemonScale = 256, + .pokemonScale = 230, .pokemonOffset = 0, - .trainerScale = 1352, - .trainerOffset = 18, + .trainerScale = 4852, + .trainerOffset = 20, }, [NATIONAL_DEX_KUBFU] = From 9d1e31ab39a429b3da831155da70a47cbbb533c4 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:12:50 +0100 Subject: [PATCH 165/290] accidentally removed ifs --- src/data/pokemon/pokedex_entries.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 5f63df64e1..7c1d08e8ed 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4643,7 +4643,7 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 290, .trainerOffset = 2, }, - +#if P_GEN_4_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { .categoryName = _("Tiny Leaf"), @@ -5927,7 +5927,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 495, .trainerOffset = 10, }, +#endif +#if P_GEN_5_POKEMON == TRUE [NATIONAL_DEX_VICTINI] = { .categoryName = _("Victory"), @@ -7799,7 +7801,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 271, .trainerOffset = 0, }, +#endif +#if P_GEN_6_POKEMON == TRUE [NATIONAL_DEX_CHESPIN] = { .categoryName = _("Spiny Nut"), @@ -8663,7 +8667,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 290, .trainerOffset = 1, }, +#endif +#if P_GEN_7_POKEMON == TRUE [NATIONAL_DEX_ROWLET] = { .categoryName = _("Grass Quill"), @@ -9719,7 +9725,9 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 423, .trainerOffset = 8, }, +#endif +#if P_GEN_8_POKEMON == TRUE [NATIONAL_DEX_GROOKEY] = { .categoryName = _("Chimp"), From 1fb2560f7b805eede5845b0ad7c8377700508420 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:14:16 +0100 Subject: [PATCH 166/290] newline --- src/data/pokemon/pokedex_entries.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index 7c1d08e8ed..a10b0eab67 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -4643,6 +4643,7 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 290, .trainerOffset = 2, }, + #if P_GEN_4_POKEMON == TRUE [NATIONAL_DEX_TURTWIG] = { From 12db276a717dfafbd795dbc6bd6ff5adc3f020d2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 28 Feb 2023 10:36:11 +0100 Subject: [PATCH 167/290] fix endif --- src/data/pokemon/pokedex_entries.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon/pokedex_entries.h b/src/data/pokemon/pokedex_entries.h index a10b0eab67..56af95f1b7 100644 --- a/src/data/pokemon/pokedex_entries.h +++ b/src/data/pokemon/pokedex_entries.h @@ -10880,5 +10880,5 @@ const struct PokedexEntry gPokedexEntries[] = .trainerScale = 296, .trainerOffset = 1, }, - +#endif }; From fe74dd938b3a6a4547d9f3fbc1fdd6b7396b16c6 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 1 Mar 2023 04:00:19 -0300 Subject: [PATCH 168/290] Small corrections --- data/battle_scripts_1.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 70730d2a90..2556d60e16 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE @@ -524,7 +524,7 @@ BattleScript_EffectAttackUpUserAlly_AllyAnim: playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 printfromtable gStatUpStringIds waitmessage B_WAIT_TIME_LONG - goto BattleScript_EffectAttackUpUserAlly_Ends + goto BattleScript_EffectAttackUpUserAlly_End BattleScript_EffectTeatime:: attackcanceler From fe735f9700262fe0baf103ba77af83c9cf6c59f7 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 1 Mar 2023 20:03:27 -0300 Subject: [PATCH 169/290] Applied review suggestions -Merged EFFECT_CEASELESS_EDGE and EFFECT_STONE_AXE into EFFECT_HIT_SET_ENTRY_HAZARD -Updated gDmgHazardsStringIds and relevant battle scripts. Can't say that I like it at all. String tables are stupid imo. -Coupled Barb Barrage's effect in CalcMoveBasePower with Venoshock's --- data/battle_scripts_1.s | 36 ++++--------------------- include/constants/battle_move_effects.h | 7 +++-- include/constants/battle_string_ids.h | 6 +++++ src/battle_ai_main.c | 5 ++-- src/battle_message.c | 5 +++- src/battle_script_commands.c | 6 +++-- src/battle_util.c | 5 +--- src/data/battle_moves.h | 6 +++-- 8 files changed, 29 insertions(+), 47 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2556d60e16..425834b7e3 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -418,39 +418,13 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP - .4byte BattleScript_EffectCeaselessEdge @ EFFECT_CEASELESS_EDGE + .4byte BattleScript_EffectHitSetEntryHazard @ EFFECT_HIT_SET_ENTRY_HAZARD .4byte BattleScript_EffectDireClaw @ EFFECT_DIRE_CLAW - .4byte BattleScript_EffectStoneAxe @ EFFECT_STONE_AXE .4byte BattleScript_EffectBarbBarrage @ EFFECT_BARB_BARRAGE -BattleScript_EffectStoneAxe:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET - setmoveeffect MOVE_EFFECT_STEALTH_ROCK - seteffectprimary - moveendall - end - BattleScript_StealthRockActivates:: setstealthrock BattleScript_MoveEnd - printstring STRINGID_POINTEDSTONESFLOAT + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -458,7 +432,7 @@ BattleScript_EffectDireClaw:: setmoveeffect MOVE_EFFECT_DIRE_CLAW goto BattleScript_EffectHit -BattleScript_EffectCeaselessEdge:: +BattleScript_EffectHitSetEntryHazard:: attackcanceler accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring @@ -478,14 +452,14 @@ BattleScript_EffectCeaselessEdge:: resultmessage waitmessage B_WAIT_TIME_LONG tryfaintmon BS_TARGET - setmoveeffect MOVE_EFFECT_SPIKES + argumenttomoveeffect seteffectprimary moveendall end BattleScript_SpikesActivate:: trysetspikes BattleScript_MoveEnd - printstring STRINGID_SPIKESSCATTERED + printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 0adee76c93..ad589211ca 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,11 +399,10 @@ #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen #define EFFECT_SHELL_TRAP 395 -#define EFFECT_CEASELESS_EDGE 396 +#define EFFECT_HIT_SET_ENTRY_HAZARD 396 #define EFFECT_DIRE_CLAW 397 -#define EFFECT_STONE_AXE 398 -#define EFFECT_BARB_BARRAGE 399 +#define EFFECT_BARB_BARRAGE 398 -#define NUM_BATTLE_MOVE_EFFECTS 400 +#define NUM_BATTLE_MOVE_EFFECTS 399 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index f3e702ec46..01065e047f 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -921,4 +921,10 @@ #define B_MSG_Z_STAT_UP 5 #define B_MSG_Z_HP_TRAP 6 +// gDmgHazardsStringIds +#define B_MSG_PKMNHURTBYSPIKES 0 +#define B_MSG_STEALTHROCKDMG 1 +#define B_MSG_POINTEDSTONESFLOAT 2 +#define B_MSG_SPIKESSCATTERED 3 + #endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index bbc1660fac..f61dc49a82 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3872,9 +3872,8 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SPIKES: - case EFFECT_CEASELESS_EDGE: + case EFFECT_HIT_SET_ENTRY_HAZARD: case EFFECT_STEALTH_ROCK: - case EFFECT_STONE_AXE: case EFFECT_STICKY_WEB: case EFFECT_TOXIC_SPIKES: if (AI_DATA->abilities[battlerDef] == ABILITY_MAGIC_BOUNCE || CountUsablePartyMons(battlerDef) == 0) @@ -4910,7 +4909,7 @@ static s16 AI_SetupFirstTurn(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_HAIL: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: - case EFFECT_STONE_AXE: + case EFFECT_HIT_SET_ENTRY_HAZARD: score += 2; break; default: diff --git a/src/battle_message.c b/src/battle_message.c index 29580ded00..99f88f53b7 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1462,7 +1462,10 @@ const u16 gHealingWishStringIds[] = const u16 gDmgHazardsStringIds[] = { - STRINGID_PKMNHURTBYSPIKES, STRINGID_STEALTHROCKDMG + [B_MSG_PKMNHURTBYSPIKES] = STRINGID_PKMNHURTBYSPIKES, + [B_MSG_STEALTHROCKDMG] = STRINGID_STEALTHROCKDMG, + [B_MSG_POINTEDSTONESFLOAT] = STRINGID_POINTEDSTONESFLOAT, + [B_MSG_SPIKESSCATTERED] = STRINGID_SPIKESSCATTERED }; const u16 gSwitchInAbilityStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a445786ced..0799cf2f34 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3768,6 +3768,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_STEALTH_ROCK: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_STEALTH_ROCK)) { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_POINTEDSTONESFLOAT; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StealthRockActivates; } @@ -3775,6 +3776,7 @@ void SetMoveEffect(bool32 primary, u32 certain) case MOVE_EFFECT_SPIKES: if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) { + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_SpikesActivate; } @@ -7045,7 +7047,7 @@ static void Cmd_switchineffects(void) gBattleMoveDamage = 1; gSideStatuses[GetBattlerSide(gActiveBattler)] |= SIDE_STATUS_SPIKES_DAMAGED; - SetDmgHazardsBattlescript(gActiveBattler, 0); + SetDmgHazardsBattlescript(gActiveBattler, B_MSG_PKMNHURTBYSPIKES); } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_STEALTH_ROCK) @@ -7056,7 +7058,7 @@ static void Cmd_switchineffects(void) gBattleMoveDamage = GetStealthHazardDamage(gBattleMoves[MOVE_STEALTH_ROCK].type, gActiveBattler); if (gBattleMoveDamage != 0) - SetDmgHazardsBattlescript(gActiveBattler, 1); + SetDmgHazardsBattlescript(gActiveBattler, B_MSG_STEALTHROCKDMG); } else if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES_DAMAGED) && (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_TOXIC_SPIKES) diff --git a/src/battle_util.c b/src/battle_util.c index a944670856..9b3a39406c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8761,10 +8761,6 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; - case EFFECT_BARB_BARRAGE: - if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) - basePower *= 2; - break; } // Move-specific base power changes @@ -9130,6 +9126,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe if (gBattleMons[battlerDef].hp <= (gBattleMons[battlerDef].maxHP / 2)) MulModifier(&modifier, UQ_4_12(2.0)); break; + case EFFECT_BARB_BARRAGE: case EFFECT_VENOSHOCK: if (gBattleMons[battlerDef].status1 & STATUS1_PSN_ANY) MulModifier(&modifier, UQ_4_12(2.0)); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index cc4e322f21..530dacd132 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13323,7 +13323,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_STONE_AXE] = { - .effect = EFFECT_STONE_AXE, + .effect = EFFECT_HIT_SET_ENTRY_HAZARD, .power = 65, .type = TYPE_ROCK, .accuracy = 90, @@ -13335,6 +13335,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_STEALTH_ROCK, }, [MOVE_SPRINGTIDE_STORM] = @@ -13599,7 +13600,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_CEASELESS_EDGE] = { - .effect = EFFECT_CEASELESS_EDGE, + .effect = EFFECT_HIT_SET_ENTRY_HAZARD, .power = 65, .type = TYPE_DARK, .accuracy = 90, @@ -13611,6 +13612,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .split = SPLIT_PHYSICAL, .zMovePower = 120, .zMoveEffect = Z_EFFECT_NONE, + .argument = MOVE_EFFECT_SPIKES, }, [MOVE_BLEAKWIND_STORM] = From 58b408cbbf0760ff34e5136777f42e11014decd2 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 2 Mar 2023 17:04:24 +0100 Subject: [PATCH 170/290] some new sprites --- graphics/pokemon/arcanine/hisuian/back.png | Bin 902 -> 923 bytes graphics/pokemon/arcanine/hisuian/front.png | Bin 1137 -> 1138 bytes graphics/pokemon/arcanine/hisuian/normal.pal | 22 +- graphics/pokemon/arcanine/hisuian/shiny.pal | 22 +- graphics/pokemon/avalugg/hisuian/back.png | Bin 528 -> 654 bytes graphics/pokemon/avalugg/hisuian/front.png | Bin 809 -> 947 bytes graphics/pokemon/avalugg/hisuian/normal.pal | 26 +- graphics/pokemon/avalugg/hisuian/shiny.pal | 28 +- graphics/pokemon/braviary/hisuian/back.png | Bin 786 -> 1616 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 978 -> 1831 bytes graphics/pokemon/braviary/hisuian/normal.pal | 266 ++++++++++++++++- graphics/pokemon/braviary/hisuian/shiny.pal | 272 ++++++++++++++++-- graphics/pokemon/goodra/hisuian/back.png | Bin 882 -> 931 bytes graphics/pokemon/goodra/hisuian/front.png | Bin 924 -> 995 bytes graphics/pokemon/goodra/hisuian/normal.pal | 30 +- graphics/pokemon/goodra/hisuian/shiny.pal | 28 +- graphics/pokemon/growlithe/hisuian/back.png | Bin 678 -> 799 bytes graphics/pokemon/growlithe/hisuian/front.png | Bin 701 -> 775 bytes graphics/pokemon/growlithe/hisuian/normal.pal | 28 +- graphics/pokemon/growlithe/hisuian/shiny.pal | 28 +- graphics/pokemon/sliggoo/hisuian/back.png | Bin 606 -> 600 bytes graphics/pokemon/sliggoo/hisuian/front.png | Bin 659 -> 667 bytes graphics/pokemon/sliggoo/hisuian/normal.pal | 30 +- graphics/pokemon/sliggoo/hisuian/shiny.pal | 32 +-- graphics/pokemon/sneasel/hisuian/back.png | Bin 591 -> 744 bytes graphics/pokemon/sneasel/hisuian/front.png | Bin 682 -> 783 bytes graphics/pokemon/sneasel/hisuian/normal.pal | 28 +- graphics/pokemon/sneasel/hisuian/shiny.pal | 28 +- graphics/pokemon/typhlosion/hisuian/back.png | Bin 932 -> 888 bytes graphics/pokemon/typhlosion/hisuian/front.png | Bin 872 -> 995 bytes .../typhlosion/hisuian/front_shiny.png | Bin 0 -> 996 bytes .../pokemon/typhlosion/hisuian/normal.pal | 28 +- graphics/pokemon/typhlosion/hisuian/pal.pal | 19 ++ graphics/pokemon/typhlosion/hisuian/shiny.pal | 28 +- .../pokemon_graphics/back_pic_coordinates.h | 6 +- 35 files changed, 724 insertions(+), 225 deletions(-) mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/arcanine/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/avalugg/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/goodra/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/growlithe/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/sliggoo/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/sneasel/hisuian/shiny.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/front.png create mode 100755 graphics/pokemon/typhlosion/hisuian/front_shiny.png mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/normal.pal create mode 100755 graphics/pokemon/typhlosion/hisuian/pal.pal mode change 100644 => 100755 graphics/pokemon/typhlosion/hisuian/shiny.pal diff --git a/graphics/pokemon/arcanine/hisuian/back.png b/graphics/pokemon/arcanine/hisuian/back.png old mode 100644 new mode 100755 index a6fdca501ad80a47b717c7e55e47b0349eae3292..cf835c6f1d0334647fdd6486341e21299602906e GIT binary patch delta 900 zcmV-~1AF|22b%|wB!35VNliru=K}%{EDMi=#@YY?02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_AS@_=jDQdj5Kv@bT0s!!xGCqjDYbq8xU{hN_<#5S000000000000000 z006Pb!AJlA00Cl4M@0Xn2lB-L00O^BL_t(|oVAoaZ`&{sh9#&&M^Pe*tUPnbXhlqc zZYFsMGzLu?bPW&)`5Qs(fNTG8k4NgmZj1~;xlqzQy3dy^iqrMwpD!n?*?k(&p9bKA z7#TQE8Hh2;Gk<}05m4uW_}Ksm`2o;qA>6x3l&~v}g9bpI0bJJ*K+8CL1^|f(*wpU; z#x@gx8}%*#8X1tN;Kaq(KtQtq0Eb^kz}pxifCtAJ=f27Zs> zl^UQi*)Pfde79W#A-uq{F2`{UKl>GM9bTHnuA_qksDD)@RbabLc6=ZQ2M4Pd)g4=8 z%#lioDcz%6C()A$J?2FzUDLL1Rz>gDOu$8SfPPz)VsU}C#|5|}_{X-mf{7?~-$OQA zw1;qyp31D;L^O&gkpXvcK;#rVm&ew~*^V?TCDAfaNtSU@X_@}b04U+J2$G9Rn`Da1 z@I-R#4u9E2g%M~m13c3@*Pj7uQk(nWqbfAkHUTMy!M>mRT-)y4BO0Qq9_PYO`QQxicNqR_Nb!QJt%@U8L+)*d*0=+cbmw*IpRq6W=h!# zdhgH-=u8BLCusX^&M~DWNDhJk`qMBVZ7~B}{kQRv+~9`gKrv)Ic}LBsBTs5HNl}AS z?tKKn@6X{iRTEw8RlH4)fHn}oU!q>1Fka@V5|^xHwh3N!*zU0PcQWU avi<^a>L!N9J^3C000003Emnj885y!g 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 P00000NkvXXu0mjfaw<`S;@&fj(=XcLJ zUr4F6&_e%2Mq2Efggh7f9Vh}!a!jHEz#u3<1FN}|>Gm!G^oBGKFbQ_tt_BRA2M}xv zdO_95RenG3M~GDbheoO)2Z#=_LjXPmRRNrD&mM4y@&bT}P!%u-7(0mj&{!iBB;eif znUzKbu_mDWC4UrPaC?(GQwPfT$8NW=HCi7j;D&AT+sS!UsHP!&r_ zvz17NapGsJ`l-@?fm;Q{r@mBB59{@2#;!S2vTWT^RryWj`_LL{fO&VUZ)=F@hWJGL s0o3Dgn5yR<+c+8%gPb2`p@jOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_P+(}V;P8mBzz`4+XjDMx^!QLbFi0#Qka%ElaDQ;PytwG-=#WGp@VH0- z002i6@mBx<00Cl4M@0Xn2lB-L00P%ZL_t(|ob8jbPuoBg#vRE+#Aed8TcwzgJvlc* zlp#&dQZj%9_;kq{kkz^3WR`ANBof)M%>4mfQZKBSr3wRTZnVVYq5nzWokK~0WJl^7 z{r%o|-+On~w15Bgwkv0>lnrAYHCE{drnzA)A##Rcn45$kWWC;8B&I4t$ZHlkvjS30 z5@7KPv2OO^cycI-jhBby3^1sG_KB!^F-h^D(w7#JKnM}yJnx6}g)Ac+0EM5OZ&q9+ ztq*I8DB}eO{Qz_qPS{Wh_G@LEEo9J%S8>gXim)jWn}0srgw3e;&7DOs%a~Dewg^yY z^Sp1F-tif6{P~pf64dnAEH}%Y005iLr+DwWePBKS(YfsK5d3UHpXSH`U_yeDQS9{s z9$Zo4fZfSI;K#n(uk?$sUyJjAhh5mCH|MZss2!BZp#*xI5k|q`Y0{qsFfdDnBHHQ% z3LvxrgMXjSfblPR#iau5|6+LM^B%_VV0H&yszR)d#dROHTc{dn>-PTQo)0){JDQ%R z0~I0?G0affukQUZ#_??=29Od?*U33in~0_W^b3WLdj^Vr$2UR@dlJYK+s}ab8gzuJ zhJ~Za=dlp?JOIUKu&NmVx`mO|+7|UAAp{x*p?{kMnE;k2SnXNH=LH18~(Thx?od@&KHr61bD^R6h?Hn|n?01t-M8aBFv} zO{by9{CNQ45@?MwUCUE&IQ1HfgzTJsvOUg|?r0I1ul9EyBy@DL6tGhkJ`kEL1^mPd z)AkBLhgGMxvpj>A=ix5H%XLi~4D^-y+ZL<8#dKAKFSk>MF`k=@C=eDZ*>|>_Hn%66qDx9t<;52RO_k zL1DARmQsf(ypIe3rAM0pIcQ;8w5Wr!4{zRY02#vKbi@#vF}myHsp|8n0R=GyrC>N~ z4HzRO72d^X$bY=8Yg`+gt^rNLm>MJO2n^0O7_0!0BL~P3^+khW56$348Thh9>Luoy z`-BwJT<=340nG+j0y%~SNGV&)*0|T#xnb}!7Ah|RoS;ccUY6Dj1PoN!0B{#0Mt(63 z>aoK;0M9Esj$vM0t`;B)rL|C z&o49g0S;A~yHUsEabeWgbOZ+5;C-O-?W7Xj*3vzX0f zm79Exju9BefUUv(OaSWis+gsjT^zB%BEs$?0QQVWKx#Uj;O{^m9 zFU&#$d~{vQ|2@DvuokaH?#kT+7~$ZSuSbBt`oEb2t{BXv`OPH0{d?~f&KOp%p{=d~9)0=YPmf^fP Q01E&B07*qoM6N<$f;@(F3;+NC diff --git a/graphics/pokemon/avalugg/hisuian/normal.pal b/graphics/pokemon/avalugg/hisuian/normal.pal old mode 100644 new mode 100755 index 8055ef92ab..f64e40434d --- a/graphics/pokemon/avalugg/hisuian/normal.pal +++ b/graphics/pokemon/avalugg/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 168 208 -80 112 144 -184 240 248 -104 80 64 -128 208 240 -248 248 248 -80 40 24 -8 8 8 +80 96 104 +176 224 240 +136 176 192 +16 16 16 +104 84 64 +232 244 248 +80 60 48 +72 44 32 144 120 96 -144 64 32 -200 200 216 -144 152 168 -248 192 0 -88 56 56 +112 112 112 +184 188 184 +232 232 232 +144 68 32 +240 184 72 0 0 0 diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal old mode 100644 new mode 100755 index 9e547358cc..9fd2d0e180 --- a/graphics/pokemon/avalugg/hisuian/shiny.pal +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 152 208 -80 96 168 -184 232 248 -200 160 144 -128 192 240 -248 248 248 -112 80 72 -8 8 8 -232 192 176 -248 176 24 -248 176 120 -248 136 88 -248 176 24 -160 128 120 +80 96 104 +176 224 240 +136 176 192 +16 16 16 +104 84 64 +232 244 248 +80 60 48 +72 44 32 +144 120 96 +112 112 112 +184 188 184 +249 131 79 +164 100 16 +240 184 72 0 0 0 diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png old mode 100644 new mode 100755 index e314179b2b445519449d874662f40ce28d50c66f..211a5a04693bc752860fd9cdb55050a2fe0df53d GIT binary patch literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3@jo)8F*2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NSs56Z83KGlTxVQZAOHsLPWHN*Y6d0_QQ;ZJTW(gp`uy_WpLM@~C)iKB zu)yu}_3nfKg$GX_fXo{OqaiR{Lg1vU>lC107?Zr+UH&g+|8$grfoX}Si(^Q|oVQbN zZ(6J%;QCU`L{07a|NURC#4ueJmkKZ}e3rXvll&E@@0;>h6wB9M5k6pl>kLP8oZsd9 zGftXqnE3SRCEw|nIZ~K!hsZr~U~!t0yx`_0hsTPCJlU>Y-`?aYkS=k9mB(2v=HB$h z?laWvV*Hc@64)QySpHIm>D#|&Z&?d->@^%Wp8H($R=DDsz+CTC)k{sW)zaA>e8Mi% z>%K7L7`Vv<6>n#lu+wCHq5lT;1HY|Yeycp2b5gJS57)UvmpX3T*)CzQbk1qDHlgHA zXRh+M88fMzH9Z<9w1@q(Mf0=3c5D7arRUDhC|^54ca7Aid2-iU1=xhwx!hn-c)orU z-djF;>G22Qu#;$N(}=zk=q#*rU2+Y$p$dRlI}ztYd`(QApj z64ycx1U1fkar)A`6`T*scI%#=RnT+c;HO}*y4v329lGCtZ%RwJ-FfYP%;#99GtM04 z*SID+e~>btR?jrq!I^R6lIx+PY~+#~QZp?TuFdm@=X#GqQes@pEsPPt1nQ+z2O! zX-b>wFCR7&Vs!BBWRPn7cFE{~FE7u7RLO_ZG-n@L9b2OE?LXd6YmK}fCH|#vTHU9O5<^@+4GFVOWiGAJ9%h1g9tB$wp z`{uWqpOgFKni>8G9ynR&lD#a+Vol&8{wMY946pb(y>(x>)I}-eaIjT8m$&3Pc*0Zc zm|@5v!2^FHoibHerU=dbl)=3_VBW`9?y4Ab-n-iF~h0tQvGlCOn^pu BmSX?_ delta 774 zcmV+h1Nr>W43Y+r7=Hu<00013M{Ml?001yhOjJdf(4ZI?7zhXmKtMPsC?GgEKu}m% zFtFHo=;q`? zXGz(TOy&Z~g57`o^JjKQ$N7K$#UthH@4!qgr2J8@x80dii=^JA&x5m{N@@AEQto_c za$hi*B(f6e`|gkn0h8}qC-Q}U(dXO;AOvGlYkfd8Iy~Uq>OzD{0%`97O?n*>pb9x7 zgS&ORMV)OquYZsM$c3hJw_dN>PCL&_qUn|XB7~YE=6bbWL(lV8(IkHc(kufpdG~rn zdVXJI+yXM5LC$nCW$ibln@!7REP+tXmw0`tC(L_$@{s4hjkzx}79ryWL;&gZGUypt z7-Jraj39g%XxIZt#Ft-Jg@JjbIZ}<`FoZ#x5}>Ev$A6Oz444I8kq(D=t~7N3m)lPl z1_o}InXcm;S%9C*X}nm{7*ain1{>&uu7k&6d{}s33QHthqRnVv^2Y&QXEY}Uk8jjz ztg~g7!X=4%#vPc4R(YH7pPyq)3!P;dHIhW1P1!*Sa4Dy@OBm2yM5tjXpglI_6a@&N zN8c7eS%1M{eVVmYG=i)&KnOd;^19(cbGC%G1{9+81T?IJwXg@k=<39M-nk>JT!=1J zu}{f(gu|R&13~v4%eVkYzuH||CJ2zB2(85p>0M{{uyW%N6rV8ZY)^MOTRKE~JUK;$L*1qn!lSjlxvtPbKz|E75s0(Vb(Ic_fO!Bsxj%p%q8kV% zJomJ+Kv^URE=F|*)Tkfyjz_fy4Ih7?<70@fb+^8w`x7}cIGjv*Cu z)`mAuTdcri!nmqBd*}cE*Q4|%H#A+Cx7T*w*04DzQ-nU0&iZ#;;n{h^v;5B;9OW-e zNaoJH*y@-!VfPvqMPpt`6XPA(Jl6LEy7Z#CS|1|t#XF1b;Z|%;W!|w}%Bc~RVBT;FnDp~8Gq&T`D~gQzNxHcRRinLndwzPf8#F|t49Bml$rrA&37?!}e@oeBBpIaX4 z9QQ6WFI;|nS&;&RZw<%96|?tpl$vQSd?C8|)9Z=yCv!D-PEqs<+7!x^Sa7mML2}~u zT%VKT6ECR>6&IgZuGU(rnffDY2}6AR{tvdv!AFdCOue_cv3lFxThp|!+G{*(-M@9p zXWqTd;>yJu1z}8DJd*d;JfC^}{rl8s`izNB8Taw$sfzqqDf{kY^*>&we)G*|!gwk@ z0{^_2+bsD0``3ML2aT)KZ~gFTXwc7c3fT-%Bi8C5!`S}{$jQ%{w2g(_bh5lLdVUzktKZCuFj}wn=T=%MJ>g2^a+BSFm*jQGiP7%5G z#;RL!()sSc843ytf24|ikMtcVk}Qpl5n7-g5Mj-7R@1|6`iE4PiWArTA51uP;Kb=4 z3WA#@GMP>$>|MQeI;X(aYnvCHwEvZVi|w)L`bqV&+q~)xk~-{#1rD8O*^~SCCI9mL Vc;;F4A7w!0i>Irf%Q~loCIBx7_&xvt delta 968 zcmV;(12_Dq4$=pZ7=Hu<00013M{Ml?001yhOjJdf(4c5oPzVSJ=;+|Mu&6jVKu}m% zm_VqgV7MSCD3F-AP`IF|7#Q&Q_~5`uxPUma8T7>f00Uh~L_t(YiH(%MYui8+$0gCF zn;nTlmsmMRhAc7iJL4`LWL;W1R?Qi*w8h{9&!$Asv4ain(0`gHkiVdTY|W6+{sCP| z|A%BN1&4Sm6x?@rQmh|o>07M3_qp%)y?2rg<3FS7mbT1FHV?M|t;{pDidlCB;Imy4 zz^s{W+O7$I0dyI*YnL2U7Fx>1gpIO*1neAO77%*{*igqOy9D?-pwtEesB3E=1X`>T z`zio#39tc+OMii|?0|qaMiwAc4kRl;wMhbik3(Bsm}x6OwoyremK^|fR|cRpuzL+u zeH$zBD>ndUL#dGf)K-UlKche)>0YiFo|m;|0l7{A8iabsPkTti)d1^)PbH&oWCgVJ zlCe72+QdyAv}7d#2+kyg3_yYMX8?hAlmfn=j3aRf+kYae1L)a02!vFZP1S5Ew0lDI zNpiMBwfb#JhmF~#*NEV1O+e!gzAK(E(oqdRDOBaw8Fsv9eBk07F{c+fWo=S_G z5;0E3oqx%wGr@QRbzLA|m56bE9#6&(re8iEk7)go7MNuO%y^1Gd_I{@M#`Zl_Ob?s z_4wrDWIR1N{yc{6E|&s*BNxu=2xct#yhwZIAz)%K_LtF_YszIu9yyMILq=jr_7XInTz z!(3Pk`GaHR909S309(rt#6kgbKsd%xV*dVj2kyb8 zSVUfgpC#D{vH+>ot`|JIE26>m_GKj1t&NNaF`CQeVn(d~+N^f5_@LCS)nBJvArKjc zOPaOXFe>(_2EM$%C+D$T9!7k#I3@{HT|p(;Tzcf_{VfvKKp(QMh(WN;GLXFO)-{5; qFCzt#JufQfa^c-_I2UE}f5jh|J~46wuumTV0000OV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_jcYQvi$~X{WMxnz5D*YpL|DM6$mrDQh-{EVHh&fP{P_6z_&_{ZZex>> zgvfEV>{I{%00Cl4M@0Xn2lB-L00PHJL_t(|oSl?0Z__{+h7YN>l+nf&bK3raHh-W& zMwJ*USHeMTLBbas37C9eQmKs1W$V%;-Ya$NU*Q+P0&AIAkidN3-PyS~P6ocJahvzK z_kHhr4P*Z|bAQgWEt1PQXY-|$6W+dbB;}NJd<@&xFHpHwx|E^?AYG>T4KS9on@s~+ zdyVb@L~Ldh+Cb?@6dM4U&z5qm0l04J9i1?p8VkYP^%R%d30XT#Zc;Sqtda_9U&zV; zAY10lO=V3`J&{T>kK;G^;8O%(JX-+(w<)b3fN+q=Ab)4C0pv|pVG5IIi9o)9$xE33CQTkt7I2jKl3f={#GY z0V^oM$qJlgL4ZT=()v`+(1774M1<>+E;51U&IocO+yr+skMOjokfVV0F8v;dC$y2_>3YN zKyX;;y_18ZGyEI~PPgd2W6wt--`}p|9G$HJdrwz-uj?t|g$?u%HvlhuWf}OE-t){@ z$A55PC!AD3Q0tCoCmdIRS8wyeYpH;QG*jxSD#c2?yx`G+sZ#qy31qA)35{7*PsOS0jrfwDm jy5sp{0|=^@efAHjtf(08z+>wG0000~xsu delta 859 zcmV-h1El<;2l57xB!4haOjJdf(4c@|aM-}mcxX5X2ng`-@W`-OsF2BSV2PpKSFoP=76a!8!uy5ts)2URDZ+7U5@-a=(Ak} lR(!?`25EUt?gaHS@CV-9eAEM%-AMod002ovPDHLkV1nGTi7NmA diff --git a/graphics/pokemon/goodra/hisuian/front.png b/graphics/pokemon/goodra/hisuian/front.png old mode 100644 new mode 100755 index edd5e3c3abd5da6cdb9062eeb198351cab4f4b2b..1b53bfacf35c94104a2deaee0c196deaa464f67c GIT binary patch delta 973 zcmV;;12X)a2jd5jB!35VNliru=K}%`0W$G!ehL5p02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_h?Jj%dJfop zNx%aH!-%R<(X2KhdUtaKC=r^?J)*l1ZmBJl2%B@h?gBul1{4t*);ZR>4_j(|7$Lwm z);WieO#=Oy&9@yFA_V>@NPD=U&D{_KJj>>=Sq69)L4U;8SZy509y)Zv1vm0OGG_Zj zKr02wB!1tqf&2NAa2x{Vg4vcIDc68A^>;X=(5!PTM1+0;QQ-B{y zau8pgVt=*`T`Ns65ttI3#c^_(T%RS^vIjsqg9P^knC&OMtDECl1lYskUPo?I04f2Q z?IkxoLi&m5A$OSpGXrEUu2dy}PW~uNBn?Uzv$x$8=cJE4g5iUttZELy46EQbB8Dg; z@JZ1LfIW%`W~e~y_ca0^tYMD@N{vDG+KQ8^zkg4XpZIR40{g2#)ExxZ2%?TGQ_*3r zT>zIO_zmDguqy8m44|z7=#kS;5)5zvJemcJfE@%F5ZU-JFv1W4#--8$5MV%n=MN)f zePl)#f<6X-$MH|l#QOa&v~^s7r4&StFWz7==6=(Nl}#+|1byuA)_?-Eln!KJ?-PO@ zYJcD{!XB8vzZ{<^pt0C~3xB!4haOjJbxu;_qbaM-}mh=_;?2ng`-@W{x>sFtr*!CBZ1R5h-n+9-k);0=vNHOjDD!~|nPDDau8;vV%$Iw1<86%pu)f zAf@@FDMCun+LH?Rj(p}9m48E8gbDrK-hwQ5roWkTM^OXR4dJ+ZOF zLAAPvB8&T2o377DHdQo@cR*0xv#hdrRQIRgm6UcIRo62^P{rlzeh?I=n^0sG)KU&N zhci@P6H;Ffj)UnCGT_hT4gukLQacrZ#1GMR^K^L17=PZ!x*trZl+w`;4SaLM@DZ$k zki-%+4o+*{aUAe-hTPi;@XT7!@k?M4)Q<9sbm);~p(T+@%UxR?_e_Fzn&AjpQcsJM6xsJsyF= znPI#afSKK7?7rLpz7Mb6G7=-CNP{u7(Om}!~_qUCMlT0H3P za|GRPV-;W<^M&5Vm5^WPVxINL#pM`;;*4$tej~uQkx^(N5Jp&lr+q$Tjp1qPM(6Ch zm*@b%0o!C>BXE9mB6d&#?pPFf-1+U!c_?-e0aOr(9T3oFl)vYfxbo#BQ9zRE2wX)V zOnw&NfZj6JAJ`+1D8TP7#Xk@Fwu?hnW(wfl#2$D%2R3!V3BS!0z?+9XP+%q6oR>$D zdp82vxp_Y4OPn6T{5-zSDYY!@)SREk$DUezSm%KPX)SN@PaFTW%#W=oFWJsRGmI;Z b;6KM7{_(H7a9UX000000NkvXXu0mjfgc+s$ diff --git a/graphics/pokemon/goodra/hisuian/normal.pal b/graphics/pokemon/goodra/hisuian/normal.pal old mode 100644 new mode 100755 index 28da385cb0..846d1b0e29 --- a/graphics/pokemon/goodra/hisuian/normal.pal +++ b/graphics/pokemon/goodra/hisuian/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -0 176 232 -128 96 112 -216 192 208 -136 136 136 -8 8 8 -240 240 240 -200 200 200 -168 152 168 -64 64 64 -176 176 176 -96 96 104 -136 104 168 -64 56 88 -168 152 192 -232 208 232 +152 208 160 +136 148 168 +192 204 224 +224 228 240 +80 96 112 16 16 16 +88 68 88 +192 168 200 +232 212 232 +136 108 144 +48 64 72 +248 252 248 +248 248 248 +64 60 88 +104 96 144 +144 132 200 diff --git a/graphics/pokemon/goodra/hisuian/shiny.pal b/graphics/pokemon/goodra/hisuian/shiny.pal old mode 100644 new mode 100755 index 73fd87e714..93612e407b --- a/graphics/pokemon/goodra/hisuian/shiny.pal +++ b/graphics/pokemon/goodra/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -128 96 112 -216 192 208 -120 104 56 -8 8 8 -240 240 240 -200 176 88 -168 152 168 -56 40 32 -160 136 72 -80 64 40 -136 104 168 -64 56 88 -168 152 192 -232 208 232 +141 107 50 +184 139 71 +215 166 100 +101 80 35 16 16 16 +88 68 88 +192 168 200 +232 212 232 +136 108 144 +68 54 21 +248 252 248 +248 248 248 +64 60 88 +110 99 147 +144 132 200 diff --git a/graphics/pokemon/growlithe/hisuian/back.png b/graphics/pokemon/growlithe/hisuian/back.png old mode 100644 new mode 100755 index 0ed279c6a54ab7fb6befb65c3c4eb30501480927..16dcaefc38463471f85b7b092cf95fbc715f0252 GIT binary patch delta 776 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 LNkvXXu0mjf;#Wb* diff --git a/graphics/pokemon/growlithe/hisuian/normal.pal b/graphics/pokemon/growlithe/hisuian/normal.pal old mode 100644 new mode 100755 index e6d97462b5..da791d1d64 --- a/graphics/pokemon/growlithe/hisuian/normal.pal +++ b/graphics/pokemon/growlithe/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -88 72 88 -200 192 184 +88 72 64 +240 232 224 +208 208 200 +168 156 144 16 16 16 -120 104 128 -104 16 8 -248 80 48 -184 32 32 -160 144 160 -112 96 32 -208 128 112 -184 152 120 -224 200 160 -72 72 72 -0 0 0 -16 0 0 +184 176 168 +184 64 56 +120 48 8 +208 104 64 +112 84 56 +48 60 64 +192 160 120 +248 252 240 +232 208 176 +216 220 208 diff --git a/graphics/pokemon/growlithe/hisuian/shiny.pal b/graphics/pokemon/growlithe/hisuian/shiny.pal old mode 100644 new mode 100755 index 3406fee673..e61a65a7a8 --- a/graphics/pokemon/growlithe/hisuian/shiny.pal +++ b/graphics/pokemon/growlithe/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -112 104 96 -232 232 232 +88 72 64 +240 232 224 +208 208 200 +168 156 144 16 16 16 -160 152 144 -88 72 40 -232 184 128 -168 136 48 -208 200 192 -112 96 32 -208 128 112 -184 152 120 -224 200 160 -72 72 72 -0 0 0 -16 0 0 +184 176 168 +189 110 57 +120 48 8 +226 163 52 +112 84 56 +48 60 64 +192 160 120 +248 252 240 +232 208 176 +216 220 208 diff --git a/graphics/pokemon/sliggoo/hisuian/back.png b/graphics/pokemon/sliggoo/hisuian/back.png old mode 100644 new mode 100755 index ad4289b1b2c32ac4f7d7c5aabd3d94b49b89608b..276ac9915232a77b9df4f2faaab7e3694d4001ee GIT binary patch delta 575 zcmV-F0>J&=1lROV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_Wl3DcqQwvp5bfISka&oOd`GIQV1{8nNK8nznSW=<$jE?Pn5cljSTJA! z000@C+Gqd(00Cl4M@0Xn2lB-L00DeSL_t(|oTZd8Qo}G1MWxXNERzd(ZBhrDf;K@1 zpy2>egqjAol(s8oXb30p_>@R%S#iRyJemCVzx}(GR}$g^Nv(Af^HXC?79m!~DI-0b zErbgI04hRTM}H?0P(*~p$}Fj>3do3AX;lK`|0AlAaHYx;8-l=a?5;?_r=U|(Jv@;| z0pYu|Jtl_-rtp#l)Y1?bE)xf6uE$2Cxeby#x=R374B%=30cOqsa9^q*v#WCx0W!CC zxdoWj#I+p}(ih&h3q}KS^39GusML&`WeIXdS%6o;0Dn6O1PPRI)OHCVFW?2h9t!Ft z1F)`Na9pg_! zu)gmRd#(}SUIzs1#z%pByjM%WBk#*%0Z`^zKqIi_&!HTzHuonELA3qT4PJdqAm77W z{o(7}?>L52wWoyo#kvMHvhC*_ciA8G&q N002ovPDHLkV1iyq@DTt2 delta 581 zcmV-L0=oU!1l|OYB!4haOjJea;IM#TaPaW(*uc=Jn5YN{2zY2XNSIK_uvj=KAXvyy zpomDQn7}|dScqt-Xkch>WtA!b00HSqL_t(YiItQ)PQySDhLa)%g+&rlAyIf;(^y;y40)(W^=vZ#+SI%{izG5}P0sJp@$=m<*~T@jrIDj&F%02an4 zraO)J9vNeWdJFrIzdOlr9{?N7S|j0m2!L9>28{QqphVa0>bPBtngD*S zg9NHw>QFfyV40q@0SdF^WimzvrM{cQ_0l~;5UIymz<*&CUQpeF3*LUke*z(JY}-{b zh6ivGm^h$rB@oYf4siSjfK$ZZ(*v$aV07>Iuo?v5@PvVWS_^O-q9zLT9ysMQrS~Nei1bE=19H;Zjem~JTy&AtcL)JY<%DkS-~<@ T5;0aL00000NkvXXu0mjfB6#}; diff --git a/graphics/pokemon/sliggoo/hisuian/front.png b/graphics/pokemon/sliggoo/hisuian/front.png old mode 100644 new mode 100755 index 81322c48564d49365fa00d0417a205436082451f..3b9edc41cfba4c1c9a185f25ff35616f10150b9f GIT binary patch delta 642 zcmV-|0)73H1)BwsB!35VNliru=K}%`2o&<6K)wI~02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_U`SZNpui9i5a`(Gka&ndY+zuVkbr=INK8nmsDG%)$jE?Pn5cljSTJA! z0090QSJeOj00Cl4M@0Xn2lB-L00F;AL_t(|oaK};Zo)7Wh7(mCx-}7W>QX1_Oq&Hp zf{E0fo}dU0(18Q6m<*j`qzzMTJ6mX9x7$&u>dcbdVsapdWHl+jV<2@J+npY3i&s|FWI-m)!_u)b_u7)%i z4ROF6126#qo8#9&@Pq*YG&pkU_!$G#D$v0gokFeCBY&+2`go5jqd%adns3L3y$U8Z zn`Jhse~Zmf5F|hIP0|+KkPX0K6Rob0MzfPG!s!Av6mx5Sf%~+T&4fpaEd8k}|iLi=w6)@CATe`_%v> zthQU3%6pH85{NYbI*=Q=;~@&{US*bkMr8s!0z#3cGoGb9TowjQn_{((0VoY(b_}%D zr==yG+u|vgim2McFAA(J*Pm~uGvWNU=A;qgd cvVXX~0g;pKxGAvaB>(^b07*qoM6N<$f)-c>EC2ui delta 634 zcmV-=0)_pX1(OAkB!4haOjJea;IM#TaPaW(*uc=Jn5YN{2#AP?NSIK_$jCrIKv>97 zu&}VGn7}|dScqt-Xkci?+%swb00JIKL_t(YiS3g=Yui8=#^oV}Y!!;3g)UVHbah^d zEL}upx+cUYWcr6LK5R^;42EtgB)maOJ6Onset~`fqjGc#-GAin1=CLu@)`P`&Tb^- z&d{wxA27yxe)l|g?^%}hUw<$A;by<(KHUsDZlL@%cn^TX(g(MzZvbC?fp=&Cx+=$O zZ)%_bU+>=m`T_#VYR4F0^+E|8gZ>DVy(fXzp0QyK1g3@-^eEi%O$`zVY#X{pfELq? zpl7~O2ljUXdVi)pQpXF|g-*Bu*e3vtW3a5Y0*r&S+TiZ`bk`Aor*D|Z@b+6LplZKc|9U?T|{PwA%8WHvLs0~0G_j*So)VkA@aQ1 zv5i!Lc;g9;FpkB;Q1f=B`5aSf2oUyq&_*U(V_ZzOODJSmFe+J9C0q}nk#5#Pwa zS@@JTmvcU^{=c{Aw^$axZkLPiDPO4x@a5v|?d#&_+OKYb&dK>n(P!*U5$OSXd~y>_ z+2=c;{))*CCYSw)v;k#ADW(sgh(FOvQ>&>uao?{KI-dx})R3l3>#rD+(f(KU8|l{; UJwg0beE0x$i~1n32jB!35VNliru=K}%`6*sS{UC;mk02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_9Ehk*YH3JFNDvSZ-rh%f#o5f8C@3IEb(NL4ynnz{OKU(nQ1JBlcU&>+ z$y6+>Pj>(S00Cl4M@0Xn2lB-L00In2L_t(|oVAp(YQr!PhCLYCA><*1AvMj=7bt{s z5DaeeDjf{k;x$7jZ=zZI0;O9#gp#F1W4mVvWNVf{HmfJePAx~VvQ(4dKK=jsPIsPn z>7gzlbrGp}a(@8_7vPXUpk3lh2(fkn69;ghtrEKfZ3niL(pC=%v`Y9F0j(ZGmxL2g z9*N6iGSJ_g+ax5Rftby#CP*Y5&N(m^*wYx%_>(bU8Lq=GE4}!0VF%d$$zcIqf^?e17HD2?F6rBXwOk(RIV@|1NDrrgQK@SE7#_I+XbJzL2K2o;Q0@*R2@@zzJZcVV zd1#6F7&m%_Ksj@MWfBZb;5c)d=z|eg%cC58e}%WrR$o!7wu|<7#<^DYe6=tExqA{^ z3?X~LAc;BYH%vxUN<=tUIe#O7Jv9irfsvGm^xOujr?pyA-0~YhiAc|FQ1-NdbyX+q z#00iURL=cEKZ{;ktgAZ7^#`CA2N^C@$0(s`p-D>Cm4Asjln)Jth3Y94;ztOTNLRKh zIleYXQQ3!{B*uGP2LKrSJ;$+nen_Mu**6>aALkbwa57!WzDnN!0000qbO zv`{F4$au(Lw~nShMhtp|LLMgx1T=T;tMp2C5+}ZvGE_@`?tiCqu6*S~$gPXo0N+OV z$(;>|ZGc4r0JFp>Ns`b4#GVoGeV-a79^%*nP)dy+3NT8zHvvYE(k5XAv`1j`@QUVp znqm@)Xn;zrQ4=5nCrwi>M25HVL8})bxTqNp5CVI}8tOwpD%4_Z2ypUaeEn_pOB-)YXczn6+CE6 ztHVa_wm?h~Km|~+*+|L0q+DE?jG`!10TdiyH{Rs0+8vMUOr0~&PY8< z?->YW?Myu$c8-w5Dg!5aOksO1s26r5eAT1=zYO(E=Q&uOA6cmsCbjZjd3x&bJ35A9 zdq~>6yDwbDvCHR*D38HAQfCO-yHe`N=Q@~;$^2jI4*?_9vv9#{*Z=?k07*qoM6N<$ Ef-F(_%K!iX diff --git a/graphics/pokemon/sneasel/hisuian/front.png b/graphics/pokemon/sneasel/hisuian/front.png old mode 100644 new mode 100755 index 75e3872b15cc67b231ff9c701bcebf9c90cc710c..75f42547e2b1d43d8313f4d26c65fda59fd786d4 GIT binary patch delta 759 zcmV8F~a}=02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_z=#N#n8-*-NDvSZz$kF|+<0(IpeP_n*x2y6ynn!WY@k$1fbjJAP&9au zY`9O$HckKl00Cl4M@0Xn2lB-L00J{fL_t(|ob8k`ixWW<#~--G70cE_8W|QLl1?i@ zSi(r|^zQr&eglhx>2{kdf@`&;84|FuQMf`-xiDMAWl=+h2$vK#ffNVZ?ZR;oY%QR86o6S*CDAWfVTWCx_!6ORs{b_d~DFc z{xo1LPHU)fX{ayb^nDn|xKG{OCmTa22@#*ni-$_k+dfa}lK?`VGX-ZZ^wS3G zup1$Sp_oE86MB>K>k*1iJx6NARYy~8-sFdz^XB(pYQO&3yCHI(pg8?piTR*5gg)Ig z$cro09e>{c61Kl#xmT2K7|0E#f_5;3&%^EqM|QGl-~=KNq9ex>-e%pF<4cd;Cg2xU zrQ2;eh*stkJj~b6$~no(e6ZERxmo7tfw*1=j>Wv3$^yvM&I)h6MuQx~3W(e+*LJpX zvYbX$9hKB??yR*0Ad$mB4PW24RYG0r$h3~DsBot^K|6FvT)>IDUAI+s{ZD|s3n;g7 zM-z+k$yNZK)002ovPDHLkV1n|aT;Koz delta 658 zcmV;D0&V?|2C4;+B!4haOjJdf(4cr&uuw2)pm^9gC_tE)pb!uc*x2B>xWIs5prCj- z=)f>oIC${z_;`4D=r}+KFeHHh00K2hL_t(YiPe<9Z`wc<$6d?1xdw?j28kUmQdTM% zP^-`>M~KwH6mv8ZQJ27_dr~oU4!VkeAWHs%WF<&MZ$#PXRDZE$tGZR{^N(~m?%X*y z*qHB!@B8}QJ1pzvE;pAczjA3cOSkiszRuP?x|0EvXpvU*l2eNeXfdBRM5rG`236Os z7%C)y=eh;GP8h3M_U;=u7Z@Ti=KFTDTQKNW-xoqO&O(!Jg{X_cDKi0NBoC1ow@n6b zkL2`dDwxsXSbu)MlG8II;7ECWB@ZtcGt?kb-YunMMj)KYTPfwd9|Lx=xT65AN9 zF2dNsuTwXt5buA>9fGEvq`1sDLdl)!UCVyE5^{ILusX;0+?{N`NLTo?pd4n z=+>6)U(Ntf9KwPJ7Ab8FHW~V`4~zqkf7(^w0*Sc~fPZ@O^ik6a4s(EoMtIhJK76j-z?m)j4I8Eo=A|K#dAELY`PJ?J{;T`B|l&RRO;obQL3mstN zY2A%JIA5@tnu#h^X>yz$Apy6$rUG7xCXIK5z>#BLRl@6~{|5-*&~_&0YKC4Vtve8c zHNwtBjepT~({Gw$!~^o_LIsFheg=5djqPT33u%TiUhAx}1&|;GqI=(TG7uOgfbn=X z$FUt_8v`(i0jvM>hruER$hxHmNK(SGP9C)Y!8RoV(Hk_e&xYFZa-M{_0nuu$o*rvi s2J6P!^!f?VI9X*Sz{UTgzu@&3=G?%g93`~O01E&B07*qoM6N<$f@HBcF#rGn diff --git a/graphics/pokemon/sneasel/hisuian/normal.pal b/graphics/pokemon/sneasel/hisuian/normal.pal old mode 100644 new mode 100755 index 2e28acaaca..47e254a81b --- a/graphics/pokemon/sneasel/hisuian/normal.pal +++ b/graphics/pokemon/sneasel/hisuian/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -120 88 176 -80 48 104 -160 120 216 -56 40 64 -152 152 160 +192 136 8 +152 152 200 +72 72 72 16 16 16 -216 216 224 -184 184 192 -128 96 160 -160 120 56 -232 192 48 -88 56 120 -240 240 248 -120 120 120 -232 56 64 +192 40 112 +248 220 120 +112 76 160 +40 32 72 +216 216 240 +184 188 192 +120 108 160 +84 74 128 +240 244 248 +80 52 120 +144 108 184 diff --git a/graphics/pokemon/sneasel/hisuian/shiny.pal b/graphics/pokemon/sneasel/hisuian/shiny.pal old mode 100644 new mode 100755 index b57227c930..7d59884494 --- a/graphics/pokemon/sneasel/hisuian/shiny.pal +++ b/graphics/pokemon/sneasel/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -248 144 40 -168 72 16 -248 200 80 -32 24 32 -64 88 80 +28 136 168 +77 106 105 +72 72 72 16 16 16 -112 160 120 -88 128 104 -80 72 88 -64 112 224 -136 160 240 -48 40 48 -240 240 248 -120 120 120 -72 176 96 +222 222 71 +121 197 217 +204 155 40 +40 32 72 +117 149 149 +184 188 192 +84 75 107 +64 58 80 +240 244 248 +119 92 49 +235 201 84 diff --git a/graphics/pokemon/typhlosion/hisuian/back.png b/graphics/pokemon/typhlosion/hisuian/back.png index 0b491b9feb63b7b854ecaf0324510e41acd4dcd0..8e808ecf6b0e65d2105f4c86d3c87e1f8904fb6c 100755 GIT binary patch delta 779 zcmV+m1N8i)2lxh%D+vPv3LY15ISdbxG*W+{9LU)`=HN__+BP;pS(qpsNPuXlAwh7Y zi%S3h{}2!m)x~pYP$&QZ00000GNggJ00001VoOIv0Eh)0NB{r=oJmAMRCt`dl)rA< zFc8M2t$-JkO#%U)c+%D>s>Uvs_yQehq(z5jG5i`H0?_E3fpEO#0hBfgTxjl4R0e;t zbSPTCOYf*Z7Gujphu)yU_tW>?eWdJp|G9>Te`f4BzyNB(7d;99!=r%5K^zDCTA~+d zBz)*u0|DFW2mA&&GK8p`;$pTNu!0x2YN#j9;1=5TFOk=dx=30HLC1``#T4a(ZS%`l?pch7| z4^Li0BpIe%0}+Nn!24UZX|sqVttsU=l`=XH5in+T`#^v_6hA~j5|Bxm;2Z)0vwgF% zDGcc;)35>1rUGutGADl|5Xd3|tW79!RkKB6liRx>7)6n^K!S%7EX?oXS80LQ0579V z?f{A$0b`bbaywuOQPKf23($WMrl^9H7y%7eH6@*DEZRN-32l&cfHX`ISQfjK@W%?E z*U=$Cg(7cb#P`Px>qOQ*xQ1w6uRO+Qnu^J$oUen9du;(dZ#3Mmn8Pcr9U^uCpSOTM zsrth6yNJKm9U{X!I`X)q(E&8WJI9tD@Ae0?4xr~O(7F4MH_*@P4$gPGz@yuJcdb7s zy(3`XY%jiKUN3Nk$N2Mp+&?4Tl-0fCFnH#Gz@66*&`r6?9pG^vcyfUCKJerC5~eJR zUSLsuQe9$yO9DECyToE;Ez0tH(E}_^O_<^^V7{8B+%*2N{sObni2gVuErb97002ov JPDHLkV1mlVS7-nL delta 824 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 S7Io490000 Date: Thu, 2 Mar 2023 17:27:45 +0100 Subject: [PATCH 171/290] leftover --- graphics/pokemon/braviary/hisuian/back.png | Bin 1616 -> 835 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 1831 -> 1069 bytes graphics/pokemon/braviary/hisuian/normal.pal | 266 +----------------- graphics/pokemon/braviary/hisuian/shiny.pal | 266 +----------------- .../typhlosion/hisuian/front_shiny.png | Bin 996 -> 0 bytes 5 files changed, 26 insertions(+), 506 deletions(-) delete mode 100755 graphics/pokemon/typhlosion/hisuian/front_shiny.png diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index 211a5a04693bc752860fd9cdb55050a2fe0df53d..ff280fff64c57159cc3350a813897500359c18d2 100755 GIT binary patch delta 754 zcmVDfNl_nmw!MYXgW&hV(6z(2M-#0WGnbH+>>m{QWE+BN*@6S-p~L4 z|2^4GlK&MI$^X&=Y!VL1#m)IP5gY(o0TpkY@-24p=e9&Jf@w?ER*qq!45<5o9)(+kenN+cj|T5{unD zk^ri)-;N&lax)Jl5<*+EChxJq-y)Qt)}-(fy9E+a3UfCXqHYI?h1}iG!oIcwoVs1E z}E`00c&FWjIGv-bvAqQGaw-Pl;D=RnP;;vK?dEg%8tr< zBKvgvGBY`TvFviF1`N#BYI(j&yPg-l0y>6;%Ac*cu_O&?D<1gy|aMpxBVo&2LJx1GQeG+&;}s{|D8^a#hqQY2U-)Nwm_Pu z9-uCQInJWi4oC;U4`D?3VD)&l2SDO&5Yj>j6vpcD3Kd{#0e=D`P*bf6V}&8pbaHKh zNP;S8Yc&8ld3hvLbj@s=*f}1aMCCWSgE|QeBoOK(Xu&CWi*qQ79V(R3yN=?f}b!hHlwG zw{Mz#44{Ci154OT_or+?!;wH(0Q-c75sEVIW0WKkfaOsi^F|TXao-RD0-?j+9c+Nm k@~3N?1qA0B8U5?^0^m%T=g_71_y7O^07*qoM6N<$f@>>BmH+?% literal 1616 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3@jo)8F*2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NSs56Z83KGlTxVQZAOHsLPWHN*Y6d0_QQ;ZJTW(gp`uy_WpLM@~C)iKB zu)yu}_3nfKg$GX_fXo{OqaiR{Lg1vU>lC107?Zr+UH&g+|8$grfoX}Si(^Q|oVQbN zZ(6J%;QCU`L{07a|NURC#4ueJmkKZ}e3rXvll&E@@0;>h6wB9M5k6pl>kLP8oZsd9 zGftXqnE3SRCEw|nIZ~K!hsZr~U~!t0yx`_0hsTPCJlU>Y-`?aYkS=k9mB(2v=HB$h z?laWvV*Hc@64)QySpHIm>D#|&Z&?d->@^%Wp8H($R=DDsz+CTC)k{sW)zaA>e8Mi% z>%K7L7`Vv<6>n#lu+wCHq5lT;1HY|Yeycp2b5gJS57)UvmpX3T*)CzQbk1qDHlgHA zXRh+M88fMzH9Z<9w1@q(Mf0=3c5D7arRUDhC|^54ca7Aid2-iU1=xhwx!hn-c)orU z-djF;>G22Qu#;$N(}=zk=q#*rU2+Y$p$dRlI}ztYd`(QApj z64ycx1U1fkar)A`6`T*scI%#=RnT+c;HO}*y4v329lGCtZ%RwJ-FfYP%;#99GtM04 z*SID+e~>btR?jrq!I^R6lIx+PY~+#~QZp?TuFdm@=X#GqQes@pEsPPt1nQ+z2O! zX-b>wFCR7&Vs!BBWRPn7cFE{~FE7u7RLO_ZG-n@L9b2OE?LXd6YmK}fCH|#vTHU9O5<^@+4GFVOWiGAJ9%h1g9tB$wp z`{uWqpOgFKni>8G9ynR&lD#a+Vol&8{wMY946pb(y>(x>)I}-eaIjT8m$&3Pc*0Zc zm|@5v!2^FHoibHerU=dbl)=3_VBW`9?y4Ab-n-iF~h0tQvGlCOn^pu BmSX?_ diff --git a/graphics/pokemon/braviary/hisuian/front.png b/graphics/pokemon/braviary/hisuian/front.png index 866ffcb069e701318a22686cdaf2146916e4c319..299793975e549661d34ac356df2ead3ebaa1217f 100755 GIT binary patch delta 990 zcmV<410npU4y_1~7#sux00013M{Ml?000McNliru=K}%|5i7}mO5u?-Nq+z^P)t-s zn9!iOoDfjFpkPoS5D*ZMJfNU3FzD1+keImS=HRGgxG*$8Xk1XZu&7v6XaE2J)RP4k z00001VoOIv0Eh)0NB{r>QAtEWRCt_)ls{|RKp4gkq6{Tkj0GLKWeVwJQraO9&gnrY zjx-buwV~bGy)=-$Q$N6ExPQc2N(JShP^gxoR%GxZIB(a%L^su&s6IpAJN=K{^u>;S zd477HyZ5~Wq5sz$|4X?pJ`#%Ujf_poS4o8C5{HZaI!6t9j2h-tzqfSs-Z3G*3a)L5M|mKu{zfGKRg`hObGCY=Cf4CV${ zYDTBD0<=EEf||urGc!gPxD((D!3qGX3nZ*6+yFkCDcm+t%`VGQU4WIxte1Wbv=T&X zt=0iyPEoGGKwY;1Ux`iz0I9sS1y;6S6bXxUplYrrR7zEfyL)WrC)hkqX0EygkY+l9 zCM+p{I$_@Eww?IUN`F_#0$3VgcHIomxcVuTMS>r72~nB4vYc*Q5_RjvOuNz)<_RnR zCeEWMB7{_pn;D&{#Kq<^#yQlgK0tAOOkWfhpo2l4g}AlD>f~Yp7ua7KgIY()ucmXZ z4v4x2D7lDeHZmu$|w+yC}X@9`jbR6hw%$9L1+JYAOdEC-9F!4F(VBwFha-)Z*LNpP4I=SGx`+TBEc9q9ke`fAu2|VZ1V7klq z1Epjh=c~*M30zNTtte)-z0di_51;q>OG$KtNO&rhGDtbi7o6|z?eTG{JPp8<7Oo*w zInC#g@IDy(%72x5ivautU;%enCB|a=(`z2QV*Wys81yiTen3VF`ka{KZV%rC$MGK~ zNu+B8Z@mf7t8Sb;o*c)^nM9+gtoZ_n`k%qp`ThRGl}ib-Dq@}jARFM^8DL8y%c>$= z={A4L=*junz(EM3m_*^o03o*E7_tV2j)o78KnsZh5Px#hMP;#dW=?Z(-Ul&6RsmQl zb*l_gVDEaK29THQpNL4SJ#=(3`qp=%2qP=YMq&M2UDnDYy(3U8au|D^M@!(TbI^ML zyFYpBbT3p{UO4Ox;4mkLLvoa7>j1QI*n5O_GLK~a{OdZP&oLO`os}2N(a%9hH5tdd_CO<_7p~VC&m|fTGWLMRX1R0*y?sC?7u}&;S4c M07*qoM6N<$g7DzPYXATM literal 1831 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!*h@TpUD=;AGx3`8rRVx91BJv( zTq8w`x7}cIGjv*Cu z)`mAuTdcri!nmqBd*}cE*Q4|%H#A+Cx7T*w*04DzQ-nU0&iZ#;;n{h^v;5B;9OW-e zNaoJH*y@-!VfPvqMPpt`6XPA(Jl6LEy7Z#CS|1|t#XF1b;Z|%;W!|w}%Bc~RVBT;FnDp~8Gq&T`D~gQzNxHcRRinLndwzPf8#F|t49Bml$rrA&37?!}e@oeBBpIaX4 z9QQ6WFI;|nS&;&RZw<%96|?tpl$vQSd?C8|)9Z=yCv!D-PEqs<+7!x^Sa7mML2}~u zT%VKT6ECR>6&IgZuGU(rnffDY2}6AR{tvdv!AFdCOue_cv3lFxThp|!+G{*(-M@9p zXWqTd;>yJu1z}8DJd*d;JfC^}{rl8s`izNB8Taw$sfzqqDf{kY^*>&we)G*|!gwk@ z0{^_2+bsD0``3ML2aT)KZ~gFTXwc7c3fT-%Bi8C5!`S}{$jQ%{w2g(_bh5lLdVUzktKZCuFj}wn=T=%MJ>g2^a+BSFm*jQGiP7%5G z#;RL!()sSc843ytf24|ikMtcVk}Qpl5n7-g5Mj-7R@1|6`iE4PiWArTA51uP;Kb=4 z3WA#@GMP>$>|MQeI;X(aYnvCHwEvZVi|w)L`bqV&+q~)xk~-{#1rD8O*^~SCCI9mL Vc;;F4A7w!0i>Irf%Q~loCIBx7_&xvt diff --git a/graphics/pokemon/braviary/hisuian/normal.pal b/graphics/pokemon/braviary/hisuian/normal.pal index 39a94fb7ff..eb38d4ca3e 100755 --- a/graphics/pokemon/braviary/hisuian/normal.pal +++ b/graphics/pokemon/braviary/hisuian/normal.pal @@ -1,259 +1,19 @@ JASC-PAL 0100 -256 +16 152 208 160 -104 92 80 -16 16 16 -232 232 224 -184 176 168 -48 52 64 -88 84 104 -144 60 160 -168 100 184 -80 188 160 -144 152 184 -160 48 48 184 156 16 -232 212 88 +80 188 160 96 80 32 -224 228 224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +16 16 16 +144 60 160 +160 48 48 +232 212 88 +144 152 184 +228 230 224 +168 100 184 +48 52 64 +104 92 80 +184 176 168 +88 84 104 0 0 0 diff --git a/graphics/pokemon/braviary/hisuian/shiny.pal b/graphics/pokemon/braviary/hisuian/shiny.pal index 84e987d341..99c13ba68d 100755 --- a/graphics/pokemon/braviary/hisuian/shiny.pal +++ b/graphics/pokemon/braviary/hisuian/shiny.pal @@ -1,259 +1,19 @@ JASC-PAL 0100 -256 +16 152 208 160 -16 16 16 -16 16 16 -71 66 63 -45 41 38 -48 52 64 -90 87 104 -51 180 217 -122 234 243 -233 254 252 -174 251 251 -96 63 150 208 160 70 +233 254 252 +103 74 27 +16 16 16 +51 180 217 +96 63 150 243 215 139 -96 80 32 -224 228 224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +174 251 251 +71 66 63 +122 234 243 +48 52 64 +30 28 26 +45 41 38 +88 84 104 0 0 0 diff --git a/graphics/pokemon/typhlosion/hisuian/front_shiny.png b/graphics/pokemon/typhlosion/hisuian/front_shiny.png deleted file mode 100755 index e5cf7e835d00b49d6090902be7ddc23caf0b279b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmVF< z2@@mcWjL+?000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP=^Bm&4 zj)}0Qfw5B|o=?h^nLjIIfl|8f`(@ut0YhEm6y<0T1Q&JRhY48ZpiJ1R<_>>c z4TPXN1L&FXX^AXXKp^xQUA8Dg4{XZ7IlWxylop`{QMNn)pvC$7CE#LgssO#a=A6#~ z;ZY4aIOp_G04GA<0}HOwAQv3n?&mp=D4zjf!IaNrj`Ggu5$BIb5q(Ubm^dzS3`fwu z0~a8-=@Pyt$Aq>x@BV4=v{Il#%C2m4tJ4L!^8xg>Er4B2)IH*96320W)aGr6(l-^m zx_;{87~YJj^|I~SbdT7_`v29d7tS{yW?)KBH9A7Y;_jYjha!ufPA?RF&&DVGX#-Fg zzuO@;9r3PsY~)8Wz~O1ExyUOzzsmpx6-Zn3HUm-A%(M_DqwwS0>u7KZL|q2P zJUzHK@vOs80IXg=T>{%e4xf7{h9*gp2%yoBkN3UMQ*;V?@*RM~V>zw+xjrX;#9vrL z-lHE4ZV|%Q_T?}8>)p;9 S7Io490000 Date: Thu, 2 Mar 2023 18:04:12 +0100 Subject: [PATCH 172/290] small braviary sprite fix --- graphics/pokemon/braviary/hisuian/back.png | Bin 835 -> 11612 bytes graphics/pokemon/braviary/hisuian/front.png | Bin 1069 -> 15390 bytes graphics/pokemon/braviary/hisuian/icon.png | Bin graphics/pokemon/braviary/hisuian/normal.pal | 2 +- graphics/pokemon/braviary/hisuian/shiny.pal | 2 +- 5 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 graphics/pokemon/braviary/hisuian/icon.png diff --git a/graphics/pokemon/braviary/hisuian/back.png b/graphics/pokemon/braviary/hisuian/back.png index ff280fff64c57159cc3350a813897500359c18d2..947bc46aeb3bf10ab616a52ddc1f17892e0fb01f 100755 GIT binary patch literal 11612 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 Date: Sun, 5 Mar 2023 17:17:39 -0300 Subject: [PATCH 173/290] Review changes --- charmap.txt | 2 +- data/maps/Route111/scripts.inc | 2 +- include/constants/songs.h | 4 ++-- src/overworld.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/charmap.txt b/charmap.txt index 8c886bdf0c..477448c9c5 100644 --- a/charmap.txt +++ b/charmap.txt @@ -795,7 +795,7 @@ MUS_LITTLEROOT = 95 01 MUS_MT_CHIMNEY = 96 01 MUS_ENCOUNTER_FEMALE = 97 01 MUS_LILYCOVE = 98 01 -MUS_ROUTE111_DESERT = 99 01 +MUS_DESERT = 99 01 MUS_HELP = 9A 01 MUS_UNDERWATER = 9B 01 MUS_VICTORY_TRAINER = 9C 01 diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc index 44372da37d..7335d0e1ce 100644 --- a/data/maps/Route111/scripts.inc +++ b/data/maps/Route111/scripts.inc @@ -260,7 +260,7 @@ Route111_EventScript_SunTrigger:: Route111_EventScript_SandstormTrigger:: setweather WEATHER_SANDSTORM - fadenewbgm MUS_ROUTE111_DESERT + fadenewbgm MUS_DESERT doweather end diff --git a/include/constants/songs.h b/include/constants/songs.h index ffa5c3df0b..ab6ddd62bc 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -337,7 +337,7 @@ #define MUS_MT_CHIMNEY 406 // MUS_TOZAN // Also used in Desert Underpass, Mirage Tower, Seafloor Cavern and Sky Pillar. #define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE #define MUS_LILYCOVE 408 // MUS_MINAMO // Also used in Pacifidlog Town and the Diving Treasure Hunter's house. -#define MUS_ROUTE111_DESERT 409 // MUS_ASHROAD +#define MUS_DESERT 409 // MUS_ASHROAD #define MUS_HELP 410 // MUS_EVENT0 #define MUS_UNDERWATER 411 // MUS_DEEPDEEP #define MUS_VICTORY_TRAINER 412 // MUS_KACHI1 @@ -372,7 +372,7 @@ #define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0 #define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE #define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME // Replaces MUS_WEATHER_KYOGRE from R/S. -#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused from R/S. +#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI // Unused, from R/S. #define MUS_SOOTOPOLIS 445 // MUS_RUNECITY #define MUS_CONTEST_RESULTS 446 // MUS_CON_K #define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R diff --git a/src/overworld.c b/src/overworld.c index c9258e05e8..4f7cccdffb 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1104,7 +1104,7 @@ u16 GetCurrLocationDefaultMusic(void) if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111) && GetSavedWeather() == WEATHER_SANDSTORM) - return MUS_ROUTE111_DESERT; + return MUS_DESERT; music = GetLocationMusic(&gSaveBlock1Ptr->location); if (music != MUS_ROUTE118) From b3ffc9d1c4fc54aa747661328aaaedc9846c6617 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 6 Mar 2023 05:29:34 -0300 Subject: [PATCH 174/290] Set link tutorial as complete when using Cheat Start (#2802) --- data/scripts/debug.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 9463164ac2..191fe69327 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -21,7 +21,7 @@ Debug_CheatStart:: setflag FLAG_SYS_POKEDEX_GET special SetUnlockedPokedexFlags setflag FLAG_RECEIVED_POKEDEX_FROM_BIRCH - setvar VAR_CABLE_CLUB_TUTORIAL_STATE, 1 + setvar VAR_CABLE_CLUB_TUTORIAL_STATE, 2 setflag FLAG_SYS_NATIONAL_DEX special EnableNationalPokedex setflag FLAG_RECEIVED_RUNNING_SHOES From d3d99c3f8c2b9e1a1dd45e8fcf6e4e56d8a3a65c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 6 Mar 2023 15:22:28 +0100 Subject: [PATCH 175/290] alpha omega indicator sprites use the same palete --- graphics/battle_interface/alpha_indicator.png | Bin 266 -> 211 bytes graphics/battle_interface/omega_indicator.png | Bin 271 -> 209 bytes include/battle_interface.h | 3 +-- src/battle_interface.c | 11 +++++------ 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/graphics/battle_interface/alpha_indicator.png b/graphics/battle_interface/alpha_indicator.png index 0e302576b6aced8d385e93eee3a2919ea2e4d1c3..84cfee2cf1364598c2acd71ee78d8777d7389959 100644 GIT binary patch delta 165 zcmeBTy39C1LYIS?fq_9omp>RtF%}28J29*~C-V}>F$nMpasAK0@W3nU&8wVQx&~hs zwM=YN%-vV8?hjDf+|$J|L}KdMo}Ii51{}|4}nTJN(%hkfilKGHiK7#raX{hNq6*h zWMJ6X&;2Kn705RT@CkAK&%mHie?!1~&W;BkI(9q&3gZVW>MkqO6D zAV<&B#WAE}PIAHmF@cb#3q8l0_!8PSb#D}yk*JZ;aV$X0q-{l-QCO2kT0j#A14Dl= V^X1G4%?}`pJYD@<);T3K0RZ%8M?wGq diff --git a/graphics/battle_interface/omega_indicator.png b/graphics/battle_interface/omega_indicator.png index c56d51c151e6c578e4a8935a7cf6bd4efaceb009..8e21007a800ba1102177d9205420dc248aa5fd4f 100644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~g8-ip*Z&L* z54^J8yvmuSYw%@Ji$eVk0q;3G9(?H7@c^g<6YMKk_Xj9y>gnPbA~E&snVo_R1{};u#y~cMSA(WJkYY)9^mSxl*x1kgCy{lc zp7_K-(TNFcKok?~*I58mz?kIi?(%;r`=_Hoj*H^Swn`zfJ?SGkCiCxvX Date: Mon, 6 Mar 2023 20:35:08 +0100 Subject: [PATCH 176/290] Add tests for Defog and fix Defog battle strings (#2737) * start working on defog tests * defog tests + improve terrain end battlescripts * newline --- data/battle_scripts_1.s | 52 ++-- include/battle_scripts.h | 10 +- include/config/battle.h | 3 +- include/constants/battle_string_ids.h | 17 +- src/battle_message.c | 15 +- src/battle_script_commands.c | 70 +++-- src/battle_util.c | 53 ++-- test/move_effect_defog.c | 375 ++++++++++++++++++++++++++ 8 files changed, 500 insertions(+), 95 deletions(-) create mode 100644 test/move_effect_defog.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 9ea346cc63..0a3a4f264c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1265,7 +1265,7 @@ BattleScript_EffectRemoveTerrain: resultmessage waitmessage B_WAIT_TIME_LONG removeterrain - jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 4, BattleScript_MoveEnd + jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_COUNT, BattleScript_MoveEnd printfromtable gTerrainEndingStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG @@ -6899,29 +6899,17 @@ BattleScript_MagicRoomEnds:: printstring STRINGID_MAGICROOMENDS waitmessage B_WAIT_TIME_LONG end2 - -BattleScript_ElectricTerrainEnds:: - printstring STRINGID_ELECTRICTERRAINENDS - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - end2 - -BattleScript_MistyTerrainEnds:: - printstring STRINGID_MISTYTERRAINENDS - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - end2 - -BattleScript_GrassyTerrainEnds:: - printstring STRINGID_GRASSYTERRAINENDS - waitmessage B_WAIT_TIME_LONG - playanimation BS_ATTACKER, B_ANIM_RESTORE_BG - end2 - -BattleScript_PsychicTerrainEnds:: - printstring STRINGID_PSYCHICTERRAINENDS + +BattleScript_GrassyTerrainEnds: + setbyte cMULTISTRING_CHOOSER, B_MSG_TERRAINENDS_GRASS +BattleScript_TerrainEnds_Ret:: + printfromtable gTerrainEndingStringIds waitmessage B_WAIT_TIME_LONG playanimation BS_ATTACKER, B_ANIM_RESTORE_BG + return + +BattleScript_TerrainEnds:: + call BattleScript_TerrainEnds_Ret end2 BattleScript_MudSportEnds:: @@ -7465,6 +7453,26 @@ BattleScript_StealthRockFree:: printstring STRINGID_PKMNBLEWAWAYSTEALTHROCK waitmessage B_WAIT_TIME_LONG return + +BattleScript_SpikesDefog:: + printstring STRINGID_SPIKESDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_ToxicSpikesDefog:: + printstring STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StickyWebDefog:: + printstring STRINGID_STICKYWEBDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return + +BattleScript_StealthRockDefog:: + printstring STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM + waitmessage B_WAIT_TIME_LONG + return BattleScript_MonTookFutureAttack:: printstring STRINGID_PKMNTOOKATTACK diff --git a/include/battle_scripts.h b/include/battle_scripts.h index f2821af059..6ffaa32789 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -246,10 +246,8 @@ extern const u8 BattleScript_TailwindEnds[]; extern const u8 BattleScript_TrickRoomEnds[]; extern const u8 BattleScript_WonderRoomEnds[]; extern const u8 BattleScript_MagicRoomEnds[]; -extern const u8 BattleScript_ElectricTerrainEnds[]; -extern const u8 BattleScript_MistyTerrainEnds[]; -extern const u8 BattleScript_GrassyTerrainEnds[]; -extern const u8 BattleScript_PsychicTerrainEnds[]; +extern const u8 BattleScript_TerrainEnds[]; +extern const u8 BattleScript_TerrainEnds_Ret[]; extern const u8 BattleScript_MudSportEnds[]; extern const u8 BattleScript_WaterSportEnds[]; extern const u8 BattleScript_SturdiedMsg[]; @@ -287,6 +285,10 @@ extern const u8 BattleScript_SelectingNotAllowedMoveHealBlockInPalace[]; extern const u8 BattleScript_ToxicSpikesFree[]; extern const u8 BattleScript_StickyWebFree[]; extern const u8 BattleScript_StealthRockFree[]; +extern const u8 BattleScript_SpikesDefog[]; +extern const u8 BattleScript_ToxicSpikesDefog[]; +extern const u8 BattleScript_StickyWebDefog[]; +extern const u8 BattleScript_StealthRockDefog[]; extern const u8 BattleScript_MegaEvolution[]; extern const u8 BattleScript_WishMegaEvolution[]; extern const u8 BattleScript_MoveEffectRecoilWithStatus[]; diff --git a/include/config/battle.h b/include/config/battle.h index 8fdf596cc3..4a3d6382fb 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -96,7 +96,8 @@ #define B_DARK_VOID_FAIL GEN_LATEST // In Gen7+, only Darkrai can use Dark Void. #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 + // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. +#define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp.Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. // Ability settings diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1bd82023ed..43e4ea574e 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -641,10 +641,14 @@ #define STRINGID_PKMNSABILITYPREVENTSABILITY 639 #define STRINGID_PREPARESHELLTRAP 640 #define STRINGID_SHELLTRAPDIDNTWORK 641 -#define STRINGID_COULDNTFULLYPROTECT 642 -#define STRINGID_STOCKPILEDEFFECTWOREOFF 643 +#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 642 +#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 643 +#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 644 +#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 645 +#define STRINGID_COULDNTFULLYPROTECT 646 +#define STRINGID_STOCKPILEDEFFECTWOREOFF 647 -#define BATTLESTRINGS_COUNT 644 +#define BATTLESTRINGS_COUNT 648 // This is the string id that gBattleStringsTable starts with. // String ids before this (e.g. STRINGID_INTROMSG) are not in the table, @@ -901,6 +905,13 @@ #define B_MSG_TERRAINPREVENTS_ELECTRIC 1 #define B_MSG_TERRAINPREVENTS_PSYCHIC 2 +// gTerrainEndingStringIds +#define B_MSG_TERRAINENDS_MISTY 0 +#define B_MSG_TERRAINENDS_ELECTRIC 1 +#define B_MSG_TERRAINENDS_PSYCHIC 2 +#define B_MSG_TERRAINENDS_GRASS 3 +#define B_MSG_TERRAINENDS_COUNT 4 + // gWrappedStringIds #define B_MSG_WRAPPED_BIND 0 #define B_MSG_WRAPPED_WRAP 1 diff --git a/src/battle_message.c b/src/battle_message.c index abf9bf705a..cf57247bf8 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -631,6 +631,10 @@ static const u8 sText_NotDoneYet[] = _("This move effect is not done yet!\p"); static const u8 sText_PkmnBlewAwayToxicSpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nToxic Spikes!"); static const u8 sText_PkmnBlewAwayStickyWeb[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSticky Web!"); static const u8 sText_PkmnBlewAwayStealthRock[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nStealth Rock!"); +static const u8 sText_SpikesDisappearedFromTeam[] = _("The spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); +static const u8 sText_ToxicSpikesDisappearedFromTeam[] = _("The poison spikes disappeared from\nthe ground around {B_ATK_TEAM2} team!"); +static const u8 sText_StealthRockDisappearedFromTeam[] = _("The pointed stones disappeared\nfrom around {B_ATK_TEAM2} team!"); +static const u8 sText_StickyWebDisappearedFromTeam[] = _("The sticky web has disappeared from\nthe ground around {B_ATK_TEAM2} team!"); static const u8 sText_StickyWebUsed[] = _("A sticky web spreads out on the\nground around {B_DEF_TEAM2} team!"); static const u8 sText_QuashSuccess[] = _("The opposing {B_DEF_NAME_WITH_PREFIX}'s\nmove was postponed!"); static const u8 sText_IonDelugeOn[] = _("A deluge of ions showers\nthe battlefield!"); @@ -1369,6 +1373,10 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_PKMNBLEWAWAYTOXICSPIKES - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayToxicSpikes, [STRINGID_PKMNBLEWAWAYSTICKYWEB - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStickyWeb, [STRINGID_PKMNBLEWAWAYSTEALTHROCK - BATTLESTRINGS_TABLE_START] = sText_PkmnBlewAwayStealthRock, + [STRINGID_SPIKESDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_SpikesDisappearedFromTeam, + [STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_ToxicSpikesDisappearedFromTeam, + [STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_StealthRockDisappearedFromTeam, + [STRINGID_STICKYWEBDISAPPEAREDFROMTEAM - BATTLESTRINGS_TABLE_START] = sText_StickyWebDisappearedFromTeam, [STRINGID_IONDELUGEON - BATTLESTRINGS_TABLE_START] = sText_IonDelugeOn, [STRINGID_TOPSYTURVYSWITCHEDSTATS - BATTLESTRINGS_TABLE_START] = sText_TopsyTurvySwitchedStats, [STRINGID_TERRAINBECOMESMISTY - BATTLESTRINGS_TABLE_START] = sText_TerrainBecomesMisty, @@ -1440,9 +1448,12 @@ const u16 gTerrainStringIds[] = STRINGID_TERRAINBECOMESMISTY, STRINGID_TERRAINBECOMESGRASSY, STRINGID_TERRAINBECOMESELECTRIC, STRINGID_TERRAINBECOMESPSYCHIC, STRINGID_TERRAINREMOVED, }; -const u16 gTerrainEndingStringIds[] = +const u16 gTerrainEndingStringIds[B_MSG_TERRAINENDS_COUNT] = { - STRINGID_MISTYTERRAINENDS, STRINGID_GRASSYTERRAINENDS, STRINGID_ELECTRICTERRAINENDS, STRINGID_PSYCHICTERRAINENDS + [B_MSG_TERRAINENDS_MISTY] = STRINGID_MISTYTERRAINENDS, + [B_MSG_TERRAINENDS_ELECTRIC] = STRINGID_ELECTRICTERRAINENDS, + [B_MSG_TERRAINENDS_PSYCHIC] = STRINGID_PSYCHICTERRAINENDS, + [B_MSG_TERRAINENDS_GRASS] = STRINGID_GRASSYTERRAINENDS, }; const u16 gTerrainPreventsStringIds[] = diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1ea353f3c2..a5b7656bf5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8412,6 +8412,30 @@ bool32 CanUseLastResort(u8 battlerId) return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1); } +static void RemoveAllTerrains(void) +{ + gFieldTimers.terrainTimer = 0; + switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + case STATUS_FIELD_MISTY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_MISTY; + break; + case STATUS_FIELD_GRASSY_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_GRASS; + break; + case STATUS_FIELD_ELECTRIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_ELECTRIC; + break; + case STATUS_FIELD_PSYCHIC_TERRAIN: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_PSYCHIC; + break; + default: + gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_TERRAINENDS_COUNT; // failsafe + break; + } + gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain +} + #define DEFOG_CLEAR(status, structField, battlescript, move)\ { \ if (*sideStatuses & status) \ @@ -8429,7 +8453,7 @@ bool32 CanUseLastResort(u8 battlerId) } \ } -static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear) +static bool32 TryDefogClear(u8 battlerAtk, bool32 clear) { s32 i; for (i = 0; i < 2; i++) @@ -8437,7 +8461,7 @@ static bool32 ClearDefogHazards(u8 battlerAtk, bool32 clear) struct SideTimer *sideTimer = &gSideTimers[i]; u32 *sideStatuses = &gSideStatuses[i]; - gBattlerAttacker = i; + gBattlerAttacker = i; // For correct battle string. Ally's / Foe's if (GetBattlerSide(battlerAtk) != i) { DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT); @@ -8446,10 +8470,19 @@ static bool32 ClearDefogHazards(u8 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_SpikesFree, 0); - DEFOG_CLEAR(SIDE_STATUS_STEALTH_ROCK, stealthRockAmount, BattleScript_StealthRockFree, 0); - DEFOG_CLEAR(SIDE_STATUS_TOXIC_SPIKES, toxicSpikesAmount, BattleScript_ToxicSpikesFree, 0); - DEFOG_CLEAR(SIDE_STATUS_STICKY_WEB, stickyWebAmount, BattleScript_StickyWebFree, 0); + 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); + #if B_DEFOG_CLEARS_TERRAIN >= GEN_8 + if (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) + { + RemoveAllTerrains(); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_TerrainEnds_Ret; + return TRUE; + } + #endif // B_DEFOG_CLEARS_TERRAIN } return FALSE; @@ -9992,14 +10025,14 @@ static void Cmd_various(void) VARIOUS_ARGS(bool8 clear, const u8 *failInstr); if (cmd->clear) // Clear { - if (ClearDefogHazards(gEffectBattler, TRUE)) + if (TryDefogClear(gEffectBattler, TRUE)) return; else gBattlescriptCurrInstr = cmd->nextInstr; } else { - if (ClearDefogHazards(gActiveBattler, FALSE)) + if (TryDefogClear(gActiveBattler, FALSE)) gBattlescriptCurrInstr = cmd->nextInstr; else gBattlescriptCurrInstr = cmd->failInstr; @@ -10424,26 +10457,7 @@ static void Cmd_various(void) case VARIOUS_REMOVE_TERRAIN: { VARIOUS_ARGS(); - gFieldTimers.terrainTimer = 0; - switch (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - { - case STATUS_FIELD_MISTY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - break; - case STATUS_FIELD_GRASSY_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - break; - case STATUS_FIELD_ELECTRIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - break; - case STATUS_FIELD_PSYCHIC_TERRAIN: - gBattleCommunication[MULTISTRING_CHOOSER] = 3; - break; - default: - gBattleCommunication[MULTISTRING_CHOOSER] = 4; // failsafe - break; - } - gFieldStatuses &= ~STATUS_FIELD_TERRAIN_ANY; // remove the terrain + RemoveAllTerrains(); break; } case VARIOUS_JUMP_IF_UNDER_200: diff --git a/src/battle_util.c b/src/battle_util.c index d7f3a767ba..e82f6c87fe 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2126,6 +2126,20 @@ enum ENDTURN_FIELD_COUNT, }; +static bool32 TryEndTerrain(u32 terrainFlag, u32 stringTableId) +{ + if (gFieldStatuses & terrainFlag + && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + { + gFieldStatuses &= ~terrainFlag; + TryToRevertMimicry(); + gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; + BattleScriptExecute(BattleScript_TerrainEnds); + return TRUE; + } + return FALSE; +} + u8 DoFieldEndTurnEffects(void) { u8 effect = 0; @@ -2477,50 +2491,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~(STATUS_FIELD_ELECTRIC_TERRAIN | STATUS_FIELD_TERRAIN_PERMANENT); - TryToRevertMimicry(); - BattleScriptExecute(BattleScript_ElectricTerrainEnds); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~STATUS_FIELD_MISTY_TERRAIN; - TryToRevertMimicry(); - BattleScriptExecute(BattleScript_MistyTerrainEnds); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - { - if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) - && (gFieldTimers.terrainTimer == 0 || --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~STATUS_FIELD_GRASSY_TERRAIN; - TryToRevertMimicry(); - } - BattleScriptExecute(BattleScript_GrassyTerrainHeals); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) - { - gFieldStatuses &= ~STATUS_FIELD_PSYCHIC_TERRAIN; - TryToRevertMimicry(); - BattleScriptExecute(BattleScript_PsychicTerrainEnds); - effect++; - } + effect = TryEndTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c new file mode 100644 index 0000000000..d877899bb5 --- /dev/null +++ b/test/move_effect_defog.c @@ -0,0 +1,375 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DEFOG].effect == EFFECT_DEFOG); + ASSUME(gBattleMoves[MOVE_REFLECT].effect == EFFECT_REFLECT); + ASSUME(gBattleMoves[MOVE_LIGHT_SCREEN].effect == EFFECT_LIGHT_SCREEN); + ASSUME(gBattleMoves[MOVE_MIST].effect == EFFECT_MIST); + ASSUME(gBattleMoves[MOVE_SAFEGUARD].effect == EFFECT_SAFEGUARD); + ASSUME(gBattleMoves[MOVE_AURORA_VEIL].effect == EFFECT_AURORA_VEIL); + ASSUME(gBattleMoves[MOVE_STEALTH_ROCK].effect == EFFECT_STEALTH_ROCK); + ASSUME(gBattleMoves[MOVE_SPIKES].effect == EFFECT_SPIKES); + ASSUME(gBattleMoves[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES); + ASSUME(gBattleMoves[MOVE_STICKY_WEB].effect == EFFECT_STICKY_WEB); + ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gBattleMoves[MOVE_SCREECH].effect == EFFECT_DEFENSE_DOWN_2); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DEFOG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + } +} + +SINGLE_BATTLE_TEST("Defog does not lower evasiveness if target behind Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } + } WHEN { + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } + } SCENE { + MESSAGE("Foe Wobbuffet used Substitute!"); + MESSAGE("But it failed!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + } + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Reflect and Light Screen from opponent's side", s16 damagePhysical, s16 damageSpecial) +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, move, target:opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target:opponentLeft); MOVE(playerRight, MOVE_GUST, target:opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT, opponentLeft); + 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("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("Foe's Reflect wore off!"); + MESSAGE("Foe's Light Screen wore off!"); + } + MESSAGE("Wobbuffet used Tackle!"); + HP_BAR(opponentLeft, captureDamage: &results[i].damagePhysical); + MESSAGE("Wobbuffet used Gust!"); + HP_BAR(opponentRight, captureDamage: &results[i].damageSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); + EXPECT_MUL_EQ(results[1].damageSpecial, Q_4_12(1.5), results[0].damageSpecial); + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard from opponent's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, move, target:opponentLeft); } + TURN { MOVE(playerLeft, MOVE_SCREECH, target:opponentLeft); MOVE(playerRight, MOVE_TOXIC, target:opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MIST, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SAFEGUARD, opponentRight); + if (move == MOVE_DEFOG) { + MESSAGE("Foe Wobbuffet is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, move, playerLeft); + MESSAGE("Foe's Mist wore off!"); + MESSAGE("Foe's Safeguard wore off!"); + } + MESSAGE("Wobbuffet used Screech!"); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + else { + MESSAGE("Foe Wobbuffet is protected by MIST!"); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + MESSAGE("Wobbuffet used Toxic!"); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC, playerRight); + STATUS_ICON(opponentRight, badPoison: TRUE); + } + else { + MESSAGE("Foe Wobbuffet's party is protected by SAFEGUARD!"); + NOT STATUS_ICON(opponentRight, badPoison: TRUE); + } + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(4); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + PLAYER(SPECIES_WOBBUFFET) {Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(1); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_STEALTH_ROCK); MOVE(opponentRight, MOVE_STICKY_WEB); } + TURN { MOVE(playerLeft, move, target:opponentLeft); } + TURN { SWITCH(playerLeft, 2); } + } SCENE { + 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("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!"); + } + // Switch happens + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); + if (move != MOVE_DEFOG) { + HP_BAR(playerLeft); + MESSAGE("Pointed stones dug into Wobbuffet!"); + MESSAGE("Wobbuffet was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's speed fell!"); + } + else { + NONE_OF { + HP_BAR(playerLeft); + MESSAGE("Pointed stones dug into Wobbuffet!"); + MESSAGE("Wobbuffet was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Wobbuffet's speed fell!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(2); } + PLAYER(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } + } WHEN { + TURN { MOVE(opponent, MOVE_SPIKES); MOVE(player, move); } + TURN { SWITCH(player, 1); } + } 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("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("The spikes disappeared from the ground around your team!"); + } + // Switch happens + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wobbuffet!"); + if (move != MOVE_DEFOG) { + HP_BAR(player); + MESSAGE("Wobbuffet is hurt by spikes!"); + } + else { + NONE_OF { + HP_BAR(player); + MESSAGE("Wobbuffet is hurt by spikes!"); + } + } + } +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") +{ + u16 move; + + PARAMETRIZE { move = MOVE_PSYCHIC_TERRAIN; } + PARAMETRIZE { move = MOVE_ELECTRIC_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 { + TURN { MOVE(player, move); MOVE(opponent, MOVE_DEFOG); } + } 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 (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); + } +} + +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from opponent's side") +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) {Speed(2); } + } WHEN { + TURN { MOVE(player, MOVE_TOXIC_SPIKES); MOVE(opponent, move); } + TURN { SWITCH(opponent, 1); } + } 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!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + } + // Switch happens + MESSAGE("2 sent out Wobbuffet!"); + if (move != MOVE_DEFOG) { + MESSAGE("Foe Wobbuffet was poisoned!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } + else { + NONE_OF { + MESSAGE("Foe Wobbuffet was poisoned!"); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } + } + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from player's side", s16 damagePhysical, s16 damageSpecial) +{ + u16 move; + + PARAMETRIZE { move = MOVE_DEFOG; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + GIVEN { + ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + PLAYER(SPECIES_GLALIE) {Speed(4); } + PLAYER(SPECIES_GLALIE) {Speed(3); } + OPPONENT(SPECIES_GLALIE) {Speed(2); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); } + TURN { MOVE(opponentLeft, move, target:playerLeft); } + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(opponentRight, MOVE_GUST, target:playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HAIL, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AURORA_VEIL, playerRight); + ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft); + if (move == MOVE_DEFOG) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Glalie's evasiveness fell!"); + MESSAGE("Ally's Aurora Veil wore off!"); + } + MESSAGE("Foe Glalie used Tackle!"); + HP_BAR(playerLeft, captureDamage: &results[i].damagePhysical); + MESSAGE("Foe Glalie used Gust!"); + HP_BAR(playerRight, captureDamage: &results[i].damageSpecial); + } FINALLY { + EXPECT_MUL_EQ(results[1].damagePhysical, Q_4_12(1.5), results[0].damagePhysical); + EXPECT_MUL_EQ(results[1].damageSpecial, Q_4_12(1.5), results[0].damageSpecial); + } +} + +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can") +{ + bool32 defogTurn = FALSE; + GIVEN { + ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); + ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); + PLAYER(SPECIES_GLALIE) {Speed(4); } + PLAYER(SPECIES_GLALIE) {Speed(3); } + PLAYER(SPECIES_GLALIE) {Speed(12); } + PLAYER(SPECIES_GLALIE) {Speed(3); } + OPPONENT(SPECIES_GLALIE) {Speed(2); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + OPPONENT(SPECIES_GLALIE) {Speed(1); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_SPIKES); MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(opponentRight, MOVE_SPIKES); } + TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); SWITCH(opponentLeft, 2); SWITCH(opponentRight, 3);} + TURN { MOVE(playerLeft, MOVE_TOXIC_SPIKES); MOVE(playerRight, MOVE_STEALTH_ROCK); MOVE(opponentLeft, MOVE_TOXIC_SPIKES); MOVE(opponentRight, MOVE_STEALTH_ROCK); } + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_STEALTH_ROCK); } + TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { defogTurn = TRUE ; MOVE(opponentRight, MOVE_DEFOG, target:playerLeft);} + } SCENE { + if (defogTurn == TRUE) + { + MESSAGE("Foe Glalie used Defog!"); + MESSAGE("Glalie is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); + // Player side + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Ally's Safeguard wore off!"); + + MESSAGE("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!"); + } + } +} From e055456b7eae91bb22995bf8ba6ea722531af96c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 7 Mar 2023 09:34:26 +0100 Subject: [PATCH 177/290] Fix Protean / Libero when AI calculates Damage (#2714) * Fix Protean / Libero when AI calculates Damage * fix ai changing types when calculating dmg --- include/battle_script_commands.h | 1 + src/battle_ai_util.c | 10 ++++++---- src/battle_script_commands.c | 19 ++++++++++++++----- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h index c3d6831e95..d657286289 100644 --- a/include/battle_script_commands.h +++ b/include/battle_script_commands.h @@ -44,6 +44,7 @@ u16 GetSecretPowerMoveEffect(void); void StealTargetItem(u8 battlerStealer, u8 battlerItem); u8 GetCatchingBattler(void); u32 GetHighestStatId(u32 battlerId); +bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType); bool32 DoSwitchInAbilitiesItems(u32 battlerId); extern void (* const gBattleScriptingCommandsTable[])(void); diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 523d9229f4..a9e3ed3e0b 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -538,9 +538,10 @@ void SaveBattlerData(u8 battlerId) AI_THINKING_STRUCT->saved[battlerId].species = gBattleMons[battlerId].species; for (i = 0; i < 4; i++) AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; - AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; - AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; } + // Save and restore types even for AI controlled battlers in case it gets changed during move evaluation process. + AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; + AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; } static bool32 ShouldFailForIllusion(u16 illusionSpecies, u32 battlerId) @@ -631,9 +632,9 @@ void RestoreBattlerData(u8 battlerId) gBattleMons[battlerId].species = AI_THINKING_STRUCT->saved[battlerId].species; for (i = 0; i < 4; i++) gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i]; - gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; - gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; } + gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; + gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; } u32 GetHealthPercentage(u8 battlerId) @@ -801,6 +802,7 @@ s32 AI_CalcDamage(u16 move, u8 battlerAtk, u8 battlerDef, u8 *typeEffectiveness, if (gBattleMoves[move].power) { + ProteanTryChangeType(battlerAtk, AI_DATA->abilities[battlerAtk], move, moveType); critChance = GetInverseCritChance(battlerAtk, battlerDef, move); normalDmg = CalculateMoveDamageAndEffectiveness(move, battlerAtk, battlerDef, moveType, &effectivenessMultiplier); critDmg = CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, TRUE, FALSE, FALSE); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a5b7656bf5..40a7598de1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1443,6 +1443,19 @@ static bool32 TryAegiFormChange(void) return TRUE; } +bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) +{ + if ((ability == ABILITY_PROTEAN || ability == ABILITY_LIBERO) + && (gBattleMons[battler].type1 != moveType || gBattleMons[battler].type2 != moveType + || (gBattleMons[battler].type3 != moveType && gBattleMons[battler].type3 != TYPE_MYSTERY)) + && move != MOVE_STRUGGLE) + { + SET_BATTLER_TYPE(gBattlerAttacker, moveType); + return TRUE; + } + return FALSE; +} + static void Cmd_attackcanceler(void) { CMD_ARGS(); @@ -1499,13 +1512,9 @@ static void Cmd_attackcanceler(void) } // Check Protean activation. - if ((attackerAbility == ABILITY_PROTEAN || attackerAbility == ABILITY_LIBERO) - && (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType || - (gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY)) - && gCurrentMove != MOVE_STRUGGLE) + if (ProteanTryChangeType(gBattlerAttacker, attackerAbility, gCurrentMove, moveType)) { PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); - SET_BATTLER_TYPE(gBattlerAttacker, moveType); gBattlerAbility = gBattlerAttacker; BattleScriptPushCursor(); PrepareStringBattle(STRINGID_EMPTYSTRING3, gBattlerAttacker); From 318666e21d84bce7badcb107fe2cb76c91aaec71 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 7 Mar 2023 12:20:36 +0100 Subject: [PATCH 178/290] debug minor touches to give item max quantity and map number display --- src/debug.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/debug.c b/src/debug.c index 5c14dbfb0f..1701050420 100644 --- a/src/debug.c +++ b/src/debug.c @@ -147,7 +147,7 @@ enum { //Sound #define DEBUG_NUMBER_DIGITS_VARIABLES 5 #define DEBUG_NUMBER_DIGITS_VARIABLE_VALUE 5 #define DEBUG_NUMBER_DIGITS_ITEMS 4 -#define DEBUG_NUMBER_DIGITS_ITEM_QUANTITY 2 +#define DEBUG_NUMBER_DIGITS_ITEM_QUANTITY 3 #define DEBUG_NUMBER_ICON_X 210 #define DEBUG_NUMBER_ICON_Y 50 @@ -1015,8 +1015,8 @@ static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) gTasks[taskId].data[3] = 0; gTasks[taskId].data[4] = 0; - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); @@ -1061,8 +1061,8 @@ static void DebugAction_Util_Warp_SelectMap(u8 taskId) gTasks[taskId].data[4] += 1; } - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); @@ -1905,15 +1905,18 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) } static void DebugAction_Give_Item_SelectQuantity(u8 taskId) { + u32 itemId = gTasks[taskId].data[5]; + if (JOY_NEW(DPAD_ANY)) { PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { + u32 maxCapacity = (ItemId_GetPocket(itemId) - 1 == BERRIES_POCKET) ? MAX_BERRY_CAPACITY : MAX_BAG_ITEM_CAPACITY; gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= 100) - gTasks[taskId].data[3] = 99; + if (gTasks[taskId].data[3] > maxCapacity) + gTasks[taskId].data[3] = maxCapacity; } if (JOY_NEW(DPAD_DOWN)) { @@ -1947,7 +1950,7 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon PlaySE(MUS_OBTAIN_ITEM); - AddBagItem(gTasks[taskId].data[5], gTasks[taskId].data[3]); + AddBagItem(itemId, gTasks[taskId].data[3]); DebugAction_DestroyExtraWindow(taskId); } else if (JOY_NEW(B_BUTTON)) From fdebc994d23be0dedfa64f54fe2bf01c46e0acbe Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 7 Mar 2023 19:14:38 -0300 Subject: [PATCH 179/290] Updated Supreme Overlord's effect's code --- include/battle.h | 1 + src/battle_util.c | 48 ++++++++++++++++++++++++----------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/include/battle.h b/include/battle.h index 83b552e7e1..a43fc65cdf 100644 --- a/include/battle.h +++ b/include/battle.h @@ -662,6 +662,7 @@ struct BattleStruct u8 battleBondTransformed[NUM_BATTLE_SIDES]; // Bitfield for each party. u8 storedHealingWish:4; // Each battler as a bit. u8 storedLunarDance:4; // Each battler as a bit. + u16 supremeOverlordModifier[MAX_BATTLERS_COUNT]; }; #define F_DYNAMIC_TYPE_1 (1 << 6) diff --git a/src/battle_util.c b/src/battle_util.c index 9520e761f7..4b50bc7045 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -62,6 +62,7 @@ static u8 GetFlingPowerFromItemId(u16 itemId); static void SetRandomMultiHitCounter(); static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item); static u16 GetInverseTypeMultiplier(u16 multiplier); +static u16 GetSupremeOverlordModifier(u8 battlerId); extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattlescriptsForRunningByItem[]; @@ -4319,6 +4320,28 @@ bool8 ChangeTypeBasedOnTerrain(u8 battlerId) return TRUE; } +// Supreme Overlord adds a damage boost for each fainted ally. +// The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each. +static u16 GetSupremeOverlordModifier(u8 battlerId) +{ + u32 i; + u8 side = GetBattlerSide(battlerId); + struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; + u16 modifier = UQ_4_12(1.0); + bool8 appliedFirstBoost = FALSE; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE + && !GetMonData(&party[i], MON_DATA_IS_EGG) + && GetMonData(&party[i], MON_DATA_HP) == 0) + modifier += (!appliedFirstBoost) ? UQ_4_12(0.2) : UQ_4_12(0.1); + appliedFirstBoost = TRUE; + } + + return modifier; +} + u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -4867,6 +4890,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!gSpecialStatuses[battler].switchInAbilityDone && CountUsablePartyMons(battler) < PARTY_SIZE) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; + gBattleStruct->supremeOverlordModifier[battler] = GetSupremeOverlordModifier(battler); BattleScriptPushCursorAndCallback(BattleScript_SupremeOverlordActivates); effect++; } @@ -8761,28 +8785,6 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) return basePower; } -// Supreme Overlord adds a damage boost for each fainted ally. -// The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each. -static u16 GetSupremeOverlordModifier(u8 battlerId) -{ - u32 i; - u8 side = GetBattlerSide(battlerId); - struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; - u16 modifier = UQ_4_12(1.0); - bool8 appliedFirstBoost = FALSE; - - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE - && !GetMonData(&party[i], MON_DATA_IS_EGG) - && GetMonData(&party[i], MON_DATA_HP) == 0) - modifier += (!appliedFirstBoost) ? UQ_4_12(0.2) : UQ_4_12(0.1); - appliedFirstBoost = TRUE; - } - - return modifier; -} - static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, bool32 updateFlags) { u32 i; @@ -8932,7 +8934,7 @@ static u32 CalcMoveBasePowerAfterModifiers(u16 move, u8 battlerAtk, u8 battlerDe MulModifier(&modifier, UQ_4_12(1.5)); break; case ABILITY_SUPREME_OVERLORD: - MulModifier(&modifier, GetSupremeOverlordModifier(battlerAtk)); + MulModifier(&modifier, gBattleStruct->supremeOverlordModifier[battlerAtk]); break; } From eb49e28e6cb9c57d03d5a5d952735a0d4c57fe7b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 8 Mar 2023 08:26:33 -0300 Subject: [PATCH 180/290] Renamed TEST_RESULT_SKIP to TEST_RESULT_ASSUMPTION_FAIL --- test/test.h | 4 ++-- test/test_runner.c | 8 ++++---- test/test_runner_battle.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/test.h b/test/test.h index c69a4fa925..27475bb48e 100644 --- a/test/test.h +++ b/test/test.h @@ -9,7 +9,7 @@ enum TestResult { TEST_RESULT_FAIL, TEST_RESULT_PASS, - TEST_RESULT_SKIP, + TEST_RESULT_ASSUMPTION_FAIL, TEST_RESULT_INVALID, TEST_RESULT_ERROR, TEST_RESULT_TIMEOUT, @@ -77,7 +77,7 @@ s32 MgbaPrintf_(const char *fmt, ...); do \ { \ if (!(c)) \ - Test_ExitWithResult(TEST_RESULT_SKIP, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ + Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \ } while (0) #define EXPECT(c) \ diff --git a/test/test_runner.c b/test/test_runner.c index eb5d12c778..9d33301f9d 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -121,7 +121,7 @@ void CB2_TestRunner(void) // NOTE: Assumes that the compiler interns __FILE__. if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) { - gTestRunnerState.result = TEST_RESULT_SKIP; + gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL; } else { @@ -157,7 +157,7 @@ void CB2_TestRunner(void) color = "\e[32m"; MgbaPrintf_(":N%s", gTestRunnerState.test->name); } - else if (gTestRunnerState.result != TEST_RESULT_SKIP || gTestRunnerSkipIsFail) + else if (gTestRunnerState.result != TEST_RESULT_ASSUMPTION_FAIL || gTestRunnerSkipIsFail) { gTestRunnerState.exitCode = 1; color = "\e[31m"; @@ -187,7 +187,7 @@ void CB2_TestRunner(void) } break; case TEST_RESULT_PASS: result = "PASS"; break; - case TEST_RESULT_SKIP: + case TEST_RESULT_ASSUMPTION_FAIL: result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; @@ -199,7 +199,7 @@ void CB2_TestRunner(void) if (gTestRunnerState.result == TEST_RESULT_PASS) MgbaPrintf_(":P%s%s\e[0m", color, result); - else if (gTestRunnerState.result == TEST_RESULT_SKIP) + else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) MgbaPrintf_(":A%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index e40ed3e50b..ec7ba275c2 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -720,7 +720,7 @@ static void CB2_BattleTest_NextTrial(void) case TEST_RESULT_PASS: STATE->observedPasses++; break; - case TEST_RESULT_SKIP: + case TEST_RESULT_ASSUMPTION_FAIL: STATE->skippedTrials++; if (STATE->skippedTrials > STATE->trials / 4) Test_ExitWithResult(TEST_RESULT_INVALID, "25%% of the trials were SKIPed"); From 24d8d3fbee471d51d119658765fa1ccbf9a35687 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 8 Mar 2023 09:09:48 -0300 Subject: [PATCH 181/290] Updated switch format --- test/test_runner.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/test/test_runner.c b/test/test_runner.c index 9d33301f9d..c8bd0f3a92 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -186,15 +186,25 @@ void CB2_TestRunner(void) result = "FAIL"; } break; - case TEST_RESULT_PASS: result = "PASS"; break; + case TEST_RESULT_PASS: + result = "PASS"; + break; case TEST_RESULT_ASSUMPTION_FAIL: result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; - case TEST_RESULT_INVALID: result = "INVALID"; break; - case TEST_RESULT_ERROR: result = "ERROR"; break; - case TEST_RESULT_TIMEOUT: result = "TIMEOUT"; break; - default: result = "UNKNOWN"; break; + case TEST_RESULT_INVALID: + result = "INVALID"; + break; + case TEST_RESULT_ERROR: + result = "ERROR"; + break; + case TEST_RESULT_TIMEOUT: + result = "TIMEOUT"; + break; + default: + result = "UNKNOWN"; + break; } if (gTestRunnerState.result == TEST_RESULT_PASS) From 1553be1e7d946d1ecadb6c55a7c9a54a382381f8 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 8 Mar 2023 15:46:14 +0100 Subject: [PATCH 182/290] Update overworld_config.h reference in the debug system --- data/scripts/debug.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 191fe69327..a158cc2f47 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -52,7 +52,7 @@ Debug_FlagsNotSetMessage:: Debug_FlagsNotSetMessage_Text: .string "Feature unavailable!\n" .string "Please define a usable flag in:\l" - .string "'include/constants/overworld{UNDERSCORE}config.h'!$" + .string "'include/config/overworld.h'!$" Debug_Script_1:: end From c3674d6c1725caa65f5a36343293eaae5f4f483e Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Mar 2023 17:23:44 +0100 Subject: [PATCH 183/290] Wrong score for Work Up and Growth --- src/battle_ai_main.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2d4d075282..0badf92ddf 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1117,10 +1117,11 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_GROWTH: case EFFECT_ATTACK_SPATK_UP: // work up - if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) || !HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL)) + if ((!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) + || (!HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) score -= 10; - else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - score -= 8; + // else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) + // score -= 8; break; case EFFECT_ROTOTILLER: if (isDoubleBattle) From 59a0def706a260dde608f0889d20be8cfe1941d1 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Mar 2023 17:30:07 +0100 Subject: [PATCH 184/290] delete leftover --- src/battle_ai_main.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 0badf92ddf..e1dbd2a6f4 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1120,8 +1120,6 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) if ((!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) || (!HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) score -= 10; - // else if (!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK) || !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL)) - // score -= 8; break; case EFFECT_ROTOTILLER: if (isDoubleBattle) From dbf757be886736e6a0f8f813cc8c0a544124a287 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 8 Mar 2023 11:07:44 -0500 Subject: [PATCH 185/290] Treat map data as const --- include/field_control_avatar.h | 2 +- include/fieldmap.h | 4 ++-- include/global.fieldmap.h | 22 +++++++++++----------- src/event_object_movement.c | 24 ++++++++++++------------ src/field_control_avatar.c | 24 ++++++++++++------------ src/fieldmap.c | 32 ++++++++++++++++---------------- src/item_use.c | 6 +++--- src/overworld.c | 6 +++--- src/trainer_hill.c | 3 ++- 9 files changed, 62 insertions(+), 61 deletions(-) diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index e02fcd5afe..b259eb53c1 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -32,7 +32,7 @@ bool8 TryDoDiveWarp(struct MapPosition *position, u16 b); int SetCableClubWarp(void); u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); -u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); +const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/fieldmap.h b/include/fieldmap.h index f2dbefae86..47072bd1be 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -48,8 +48,8 @@ void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout); void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout); void CopyPrimaryTilesetToVram(const struct MapLayout *); void CopySecondaryTilesetToVram(const struct MapLayout *); -struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection); -struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y); +const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnection *connection); +const struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y); void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable); // field_region_map.c diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index d8fea5b23c..7461929c3a 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -50,10 +50,10 @@ struct MapLayout { /*0x00*/ s32 width; /*0x04*/ s32 height; - /*0x08*/ u16 *border; - /*0x0C*/ u16 *map; - /*0x10*/ struct Tileset *primaryTileset; - /*0x14*/ struct Tileset *secondaryTileset; + /*0x08*/ const u16 *border; + /*0x0C*/ const u16 *map; + /*0x10*/ const struct Tileset *primaryTileset; + /*0x14*/ const struct Tileset *secondaryTileset; }; struct BackupMapLayout @@ -98,7 +98,7 @@ struct CoordEvent u8 elevation; u16 trigger; u16 index; - u8 *script; + const u8 *script; }; struct BgEvent @@ -107,7 +107,7 @@ struct BgEvent u8 elevation; u8 kind; // The "kind" field determines how to access bgUnion union below. union { - u8 *script; + const u8 *script; struct { u16 item; u16 hiddenItemId; @@ -122,10 +122,10 @@ struct MapEvents u8 warpCount; u8 coordEventCount; u8 bgEventCount; - struct ObjectEventTemplate *objectEvents; - struct WarpEvent *warps; - struct CoordEvent *coordEvents; - struct BgEvent *bgEvents; + const struct ObjectEventTemplate *objectEvents; + const struct WarpEvent *warps; + const struct CoordEvent *coordEvents; + const struct BgEvent *bgEvents; }; struct MapConnection @@ -139,7 +139,7 @@ struct MapConnection struct MapConnections { s32 count; - struct MapConnection *connections; + const struct MapConnection *connections; }; struct MapHeader diff --git a/src/event_object_movement.c b/src/event_object_movement.c index be0c4ce26d..3025e0849a 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -131,9 +131,9 @@ static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *); static void RemoveObjectEventInternal(struct ObjectEvent *); static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); -static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); +static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void SpawnObjectEventOnReturnToField(u8, s16, s16); @@ -147,7 +147,7 @@ static void SpriteCB_CameraObject(struct Sprite *); static void CameraObject_0(struct Sprite *); static void CameraObject_1(struct Sprite *); static void CameraObject_2(struct Sprite *); -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, struct ObjectEventTemplate *, u8); +static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); @@ -1267,7 +1267,7 @@ static u8 GetObjectEventIdByLocalId(u8 localId) return OBJECT_EVENTS_COUNT; } -static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup) +static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *template, u8 mapNum, u8 mapGroup) { struct ObjectEvent *objectEvent; u8 objectEventId; @@ -1398,7 +1398,7 @@ void RemoveAllObjectEventsExceptPlayer(void) } } -static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 spriteId; u8 paletteSlot; @@ -1458,7 +1458,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl return objectEventId; } -static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +static u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; struct SpriteTemplate spriteTemplate; @@ -1512,7 +1512,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *objectEventTemplate; + const struct ObjectEventTemplate *objectEventTemplate; s16 cameraX, cameraY; objectEventTemplate = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); @@ -1542,7 +1542,7 @@ static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphics CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, sMovementTypeCallbacks[movementType], spriteTemplate, subspriteTables); } -static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) +static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables) { CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); } @@ -2374,7 +2374,7 @@ const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId) static u16 GetObjectEventFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + const struct ObjectEventTemplate *obj = GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup); #ifdef UBFIX // BUG: The function may return NULL, and attempting to read from NULL may freeze the game using modern compilers. if (obj == NULL) @@ -2421,9 +2421,9 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { - struct ObjectEventTemplate *templates; + const struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; u8 count; @@ -2441,7 +2441,7 @@ static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 loca return FindObjectEventTemplateByLocalId(localId, templates, count); } -static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, struct ObjectEventTemplate *templates, u8 count) +static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, const struct ObjectEventTemplate *templates, u8 count) { u8 i; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 9c526f0f72..3a0c97e8cf 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -60,8 +60,8 @@ static s8 GetWarpEventAtMapPosition(struct MapHeader *, struct MapPosition *); static void SetupWarp(struct MapHeader *, s8, struct MapPosition *); static bool8 TryDoorWarp(struct MapPosition *, u16, u8); static s8 GetWarpEventAtPosition(struct MapHeader *, u16, u16, u8); -static u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8); -static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8); +static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *, u16, u16, u8); +static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *, u16, u16, u8); static bool8 TryStartCoordEventScript(struct MapPosition *); static bool8 TryStartWarpEventScript(struct MapPosition *, u16); static bool8 TryStartMiscWalkingScripts(u16); @@ -315,7 +315,7 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) { - struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); + const struct BgEvent *bgEvent = GetBackgroundEventAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (bgEvent == NULL) return NULL; @@ -497,7 +497,7 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB static bool8 TryStartCoordEventScript(struct MapPosition *position) { - u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); + const u8 *script = GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); if (script == NULL) return FALSE; @@ -861,7 +861,7 @@ static bool8 TryDoorWarp(struct MapPosition *position, u16 metatileBehavior, u8 static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { s32 i; - struct WarpEvent *warpEvent = mapHeader->events->warps; + const struct WarpEvent *warpEvent = mapHeader->events->warps; u8 warpCount = mapHeader->events->warpCount; for (i = 0; i < warpCount; i++, warpEvent++) @@ -875,7 +875,7 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e return WARP_ID_NONE; } -static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) +static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent) { if (coordEvent != NULL) { @@ -895,10 +895,10 @@ static u8 *TryRunCoordEventScript(struct CoordEvent *coordEvent) return NULL; } -static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) +static const u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { s32 i; - struct CoordEvent *coordEvents = mapHeader->events->coordEvents; + const struct CoordEvent *coordEvents = mapHeader->events->coordEvents; u8 coordEventCount = mapHeader->events->coordEventCount; for (i = 0; i < coordEventCount; i++) @@ -907,7 +907,7 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 { if (coordEvents[i].elevation == elevation || coordEvents[i].elevation == 0) { - u8 *script = TryRunCoordEventScript(&coordEvents[i]); + const u8 *script = TryRunCoordEventScript(&coordEvents[i]); if (script != NULL) return script; } @@ -916,15 +916,15 @@ static u8 *GetCoordEventScriptAtPosition(struct MapHeader *mapHeader, u16 x, u16 return NULL; } -u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) +const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position) { return GetCoordEventScriptAtPosition(&gMapHeader, position->x - MAP_OFFSET, position->y - MAP_OFFSET, position->elevation); } -static struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) +static const struct BgEvent *GetBackgroundEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 elevation) { u8 i; - struct BgEvent *bgEvents = mapHeader->events->bgEvents; + const struct BgEvent *bgEvents = mapHeader->events->bgEvents; u8 bgEventCount = mapHeader->events->bgEventCount; for (i = 0; i < bgEventCount; i++) diff --git a/src/fieldmap.c b/src/fieldmap.c index 89d6b602c2..df4db47b53 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -36,7 +36,7 @@ struct BackupMapLayout gBackupMapLayout; static const struct ConnectionFlags sDummyConnectionFlags = {0}; static void InitMapLayoutData(struct MapHeader *mapHeader); -static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height); +static void InitBackupMapLayoutData(const u16 *map, u16 width, u16 height); static void FillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void FillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); static void FillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); @@ -44,14 +44,14 @@ static void FillEastConnection(struct MapHeader const *mapHeader, struct MapHead static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader); static void LoadSavedMapView(void); static bool8 SkipCopyingMetatileFromSavedMap(u16 *mapBlock, u16 mapWidth, u8 yMode); -static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); -static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection); +static const struct MapConnection *GetIncomingConnection(u8 direction, int x, int y); +static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection); static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, int offset); #define GetBorderBlockAt(x, y)({ \ u16 block; \ int i; \ - u16 *border = gMapHeader.mapLayout->border; \ + const u16 *border = gMapHeader.mapLayout->border; /* Unused, they read it again below */ \ \ i = (x + 1) & 1; \ i += ((y + 1) & 1) * 2; \ @@ -63,7 +63,7 @@ static bool8 IsCoordInIncomingConnectingMap(int coord, int srcMax, int destMax, #define GetMapGridBlockAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.width * y] : GetBorderBlockAt(x, y)) -struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection) +const struct MapHeader *const GetMapHeaderFromConnection(const struct MapConnection *connection) { return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum); } @@ -116,7 +116,7 @@ static void InitMapLayoutData(struct MapHeader *mapHeader) } } -static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) +static void InitBackupMapLayoutData(const u16 *map, u16 width, u16 height) { u16 *dest; int y; @@ -133,7 +133,7 @@ static void InitBackupMapLayoutData(u16 *map, u16 width, u16 height) static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) { int count; - struct MapConnection *connection; + const struct MapConnection *connection; int i; if (mapHeader->connections) @@ -171,7 +171,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) static void FillConnection(int x, int y, struct MapHeader const *connectedMapHeader, int x2, int y2, int width, int height) { int i; - u16 *src; + const u16 *src; u16 *dest; int mapWidth; @@ -619,7 +619,7 @@ bool32 CanCameraMoveInDirection(int direction) return TRUE; } -static void SetPositionFromConnection(struct MapConnection *connection, int direction, int x, int y) +static void SetPositionFromConnection(const struct MapConnection *connection, int direction, int x, int y) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -647,7 +647,7 @@ static void SetPositionFromConnection(struct MapConnection *connection, int dire bool8 CameraMove(int x, int y) { int direction; - struct MapConnection *connection; + const struct MapConnection *connection; int old_x, old_y; gCamera.active = FALSE; direction = GetPostCameraMoveMapBorderId(x, y); @@ -675,11 +675,11 @@ bool8 CameraMove(int x, int y) return gCamera.active; } -static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) +static const struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) { int count; int i; - struct MapConnection *connection; + const struct MapConnection *connection; const struct MapConnections *connections = gMapHeader.connections; #ifdef UBFIX // UB: Multiple possible null dereferences @@ -696,7 +696,7 @@ static struct MapConnection *GetIncomingConnection(u8 direction, int x, int y) return NULL; } -static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, struct MapConnection *connection) +static bool8 IsPosInIncomingConnectingMap(u8 direction, int x, int y, const struct MapConnection *connection) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -737,7 +737,7 @@ static int IsCoordInConnectingMap(int coord, int max) return FALSE; } -static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y) +static int IsPosInConnectingMap(const struct MapConnection *connection, int x, int y) { struct MapHeader const *mapHeader; mapHeader = GetMapHeaderFromConnection(connection); @@ -753,10 +753,10 @@ static int IsPosInConnectingMap(struct MapConnection *connection, int x, int y) return FALSE; } -struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y) +const struct MapConnection *GetMapConnectionAtPos(s16 x, s16 y) { int count; - struct MapConnection *connection; + const struct MapConnection *connection; int i; u8 direction; if (!gMapHeader.connections) diff --git a/src/item_use.c b/src/item_use.c index 41e8884968..8a02827176 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -375,7 +375,7 @@ static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 ta static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, s16 y) { u8 bgEventCount = events->bgEventCount; - struct BgEvent *bgEvent = events->bgEvents; + const struct BgEvent *bgEvent = events->bgEvents; int i; for (i = 0; i < bgEventCount; i++) @@ -391,7 +391,7 @@ static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, return FALSE; } -static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, int x, int y) +static bool8 IsHiddenItemPresentInConnection(const struct MapConnection *connection, int x, int y) { u16 localX, localY; @@ -456,7 +456,7 @@ static void CheckForHiddenItemsInMapConnection(u8 taskId) || var2 > y || y >= height) { - struct MapConnection *conn = GetMapConnectionAtPos(x, y); + const struct MapConnection *conn = GetMapConnectionAtPos(x, y); if (conn && IsHiddenItemPresentInConnection(conn, x, y) == TRUE) SetDistanceOfClosestHiddenItem(taskId, x - playerX, y - playerY); } diff --git a/src/overworld.c b/src/overworld.c index 4f7cccdffb..70b102fd28 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -156,7 +156,7 @@ static void InitMenuBasedScript(const u8 *); static void LoadCableClubPlayer(s32, s32, struct CableClubPlayer *); static bool32 IsCableClubPlayerUnfrozen(struct CableClubPlayer *); static bool32 CanCableClubPlayerPressStart(struct CableClubPlayer *); -static u8 *TryGetTileEventScript(struct CableClubPlayer *); +static const u8 *TryGetTileEventScript(struct CableClubPlayer *); static bool32 PlayerIsAtSouthExit(struct CableClubPlayer *); static const u8 *TryInteractWithPlayer(struct CableClubPlayer *); static u16 KeyInterCB_DeferToRecvQueue(u32); @@ -482,7 +482,7 @@ void LoadObjEventTemplatesFromHeader(void) void LoadSaveblockObjEventScripts(void) { - struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents; + const struct ObjectEventTemplate *mapHeaderObjTemplates = gMapHeader.events->objectEvents; struct ObjectEventTemplate *savObjTemplates = gSaveBlock1Ptr->objectEventTemplates; s32 i; @@ -2714,7 +2714,7 @@ static bool32 CanCableClubPlayerPressStart(struct CableClubPlayer *player) return FALSE; } -static u8 *TryGetTileEventScript(struct CableClubPlayer *player) +static const u8 *TryGetTileEventScript(struct CableClubPlayer *player) { if (player->movementMode != MOVEMENT_MODE_SCRIPTED) return FACING_NONE; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 528ee18a48..a74270ec77 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -685,7 +685,8 @@ static u16 GetMetatileForFloor(u8 floorId, u32 x, u32 y, u32 floorWidth) // floo void GenerateTrainerHillFloorLayout(u16 *mapArg) { s32 y, x; - u16 *src, *dst; + const u16 *src; + u16 *dst; u8 mapId = GetCurrentTrainerHillMapId(); if (mapId == TRAINER_HILL_ENTRANCE) From 27e342d7a64797d9648accff8c588a60570b76f8 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 8 Mar 2023 19:25:26 +0100 Subject: [PATCH 186/290] Use function HasDamagingMove to avoid looping --- 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 e1dbd2a6f4..4e39f61bfe 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1118,7 +1118,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_GROWTH: case EFFECT_ATTACK_SPATK_UP: // work up if ((!BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_ATK) && !BattlerStatCanRise(battlerAtk, AI_DATA->abilities[battlerAtk], STAT_SPATK)) - || (!HasMoveWithSplit(battlerAtk, SPLIT_PHYSICAL) && !HasMoveWithSplit(battlerAtk, SPLIT_SPECIAL))) + || (!HasDamagingMove(battlerAtk))) score -= 10; break; case EFFECT_ROTOTILLER: From f06c040bca900ba7dae167e5bd9bde9c2c9d9802 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 8 Mar 2023 01:51:51 -0300 Subject: [PATCH 187/290] Updated the debug menu -Updated the text string used by Debug_FlagsNotSetMessage. -Renamed Debug_FlagsNotSetMessage to Debug_FlagsNotSetOverworldConfigMessage. -Added an equivalent for the battle config file called Debug_FlagsNotSetBattleConfigMessage, -DEBUG_FLAG_NO_COLLISION -> OW_FLAG_NO_COLLISION -And moved it to include/config/overworld.h, because at the end of the day it's still an overworld flag just like the other 2 already in that file. -Corrected miswritten preproc config in DebugAction_Flags_CatchingOnOff. -Updated the comment that describes the effect of DEBUG_OVERWORLD_MENU reducing the number of characters a tiny bit and fixing a typo. --- data/scripts/debug.inc | 21 +++++++++++++++++---- include/config/debug.h | 7 +------ include/config/overworld.h | 1 + src/debug.c | 21 +++++++++++---------- src/event_object_movement.c | 4 ++-- 5 files changed, 32 insertions(+), 22 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 191fe69327..92e9062a39 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -41,18 +41,31 @@ Debug_CheatStart:: release end -Debug_FlagsNotSetMessage:: +Debug_FlagsNotSetOverworldConfigMessage:: lockall - message Debug_FlagsNotSetMessage_Text + message Debug_FlagsNotSetOverworldConfigMessage_Text waitmessage waitbuttonpress releaseall end -Debug_FlagsNotSetMessage_Text: +Debug_FlagsNotSetOverworldConfigMessage_Text: .string "Feature unavailable!\n" .string "Please define a usable flag in:\l" - .string "'include/constants/overworld{UNDERSCORE}config.h'!$" + .string "'include/config/overworld.h'!$" + +Debug_FlagsNotSetBattleConfigMessage:: + lockall + message Debug_FlagsNotSetBattleConfigMessage_Text + waitmessage + waitbuttonpress + releaseall + end + +Debug_FlagsNotSetBattleConfigMessage_Text: + .string "Feature unavailable!\n" + .string "Please define a usable flag in:\l" + .string "'include/config/battle.h'!$" Debug_Script_1:: end diff --git a/include/config/debug.h b/include/config/debug.h index b427fcb513..43d7438018 100644 --- a/include/config/debug.h +++ b/include/config/debug.h @@ -2,16 +2,11 @@ #define GUARD_CONFIG_DEBUG_H // Overworld Debug -#define DEBUG_OVERWORLD_MENU TRUE // Enables a overworld debug menu for changing flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. +#define DEBUG_OVERWORLD_MENU TRUE // Enables an overworld debug menu to change flags, variables, giving pokemon and more, accessed by holding R and pressing START while in the overworld by default. #define DEBUG_OVERWORLD_HELD_KEYS (R_BUTTON) // The keys required to be held to open the debug menu. #define DEBUG_OVERWORLD_TRIGGER_EVENT pressedStartButton // The event that opens the menu when holding the key(s) defined in DEBUG_OVERWORLD_HELD_KEYS. #define DEBUG_OVERWORLD_IN_MENU FALSE // Replaces the overworld debug menu button combination with a start menu entry (above Pokédex). -// Debug Flags -// To use the following debug features, 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. -#define DEBUG_FLAG_NO_COLLISION 0 // If this flag is set, the debug function in the Utility submenu to disable player collision can be used. - // Battle Debug Menu #define DEBUG_BATTLE_MENU TRUE // If set to TRUE, enables a debug menu to use in battles by pressing the Select button. diff --git a/include/config/overworld.h b/include/config/overworld.h index fb438431b3..7831858d27 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -9,5 +9,6 @@ // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. #define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled. #define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to. +#define OW_FLAG_NO_COLLISION 0 // If this flag is set, the player will be able to walk over tiles with collision. Mainly intended for debugging purposes. #endif // GUARD_CONFIG_OVERWORLD_H diff --git a/src/debug.c b/src/debug.c index 5c14dbfb0f..2bd89504fa 100644 --- a/src/debug.c +++ b/src/debug.c @@ -275,7 +275,8 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId); static void DebugTask_HandleMenuInput(u8 taskId, void (*HandleInput)(u8)); static void DebugAction_OpenSubMenu(u8 taskId, struct ListMenuTemplate LMtemplate); -extern u8 Debug_FlagsNotSetMessage[]; +extern u8 Debug_FlagsNotSetOverworldConfigMessage[]; +extern u8 Debug_FlagsNotSetBattleConfigMessage[]; extern u8 Debug_Script_1[]; extern u8 Debug_Script_2[]; extern u8 Debug_Script_3[]; @@ -1556,16 +1557,16 @@ static void DebugAction_Flags_ToggleFrontierPass(u8 taskId) } static void DebugAction_Flags_CollisionOnOff(u8 taskId) { -#if DEBUG_FLAG_NO_COLLISION == 0 +#if OW_FLAG_NO_COLLISION == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetOverworldConfigMessage); #else - if (FlagGet(DEBUG_FLAG_NO_COLLISION)) + if (FlagGet(OW_FLAG_NO_COLLISION)) PlaySE(SE_PC_OFF); else PlaySE(SE_PC_LOGIN); - FlagToggle(DEBUG_FLAG_NO_COLLISION); + FlagToggle(OW_FLAG_NO_COLLISION); #endif } static void DebugAction_Flags_EncounterOnOff(u8 taskId) @@ -1573,7 +1574,7 @@ static void DebugAction_Flags_EncounterOnOff(u8 taskId) #if OW_FLAG_NO_ENCOUNTER == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetOverworldConfigMessage); #else if (FlagGet(OW_FLAG_NO_ENCOUNTER)) PlaySE(SE_PC_OFF); @@ -1587,7 +1588,7 @@ static void DebugAction_Flags_TrainerSeeOnOff(u8 taskId) #if OW_FLAG_NO_TRAINER_SEE == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetOverworldConfigMessage); #else if (FlagGet(OW_FLAG_NO_TRAINER_SEE)) PlaySE(SE_PC_OFF); @@ -1601,7 +1602,7 @@ static void DebugAction_Flags_BagUseOnOff(u8 taskId) #if B_FLAG_NO_BAG_USE == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetBattleConfigMessage); #else if (FlagGet(B_FLAG_NO_BAG_USE)) PlaySE(SE_PC_OFF); @@ -1612,10 +1613,10 @@ static void DebugAction_Flags_BagUseOnOff(u8 taskId) } static void DebugAction_Flags_CatchingOnOff(u8 taskId) { -#if B_FLAG_NO_CATCHING_USE == 0 +#if B_FLAG_NO_CATCHING == 0 Debug_DestroyMenu_Full(taskId); LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_FlagsNotSetMessage); + ScriptContext_SetupScript(Debug_FlagsNotSetBattleConfigMessage); #else if (FlagGet(B_FLAG_NO_CATCHING)) PlaySE(SE_PC_OFF); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 9b8cc1ac35..ccb6143bc2 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4654,8 +4654,8 @@ u8 GetCollisionAtCoords(struct ObjectEvent *objectEvent, s16 x, s16 y, u32 dir) { u8 direction = dir; -#if DEBUG_FLAG_NO_COLLISION != 0 - if (FlagGet(DEBUG_FLAG_NO_COLLISION)) +#if OW_FLAG_NO_COLLISION != 0 + if (FlagGet(OW_FLAG_NO_COLLISION)) return COLLISION_NONE; #endif From ff7686482f40c2bb074f40c2f847ab8b8fefea20 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Wed, 8 Mar 2023 15:56:16 -0300 Subject: [PATCH 188/290] Updated PokeStorageSys related debug functions --- src/debug.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/debug.c b/src/debug.c index 2bd89504fa..3e68c09bfb 100644 --- a/src/debug.c +++ b/src/debug.c @@ -85,6 +85,7 @@ enum { // Util DEBUG_UTIL_MENU_ITEM_TRAINER_NAME, DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER, DEBUG_UTIL_MENU_ITEM_TRAINER_ID, + DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES, }; enum { // Scripts DEBUG_UTIL_MENU_ITEM_SCRIPT_1, @@ -224,6 +225,7 @@ static void DebugAction_Util_WatchCredits(u8 taskId); static void DebugAction_Util_Trainer_Name(u8 taskId); static void DebugAction_Util_Trainer_Gender(u8 taskId); static void DebugAction_Util_Trainer_Id(u8 taskId); +static void DebugAction_Util_Clear_Boxes(u8 taskId); static void DebugAction_Flags_Flags(u8 taskId); static void DebugAction_Flags_FlagsSelect(u8 taskId); @@ -330,6 +332,7 @@ static const u8 sDebugText_Util_WatchCredits[] = _("Watch Credits"); static const u8 sDebugText_Util_Trainer_Name[] = _("Trainer name"); static const u8 sDebugText_Util_Trainer_Gender[] = _("Toggle T. Gender"); static const u8 sDebugText_Util_Trainer_Id[] = _("New Trainer Id"); +static const u8 sDebugText_Util_Clear_Boxes[] = _("Clear Storage Boxes"); // Flags Menu static const u8 sDebugText_Flags_Flags[] = _("Set Flag XXXX"); static const u8 sDebugText_Flags_SetPokedexFlags[] = _("All Pokédex Flags"); @@ -451,6 +454,7 @@ static const struct ListMenuItem sDebugMenu_Items_Utilities[] = [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = {sDebugText_Util_Trainer_Name, DEBUG_UTIL_MENU_ITEM_TRAINER_NAME}, [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = {sDebugText_Util_Trainer_Gender, DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER}, [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = {sDebugText_Util_Trainer_Id, DEBUG_UTIL_MENU_ITEM_TRAINER_ID}, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = {sDebugText_Util_Clear_Boxes, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES}, }; static const struct ListMenuItem sDebugMenu_Items_Scripts[] = { @@ -530,6 +534,7 @@ static void (*const sDebugMenu_Actions_Utilities[])(u8) = [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = DebugAction_Util_Trainer_Name, [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = DebugAction_Util_Trainer_Gender, [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = DebugAction_Util_Trainer_Id, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = DebugAction_Util_Clear_Boxes, }; static void (*const sDebugMenu_Actions_Scripts[])(u8) = { @@ -1316,6 +1321,12 @@ static void DebugAction_Util_Trainer_Id(u8 taskId) Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } +static void DebugAction_Util_Clear_Boxes(u8 taskId) +{ + ResetPokemonStorageSystem(); + Debug_DestroyMenu_Full(taskId); + ScriptContext_Enable(); +} // ******************************* // Actions Scripts @@ -2179,7 +2190,7 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) { PlaySE(MUS_LEVEL_UP); ScriptGiveMon(sDebugMonData->mon_speciesId, gTasks[taskId].data[3], ITEM_NONE, 0,0,0); - //Set flag for user convenience + // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); Free(sDebugMonData); //Frees EWRAM of MonData Struct DebugAction_DestroyExtraWindow(taskId); @@ -2735,7 +2746,7 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu break; } - //Set flag for user convenience + // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); Free(sDebugMonData); //Frees EWRAM of MonData Struct @@ -2767,11 +2778,12 @@ static void DebugAction_Give_FillPC(u8 taskId) //Credit: Sierraffinity int boxId, boxPosition; u32 personality; struct BoxPokemon boxMon; + u16 species = SPECIES_BULBASAUR; personality = Random32(); CreateBoxMon(&boxMon, - SPECIES_DEOXYS, + species, 100, 32, personality, @@ -2786,9 +2798,16 @@ static void DebugAction_Give_FillPC(u8 taskId) //Credit: Sierraffinity if (!GetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SANITY_HAS_SPECIES)) { gPokemonStoragePtr->boxes[boxId][boxPosition] = boxMon; + SetBoxMonData(&gPokemonStoragePtr->boxes[boxId][boxPosition], MON_DATA_SPECIES, &species); + GetSetPokedexFlag(species, FLAG_SET_SEEN); + GetSetPokedexFlag(species, FLAG_SET_CAUGHT); + species++; } } } + + // Set flag for user convenience + FlagSet(FLAG_SYS_POKEMON_GET); } static void DebugAction_Give_CHEAT(u8 taskId) From d695c76881d10423427b6b82856b43fd99036618 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 8 Mar 2023 22:11:28 +0100 Subject: [PATCH 189/290] test for assist and removed assist array from battle struct --- include/battle.h | 1 - src/battle_script_commands.c | 47 ++++++++++++++++++++---------------- test/move_effect_assist.c | 22 +++++++++++++++++ test/test_runner_battle.c | 1 + 4 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 test/move_effect_assist.c diff --git a/include/battle.h b/include/battle.h index a43fc65cdf..491273b80b 100644 --- a/include/battle.h +++ b/include/battle.h @@ -534,7 +534,6 @@ struct BattleStruct u8 wildVictorySong; u8 dynamicMoveType; u8 wrappedBy[MAX_BATTLERS_COUNT]; - u16 assistPossibleMoves[PARTY_SIZE * MAX_MON_MOVES]; // Each of mons can know max 4 moves. u8 focusPunchBattlerId; u8 battlerPreventingSwitchout; u8 moneyMultiplier:6; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd1..bd1b248b2a 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -23,6 +23,7 @@ #include "main.h" #include "palette.h" #include "money.h" +#include "malloc.h" #include "bg.h" #include "string_util.h" #include "pokemon_icon.h" @@ -14766,38 +14767,40 @@ static void Cmd_assistattackselect(void) s32 chooseableMovesNo = 0; struct Pokemon *party; s32 monId, moveId; - u16 *validMoves = gBattleStruct->assistPossibleMoves; + u16 *validMoves = Alloc(sizeof(u16) * PARTY_SIZE * MAX_MON_MOVES); - if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) - party = gEnemyParty; - else - party = gPlayerParty; - - for (monId = 0; monId < PARTY_SIZE; monId++) + if (validMoves != NULL) { - if (monId == gBattlerPartyIndexes[gBattlerAttacker]) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) - continue; - if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) - continue; + if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) + party = gEnemyParty; + else + party = gPlayerParty; - for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) + for (monId = 0; monId < PARTY_SIZE; monId++) { - s32 i = 0; - u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); - - if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) + if (monId == gBattlerPartyIndexes[gBattlerAttacker]) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_NONE) + continue; + if (GetMonData(&party[monId], MON_DATA_SPECIES_OR_EGG) == SPECIES_EGG) continue; - validMoves[chooseableMovesNo] = move; - chooseableMovesNo++; + for (moveId = 0; moveId < MAX_MON_MOVES; moveId++) + { + u16 move = GetMonData(&party[monId], MON_DATA_MOVE1 + moveId); + + if (sForbiddenMoves[move] & FORBIDDEN_ASSIST) + continue; + + validMoves[chooseableMovesNo++] = move; + } } } + if (chooseableMovesNo) { gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; - gCalledMove = validMoves[((Random() & 0xFF) * chooseableMovesNo) >> 8]; + gCalledMove = validMoves[Random() % chooseableMovesNo]; gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14805,6 +14808,8 @@ static void Cmd_assistattackselect(void) { gBattlescriptCurrInstr = cmd->failInstr; } + + TRY_FREE_AND_SET_NULL(validMoves); } static void Cmd_trysetmagiccoat(void) diff --git a/test/move_effect_assist.c b/test/move_effect_assist.c new file mode 100644 index 0000000000..e95d84654f --- /dev/null +++ b/test/move_effect_assist.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_ASSIST].effect == EFFECT_ASSIST); +} + +SINGLE_BATTLE_TEST("Assist fails if there are no valid moves to choose from") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) {Moves(MOVE_ASSIST, MOVE_CELEBRATE, MOVE_METRONOME, MOVE_ME_FIRST); } + PLAYER(SPECIES_WOBBUFFET) {Moves(MOVE_ASSIST, MOVE_ENDURE, MOVE_DRAGON_TAIL, MOVE_SPOTLIGHT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_ASSIST); } + } SCENE { + MESSAGE("Wobbuffet used Assist!"); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_ASSIST, player); + MESSAGE("But it failed!"); + } +} diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c2..f4b8aa4fdf 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1227,6 +1227,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) const struct BattleMove *move = &gBattleMoves[moveId]; if (move->target == MOVE_TARGET_RANDOM || move->target == MOVE_TARGET_BOTH + || move->target == MOVE_TARGET_DEPENDS || move->target == MOVE_TARGET_FOES_AND_ALLY || move->target == MOVE_TARGET_OPPONENTS_FIELD || move->target == MOVE_TARGET_ALL_BATTLERS) From 35645fe01c507bda54d6176157ac742856424f0f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Wed, 8 Mar 2023 23:00:25 +0100 Subject: [PATCH 190/290] electrify works on all move types (#2817) --- 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 2d4d075282..b31fc9ce62 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -4641,7 +4641,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) score += 2; // Give target more weaknesses break; case EFFECT_ELECTRIFY: - if (predictedMove != MOVE_NONE && gBattleMoves[predictedMove].type == TYPE_NORMAL + if (predictedMove != MOVE_NONE && (AI_DATA->abilities[battlerAtk] == ABILITY_VOLT_ABSORB || AI_DATA->abilities[battlerAtk] == ABILITY_MOTOR_DRIVE || AI_DATA->abilities[battlerAtk] == ABILITY_LIGHTNING_ROD)) From eead8e8e61e53b72eb530bec8c9ec3908dcad849 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 9 Mar 2023 09:49:50 +0100 Subject: [PATCH 191/290] Tests work with new pokemon disabled --- src/battle_message.c | 2 +- test/ability_intimidate.c | 28 ++++++++++++++-------------- test/ability_pastel_veil.c | 4 ++-- test/ability_stench.c | 4 ++-- test/hold_effect_red_card.c | 2 ++ test/mega_evolution.c | 6 +++--- test/move_effect_hit_escape.c | 2 ++ 7 files changed, 26 insertions(+), 22 deletions(-) diff --git a/src/battle_message.c b/src/battle_message.c index cf57247bf8..77ab90438a 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -284,7 +284,7 @@ static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}' static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nprevents confusion!"); static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nraised its FIRE power!"); static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!"); -static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s ATTACK!"); +static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}'s attack!"); static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!"); static const u8 sText_PkmnHurtsWith[] = _("{B_ATK_NAME_WITH_PREFIX} was hurt by\n{B_DEF_NAME_WITH_PREFIX}'s {B_BUFF1}!"); static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}'s {B_BUFF2}!"); diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index f978b80ab0..08d8d606e4 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -10,11 +10,11 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { u32 ability; PARAMETRIZE { ability = ABILITY_INTIMIDATE; } - PARAMETRIZE { ability = ABILITY_RECKLESS; } + PARAMETRIZE { ability = ABILITY_SHED_SKIN; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_STARAPTOR) { Ability(ability); }; + OPPONENT(SPECIES_ARBOK) { Ability(ability); }; } WHEN { TURN { SWITCH(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after switch ou { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -35,11 +35,11 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { u32 ability; PARAMETRIZE { ability = ABILITY_INTIMIDATE; } - PARAMETRIZE { ability = ABILITY_RECKLESS; } + PARAMETRIZE { ability = ABILITY_SHED_SKIN; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(2); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); }; - OPPONENT(SPECIES_STARAPTOR) { Ability(ability); Speed(1); }; + OPPONENT(SPECIES_ARBOK) { Ability(ability); Speed(1); }; } WHEN { TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_TACKLE); } @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Intimidate (opponent) lowers player's attack after KO", s16 { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Foe Staraptor's Intimidate cuts Wobbuffet's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Wobbuffet's attack!"); } HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -63,11 +63,11 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ASSUME(gBattleMoves[MOVE_EXPLOSION].effect == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET) { }; PLAYER(SPECIES_WOBBUFFET) { HP(1); }; - PLAYER(SPECIES_STARAVIA) { Ability(ABILITY_INTIMIDATE); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; PLAYER(SPECIES_ABRA); OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; - OPPONENT(SPECIES_STARAPTOR) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }; OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } @@ -77,21 +77,21 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft); // Everyone faints. - MESSAGE("Go! Staravia!"); - MESSAGE("2 sent out Staraptor!"); + MESSAGE("Go! Ekans!"); + MESSAGE("2 sent out Arbok!"); MESSAGE("Go! Abra!"); MESSAGE("2 sent out Wynaut!"); ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); - MESSAGE("Staravia's Intimidate cuts Foe Staraptor's ATTACK!"); + MESSAGE("Ekans's Intimidate cuts Foe Arbok's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); - MESSAGE("Staravia's Intimidate cuts Foe Wynaut's ATTACK!"); + MESSAGE("Ekans's Intimidate cuts Foe Wynaut's attack!"); ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Foe Staraptor's Intimidate cuts Staravia's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Ekans's attack!"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); - MESSAGE("Foe Staraptor's Intimidate cuts Abra's ATTACK!"); + MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } } diff --git a/test/ability_pastel_veil.c b/test/ability_pastel_veil.c index 5d7a8f0203..ddc0806198 100644 --- a/test/ability_pastel_veil.c +++ b/test/ability_pastel_veil.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Pastel Veil immediately cures Mold Breaker poison") { GIVEN { ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); - PLAYER(SPECIES_DRILBUR) { Ability(ABILITY_MOLD_BREAKER); } + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } } WHEN { TURN { MOVE(player, MOVE_TOXIC); } @@ -52,7 +52,7 @@ DOUBLE_BATTLE_TEST("Pastel Veil does not cure Mold Breaker poison on partner") { GIVEN { ASSUME(gBattleMoves[MOVE_TOXIC].effect == EFFECT_TOXIC); - PLAYER(SPECIES_DRILBUR) { Ability(ABILITY_MOLD_BREAKER); } + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_PONYTA_GALARIAN) { Ability(ABILITY_PASTEL_VEIL); } OPPONENT(SPECIES_WYNAUT); diff --git a/test/ability_stench.c b/test/ability_stench.c index 7285ee768c..18d9097680 100644 --- a/test/ability_stench.c +++ b/test/ability_stench.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") PASSES_RANDOMLY(1,10); GIVEN { ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); - PLAYER(SPECIES_STUNKY) { Ability(ABILITY_STENCH); }; + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") ASSUME(gItems[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); - PLAYER(SPECIES_STUNKY) { Ability(ABILITY_STENCH); Item(ITEM_KINGS_ROCK); }; + PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); Item(ITEM_KINGS_ROCK); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_CELEBRATE); } diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c index c32c489d5a..882007cfd4 100644 --- a/test/hold_effect_red_card.c +++ b/test/hold_effect_red_card.c @@ -184,6 +184,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if stolen by Magician") PARAMETRIZE { item = ITEM_POTION; activate = TRUE; } GIVEN { + ASSUME(P_GEN_6_POKEMON == TRUE); PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } OPPONENT(SPECIES_FENNEKIN) { Ability(ABILITY_MAGICIAN); Item(item); } OPPONENT(SPECIES_WYNAUT); @@ -360,6 +361,7 @@ SINGLE_BATTLE_TEST("Red Card does not activate if attacker's Sheer Force applied SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit") { GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); PLAYER(SPECIES_GOLISOPOD) { MaxHP(100); HP(51); Item(ITEM_RED_CARD); } PLAYER(SPECIES_WIMPOD); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/mega_evolution.c b/test/mega_evolution.c index 13e9cd5b22..7080e85a3c 100644 --- a/test/mega_evolution.c +++ b/test/mega_evolution.c @@ -37,15 +37,15 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order") { GIVEN { ASSUME(B_MEGA_EVO_TURN_ORDER); - PLAYER(SPECIES_DIANCIE) { Item(ITEM_DIANCITE); Speed(105); } + PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); } OPPONENT(SPECIES_WOBBUFFET) { Speed(106); } } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); } } SCENE { - MESSAGE("Diancie used Celebrate!"); + MESSAGE("Gardevoir used Celebrate!"); MESSAGE("Foe Wobbuffet used Celebrate!"); } THEN { - ASSUME(player->speed == 225); + ASSUME(player->speed == 205); } } diff --git a/test/move_effect_hit_escape.c b/test/move_effect_hit_escape.c index cc34db2e28..fb5ff2dd54 100644 --- a/test/move_effect_hit_escape.c +++ b/test/move_effect_hit_escape.c @@ -65,6 +65,7 @@ SINGLE_BATTLE_TEST("U-turn does not switch the user out if replacements fainted" SINGLE_BATTLE_TEST("U-turn does not switch the user out if Wimp Out activates") { GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WIMPOD) { MaxHP(100); HP(51); Ability(ABILITY_WIMP_OUT); } @@ -82,6 +83,7 @@ SINGLE_BATTLE_TEST("U-turn does not switch the user out if Wimp Out activates") SINGLE_BATTLE_TEST("U-turn switches the user out if Wimp Out fails to activate") { GIVEN { + ASSUME(P_GEN_7_POKEMON == TRUE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WIMPOD) { MaxHP(100); HP(51); Ability(ABILITY_WIMP_OUT); } From 9358265954b80410d1f9c6617c79108e68f47f32 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 9 Mar 2023 09:52:27 +0100 Subject: [PATCH 192/290] electrify ai speed check --- 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 2d4d075282..e4edf45814 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -2447,7 +2447,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_ELECTRIFY: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER + if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER //|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) score -= 10; From 6f13e4cfc5fd7670d4c2d5165ff96c952c0e3622 Mon Sep 17 00:00:00 2001 From: ghoulslash <41651341+ghoulslash@users.noreply.github.com> Date: Fri, 10 Mar 2023 14:52:22 -0500 Subject: [PATCH 193/290] word-align battle_interface u8 array gfx (#2812) Co-authored-by: ghoulslash --- src/battle_interface.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/battle_interface.c b/src/battle_interface.c index a793320f6a..35c0e60c63 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -607,7 +607,7 @@ static const struct WindowTemplate sHealthboxWindowTemplate = { .baseBlock = 0 }; -static const u8 sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); +static const u8 ALIGNED(4) sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp"); static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal"); static const struct SpriteSheet sSpriteSheet_MegaTrigger = @@ -1436,10 +1436,10 @@ enum INDICATOR_COUNT, }; -static const u8 sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); +static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp"); static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal"); -static const u8 sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); -static const u8 sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); +static const u8 ALIGNED(4) sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp"); +static const u8 ALIGNED(4) sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp"); static const u16 sAlphaOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/alpha_indicator.gbapal"); static const struct SpriteSheet sMegaIndicator_SpriteSheets[] = @@ -2775,7 +2775,7 @@ static void SafariTextIntoHealthboxObject(void *dest, u8 *windowTileData, u32 wi #define tSpriteId1 data[6] #define tSpriteId2 data[7] -static const u8 sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp"); +static const u8 ALIGNED(4) sAbilityPopUpGfx[] = INCBIN_U8("graphics/battle_interface/ability_pop_up.4bpp"); static const u16 sAbilityPopUpPalette[] = INCBIN_U16("graphics/battle_interface/ability_pop_up.gbapal"); static const struct SpriteSheet sSpriteSheet_AbilityPopUp = @@ -3234,9 +3234,9 @@ static const struct SpriteTemplate sSpriteTemplate_LastUsedBallWindow = }; #if B_LAST_USED_BALL_BUTTON == R_BUTTON - static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp"); + static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_r.4bpp"); #else - static const u8 sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp"); + static const u8 ALIGNED(4) sLastUsedBallWindowGfx[] = INCBIN_U8("graphics/battle_interface/last_used_ball_l.4bpp"); #endif static const struct SpriteSheet sSpriteSheet_LastUsedBallWindow = { From a8c930945805f3b4237be57ef320d0e416ed792a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 13 Mar 2023 05:07:29 -0300 Subject: [PATCH 194/290] Fixed Wring Out's power (#2824) Fixes #2823 --- src/data/battle_moves.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index c5375dc34b..dc18893de2 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -6426,7 +6426,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = [MOVE_WRING_OUT] = { .effect = EFFECT_WRING_OUT, - .power = 0, + .power = 1, .type = TYPE_NORMAL, .accuracy = 100, .pp = 5, From 59d5f078d272a9f9089982224d5976909819ec49 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 13 Mar 2023 17:44:25 +0100 Subject: [PATCH 195/290] samurott shiny.pal --- graphics/pokemon/samurott/shiny.pal | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100755 graphics/pokemon/samurott/shiny.pal diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal deleted file mode 100755 index 5f67484f12..0000000000 --- a/graphics/pokemon/samurott/shiny.pal +++ /dev/null @@ -1,19 +0,0 @@ -JASC-PAL -0100 -16 -152 208 160 -16 16 16 -120 64 48 -216 152 128 -240 184 152 -176 104 80 -72 72 72 -248 248 248 -192 184 128 -40 40 64 -32 64 104 -208 80 96 -216 216 176 -120 120 80 -24 24 40 -0 0 0 From f3810465e80d017da1fe8caa5914ff01dd1a3b29 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 13 Mar 2023 17:46:52 +0100 Subject: [PATCH 196/290] samurott shiny.pal v2 --- graphics/pokemon/samurott/shiny.pal | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 graphics/pokemon/samurott/shiny.pal diff --git a/graphics/pokemon/samurott/shiny.pal b/graphics/pokemon/samurott/shiny.pal new file mode 100644 index 0000000000..5f67484f12 --- /dev/null +++ b/graphics/pokemon/samurott/shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +16 16 16 +120 64 48 +216 152 128 +240 184 152 +176 104 80 +72 72 72 +248 248 248 +192 184 128 +40 40 64 +32 64 104 +208 80 96 +216 216 176 +120 120 80 +24 24 40 +0 0 0 From 0c380862d61a9c4eccd9ed4915e12db6e7ca4310 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Mon, 13 Mar 2023 15:37:46 -0400 Subject: [PATCH 197/290] Document the trendy saying word group --- data/scripts/mauville_man.inc | 10 ++-- data/specials.inc | 4 +- include/constants/easy_chat.h | 2 +- include/constants/flags.h | 2 +- include/easy_chat.h | 4 +- include/global.h | 6 +-- src/easy_chat.c | 97 +++++++++++++++++++++-------------- src/mauville_old_man.c | 19 +++---- src/mystery_event_script.c | 2 +- 9 files changed, 83 insertions(+), 63 deletions(-) diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc index eda3505bf4..a336360436 100644 --- a/data/scripts/mauville_man.inc +++ b/data/scripts/mauville_man.inc @@ -64,9 +64,9 @@ MauvilleCity_PokemonCenter_1F_EventScript_DeclineWritingLyrics:: MauvilleCity_PokemonCenter_1F_EventScript_Hipster:: lock faceplayer - setflag FLAG_SYS_HIPSTER_MEET + setflag FLAG_UNLOCKED_TRENDY_SAYINGS msgbox MauvilleCity_PokemonCenter_1F_Text_TeachWhatsHipAndHappening, MSGBOX_DEFAULT - special GetHipsterSpokenFlag + special HasHipsterTaughtWord goto_if_eq VAR_RESULT, FALSE, MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord msgbox MauvilleCity_PokemonCenter_1F_Text_IAlreadyTaughtYou, MSGBOX_DEFAULT release @@ -80,8 +80,8 @@ MauvilleCity_PokemonCenter_1F_EventScript_TryTeachWord:: end MauvilleCity_PokemonCenter_1F_EventScript_TeachWord:: - msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase, MSGBOX_DEFAULT - special SetHipsterSpokenFlag + msgbox MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfWord, MSGBOX_DEFAULT + special SetHipsterTaughtWord release end @@ -969,7 +969,7 @@ MauvilleCity_PokemonCenter_1F_Text_IveGotNothingNewToTeach: .string "what's hip and happening.\p" .string "I've got nothing new to teach you!$" -MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfPhrase: +MauvilleCity_PokemonCenter_1F_Text_HaveYouHeardOfWord: .string "Hey, have you heard about\n" .string "“{STR_VAR_1}”?\p" .string "What's it mean? Well…\n" diff --git a/data/specials.inc b/data/specials.inc index a0dbde8683..52b539a805 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -111,8 +111,8 @@ gSpecials:: def_special Script_GetCurrentMauvilleMan def_special HasBardSongBeenChanged def_special SaveBardSongLyrics - def_special GetHipsterSpokenFlag - def_special SetHipsterSpokenFlag + def_special HasHipsterTaughtWord + def_special SetHipsterTaughtWord def_special HipsterTryTeachWord def_special PlayBardSong def_special SetMauvilleOldManObjEventGfx diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index b5875b8814..b1f38941fc 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.h @@ -1095,7 +1095,7 @@ #define EC_WORD_OLD ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 30) #define EC_WORD_YOUNG ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 31) #define EC_WORD_UGLY ((EC_GROUP_TRENDY_SAYING << EC_MASK_BITS) | 32) -#define NUM_ADDITIONAL_PHRASES 33 +#define NUM_TRENDY_SAYINGS 33 // Special Berry Masters Wife phrases #define NOT_SPECIAL_PHRASE 0 diff --git a/include/constants/flags.h b/include/constants/flags.h index 99a8377a75..377f18107d 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1348,7 +1348,7 @@ #define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) // Unused Flag #define FLAG_SYS_GAME_CLEAR (SYSTEM_FLAGS + 0x4) #define FLAG_SYS_CHAT_USED (SYSTEM_FLAGS + 0x5) -#define FLAG_SYS_HIPSTER_MEET (SYSTEM_FLAGS + 0x6) +#define FLAG_UNLOCKED_TRENDY_SAYINGS (SYSTEM_FLAGS + 0x6) // Badges #define FLAG_BADGE01_GET (SYSTEM_FLAGS + 0x7) diff --git a/include/easy_chat.h b/include/easy_chat.h index c9ef4428f7..4bcc7389cd 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -128,11 +128,11 @@ void InitializeEasyChatWordArray(u16 *words, u16 length); u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows); bool8 IsBardWordInvalid(u16 word); u16 GetRandomEasyChatWordFromGroup(u16 group); -u16 GetNewHipsterPhraseToTeach(void); +u16 UnlockRandomTrendySaying(void); u16 EasyChat_GetNumWordsInGroup(u8); u16 GetRandomEasyChatWordFromUnlockedGroup(u16); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType); void InitQuestionnaireWords(void); -void UnlockAdditionalPhrase(u8 additionalPhraseId); +void UnlockTrendySaying(u8 wordIndex); #endif // GUARD_EASYCHAT_H diff --git a/include/global.h b/include/global.h index e0ff9f0c23..9396a95f7a 100644 --- a/include/global.h +++ b/include/global.h @@ -133,7 +133,7 @@ // values that don't appear in the Pokedex. NATIONAL_DEX_COUNT does not include these values. #define NUM_DEX_FLAG_BYTES ROUND_BITS_TO_BYTES(NUM_SPECIES) #define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT) -#define NUM_ADDITIONAL_PHRASE_BYTES ROUND_BITS_TO_BYTES(NUM_ADDITIONAL_PHRASES) +#define NUM_TRENDY_SAYING_BYTES ROUND_BITS_TO_BYTES(NUM_TRENDY_SAYINGS) // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative @@ -673,7 +673,7 @@ struct MauvilleManGiddy struct MauvilleManHipster { u8 id; - bool8 alreadySpoken; + bool8 taughtWord; u8 language; }; @@ -1031,7 +1031,7 @@ struct SaveBlock1 /*0x2BC8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BE0*/ struct Mail mail[MAIL_COUNT]; - /*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system + /*0x2E20*/ u8 unlockedTrendySayings[NUM_TRENDY_SAYING_BYTES]; // Bitfield for unlockable Easy Chat words in EC_GROUP_TRENDY_SAYING /*0x2E25*/ //u8 padding5[3]; /*0x2E28*/ OldMan oldMan; /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; diff --git a/src/easy_chat.c b/src/easy_chat.c index d08ea4b33d..35ba633cf4 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -5109,7 +5109,7 @@ static bool8 IsEasyChatGroupUnlocked(u8 groupId) switch (groupId) { case EC_GROUP_TRENDY_SAYING: - return FlagGet(FLAG_SYS_HIPSTER_MEET); + return FlagGet(FLAG_UNLOCKED_TRENDY_SAYINGS); case EC_GROUP_EVENTS: case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_2: @@ -5425,80 +5425,99 @@ void BufferDeepLinkPhrase(void) CopyEasyChatWord(gStringVar2, easyChatWord); } -static bool8 IsAdditionalPhraseUnlocked(u8 additionalPhraseId) +/* + ### Trendy Sayings + + Not to be confused with Dewford Town's "trendy phrase". + + This is a group of easy chat words (EC_GROUP_TRENDY_SAYING) that are normally inaccessible. + They can be unlocked either through Mystery Event (where they're referred to as "rare" words) + or from the "Hipster" variety of the Mauville Old Man. The Hipster can unlock one word each + time he is received via record mixing (and once if he is the player's default Old Man). + + Which words have been unlocked is saved in the unlockedTrendySayings bitfield in SaveBlock1 + + Unlocked trendy saying words are only accessible if the flag FLAG_UNLOCKED_TRENDY_SAYINGS is set. + It's set any time the player talks to the Hipster, but is not apparently set by Mystery Event, + meaning trendy saying words unlocked via Mystery Event may not be available until the player has + talked to the Hipster. +*/ +static bool8 IsTrendySayingUnlocked(u8 wordIndex) { - int byteOffset = additionalPhraseId / 8; - int shift = additionalPhraseId % 8; - return (gSaveBlock1Ptr->additionalPhrases[byteOffset] >> shift) & 1; + int byteOffset = wordIndex / 8; + int shift = wordIndex % 8; + return (gSaveBlock1Ptr->unlockedTrendySayings[byteOffset] >> shift) & 1; } -void UnlockAdditionalPhrase(u8 additionalPhraseId) +void UnlockTrendySaying(u8 wordIndex) { - if (additionalPhraseId < NUM_ADDITIONAL_PHRASES) + if (wordIndex < NUM_TRENDY_SAYINGS) { - int byteOffset = additionalPhraseId / 8; - int shift = additionalPhraseId % 8; - gSaveBlock1Ptr->additionalPhrases[byteOffset] |= 1 << shift; + int byteOffset = wordIndex / 8; + int shift = wordIndex % 8; + gSaveBlock1Ptr->unlockedTrendySayings[byteOffset] |= 1 << shift; } } -static u8 GetNumAdditionalPhrasesUnlocked(void) +static u8 GetNumTrendySayingsUnlocked(void) { u8 i; - u8 numAdditionalPhrasesUnlocked; + u8 numUnlocked; - for (i = 0, numAdditionalPhrasesUnlocked = 0; i < NUM_ADDITIONAL_PHRASES; i++) + for (i = 0, numUnlocked = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (IsAdditionalPhraseUnlocked(i)) - numAdditionalPhrasesUnlocked++; + if (IsTrendySayingUnlocked(i)) + numUnlocked++; } - return numAdditionalPhrasesUnlocked; + return numUnlocked; } -u16 GetNewHipsterPhraseToTeach(void) +u16 UnlockRandomTrendySaying(void) { u16 i; - u16 additionalPhraseId; - u8 numAdditionalPhrasesUnlocked = GetNumAdditionalPhrasesUnlocked(); - if (numAdditionalPhrasesUnlocked == NUM_ADDITIONAL_PHRASES) + u16 numToSkip; + u8 numUnlocked = GetNumTrendySayingsUnlocked(); + if (numUnlocked == NUM_TRENDY_SAYINGS) return EC_EMPTY_WORD; - additionalPhraseId = Random() % (NUM_ADDITIONAL_PHRASES - numAdditionalPhrasesUnlocked); - for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) + numToSkip = Random() % (NUM_TRENDY_SAYINGS - numUnlocked); + for (i = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (!IsAdditionalPhraseUnlocked(i)) + if (!IsTrendySayingUnlocked(i)) { - if (additionalPhraseId) + if (numToSkip) { - additionalPhraseId--; + // Skip the first n locked words, as determined by the Random call above. + numToSkip--; } else { - UnlockAdditionalPhrase(i); + UnlockTrendySaying(i); return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } } } + // Would only be reached if there are no new words to teach, which is handled at the start. return EC_EMPTY_WORD; } // Unused -u16 GetRandomTaughtHipsterPhrase(void) +static u16 GetRandomUnlockedTrendySaying(void) { u16 i; - u16 additionalPhraseId = GetNumAdditionalPhrasesUnlocked(); - if (additionalPhraseId == 0) + u16 n = GetNumTrendySayingsUnlocked(); + if (n == 0) return EC_EMPTY_WORD; - additionalPhraseId = Random() % additionalPhraseId; - for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) + n = Random() % n; + for (i = 0; i < NUM_TRENDY_SAYINGS; i++) { - if (IsAdditionalPhraseUnlocked(i)) + if (IsTrendySayingUnlocked(i)) { - if (additionalPhraseId) - additionalPhraseId--; + if (n) + n--; else return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } @@ -5569,10 +5588,10 @@ void InitEasyChatPhrases(void) // Mauville old man data is corrupted, which is initialized directly after // this function is called when starting a new game. for (i = 0; i < 64; i++) - gSaveBlock1Ptr->additionalPhrases[i] = 0; + gSaveBlock1Ptr->unlockedTrendySayings[i] = 0; #else - for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->additionalPhrases); i++) - gSaveBlock1Ptr->additionalPhrases[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->unlockedTrendySayings); i++) + gSaveBlock1Ptr->unlockedTrendySayings[i] = 0; #endif } @@ -5611,7 +5630,7 @@ static void SetUnlockedEasyChatGroups(void) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_MOVE_2; } - if (FlagGet(FLAG_SYS_HIPSTER_MEET)) + if (FlagGet(FLAG_UNLOCKED_TRENDY_SAYINGS)) sWordData->unlockedGroupIds[sWordData->numUnlockedGroups++] = EC_GROUP_TRENDY_SAYING; if (IsNationalPokedexEnabled()) @@ -5800,7 +5819,7 @@ static bool8 IsEasyChatIndexAndGroupUnlocked(u16 wordIndex, u8 groupId) case EC_GROUP_MOVE_2: return TRUE; case EC_GROUP_TRENDY_SAYING: - return IsAdditionalPhraseUnlocked(wordIndex); + return IsTrendySayingUnlocked(wordIndex); default: return gEasyChatGroups[groupId].wordData.words[wordIndex].enabled; } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 689dcf6a16..6075bd5d95 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -88,7 +88,7 @@ static void SetupHipster(void) struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster; hipster->id = MAUVILLE_MAN_HIPSTER; - hipster->alreadySpoken = FALSE; + hipster->taughtWord = FALSE; hipster->language = gGameLanguage; } @@ -225,27 +225,28 @@ void PlayBardSong(void) ScriptContext_Stop(); } -void GetHipsterSpokenFlag(void) +void HasHipsterTaughtWord(void) { - gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken; + gSpecialVar_Result = (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord; } -void SetHipsterSpokenFlag(void) +void SetHipsterTaughtWord(void) { - (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = TRUE; + (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord = TRUE; } void HipsterTryTeachWord(void) { - u16 phrase = GetNewHipsterPhraseToTeach(); + u16 word = UnlockRandomTrendySaying(); - if (phrase == EC_EMPTY_WORD) + if (word == EC_EMPTY_WORD) { + // All words already unlocked gSpecialVar_Result = FALSE; } else { - CopyEasyChatWord(gStringVar1, phrase); + CopyEasyChatWord(gStringVar1, word); gSpecialVar_Result = TRUE; } } @@ -369,7 +370,7 @@ static void ResetBardFlag(void) static void ResetHipsterFlag(void) { - (&gSaveBlock1Ptr->oldMan.hipster)->alreadySpoken = FALSE; + (&gSaveBlock1Ptr->oldMan.hipster)->taughtWord = FALSE; } static void ResetTraderFlag(void) diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 124ababa45..b146bbab39 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -293,7 +293,7 @@ bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) { - UnlockAdditionalPhrase(ScriptReadByte(ctx)); + UnlockTrendySaying(ScriptReadByte(ctx)); StringExpandPlaceholders(gStringVar4, gText_MysteryEventRareWord); ctx->mStatus = MEVENT_STATUS_SUCCESS; return FALSE; From 0a9ab96390706326c3eda11059095e7298ea88d4 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 14 Mar 2023 08:54:49 -0300 Subject: [PATCH 198/290] Added STANDARD_FRIENDSHIP constant to allow easier custom adjustments --- include/constants/pokemon.h | 3 + src/data/pokemon/species_info.h | 652 ++++++++++++++++---------------- 2 files changed, 329 insertions(+), 326 deletions(-) diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 716d5adf9d..e515378d4c 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -190,6 +190,9 @@ #define FRIENDSHIP_200_TO_254 5 #define FRIENDSHIP_MAX 6 +// Friendship value that the majority of species use. This was changed in Generation 8 to 50. +#define STANDARD_FRIENDSHIP 70 + #define MAX_FRIENDSHIP 255 #define MAX_SHEEN 255 #define MAX_CONDITION 255 diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 344852baf5..2ef0629b52 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -57,7 +57,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -87,7 +87,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -117,7 +117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -147,7 +147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -177,7 +177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -207,7 +207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -237,7 +237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -267,7 +267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -297,7 +297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -327,7 +327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -357,7 +357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -387,7 +387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -417,7 +417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -447,7 +447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -477,7 +477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -507,7 +507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -537,7 +537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -567,7 +567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -597,7 +597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, @@ -627,7 +627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, @@ -657,7 +657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -687,7 +687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -717,7 +717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, @@ -747,7 +747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, @@ -777,7 +777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LIGHT_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -807,7 +807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -837,7 +837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, @@ -867,7 +867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_QUICK_CLAW, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, @@ -897,7 +897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -927,7 +927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -957,7 +957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -987,7 +987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1017,7 +1017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1047,7 +1047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -1137,7 +1137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -1167,7 +1167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -1197,7 +1197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -1227,7 +1227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -1257,7 +1257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -1287,7 +1287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -1317,7 +1317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1347,7 +1347,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1377,7 +1377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -1407,7 +1407,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -1437,7 +1437,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_MUSHROOM, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -1467,7 +1467,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -1497,7 +1497,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -1527,7 +1527,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, @@ -1557,7 +1557,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, @@ -1587,7 +1587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -1617,7 +1617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -1647,7 +1647,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, @@ -1677,7 +1677,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, @@ -1707,7 +1707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -1737,7 +1737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -1767,7 +1767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, @@ -1797,7 +1797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, @@ -1827,7 +1827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1857,7 +1857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1887,7 +1887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -1917,7 +1917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -1947,7 +1947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -1977,7 +1977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_TWISTED_SPOON, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, @@ -2007,7 +2007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2037,7 +2037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2067,7 +2067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -2097,7 +2097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2127,7 +2127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2157,7 +2157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -2187,7 +2187,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, @@ -2217,7 +2217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, @@ -2247,7 +2247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2277,7 +2277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2307,7 +2307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_EVERSTONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2337,7 +2337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, @@ -2367,7 +2367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, @@ -2397,7 +2397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -2427,7 +2427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -2457,7 +2457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, @@ -2487,7 +2487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, @@ -2517,7 +2517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STICK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FIELD }, .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS}, @@ -2547,7 +2547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, @@ -2577,7 +2577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SHARP_BEAK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, @@ -2607,7 +2607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -2637,7 +2637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -2667,7 +2667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, @@ -2697,7 +2697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NUGGET, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, @@ -2727,7 +2727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -2757,7 +2757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -2787,7 +2787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2817,7 +2817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2847,7 +2847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -2877,7 +2877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -2907,7 +2907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, @@ -2937,7 +2937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, @@ -2967,7 +2967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -2997,7 +2997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -3027,7 +3027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, @@ -3057,7 +3057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, @@ -3087,7 +3087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3117,7 +3117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3147,7 +3147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, @@ -3177,7 +3177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_THICK_CLUB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, @@ -3207,7 +3207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -3237,7 +3237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -3267,7 +3267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS}, @@ -3297,7 +3297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -3327,7 +3327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SMOKE_BALL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -3357,7 +3357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, @@ -3387,7 +3387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, @@ -3447,7 +3447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -3477,7 +3477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE}, @@ -3507,7 +3507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -3537,7 +3537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, @@ -3567,7 +3567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, @@ -3597,7 +3597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, @@ -3627,7 +3627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, @@ -3657,7 +3657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_STAR_PIECE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, @@ -3687,7 +3687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -3717,7 +3717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -3747,7 +3747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -3777,7 +3777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -3807,7 +3807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, @@ -3837,7 +3837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, @@ -3867,7 +3867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -3897,7 +3897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -3927,7 +3927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 5, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_DRAGON }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -3957,7 +3957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR}, @@ -3987,7 +3987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_POWDER, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_DITTO, EGG_GROUP_DITTO }, .abilities = {ABILITY_LIMBER, ABILITY_NONE}, @@ -4017,7 +4017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, @@ -4047,7 +4047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, @@ -4077,7 +4077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, @@ -4107,7 +4107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, @@ -4137,7 +4137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_TRACE, ABILITY_NONE}, @@ -4167,7 +4167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, @@ -4197,7 +4197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, @@ -4227,7 +4227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, @@ -4257,7 +4257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, @@ -4287,7 +4287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE}, @@ -4317,7 +4317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEFTOVERS, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_MONSTER }, .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT}, @@ -4587,7 +4587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4617,7 +4617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4647,7 +4647,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -4677,7 +4677,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4707,7 +4707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4737,7 +4737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -4767,7 +4767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4797,7 +4797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4827,7 +4827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -4857,7 +4857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, @@ -4887,7 +4887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, @@ -4917,7 +4917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, @@ -4947,7 +4947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, @@ -4977,7 +4977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, @@ -5007,7 +5007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, @@ -5037,7 +5037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, @@ -5067,7 +5067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, @@ -5097,7 +5097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -5127,7 +5127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, @@ -5157,7 +5157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_YELLOW_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, @@ -5187,7 +5187,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5247,7 +5247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -5277,7 +5277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, @@ -5307,7 +5307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FAIRY }, .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, @@ -5337,7 +5337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, @@ -5367,7 +5367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, @@ -5397,7 +5397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5427,7 +5427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5457,7 +5457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -5487,7 +5487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5517,7 +5517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -5547,7 +5547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FAIRY }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -5577,7 +5577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, @@ -5607,7 +5607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, @@ -5637,7 +5637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5667,7 +5667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5697,7 +5697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5727,7 +5727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP}, @@ -5757,7 +5757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5787,7 +5787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_GRASS, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -5817,7 +5817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES}, @@ -5847,7 +5847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, @@ -5877,7 +5877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, @@ -5907,7 +5907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 35, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, @@ -5997,7 +5997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, @@ -6057,7 +6057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -6087,7 +6087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, @@ -6117,7 +6117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD}, @@ -6147,7 +6147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6177,7 +6177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6207,7 +6207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY}, @@ -6237,7 +6237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL}, @@ -6267,7 +6267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_METAL_COAT, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, @@ -6297,7 +6297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY}, @@ -6327,7 +6327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, @@ -6357,7 +6357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM}, @@ -6387,7 +6387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -6417,7 +6417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -6447,7 +6447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_GUTS}, @@ -6507,7 +6507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -6537,7 +6537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -6567,7 +6567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, @@ -6597,7 +6597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, @@ -6627,7 +6627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -6657,7 +6657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -6687,7 +6687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RED_SHARD, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE}, @@ -6717,7 +6717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, @@ -6747,7 +6747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -6777,7 +6777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE}, @@ -6807,7 +6807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB}, @@ -6837,7 +6837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, @@ -6927,7 +6927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -6957,7 +6957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -6987,7 +6987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STURDY, ABILITY_NONE}, @@ -7017,7 +7017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_TRACE, ABILITY_NONE}, @@ -7047,7 +7047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7077,7 +7077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, @@ -7107,7 +7107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -7137,7 +7137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7167,7 +7167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ASPEAR_BERRY, .genderRatio = MON_FEMALE, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -7197,7 +7197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_STATIC, ABILITY_NONE}, @@ -7227,7 +7227,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, @@ -7257,7 +7257,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MOOMOO_MILK, .genderRatio = MON_FEMALE, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -7637,7 +7637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7667,7 +7667,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7697,7 +7697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_DRAGON }, .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, @@ -7727,7 +7727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7757,7 +7757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7787,7 +7787,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_BLAZE, ABILITY_NONE}, @@ -7817,7 +7817,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7847,7 +7847,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7877,7 +7877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_TORRENT, ABILITY_NONE}, @@ -7907,7 +7907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, @@ -7937,7 +7937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PECHA_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -7967,7 +7967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_ORAN_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -7997,7 +7997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SITRUS_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_PICKUP, ABILITY_NONE}, @@ -8027,7 +8027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -8057,7 +8057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -8087,7 +8087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SWARM, ABILITY_NONE}, @@ -8117,7 +8117,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -8147,7 +8147,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, @@ -8177,7 +8177,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8207,7 +8207,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8237,7 +8237,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_GRASS }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, @@ -8267,7 +8267,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8297,7 +8297,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8327,7 +8327,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, @@ -8357,7 +8357,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, @@ -8387,7 +8387,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, @@ -8417,7 +8417,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_WONDER_GUARD, ABILITY_NONE}, @@ -8447,7 +8447,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -8477,7 +8477,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_FLYING }, .abilities = {ABILITY_GUTS, ABILITY_NONE}, @@ -8507,7 +8507,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -8537,7 +8537,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, @@ -8567,7 +8567,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, @@ -8597,7 +8597,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -8627,7 +8627,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FLYING }, .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, @@ -8657,7 +8657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -8687,7 +8687,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_BUG }, .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, @@ -8717,7 +8717,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, @@ -8747,7 +8747,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, @@ -8777,7 +8777,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -8807,7 +8807,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_LEPPA_BERRY, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, @@ -8837,7 +8837,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_PERSIM_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE}, @@ -8867,7 +8867,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -8897,7 +8897,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_GENDERLESS, .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -8927,7 +8927,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, @@ -8957,7 +8957,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_WHITE_SMOKE, ABILITY_NONE}, @@ -9017,7 +9017,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9047,7 +9047,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9077,7 +9077,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_WATER_2, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -9107,7 +9107,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -9137,7 +9137,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, @@ -9167,7 +9167,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -9197,7 +9197,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_DRAGON }, .abilities = {ABILITY_MARVEL_SCALE, ABILITY_NONE}, @@ -9287,7 +9287,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP}, @@ -9317,7 +9317,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, @@ -9347,7 +9347,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_BUG }, .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, @@ -9377,7 +9377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, @@ -9407,7 +9407,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_KINGS_ROCK, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, @@ -9437,7 +9437,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, @@ -9467,7 +9467,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, @@ -9497,7 +9497,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -9527,7 +9527,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_RAWST_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_NONE}, @@ -9557,7 +9557,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9587,7 +9587,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9617,7 +9617,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, @@ -9707,7 +9707,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -9737,7 +9737,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_MINERAL }, .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, @@ -9767,7 +9767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MOON_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -9797,7 +9797,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SUN_STONE, .genderRatio = MON_GENDERLESS, .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_MINERAL, EGG_GROUP_MINERAL }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, @@ -9827,7 +9827,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), .eggCycles = 10, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, @@ -9857,7 +9857,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, @@ -9887,7 +9887,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, @@ -9917,7 +9917,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_PLUS, ABILITY_NONE}, @@ -9947,7 +9947,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_FAIRY }, .abilities = {ABILITY_MINUS, ABILITY_NONE}, @@ -9977,7 +9977,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FAIRY }, .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE}, @@ -10007,7 +10007,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, @@ -10037,7 +10037,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, @@ -10067,7 +10067,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, @@ -10097,7 +10097,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FLYING, EGG_GROUP_DRAGON }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, @@ -10127,7 +10127,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED }, .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, @@ -10217,7 +10217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_GRASS }, .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, @@ -10247,7 +10247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, @@ -10277,7 +10277,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, @@ -10307,7 +10307,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_TRUANT, ABILITY_NONE}, @@ -10337,7 +10337,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, @@ -10367,7 +10367,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BIG_PEARL, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, @@ -10397,7 +10397,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_GRASS }, .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, @@ -10427,7 +10427,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10457,7 +10457,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10487,7 +10487,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_CHESTO_BERRY, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_MONSTER, EGG_GROUP_FIELD }, .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, @@ -10517,7 +10517,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_BLUE_SHARD, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, @@ -10547,7 +10547,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -10577,7 +10577,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_1 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, @@ -10697,7 +10697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_DRAGON }, .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, @@ -10727,7 +10727,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_FIELD, EGG_GROUP_FIELD }, .abilities = {ABILITY_IMMUNITY, ABILITY_NONE}, @@ -10757,7 +10757,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_GREEN_SHARD, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 40, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_WATER_2 }, .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD}, @@ -10877,7 +10877,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_MYSTIC_WATER, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_FAIRY, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_FORECAST, ABILITY_NONE}, @@ -10907,7 +10907,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_MALE, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM}, @@ -10937,7 +10937,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = MON_FEMALE, .eggCycles = 15, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FLUCTUATING, .eggGroups = { EGG_GROUP_BUG, EGG_GROUP_HUMAN_LIKE }, .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, @@ -10967,7 +10967,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -10997,7 +10997,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, @@ -11027,7 +11027,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, @@ -11057,7 +11057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), .eggCycles = 30, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_ERRATIC, .eggGroups = { EGG_GROUP_WATER_3, EGG_GROUP_WATER_3 }, .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, @@ -11657,7 +11657,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 25, - .friendship = 70, + .friendship = STANDARD_FRIENDSHIP, .growthRate = GROWTH_FAST, .eggGroups = { EGG_GROUP_AMORPHOUS, EGG_GROUP_AMORPHOUS }, .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, From aefd3189456da25904b0e39a6ca2a5f63c1a3505 Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Tue, 14 Mar 2023 11:43:52 -0300 Subject: [PATCH 199/290] Applied review suggestions and expanded usage of activateAfterFaint in Cmd_setmoveeffect --- data/battle_scripts_1.s | 25 ++----------------------- include/battle_scripts.h | 2 +- src/battle_script_commands.c | 13 ++++++------- src/data/battle_moves.h | 4 ++-- 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 425834b7e3..4c61e5e69b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -433,31 +433,10 @@ BattleScript_EffectDireClaw:: goto BattleScript_EffectHit BattleScript_EffectHitSetEntryHazard:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - ppreduce - critcalc - damagecalc - adjustdamage - attackanimation - waitanimation - effectivenesssound - hitanimation BS_TARGET - waitstate - healthbarupdate BS_TARGET - datahpupdate BS_TARGET - critmessage - waitmessage B_WAIT_TIME_LONG - resultmessage - waitmessage B_WAIT_TIME_LONG - tryfaintmon BS_TARGET argumenttomoveeffect - seteffectprimary - moveendall - end + goto BattleScript_EffectHit -BattleScript_SpikesActivate:: +BattleScript_SpikesActivates:: trysetspikes BattleScript_MoveEnd printfromtable gDmgHazardsStringIds waitmessage B_WAIT_TIME_LONG diff --git a/include/battle_scripts.h b/include/battle_scripts.h index c4b15d9f1b..c6cbddcd35 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -457,7 +457,7 @@ extern const u8 BattleScript_LunarDanceActivates[]; extern const u8 BattleScript_ShellTrapSetUp[]; extern const u8 BattleScript_CouldntFullyProtect[]; extern const u8 BattleScript_StealthRockActivates[]; -extern const u8 BattleScript_SpikesActivate[]; +extern const u8 BattleScript_SpikesActivates[]; // zmoves extern const u8 BattleScript_ZMoveActivateDamaging[]; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0799cf2f34..15a72c7e8b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2896,6 +2896,9 @@ void SetMoveEffect(bool32 primary, u32 certain) return; case MOVE_EFFECT_STEALTH_ROCK: case MOVE_EFFECT_SPIKES: + case MOVE_EFFECT_PAYDAY: + case MOVE_EFFECT_STEAL_ITEM: + case MOVE_EFFECT_BUG_BITE: activateAfterFaint = TRUE; break; } @@ -2938,11 +2941,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) INCREMENT_RESET_RETURN - if (gBattleMons[gEffectBattler].hp == 0 - && !activateAfterFaint - && gBattleScripting.moveEffect != MOVE_EFFECT_PAYDAY - && gBattleScripting.moveEffect != MOVE_EFFECT_STEAL_ITEM - && gBattleScripting.moveEffect != MOVE_EFFECT_BUG_BITE) + if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) INCREMENT_RESET_RETURN if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) @@ -3761,7 +3760,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = sDireClawEffects[Random() % 3]; + gBattleScripting.moveEffect = sDireClawEffects[Random() % ARRAY_COUNT(sDireClawEffects)]; SetMoveEffect(TRUE, 0); } break; @@ -3778,7 +3777,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); - gBattlescriptCurrInstr = BattleScript_SpikesActivate; + gBattlescriptCurrInstr = BattleScript_SpikesActivates; } break; } diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 530dacd132..22eb7ca1a4 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13328,7 +13328,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_ROCK, .accuracy = 90, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, @@ -13605,7 +13605,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .type = TYPE_DARK, .accuracy = 90, .pp = 15, - .secondaryEffectChance = 0, + .secondaryEffectChance = 100, .target = MOVE_TARGET_SELECTED, .priority = 0, .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SHEER_FORCE_BOOST | FLAG_SLICING_MOVE, From 66c63ee4589a481777a9be4631d4ab3ed7100b25 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 14 Mar 2023 18:23:50 +0100 Subject: [PATCH 200/290] hisuian sprite fixes --- graphics/pokemon/avalugg/hisuian/back.png | Bin 654 -> 677 bytes graphics/pokemon/avalugg/hisuian/front.png | Bin 947 -> 947 bytes graphics/pokemon/avalugg/hisuian/shiny.pal | 6 ++--- graphics/pokemon/qwilfish/hisuian/back.png | Bin 606 -> 693 bytes graphics/pokemon/qwilfish/hisuian/front.png | Bin 571 -> 664 bytes graphics/pokemon/qwilfish/hisuian/normal.pal | 20 +++++++------- graphics/pokemon/qwilfish/hisuian/shiny.pal | 26 +++++++++---------- graphics/pokemon/samurott/hisuian/back.png | Bin 873 -> 867 bytes graphics/pokemon/samurott/hisuian/front.png | Bin 1140 -> 1140 bytes graphics/pokemon/samurott/hisuian/shiny.pal | 14 +++++----- 10 files changed, 33 insertions(+), 33 deletions(-) mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/back.png mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/front.png mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/normal.pal mode change 100644 => 100755 graphics/pokemon/qwilfish/hisuian/shiny.pal diff --git a/graphics/pokemon/avalugg/hisuian/back.png b/graphics/pokemon/avalugg/hisuian/back.png index 321daa41fd6fa9d0521f1b581800791dac5d0b47..6bf621584946214562c1c2c72dc6c7fd1993d532 100755 GIT binary patch delta 539 zcmV+$0_6RU1*HX$EC>z}6c|9v3O$iDZGV+18r4rV`GZf8L?H0ENB{r;@7h}<00001 zVoOIv|D^}=#Q*>S$w@>(RCt{2lD&@FKoo^{MP6VSvIWIT3>N)xM=sD7IOA2cP8F@D zAYBZ)MN+27izJHDtwa}7ao^W6aix~WeFojE8DRblpz9g|X^aNBXauB>fq_xg;OwD)?xP3S zygH(DcL#p!0$)=>*ERqxju-%_S6Kr^AaxCdw;j#lH;0Y5{ zpaD38PCv@v>Hr8u7zV6QR}ipgz0nVxLJ9ob2BbX>ZBM8D%PDHLkV1n9U@qPdR delta 515 zcmV+e0{s1@1&#%fEC>P+0yfK*XR47jZGUiZaJam<`GZfSWDxMUNB{r;$`A(100001 zVoOIv|D^}=#Q*>SvPnciRCt{2ld*2wFcd`-I6pws$>sp21@H7DIN5+zDkw5|C;|>1 zIz%?!mZ?L3q(zYLQAY_#tBm9jw6njVPcp4Ij+H5+?|P5!dzT_lPL4Y21C-3(_kVl* zeLzZ>`;89!+DM<*Dh~S$`mP;ddIiwWTLEdU0qI%+sWG-N-2!ixJk=P%6%Q-s`Qx77 zxxiZ*&~F1e95Dt^UtJ48J~aSn0`>rgm>OVg+5p8XfQ>Nif$Tju9bUJTh{!CkfAK+} z!!+W+eu2yN4)E)xKkY{Y&Tr)9x_^5J=#B_jadjitfBF0^aK;1;FaVrEZ#Z`_*#i=h zBrzM(5yb4%U|Ql5YT#)b;0GMKkx(ThV-b1U7bm;_%6kSN)mZs*EQEOh9z#R^n-d_r z$`_>=&V7csBs-hTLc=9v6k&|=uJ|+bKG#)1rk6EvL3t>|X9A|=`Em=;pl}K}t^8C( z3!|#L?sB^8E~`oeAOu`3z6YQnqVA~iZWaPiMArTQQ@xfNsE;zkI|_g>!P9_y@ diff --git a/graphics/pokemon/avalugg/hisuian/front.png b/graphics/pokemon/avalugg/hisuian/front.png index bab3f63c8a2793caae7861fd44cbb7a54bad6bb4..58201f335fc75d591ef262f1bab114b36c8b0d95 100755 GIT binary patch delta 19 acmdnYzL|Z34hNqgm&T?LR=X`vKoCV1M diff --git a/graphics/pokemon/avalugg/hisuian/shiny.pal b/graphics/pokemon/avalugg/hisuian/shiny.pal index 9fd2d0e180..b349226831 100755 --- a/graphics/pokemon/avalugg/hisuian/shiny.pal +++ b/graphics/pokemon/avalugg/hisuian/shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 80 60 48 72 44 32 144 120 96 -112 112 112 -184 188 184 +149 41 26 +213 79 53 249 131 79 -164 100 16 +144 68 32 240 184 72 0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/back.png b/graphics/pokemon/qwilfish/hisuian/back.png old mode 100644 new mode 100755 index 48a01e06f23fa0eb379da21b5aa51d1e2357a45e..7504a692af0edd5661ae94fc0aba8c4b43646e3e GIT binary patch delta 669 zcmV;O0%HB%1hoZ_B!35VNliru=K~H80~}PE#K-^u02g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_SVX{pT<{PO5P*P?C@e6jsJK`}z?g_oxU`VS$bZnNtf=_>_*hUV00000 z000mc^2`7L00Cl4M@0Xn2lB-L00G%aL_t(|ob8jnZo)7Wg;Sx74DBNzu}5-1X(gsy zBE*DL3>9lB10x+Wbt08+hfFLmbb>PYX^`ju1MgDX3BfT=r0$#n0{8Q|e~x9{^dH%j zmd8hol@g;Z0DtS17_cz_{FDG2K#YQ7i_y4)h)@DR2LYmXAZcEQyaBLGo_1U4>!t1pJ<5E8(6(*~d0HK=+;_eLr6(;U*o`!oM0Pp?%dsGmxE7p{&Y$*nS4TA%~G6 z>M(6OeD_~4Rhmkzp;8Nd4>NuCf$CijF9w3(_2dDId?<1JgOXZB!4haOjJdf(4Z(VfOv4w5D*YxSh&#O@Q8?*P*7l~xX`Geh`6|@ zxWK?*U{Lt@_{hMx0000*d?Yyl00HSqL_t(YiS5%rZ__{&0B~0~uw+Q8B4(<5fS?B# zMPe!yof$6ajOnwzb)YdF8G6t;Qj&+fF%j`0DlsL>hw9zMc7OfOf0&VYi~qcz-+Onq zgW!KWMVelB=arguiDydV)vN>DT;g|q)luRG6C(Ysy~8CE(K>1e)7SvQ)*eD9v_#bH zz>E;nx}$;tX397$ZXER+08&zd<2ul~0*+4myoSISFCa+G0FW8c#-AM~BgiWgtXT#?+-XpPK9ln3#fc$ta)indQ z15p^c{8S=JobeuLUxx-efu2SfnxV&o!JsT*gehWP$eq%0j9{Tkf5@c*O<2aDR@T!Q@p_*>m8K$aiD z1G}FE*jSQnJn}9N(H8gNyoA2{v(+qm>); diff --git a/graphics/pokemon/qwilfish/hisuian/front.png b/graphics/pokemon/qwilfish/hisuian/front.png old mode 100644 new mode 100755 index a32988cf7d8f3966b9e70ec7d74474650d0a5321..0de50b78609064ee4c8645dfb3a5af315870741e GIT binary patch delta 639 zcmV-_0)YLy1egVoB!35VNliru=K~H7I~Uaz%Zva302g#cSaefwW^{L9a%BKVOhiyl zM<8}(av(DOV1ZP1_K>z@;j|==^1poj5 zFi=cXMVQc_cpzZ#M9>fr5I8tMC@e5gRA9I?n3#xAxU`UPbbo-Ttf=_>_*hUV00000 z008U-vU30c00Cl4M@0Xn2lB-L00F#7L_t(|obA#vOT$1E2k;9qW56id*@(J01doai zg3wFUO)wWhUDWhdyJ^u5x~Xs(T%?qo;Ap{&egwtMK@h|aei!f3I$XWdFVO#x<^8z# z?&S~~W|%%P27iGuPbyDWa^z>kou*xdDBV=Rf)G|%IRk3A5?BDf3g)O4fk<3%J!2e2 zNeaplW*zc6lq)r(P_vFXZ>}l;%6T0EsD*VeJR(VYsPtHjs#z;1hyI!uHJ;XcKoPPm zlQTf*m#m<1PgG#hY6k!b$(FT|lIvzk0T~s5ia}#SHh;r}^TxHhu$`8uXC2_LGtN_@ zf~Zw(RUh*n#Ak#tqI5u(yk!^on1+Oulmm>33%RFYTY{kCm>8=K#%AWD0D|)Kxc~sC z4(f?{HvbmHu=_qMLB(}PdqwfGD8OD0!nGRitt0#3P5h`=0b+8qrFk-TbJm$GzrUPA z%-HS!I(S0ueRm4nIe?Tgrh9blJE!mkz_~bpU1@;*P(NvNF2Tyrrw$|-%ev_Bp&J3& zyc4E9U(S%SB(G~Hlz?IU%~+D^`pXWfSe}Vj60V;B+1=$X^#gw~2LZG^2$+2?G0ZS| ZegQ3zsg*c=Uf=)#002ovPDHLkV1goZ5=sC7 delta 546 zcmV+-0^R+X1-k^0B!4haOjJdf(4crAVDLcD5D*Z!FqnXVfIvVBL__(l;0002iCy*Wh00G8HL_t(YiS3iIOXFY|#y<&M7KcVevNl&ZMX2&E z`~mh^LU?{W-}k;xBE(EHMQbjV1bj^b(n&yOB>{lF>44gjwmHTBQfs@-B|G*QHH+9@ z(B&JUI)`CbO9{Koz2*vp3K?AnXM(4yx zkMCRW?1Uq}V}FAI@QPSNUWZ!RF41uqP$~_m05pmykqx)>`yC+GTmUFT8QU^920*?8 zvdBQKwT39=p>TaEJNCp8O}7PnN%sX%k@}^HDTK2A2ia$NtD5HgBIepWPM~^=5uNC7nhA_r1c8@eplEU5bd9KO33Wi2XWI5ZrtO z2HpQJx*+OB*g^!sV8s5Ai25;KrDFO0KKqs*L<3BaKcuc{^c%z&GZTM3_`D}2Pv@(%>V!Z07*qoM6N<$f-30%W&i*H diff --git a/graphics/pokemon/qwilfish/hisuian/normal.pal b/graphics/pokemon/qwilfish/hisuian/normal.pal old mode 100644 new mode 100755 index b1a2bcd32b..91f73ab4d4 --- a/graphics/pokemon/qwilfish/hisuian/normal.pal +++ b/graphics/pokemon/qwilfish/hisuian/normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 120 32 96 -240 64 208 +240 68 208 16 16 16 -184 48 152 -128 128 128 -64 64 72 -40 40 48 -88 88 96 +56 56 64 +40 44 48 +80 84 96 +184 52 152 152 136 80 -176 160 120 -184 192 192 +184 180 144 +112 116 128 +168 172 168 +248 252 248 88 80 40 -248 248 248 -184 176 144 +0 0 0 0 0 0 diff --git a/graphics/pokemon/qwilfish/hisuian/shiny.pal b/graphics/pokemon/qwilfish/hisuian/shiny.pal old mode 100644 new mode 100755 index 79d490248c..06729e52ae --- a/graphics/pokemon/qwilfish/hisuian/shiny.pal +++ b/graphics/pokemon/qwilfish/hisuian/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -40 48 128 -120 112 208 +88 68 192 +128 92 240 16 16 16 -96 88 184 -208 224 240 -136 136 152 -80 80 96 -168 184 208 -168 160 136 -184 184 168 -184 192 192 -96 96 80 -248 248 248 -200 192 184 +128 128 144 +40 44 48 +168 168 184 +88 68 192 +152 136 80 +184 180 144 +200 200 208 +168 172 168 +248 252 248 +88 80 40 +0 0 0 0 0 0 diff --git a/graphics/pokemon/samurott/hisuian/back.png b/graphics/pokemon/samurott/hisuian/back.png index 337925fd25c3b7dc4c649f2bac01070c232faf9c..36ed737d3e1c07b6e7b35e13ee8706df90da7855 100755 GIT binary patch delta 754 zcmVz|96DULtLBk3Re#8=m`F%S`26^&bYKt=5a8V4Sa5J4SeVdI zU>FoIz{JQLIAExpr~m)}*JKDA00001VoOIv|D^}=#Q*>The%~*ReEe*HJ_{JP0cYLNZ4l?A9wJ~* z0NWM-VgqoN)?+}JJ7jHu0$@^JV!BYWM*(NG2Hk%EkTC$~=i%CxD@Xb*2LvV_q41lq zOBwhXdkBC^$Xi%@6-eFI3qbEB5PzY+Y3m3Ok7_8Xwb1PZa9IGL;Z~apwdO6|f%a6& zRZe6=x5p5edxH{lb($sQBN6~Ms9u>9G~%zz2qNmzHrb}W_<+DV-*?VlylxuDzSdw kKz&UOU_4wES^q1qKRj^=DL=97mjD0&07*qoM6N<$f`MvN7XSbN delta 760 zcmVP#IUdnwxR;SMRe#Q{n@C7V`26^(bzu+?5aQnASa5J5TAX=k zc^DKhz{JQQI%BGzssI20t9@H600001VoOIv0Eh)0NB{r=jY&j7RCt{2k}+%BKorLX zrWyn-m_jE_2e*a>g-qUTGI=n9xX{7Kc5|VjxuH-Wc+kfvWGJ{$BGBNW&@6#Kkbls0 zbD)Ek6wBbkeTKews$@wfl#;FVA;d}l-@X64ch4~X$$0W7U@~|#KpzDRnt-*a=_ZI1 zQY|9z{t^JO23RxWAt1~X>;M!1UF9iM_be3NgMc+(7)#;r0Av8b@o~5?#oQ8pX6yh% zmr!_y-lhO?V`BdrgR0R6=r-tKE=T-AZ#Js~69yB15eA{6rTs)r@; zgn7)>J#|4et3cqp+Clp--Mv+_O@SgMptw8QEE;F@SA^^pKt@I(jzsI_7Jq=c@)~m> zQv!(2)`!=Cm8UMF|MlF%Sh{u4jx1bzL|R-igK%h$4jvR|I2JCZODolBtZg6TxxL$`Z+FYIkMA zrbY$O@h#Ws<}(0t+eY-z@qd+~PDa_j>~-QQU@+8wP6!57S-T0eju;+vmFwyffNtEa z00#*jGKL4xcRp>)xZkM&t==t`8HT?HW^6+fsvfOA0-H;Amfto2vKPs1iUWE30)+GQ zPLF&zmH_k*y=?+10m#xc)eZ3wi2J2Os{`L{UILj0WUl}m)X}2=&SgCZe%NuOcRTnY zBk Date: Tue, 14 Mar 2023 15:38:18 -0300 Subject: [PATCH 201/290] Changed definitions of string conversion IDE macros to allow their use in compound literals without IDE errors --- include/global.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/global.h b/include/global.h index e0ff9f0c23..9d73afabb0 100644 --- a/include/global.h +++ b/include/global.h @@ -27,8 +27,8 @@ /// IDE support #if defined(__APPLE__) || defined(__CYGWIN__) || defined(__INTELLISENSE__) // We define these when using certain IDEs to fool preproc -#define _(x) (x) -#define __(x) (x) +#define _(x) {x} +#define __(x) {x} #define INCBIN(...) {0} #define INCBIN_U8 INCBIN #define INCBIN_U16 INCBIN From 509ff4c7e0d31fb18f76dc7af3c9702095eb20fe Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 3 Feb 2023 11:21:08 +0000 Subject: [PATCH 202/290] Generic TEST that executes a function --- test/test.h | 23 +++++++++++++++++++++++ test/test_battle.h | 2 ++ test/test_runner.c | 41 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/test/test.h b/test/test.h index 27475bb48e..764443302f 100644 --- a/test/test.h +++ b/test/test.h @@ -53,6 +53,16 @@ extern const u8 gTestRunnerI; extern const char gTestRunnerArgv[256]; extern const struct TestRunner gAssumptionsRunner; + +struct FunctionTestRunnerState +{ + u8 parameters; + u8 runParameter; +}; + +extern const struct TestRunner gFunctionTestRunner; +extern struct FunctionTestRunnerState *gFunctionTestRunnerState; + extern struct TestRunnerState gTestRunnerState; void CB2_TestRunner(void); @@ -62,6 +72,17 @@ void Test_ExitWithResult(enum TestResult, const char *fmt, ...); s32 MgbaPrintf_(const char *fmt, ...); +#define TEST(_name) \ + static void CAT(Test, __LINE__)(void); \ + __attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \ + { \ + .name = _name, \ + .filename = __FILE__, \ + .runner = &gFunctionTestRunner, \ + .data = (void *)CAT(Test, __LINE__), \ + }; \ + static void CAT(Test, __LINE__)(void) + #define ASSUMPTIONS \ static void Assumptions(void); \ __attribute__((section(".tests"))) static const struct Test sAssumptions = \ @@ -138,4 +159,6 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter) + #endif diff --git a/test/test_battle.h b/test/test_battle.h index 16918251b1..a447102f32 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -639,6 +639,8 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Parametrize */ +#undef PARAMETRIZE // Override test/test.h's implementation. + #define PARAMETRIZE if (gBattleTestRunnerState->parametersCount++ == i) /* Randomly */ diff --git a/test/test_runner.c b/test/test_runner.c index f2d4d5de3f..e3d286c55a 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -4,6 +4,7 @@ #include "gpu_regs.h" #include "main.h" #include "malloc.h" +#include "random.h" #include "test.h" #include "test_runner.h" @@ -12,6 +13,7 @@ void CB2_TestRunner(void); EWRAM_DATA struct TestRunnerState gTestRunnerState; +EWRAM_DATA struct FunctionTestRunnerState *gFunctionTestRunnerState; void TestRunner_Battle(const struct Test *); @@ -230,6 +232,38 @@ void Test_ExpectedResult(enum TestResult result) gTestRunnerState.expectedResult = result; } +static void FunctionTest_SetUp(void *data) +{ + (void)data; + gFunctionTestRunnerState = AllocZeroed(sizeof(*gFunctionTestRunnerState)); + SeedRng(0); +} + +static void FunctionTest_Run(void *data) +{ + void (*function)(void) = data; + do + { + if (gFunctionTestRunnerState->parameters) + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters); + gFunctionTestRunnerState->parameters = 0; + function(); + } while (++gFunctionTestRunnerState->runParameter < gFunctionTestRunnerState->parameters); +} + +static void FunctionTest_TearDown(void *data) +{ + (void)data; + FREE_AND_SET_NULL(gFunctionTestRunnerState); +} + +const struct TestRunner gFunctionTestRunner = +{ + .setUp = FunctionTest_SetUp, + .run = FunctionTest_Run, + .tearDown = FunctionTest_TearDown, +}; + static void Assumptions_Run(void *data) { void (*function)(void) = data; @@ -288,11 +322,12 @@ static void Intr_Timer2(void) void Test_ExitWithResult(enum TestResult result, const char *fmt, ...) { + bool32 handled = FALSE; gTestRunnerState.result = result; ReinitCallbacks(); - if (gTestRunnerState.test->runner->handleExitWithResult - && !gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result) - && gTestRunnerState.result != gTestRunnerState.expectedResult) + if (gTestRunnerState.test->runner->handleExitWithResult) + handled = gTestRunnerState.test->runner->handleExitWithResult(gTestRunnerState.test->data, result); + if (!handled && gTestRunnerState.result != gTestRunnerState.expectedResult) { va_list va; va_start(va, fmt); From 89deda04164c90197f309bc2b2a4bf54a5b34270 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 20 Feb 2023 20:06:01 +0000 Subject: [PATCH 203/290] Allow tests to override specific RNG calls --- include/random.h | 63 +++++++ src/battle_script_commands.c | 53 +++--- src/battle_util.c | 24 +-- src/random.c | 24 +++ test/ability_compound_eyes.c | 4 +- test/ability_cute_charm.c | 3 - test/ability_sand_veil.c | 2 +- test/ability_stench.c | 5 +- test/hold_effect_red_card.c | 4 +- test/move.c | 26 ++- test/move_effect_accuracy_down.c | 2 +- test/move_effect_evasion_up.c | 2 +- test/move_effect_hit_switch_target.c | 5 +- test/move_effect_rampage.c | 6 +- test/move_effect_roar.c | 4 +- test/move_effect_sleep.c | 21 ++- test/random.c | 81 +++++++++ test/status1.c | 7 +- test/test_battle.h | 68 ++++++-- test/test_runner_battle.c | 243 ++++++++++++++++----------- 20 files changed, 472 insertions(+), 175 deletions(-) create mode 100644 test/random.c diff --git a/include/random.h b/include/random.h index 6bf61de6c6..60c718348c 100644 --- a/include/random.h +++ b/include/random.h @@ -20,4 +20,67 @@ u16 Random2(void); void SeedRng(u16 seed); void SeedRng2(u16 seed); +/* Structured random number generator. + * Instead of the caller converting bits from Random() to a meaningful + * value, the caller provides metadata that is used to return the + * meaningful value directly. This allows code to interpret the random + * call, for example, battle tests know what the domain of a random call + * is, and can exhaustively test it. + * + * RandomTag identifies the purpose of the value. + * + * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive. + * + * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100, + * and TRUE with probability t/100. + * + * RandomWeighted(tag, w0, w1, ... wN) returns a number from 0 to N + * inclusive. The return value is proportional to the weights, e.g. + * RandomWeighted(..., 1, 1) returns 50% 0s and 50% 1s. + * RandomWeighted(..., 2, 1) returns 2/3 0s and 1/3 1s. */ + +enum RandomTag +{ + RNG_NONE, + RNG_ACCURACY, + RNG_CONFUSION, + RNG_CRITICAL_HIT, + RNG_CUTE_CHARM, + RNG_DAMAGE_MODIFIER, + RNG_FLAME_BODY, + RNG_FORCE_RANDOM_SWITCH, + RNG_FROZEN, + RNG_HOLD_EFFECT_FLINCH, + RNG_INFATUATION, + RNG_PARALYSIS, + RNG_POISON_POINT, + RNG_RAMPAGE_TURNS, + RNG_SECONDARY_EFFECT, + RNG_SLEEP_TURNS, + RNG_SPEED_TIE, + RNG_STATIC, + RNG_STENCH, +}; + +#define RandomWeighted(tag, ...) \ + ({ \ + const u8 weights[] = { __VA_ARGS__ }; \ + u32 sum, i; \ + for (i = 0, sum = 0; i < ARRAY_COUNT(weights); i++) \ + sum += weights[i]; \ + RandomWeightedArray(tag, sum, ARRAY_COUNT(weights), weights); \ + }) + +#define RandomPercentage(tag, t) \ + ({ \ + const u8 weights[] = { 100 - t, t }; \ + RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ + }) + +u32 RandomUniform(enum RandomTag, u32 lo, u32 hi); +u32 RandomWeightedArray(enum RandomTag, u32 sum, u32 n, const u8 *weights); + +u32 RandomUniformDefault(enum RandomTag, u32 lo, u32 hi); +u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights); + #endif // GUARD_RANDOM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd1..e0ef561842 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1917,15 +1917,25 @@ static void Cmd_accuracycheck(void) } else { + u32 accuracy; + GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) return; - // final calculation - if ((Random() % 100 + 1) > GetTotalAccuracy(gBattlerAttacker, gBattlerTarget, move, GetBattlerAbility(gBattlerAttacker), GetBattlerAbility(gBattlerTarget), - GetBattlerHoldEffect(gBattlerAttacker, TRUE), GetBattlerHoldEffect(gBattlerTarget, TRUE))) + accuracy = GetTotalAccuracy( + gBattlerAttacker, + gBattlerTarget, + move, + GetBattlerAbility(gBattlerAttacker), + GetBattlerAbility(gBattlerTarget), + GetBattlerHoldEffect(gBattlerAttacker, TRUE), + GetBattlerHoldEffect(gBattlerTarget, TRUE) + ); + + if (!RandomPercentage(RNG_ACCURACY, accuracy)) { gMoveResultFlags |= MOVE_RESULT_MISSED; if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_BLUNDER_POLICY) @@ -2104,10 +2114,8 @@ static void Cmd_critcalc(void) gIsCriticalHit = FALSE; else if (critChance == -2) gIsCriticalHit = TRUE; - else if (Random() % sCriticalHitChance[critChance] == 0) - gIsCriticalHit = TRUE; else - gIsCriticalHit = FALSE; + gIsCriticalHit = RandomWeighted(RNG_CRITICAL_HIT, sCriticalHitChance[critChance] - 1, 1); // Counter for EVO_CRITICAL_HITS. partySlot = gBattlerPartyIndexes[gBattlerAttacker]; @@ -3153,9 +3161,9 @@ void SetMoveEffect(bool32 primary, u32 certain) if (sStatusFlagsForMoveEffects[gBattleScripting.moveEffect] == STATUS1_SLEEP) #if B_SLEEP_TURNS >= GEN_5 - gBattleMons[gEffectBattler].status1 |= ((Random() % 3) + 2); + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); #else - gBattleMons[gEffectBattler].status1 |= ((Random() % 4) + 3); + gBattleMons[gEffectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); #endif else gBattleMons[gEffectBattler].status1 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect]; @@ -3558,7 +3566,7 @@ void SetMoveEffect(bool32 primary, u32 certain) { gBattleMons[gEffectBattler].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBattler] = gCurrentMove; - gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN((Random() & 1) + 2); // thrash for 2-3 turns + gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN(RandomUniform(RNG_RAMPAGE_TURNS, 2, 3)); } break; case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat @@ -3779,20 +3787,23 @@ static void Cmd_seteffectwithchance(void) else percentChance = gBattleMoves[gCurrentMove].secondaryEffectChance; - if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) + if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) + && gBattleScripting.moveEffect) { - gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; - SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); - } - else if (Random() % 100 < percentChance - && gBattleScripting.moveEffect - && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) - { - if (percentChance >= 100) + if (gBattleScripting.moveEffect & MOVE_EFFECT_CERTAIN + || percentChance >= 100) + { + gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN; SetMoveEffect(FALSE, MOVE_EFFECT_CERTAIN); - else + } + else if (RandomPercentage(RNG_SECONDARY_EFFECT, percentChance)) + { SetMoveEffect(FALSE, 0); + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } } else { @@ -12343,7 +12354,7 @@ static void Cmd_forcerandomswitch(void) *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; - *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[Random() % validMonsCount]; + *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; if (!IsMultiBattle()) SwitchPartyOrder(gBattlerTarget); diff --git a/src/battle_util.c b/src/battle_util.c index 4b50bc7045..e5b037acf6 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -3479,7 +3479,7 @@ u8 AtkCanceller_UnableToUseMove(void) case CANCELLER_FROZEN: // check being frozen if (gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE && !(gBattleMoves[gCurrentMove].flags & FLAG_THAW_USER)) { - if (Random() % 5) + if (!RandomPercentage(RNG_FROZEN, 20)) { gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; gHitMarker |= HITMARKER_NO_ATTACKSTRING; @@ -3597,9 +3597,9 @@ u8 AtkCanceller_UnableToUseMove(void) { // confusion dmg #if B_CONFUSION_SELF_DMG_CHANCE >= GEN_7 - if (Random() % 3 == 0) + if (RandomWeighted(RNG_CONFUSION, 2, 1)) #else - if (Random() % 2 == 0) + if (RandomWeighted(RNG_CONFUSION, 1, 1)) #endif { gBattleCommunication[MULTISTRING_CHOOSER] = TRUE; @@ -3625,7 +3625,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_PARALYSED: // paralysis - if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && (Random() % 4) == 0) + if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_PARALYSIS) && !RandomPercentage(RNG_PARALYSIS, 75)) { gProtectStructs[gBattlerAttacker].prlzImmobility = TRUE; // This is removed in FRLG and Emerald for some reason @@ -3640,7 +3640,7 @@ u8 AtkCanceller_UnableToUseMove(void) if (gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) { gBattleScripting.battler = CountTrailingZeroBits((gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION) >> 0x10); - if (Random() & 1) + if (!RandomPercentage(RNG_INFATUATION, 50)) { BattleScriptPushCursor(); } @@ -5645,7 +5645,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && TARGET_TURN_DAMAGED && CanBePoisoned(gBattlerTarget, gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_POISON_POINT, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON; PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility); @@ -5663,7 +5663,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && TARGET_TURN_DAMAGED && CanBeParalyzed(gBattlerAttacker) && IsMoveMakingContact(move, gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_STATIC, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS; BattleScriptPushCursor(); @@ -5679,7 +5679,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && CanBeBurned(gBattlerAttacker) - && (Random() % 3) == 0) + && RandomWeighted(RNG_FLAME_BODY, 2, 1)) { gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN; BattleScriptPushCursor(); @@ -5695,7 +5695,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move && (IsMoveMakingContact(move, gBattlerAttacker)) && TARGET_TURN_DAMAGED && gBattleMons[gBattlerTarget].hp != 0 - && (Random() % 3) == 0 + && RandomWeighted(RNG_CUTE_CHARM, 2, 1) && GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS && !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL) && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) @@ -5915,7 +5915,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMons[gBattlerTarget].hp != 0 && !gProtectStructs[gBattlerAttacker].confusionSelfDmg - && (Random() % 10) == 0 + && RandomWeighted(RNG_STENCH, 9, 1) && !IS_MOVE_STATUS(move) && !sMovesNotAffectedByStench[gCurrentMove]) { @@ -7635,7 +7635,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn) if (gBattleMoveDamage != 0 // Need to have done damage && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && TARGET_TURN_DAMAGED - && (Random() % 100) < atkHoldEffectParam + && RandomPercentage(RNG_HOLD_EFFECT_FLINCH, atkHoldEffectParam) && gBattleMoves[gCurrentMove].flags & FLAG_KINGS_ROCK_AFFECTED && gBattleMons[gBattlerTarget].hp) { @@ -9752,7 +9752,7 @@ static s32 DoMoveDamageCalc(u16 move, u8 battlerAtk, u8 battlerDef, u8 moveType, // Add a random factor. if (randomFactor) { - dmg *= 100 - (Random() % 16); + dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15); dmg /= 100; } diff --git a/src/random.c b/src/random.c index de923fba63..e59b563876 100644 --- a/src/random.c +++ b/src/random.c @@ -31,3 +31,27 @@ u16 Random2(void) gRng2Value = ISO_RANDOMIZE1(gRng2Value); return gRng2Value >> 16; } + +__attribute__((weak, alias("RandomUniformDefault"))) +u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi); + +__attribute__((weak, alias("RandomWeightedArrayDefault"))) +u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights); + +u32 RandomUniformDefault(enum RandomTag tag, u32 lo, u32 hi) +{ + return lo + (((hi - lo) * Random()) >> 16); +} + +u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) +{ + s32 i, targetSum; + targetSum = (sum * Random()) >> 16; + for (i = 0; i < n - 1; i++) + { + targetSum -= weights[i]; + if (targetSum < 0) + return i; + } + return n - 1; +} diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index 97ab84dd27..bbe718176a 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") { - PASSES_RANDOMLY(91, 100); + PASSES_RANDOMLY(91, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_THUNDER].accuracy == 70); PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { KNOWN_FAILING; - PASSES_RANDOMLY(30, 100); + PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); diff --git a/test/ability_cute_charm.c b/test/ability_cute_charm.c index 5e089efdf2..ccf5c490b3 100644 --- a/test/ability_cute_charm.c +++ b/test/ability_cute_charm.c @@ -1,9 +1,6 @@ #include "global.h" #include "test_battle.h" -// TODO: Currently PASSES_RANDOMLY is incapable of testing Cute Charm -// because it only activates 33% of the time, but we only want to -// measure the 50% of the time that the infatuation prevents our move. SINGLE_BATTLE_TEST("Cute Charm inflicts infatuation on contact") { u32 move; diff --git a/test/ability_sand_veil.c b/test/ability_sand_veil.c index 5d2325140d..5514f27c0e 100644 --- a/test/ability_sand_veil.c +++ b/test/ability_sand_veil.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Sand Veil prevents damage from sandstorm") SINGLE_BATTLE_TEST("Sand Veil reduces accuracy during sandstorm") { - PASSES_RANDOMLY(4,5); + PASSES_RANDOMLY(4, 5, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_POUND].accuracy == 100); PLAYER(SPECIES_SANDSHREW) { Ability(ABILITY_SAND_VEIL); }; diff --git a/test/ability_stench.c b/test/ability_stench.c index 18d9097680..fb76ebc07e 100644 --- a/test/ability_stench.c +++ b/test/ability_stench.c @@ -3,7 +3,7 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") { - PASSES_RANDOMLY(1,10); + PASSES_RANDOMLY(1, 10, RNG_STENCH); GIVEN { ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); PLAYER(SPECIES_GRIMER) { Ability(ABILITY_STENCH); }; @@ -17,7 +17,8 @@ SINGLE_BATTLE_TEST("Stench has a 10% chance to flinch") SINGLE_BATTLE_TEST("Stench does not stack with King's Rock") { - PASSES_RANDOMLY(1,10); + KNOWN_FAILING; + PASSES_RANDOMLY(1, 10, RNG_STENCH); GIVEN { ASSUME(gItems[ITEM_KINGS_ROCK].holdEffect == HOLD_EFFECT_FLINCH); ASSUME(gBattleMoves[MOVE_TACKLE].power > 0); diff --git a/test/hold_effect_red_card.c b/test/hold_effect_red_card.c index 882007cfd4..0a8bb3460c 100644 --- a/test/hold_effect_red_card.c +++ b/test/hold_effect_red_card.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } OPPONENT(SPECIES_WOBBUFFET); @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Red Card switches the attacker with a random non-fainted rep DOUBLE_BATTLE_TEST("Red Card switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } PLAYER(SPECIES_WYNAUT); diff --git a/test/move.c b/test/move.c index d7e759f27a..9ad336330f 100644 --- a/test/move.c +++ b/test/move.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Accuracy controls the proportion of misses") PARAMETRIZE { move = MOVE_RAZOR_LEAF; } PARAMETRIZE { move = MOVE_SCRATCH; } ASSUME(0 < gBattleMoves[move].accuracy && gBattleMoves[move].accuracy <= 100); - PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); + PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -27,10 +27,9 @@ SINGLE_BATTLE_TEST("Secondary Effect Chance controls the proportion of secondary PARAMETRIZE { move = MOVE_THUNDER_SHOCK; } PARAMETRIZE { move = MOVE_DISCHARGE; } PARAMETRIZE { move = MOVE_NUZZLE; } - ASSUME(gBattleMoves[move].accuracy == 100); ASSUME(gBattleMoves[move].effect == EFFECT_PARALYZE_HIT); ASSUME(0 < gBattleMoves[move].secondaryEffectChance && gBattleMoves[move].secondaryEffectChance <= 100); - PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100); + PASSES_RANDOMLY(gBattleMoves[move].secondaryEffectChance, 100, RNG_SECONDARY_EFFECT); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -70,6 +69,7 @@ SINGLE_BATTLE_TEST("Turn order is determined by speed if priority ties") SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie") { + KNOWN_FAILING; // The algorithm is significantly biased. PASSES_RANDOMLY(1, 2); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(1); } @@ -85,15 +85,29 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and speed tie" SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") { ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(100 / 24, 100); + PASSES_RANDOMLY(1, 24, RNG_CRITICAL_HIT); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { - MESSAGE("It's a critical hit!"); + MESSAGE("A critical hit!"); + } +} + +SINGLE_BATTLE_TEST("Slash's critical hits occur at a 1/8 rate") +{ + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gBattleMoves[MOVE_SLASH].flags & FLAG_HIGH_CRIT); + PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLASH); } + } SCENE { + MESSAGE("A critical hit!"); } } diff --git a/test/move_effect_accuracy_down.c b/test/move_effect_accuracy_down.c index 2a90d8ea25..a6a79d8db6 100644 --- a/test/move_effect_accuracy_down.c +++ b/test/move_effect_accuracy_down.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy") { ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/move_effect_evasion_up.c b/test/move_effect_evasion_up.c index d14d153344..4a4e99db72 100644 --- a/test/move_effect_evasion_up.c +++ b/test/move_effect_evasion_up.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Double Team raises Evasion") { ASSUME(gBattleMoves[MOVE_SCRATCH].accuracy == 100); - PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100); + PASSES_RANDOMLY(gBattleMoves[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/move_effect_hit_switch_target.c b/test/move_effect_hit_switch_target.c index 9c50a4e4c0..5af3062a4f 100644 --- a/test/move_effect_hit_switch_target.c +++ b/test/move_effect_hit_switch_target.c @@ -9,8 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted replacement") { - KNOWN_FAILING; // Only 18/50. Waiting for an improved PASSES_RANDOMLY. - PASSES_RANDOMLY(90 * 1, 100 * 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -27,7 +26,7 @@ SINGLE_BATTLE_TEST("Dragon Tail switches the target with a random non-fainted re DOUBLE_BATTLE_TEST("Dragon Tail switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(90 * 1, 100 * 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); diff --git a/test/move_effect_rampage.c b/test/move_effect_rampage.c index a3afebf6ba..aa4a002fb1 100644 --- a/test/move_effect_rampage.c +++ b/test/move_effect_rampage.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_RAMPAGE_TURNS); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -26,7 +26,6 @@ SINGLE_BATTLE_TEST("Thrash lasts for 2 or 3 turns") SINGLE_BATTLE_TEST("Thrash confuses the user after it finishes") { GIVEN { - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -45,7 +44,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 1 { GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -61,7 +59,6 @@ SINGLE_BATTLE_TEST("Thrash does not confuse the user if it is canceled on turn 2 { GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -78,7 +75,6 @@ SINGLE_BATTLE_TEST("Thrash confuses the user if it is canceled on turn 3 of 3") KNOWN_FAILING; GIVEN { ASSUME(B_RAMPAGE_CANCELLING >= GEN_5); - RNGSeed(0x00000000); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/move_effect_roar.c b/test/move_effect_roar.c index 2d4eadda85..99256b2986 100644 --- a/test/move_effect_roar.c +++ b/test/move_effect_roar.c @@ -8,7 +8,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Roar switches the target with a random non-fainted replaceme DOUBLE_BATTLE_TEST("Roar switches the target with a random non-battler, non-fainted replacement") { - PASSES_RANDOMLY(1, 2); + PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); diff --git a/test/move_effect_sleep.c b/test/move_effect_sleep.c index c80faf4bdf..c34e1248ee 100644 --- a/test/move_effect_sleep.c +++ b/test/move_effect_sleep.c @@ -6,16 +6,33 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_HYPNOSIS].effect == EFFECT_SLEEP); } -SINGLE_BATTLE_TEST("Hypnosis inflicts sleep") +SINGLE_BATTLE_TEST("Hypnosis inflicts 1-3 turns of sleep") { + u32 turns, count; + ASSUME(B_SLEEP_TURNS >= GEN_5); + PARAMETRIZE { turns = 1; } + PARAMETRIZE { turns = 2; } + PARAMETRIZE { turns = 3; } + PASSES_RANDOMLY(1, 3, RNG_SLEEP_TURNS); GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_HYPNOSIS); } + TURN { MOVE(player, MOVE_HYPNOSIS); MOVE(opponent, MOVE_CELEBRATE); } + for (count = 0; count < turns; ++count) + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HYPNOSIS, player); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + MESSAGE("Foe Wobbuffet fell asleep!"); STATUS_ICON(opponent, sleep: TRUE); + for (count = 0; count < turns; ++count) + { + if (count < turns - 1) + MESSAGE("Foe Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, opponent); + } + MESSAGE("Foe Wobbuffet woke up!"); + STATUS_ICON(opponent, none: TRUE); } } diff --git a/test/random.c b/test/random.c new file mode 100644 index 0000000000..abaf4a4f82 --- /dev/null +++ b/test/random.c @@ -0,0 +1,81 @@ +#include "global.h" +#include "test.h" +#include "random.h" + +TEST("RandomUniform generates lo..hi") +{ + u32 lo, hi, i; + PARAMETRIZE { lo = 0; hi = 1; } + PARAMETRIZE { lo = 0; hi = 2; } + PARAMETRIZE { lo = 0; hi = 3; } + PARAMETRIZE { lo = 2; hi = 4; } + for (i = 0; i < 1024; i++) + { + u32 r = RandomUniformDefault(RNG_NONE, lo, hi); + EXPECT(lo <= r && r <= hi); + } +} + +TEST("RandomWeighted generates 0..n-1") +{ + u32 n, sum, i; + static const u8 ws[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + PARAMETRIZE { n = 1; } + PARAMETRIZE { n = 2; } + PARAMETRIZE { n = 3; } + PARAMETRIZE { n = 4; } + ASSUME(n <= ARRAY_COUNT(ws)); + for (i = 0, sum = 0; i < n; i++) + sum += ws[i]; + for (i = 0; i < 1024; i++) + { + u32 r = RandomWeightedArrayDefault(RNG_NONE, sum, n, ws); + EXPECT(0 <= r && r < n); + } +} + +TEST("RandomUniform generates uniform distribution") +{ + u32 i, error; + u16 distribution[4]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution)); + EXPECT(0 <= r && r < ARRAY_COUNT(distribution)); + distribution[r]++; + } + + error = 0; + for (i = 0; i < ARRAY_COUNT(distribution); i++) + error += abs(UQ_4_12(0.25) - distribution[i]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} + +TEST("RandomWeighted generates distribution in proportion to the weights") +{ + u32 i, sum, error; + static const u8 ws[4] = { 1, 2, 2, 3 }; + u16 distribution[ARRAY_COUNT(ws)]; + + for (i = 0, sum = 0; i < ARRAY_COUNT(ws); i++) + sum += ws[i]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 r = RandomWeightedArrayDefault(RNG_NONE, sum, ARRAY_COUNT(ws), ws); + EXPECT(0 <= r && r < ARRAY_COUNT(ws)); + distribution[r]++; + } + + error = 0; + error += abs(UQ_4_12(0.125) - distribution[0]); + error += abs(UQ_4_12(0.250) - distribution[1]); + error += abs(UQ_4_12(0.250) - distribution[2]); + error += abs(UQ_4_12(0.375) - distribution[3]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} diff --git a/test/status1.c b/test/status1.c index 63a9cd0414..f4d3c7d944 100644 --- a/test/status1.c +++ b/test/status1.c @@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Burn reduces attack by 50%", s16 damage) SINGLE_BATTLE_TEST("Freeze has a 20% chance of being thawed") { - PASSES_RANDOMLY(20, 100); + PASSES_RANDOMLY(20, 100, RNG_FROZEN); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); @@ -90,9 +90,8 @@ SINGLE_BATTLE_TEST("Freeze is thawed by opponent's Fire-type attacks") PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_EMBER); } + TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { - MESSAGE("Wobbuffet is frozen solid!"); MESSAGE("Foe Wobbuffet used Ember!"); MESSAGE("Wobbuffet was defrosted!"); STATUS_ICON(player, none: TRUE); @@ -145,7 +144,7 @@ SINGLE_BATTLE_TEST("Paralysis reduces speed by 50%") SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") { - PASSES_RANDOMLY(25, 100); + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/test_battle.h b/test/test_battle.h index a447102f32..8c554216e5 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -65,8 +65,9 @@ * single turn. MOVE causes the player to use Stun Spore and adds the * move to the Pokémon's moveset if an explicit Moves was not specified. * Pokémon that are not mentioned in a TURN use Celebrate. - * The test runner attempts to rig the RNG so that the first move used - * in a turn does not miss and activates its secondary effects (if any). + * The test runner rigs the RNG so that unless otherwise specified, + * moves always hit, never critical hit, always activate their secondary + * effects, and always roll the same damage modifier. * * SCENE describes the player-visible output of the battle. In this case * ANIMATION checks that the Stun Spore animation played, MESSAGE checks @@ -228,12 +229,35 @@ * } * } * - * PASSES_RANDOMLY(successes, trials) - * Checks that the test passes approximately successes/trials. Used for - * testing RNG-based attacks, e.g.: + * PASSES_RANDOMLY(successes, trials, [tag]) + * Checks that the test passes successes/trials. If tag is provided, the + * test is run for each value that the tag can produce. For example, to + * check that Paralysis causes the turn to be skipped 25/100 times, we + * can write the following test that passes only if the Pokémon is fully + * paralyzed and specify that we expect it to pass 25/100 times when + * RNG_PARALYSIS varies: + * SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") + * { + * PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + * GIVEN { + * PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + * OPPONENT(SPECIES_WOBBUFFET); + * } WHEN { + * TURN { MOVE(player, MOVE_CELEBRATE); } + * } SCENE { + * MESSAGE("Wobbuffet is paralyzed! It can't move!"); + * } + * } + * All BattleRandom calls involving tag will return the same number, so + * this cannot be used to have two moves independently hit or miss, for + * example. + * + * If the tag is not provided, runs the test 50 times and computes an + * approximate pass ratio. * PASSES_RANDOMLY(gBattleMoves[move].accuracy, 100); - * Note that PASSES_RANDOMLY makes the tests run very slowly and should - * be avoided where possible. + * Note that this mode of PASSES_RANDOMLY makes the tests run very + * slowly and should be avoided where possible. If the mechanic you are + * testing is missing its tag, you should add it. * * GIVEN * Contains the initial state of the parties before the battle. @@ -419,6 +443,7 @@ #include "battle_anim.h" #include "data.h" #include "item.h" +#include "random.h" #include "recorded_battle.h" #include "test.h" #include "util.h" @@ -433,6 +458,7 @@ // NOTE: If the stack is too small the test runner will probably crash // or loop. #define BATTLE_TEST_STACK_SIZE 1024 +#define MAX_TURNS 16 #define MAX_QUEUED_EVENTS 25 enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES }; @@ -512,6 +538,13 @@ struct QueuedEvent } as; }; +struct BattlerTurn +{ + u8 hit:2; + u8 criticalHit:2; + u8 secondaryEffect:2; +}; + struct BattleTestData { u8 stack[BATTLE_TEST_STACK_SIZE]; @@ -533,14 +566,13 @@ struct BattleTestData u8 turns; u8 actionBattlers; u8 moveBattlers; - bool8 hasRNGActions:1; struct RecordedBattleSave recordedBattle; u8 battleRecordTypes[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u8 battleRecordSourceLineOffsets[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u16 recordIndexes[MAX_BATTLERS_COUNT]; + struct BattlerTurn battleRecordTurns[MAX_TURNS][MAX_BATTLERS_COUNT]; u8 lastActionTurn; - u8 nextRNGTurn; u8 queuedEventsCount; u8 queueGroupType; @@ -555,11 +587,12 @@ struct BattleTestRunnerState u8 parametersCount; // Valid only in BattleTest_Setup. u8 parameters; u8 runParameter; + u16 rngTag; u8 trials; - u8 expectedPasses; - u8 observedPasses; - u8 skippedTrials; u8 runTrial; + u16 expectedRatio; + u16 observedRatio; + u16 trialRatio; bool8 runRandomly:1; bool8 runGiven:1; bool8 runWhen:1; @@ -645,9 +678,14 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Randomly */ -#define PASSES_RANDOMLY(passes, trials) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials) +#define PASSES_RANDOMLY(passes, trials, ...) for (; gBattleTestRunnerState->runRandomly; gBattleTestRunnerState->runRandomly = FALSE) Randomly(__LINE__, passes, trials, (struct RandomlyContext) { __VA_ARGS__ }) -void Randomly(u32 sourceLine, u32 passes, u32 trials); +struct RandomlyContext +{ + u16 tag; +}; + +void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext); /* Given */ @@ -721,6 +759,8 @@ struct MoveContext u16 explicitHit:1; u16 criticalHit:1; u16 explicitCriticalHit:1; + u16 secondaryEffect:1; + u16 explicitSecondaryEffect:1; u16 megaEvolve:1; u16 explicitMegaEvolve:1; // TODO: u8 zMove:1; diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index ec7ba275c2..0c3c230635 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -15,26 +15,10 @@ #define STATE gBattleTestRunnerState #define DATA gBattleTestRunnerState->data -/* RNG seeds for controlling the first move of the turn. - * Found via brute force. */ +#define RNG_SEED_DEFAULT 0x00000000 -/* Default seed, triggers most things. - * The 1st roll % 100 is <= 29, to make 30%+ accuracycheck pass. - * The 2nd roll is not a critical hit at the regular crit stage. - * The 3rd roll is consumed by damagecalc. - * The 4th roll is consumed by adjustdamage. - * The 5th roll % 100 is <= 9, to make 10%+ seteffectwithchance pass - * and % 3 is == 0, to make Poison Point and other 1/3s pass. */ -#define RNG_SEED_DEFAULT 0x000002BE - -/* Causes the first attack to critical hit if B_CRIT_CHANCE >= GEN_6. - * The 2nd roll % 24 == 0 to be a critical hit at any stage. - * The other rolls match RNG_SEED_DEFAULT. */ -#define RNG_SEED_CRITICAL_HIT 0x0000A9F4 - -/* Causes the first attack to miss if possible. - * The 1st roll % 100 is 99, to make 99%- accuracycheck fail. */ -#define RNG_SEED_MISS 0x00000074 +#undef Q_4_12 +#define Q_4_12(n) (s32)((n) * 4096) EWRAM_DATA struct BattleTestRunnerState *gBattleTestRunnerState = NULL; @@ -129,12 +113,13 @@ static u32 BattleTest_EstimateCost(void *data) if (!STATE) return 0; STATE->runRandomly = TRUE; - DATA.recordedBattle.rngSeed = RNG_SEED_DEFAULT; InvokeTestFunction(test); cost = 1; if (STATE->parametersCount != 0) cost *= STATE->parametersCount; - if (STATE->trials != 0) + if (STATE->trials == 1) + cost *= 3; + else if (STATE->trials > 1) cost *= STATE->trials; FREE_AND_SET_NULL(STATE); return cost; @@ -162,6 +147,28 @@ static void BattleTest_SetUp(void *data) } } +static void PrintTestName(void) +{ + if (STATE->trials && STATE->parameters) + { + if (STATE->trials == 1) + MgbaPrintf_(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1); + else + MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); + } + else if (STATE->trials) + { + if (STATE->trials == 1) + MgbaPrintf_(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1); + else + MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); + } + else if (STATE->parameters) + { + MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + } +} + // This does not take into account priority, statuses, or any other // modifiers. static void SetImplicitSpeeds(void) @@ -280,12 +287,82 @@ static void BattleTest_Run(void *data) STATE->checkProgressTrial = 0; STATE->checkProgressTurn = 0; - if (STATE->trials && STATE->parameters) - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); - else if (STATE->trials) - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); - else if (STATE->parameters) - MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters); + PrintTestName(); +} + +u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) +{ + if (tag == STATE->rngTag) + { + u32 n = hi - lo + 1; + if (STATE->trials == 1) + { + STATE->trials = n; + PrintTestName(); + } + else if (STATE->trials != n) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomUniform called with inconsistent trials %d and %d", STATE->trials, n); + } + STATE->trialRatio = Q_4_12(1) / n; + return STATE->runTrial + lo; + } + + return hi; +} + +u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) +{ + const struct BattlerTurn *turn = NULL; + u32 default_ = n-1; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + switch (tag) + { + case RNG_ACCURACY: + ASSUME(n == 2); + if (turn && turn->hit) + return turn->hit - 1; + default_ = TRUE; + break; + + case RNG_CRITICAL_HIT: + ASSUME(n == 2); + if (turn && turn->criticalHit) + return turn->criticalHit - 1; + default_ = FALSE; + break; + + case RNG_SECONDARY_EFFECT: + ASSUME(n == 2); + if (turn && turn->secondaryEffect) + return turn->secondaryEffect - 1; + default_ = TRUE; + break; + } + + if (tag == STATE->rngTag) + { + if (STATE->trials == 1) + { + STATE->trials = n; + PrintTestName(); + } + else if (STATE->trials != n) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeighted called with inconsistent trials %d and %d", STATE->trials, n); + } + // TODO: Detect inconsistent sum. + STATE->trialRatio = Q_4_12(weights[STATE->runTrial]) / sum; + return STATE->runTrial; + } + + return default_; } static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) @@ -711,42 +788,36 @@ static void CB2_BattleTest_NextTrial(void) SetMainCallback2(CB2_BattleTest_NextParameter); + switch (gTestRunnerState.result) + { + case TEST_RESULT_FAIL: + break; + case TEST_RESULT_PASS: + STATE->observedRatio += STATE->trialRatio; + break; + default: + return; + } + if (STATE->rngTag) + STATE->trialRatio = 0; + if (++STATE->runTrial < STATE->trials) { - switch (gTestRunnerState.result) - { - case TEST_RESULT_FAIL: - break; - case TEST_RESULT_PASS: - STATE->observedPasses++; - break; - case TEST_RESULT_ASSUMPTION_FAIL: - STATE->skippedTrials++; - if (STATE->skippedTrials > STATE->trials / 4) - Test_ExitWithResult(TEST_RESULT_INVALID, "25%% of the trials were SKIPed"); - break; - default: - return; - } - if (STATE->parameters) - MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials); - else - MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials); - gTestRunnerState.result = TEST_RESULT_PASS; + PrintTestName(); + gTestRunnerState.result = TEST_RESULT_PASS; DATA.recordedBattle.rngSeed = ISO_RANDOMIZE1(STATE->runTrial); DATA.queuedEvent = 0; DATA.lastActionTurn = 0; - DATA.nextRNGTurn = 0; SetVariablesForRecordedBattle(&DATA.recordedBattle); SetMainCallback2(CB2_InitBattle); } else { - // This is a tolerance of +/- 4%. - if (abs(STATE->observedPasses - STATE->expectedPasses) <= 2) + // This is a tolerance of +/- ~2%. + if (abs(STATE->observedRatio - STATE->expectedRatio) <= Q_4_12(0.02)) gTestRunnerState.result = TEST_RESULT_PASS; else - Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %d/%d passes, observed %d/%d", STATE->expectedPasses, STATE->trials, STATE->observedPasses, STATE->trials); + Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %q passes/successes, observed %q", STATE->expectedRatio, STATE->observedRatio); } } @@ -773,7 +844,8 @@ static bool32 BattleTest_CheckProgress(void *data) static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result) { - if (result != TEST_RESULT_INVALID + if (result != TEST_RESULT_ASSUMPTION_FAIL + && result != TEST_RESULT_INVALID && result != TEST_RESULT_ERROR && result != TEST_RESULT_TIMEOUT && STATE->runTrial < STATE->trials) @@ -787,16 +859,25 @@ static bool32 BattleTest_HandleExitWithResult(void *data, enum TestResult result } } -void Randomly(u32 sourceLine, u32 passes, u32 trials) +void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx) { - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - // This is a precision of 2%. - STATE->trials = 50; - STATE->expectedPasses = STATE->trials * passes / trials; - STATE->observedPasses = 0; - STATE->skippedTrials = 0; + INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); + STATE->rngTag = ctx.tag; STATE->runTrial = 0; - DATA.recordedBattle.rngSeed = 0; + STATE->expectedRatio = Q_4_12(passes) / trials; + STATE->observedRatio = 0; + if (STATE->rngTag) + { + STATE->trials = 1; + STATE->trialRatio = Q_4_12(1); + } + else + { + INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); + STATE->trials = 50; + STATE->trialRatio = Q_4_12(1) / STATE->trials; + DATA.recordedBattle.rngSeed = 0; + } } void RNGSeed_(u32 sourceLine, u32 seed) @@ -1037,16 +1118,6 @@ static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType) { - // TODO: Support explicit seeds for each turn? - if (DATA.nextRNGTurn == gBattleResults.battleTurnCounter - && (DATA.recordedBattle.rngSeed == RNG_SEED_DEFAULT - || DATA.recordedBattle.rngSeed == RNG_SEED_CRITICAL_HIT - || DATA.recordedBattle.rngSeed == RNG_SEED_MISS)) - { - gRngValue = DATA.recordedBattle.rngSeed; - DATA.nextRNGTurn++; - } - // An illegal move choice will cause the battle to request a new // move slot and target. This detects the move slot. if (actionType == RECORDED_MOVE_SLOT @@ -1122,10 +1193,11 @@ void BattleTest_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 void OpenTurn(u32 sourceLine) { INVALID_IF(DATA.turnState != TURN_CLOSED, "Nested TURN"); + if (DATA.turns == MAX_TURNS) + Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine); DATA.turnState = TURN_OPEN; DATA.actionBattlers = 0x00; DATA.moveBattlers = 0x00; - DATA.hasRNGActions = FALSE; } static void SetSlowerThan(s32 battlerId) @@ -1253,21 +1325,12 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) } } - if (ctx.explicitHit && !ctx.hit) - { - if (DATA.hasRNGActions != 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: hit only supported on the first move", gTestRunnerState.test->filename, sourceLine); - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - DATA.recordedBattle.rngSeed = RNG_SEED_MISS; - } - - if (ctx.explicitCriticalHit && ctx.criticalHit) - { - if (DATA.hasRNGActions != 0) - Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: criticalHit only supported on the first move", gTestRunnerState.test->filename, sourceLine); - INVALID_IF(DATA.recordedBattle.rngSeed != RNG_SEED_DEFAULT, "RNG seed already set"); - DATA.recordedBattle.rngSeed = RNG_SEED_CRITICAL_HIT; - } + if (ctx.explicitHit) + DATA.battleRecordTurns[DATA.turns][battlerId].hit = 1 + ctx.hit; + if (ctx.explicitCriticalHit) + DATA.battleRecordTurns[DATA.turns][battlerId].criticalHit = 1 + ctx.criticalHit; + if (ctx.explicitSecondaryEffect) + DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; if (!(DATA.actionBattlers & (1 << battlerId))) { @@ -1288,14 +1351,6 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.actionBattlers |= 1 << battlerId; DATA.moveBattlers |= 1 << battlerId; } - - // WARNING: Approximation. The move could still cause the RNG to - // advance. - if (gBattleMoves[moveId].accuracy != 0 - || gBattleMoves[moveId].split != SPLIT_STATUS) - { - DATA.hasRNGActions = TRUE; - } } void ForcedMove(u32 sourceLine, struct BattlePokemon *battler) From f4e8389779da1d3a16c524dade408c9072a14ecd Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Thu, 16 Mar 2023 17:58:39 -0300 Subject: [PATCH 204/290] Added Psyblade and Hydro Steam --- data/battle_anim_scripts.s | 4 ++++ data/battle_scripts_1.s | 4 +++- include/constants/battle_move_effects.h | 4 +++- include/constants/moves.h | 4 +++- src/battle_util.c | 6 ++++- src/data/battle_moves.h | 30 +++++++++++++++++++++++++ src/data/contest_moves.h | 4 ++++ src/data/text/move_descriptions.h | 10 +++++++++ src/data/text/move_names.h | 4 ++++ 9 files changed, 66 insertions(+), 4 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 4663fdcafd..cca8706cbc 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -854,6 +854,8 @@ gBattleAnims_Moves:: .4byte Move_NOXIOUS_TORQUE .4byte Move_COMBAT_TORQUE .4byte Move_MAGICAL_TORQUE + .4byte Move_PSYBLADE + .4byte Move_HYDRO_STEAM @@@@ Z MOVES .4byte Move_BREAKNECK_BLITZ .4byte Move_ALL_OUT_PUMMELING @@ -14464,6 +14466,8 @@ Move_WICKED_TORQUE:: Move_NOXIOUS_TORQUE:: Move_COMBAT_TORQUE:: Move_MAGICAL_TORQUE:: +Move_PSYBLADE:: +Move_HYDRO_STEAM:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 8b93edb78a..52c1352943 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -417,7 +417,9 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectVictoryDance @ EFFECT_VICTORY_DANCE .4byte BattleScript_EffectTeatime @ EFFECT_TEATIME .4byte BattleScript_EffectAttackUpUserAlly @ EFFECT_ATTACK_UP_USER_ALLY - .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectShellTrap @ EFFECT_SHELL_TRAP + .4byte BattleScript_EffectHit @ EFFECT_PSYBLADE + .4byte BattleScript_EffectHit @ EFFECT_HYDRO_STEAM BattleScript_EffectAttackUpUserAlly: jumpifnoally BS_ATTACKER, BattleScript_EffectAttackUp diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 061271dd56..c374ce4366 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -399,7 +399,9 @@ #define EFFECT_TEATIME 393 #define EFFECT_ATTACK_UP_USER_ALLY 394 // Howl 8th Gen #define EFFECT_SHELL_TRAP 395 +#define EFFECT_PSYBLADE 396 +#define EFFECT_HYDRO_STEAM 397 -#define NUM_BATTLE_MOVE_EFFECTS 396 +#define NUM_BATTLE_MOVE_EFFECTS 398 #endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H diff --git a/include/constants/moves.h b/include/constants/moves.h index 20cb32c545..dd00aacb45 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -858,8 +858,10 @@ #define MOVE_NOXIOUS_TORQUE 824 #define MOVE_COMBAT_TORQUE 825 #define MOVE_MAGICAL_TORQUE 826 +#define MOVE_PSYBLADE 827 +#define MOVE_HYDRO_STEAM 828 -#define MOVES_COUNT_GEN9 827 +#define MOVES_COUNT_GEN9 829 #define MOVES_COUNT MOVES_COUNT_GEN9 diff --git a/src/battle_util.c b/src/battle_util.c index 4b50bc7045..fcfec90c2b 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8769,6 +8769,10 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower = CalcBeatUpPower(); #endif break; + case EFFECT_PSYBLADE: + if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_ELECTRIC_TERRAIN)) + MulModifier(&basePower, UQ_4_12(1.5)); + break; } // Move-specific base power changes @@ -9586,7 +9590,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move } else if (IsBattlerWeatherAffected(battlerAtk, B_WEATHER_SUN)) { - if (moveType == TYPE_FIRE) + if (moveType == TYPE_FIRE || gBattleMoves[move].effect == EFFECT_HYDRO_STEAM) dmg = ApplyModifier(UQ_4_12(1.5), dmg); else if (moveType == TYPE_WATER) dmg = ApplyModifier(UQ_4_12(0.5), dmg); diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index dc18893de2..7ce5a669e6 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -13593,6 +13593,36 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_Z] = .zMoveEffect = Z_EFFECT_NONE }, + [MOVE_PSYBLADE] = + { + .effect = EFFECT_PSYBLADE, + .power = 80, + .type = TYPE_PSYCHIC, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED | FLAG_SLICING_MOVE, + .split = SPLIT_PHYSICAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + + [MOVE_HYDRO_STEAM] = + { + .effect = EFFECT_HYDRO_STEAM, + .power = 80, + .type = TYPE_WATER, + .accuracy = 100, + .pp = 15, + .secondaryEffectChance = 0, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGS_ROCK_AFFECTED, + .split = SPLIT_SPECIAL, + .zMoveEffect = Z_EFFECT_NONE, + }, + // Z-Moves [MOVE_BREAKNECK_BLITZ] = { diff --git a/src/data/contest_moves.h b/src/data/contest_moves.h index 2de44b3486..3d633a2562 100644 --- a/src/data/contest_moves.h +++ b/src/data/contest_moves.h @@ -6062,6 +6062,10 @@ const struct ContestMove gContestMoves[MOVES_COUNT] = [MOVE_COMBAT_TORQUE] = {0}, // TODO [MOVE_MAGICAL_TORQUE] = {0}, // TODO + + [MOVE_PSYBLADE] = {0}, // TODO + + [MOVE_HYDRO_STEAM] = {0}, // TODO }; const struct ContestEffect gContestEffects[] = diff --git a/src/data/text/move_descriptions.h b/src/data/text/move_descriptions.h index 7000759f75..c2b7e0b234 100644 --- a/src/data/text/move_descriptions.h +++ b/src/data/text/move_descriptions.h @@ -3236,6 +3236,14 @@ static const u8 sCombatTorqueDescription[] = _( static const u8 sMagicalTorqueDescription[] = _( "---"); +static const u8 sPsybladeDescription[] = _( + "This move's power increases\n" + "when on Electric Terrain."); + +static const u8 sHydroSteamDescription[] = _( + "This move's power increases\n" + "under harsh sunlight."); + const u8 gNotDoneYetDescription[] = _( "This move can't be used. Its\n" "effect is in development."); @@ -4073,4 +4081,6 @@ const u8 *const gMoveDescriptionPointers[MOVES_COUNT - 1] = [MOVE_NOXIOUS_TORQUE - 1] = sNoxiousTorqueDescription, [MOVE_COMBAT_TORQUE - 1] = sCombatTorqueDescription, [MOVE_MAGICAL_TORQUE - 1] = sMagicalTorqueDescription, + [MOVE_PSYBLADE - 1] = sPsybladeDescription, + [MOVE_HYDRO_STEAM - 1] = sHydroSteamDescription, }; diff --git a/src/data/text/move_names.h b/src/data/text/move_names.h index 221d3db73d..85d406dcab 100644 --- a/src/data/text/move_names.h +++ b/src/data/text/move_names.h @@ -829,6 +829,8 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_NOXIOUS_TORQUE] = _("Noxious Torque"), [MOVE_COMBAT_TORQUE] = _("Combat Torque"), [MOVE_MAGICAL_TORQUE] = _("Magical Torque"), + [MOVE_PSYBLADE] = _("Psyblade"), + [MOVE_HYDRO_STEAM] = _("Hydro Steam"), }; #else // 12 letters @@ -1661,6 +1663,8 @@ const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1] = [MOVE_NOXIOUS_TORQUE] = _("NoxiusTorque"), [MOVE_COMBAT_TORQUE] = _("CombatTorque"), [MOVE_MAGICAL_TORQUE] = _("MagiclTorque"), + [MOVE_PSYBLADE] = _("Psyblade"), + [MOVE_HYDRO_STEAM] = _("Hydro Steam"), }; #endif From 372c6a1afa1836ffb0595a6767fccbc034e5e80c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 19 Mar 2023 20:55:39 +0100 Subject: [PATCH 205/290] Add new item variables and defines --- include/constants/hold_effects.h | 1 + include/constants/items.h | 33 ++- src/data/item_icon_table.h | 29 +++ src/data/items.h | 331 +++++++++++++++++++++++++++++- src/data/text/item_descriptions.h | 60 ++++++ 5 files changed, 452 insertions(+), 2 deletions(-) diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index cd42566321..5fc268cb05 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -159,6 +159,7 @@ #define HOLD_EFFECT_PUNCHING_GLOVE 178 #define HOLD_EFFECT_COVERT_CLOAK 179 #define HOLD_EFFECT_LOADED_DICE 180 +#define HOLD_EFFECT_BOOSTER_ENERGY 181 // Not implemented. #define HOLD_EFFECT_CHOICE(holdEffect)((holdEffect == HOLD_EFFECT_CHOICE_BAND || holdEffect == HOLD_EFFECT_CHOICE_SCARF || holdEffect == HOLD_EFFECT_CHOICE_SPECS)) diff --git a/include/constants/items.h b/include/constants/items.h index 1cb2803f37..f64790b382 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -928,13 +928,44 @@ #define ITEM_RUBY 756 #define ITEM_SAPPHIRE 757 +// GEN IX ITEMS #define ITEM_ABILITY_SHIELD 758 #define ITEM_CLEAR_AMULET 759 #define ITEM_PUNCHING_GLOVE 760 #define ITEM_COVERT_CLOAK 761 #define ITEM_LOADED_DICE 762 +#define ITEM_AUSPICIOUS_ARMOR 763 +#define ITEM_BOOSTER_ENERGY 764 +#define ITEM_BIG_BAMBOO_SHOOT 765 +#define ITEM_GIMMIGHOUL_COIN 766 +#define ITEM_LEADERS_CREST 767 +#define ITEM_MALICIOUS_ARMOR 768 +#define ITEM_MIRROR_HERB 769 +#define ITEM_SCROLL_OF_DARKNESS 770 +#define ITEM_SCROLL_OF_WATERS 771 +#define ITEM_TERA_ORB 772 +#define ITEM_TINY_BAMBOO_SHOOT 773 -#define ITEMS_COUNT 763 +#define ITEM_BUG_TERA_SHARD 774 +#define ITEM_DARK_TERA_SHARD 775 +#define ITEM_DRAGON_TERA_SHARD 776 +#define ITEM_ELECTRIC_TERA_SHARD 777 +#define ITEM_FAIRY_TERA_SHARD 778 +#define ITEM_FIGHTING_TERA_SHARD 779 +#define ITEM_FIRE_TERA_SHARD 780 +#define ITEM_FLYING_TERA_SHARD 781 +#define ITEM_GHOST_TERA_SHARD 782 +#define ITEM_GRASS_TERA_SHARD 783 +#define ITEM_GROUND_TERA_SHARD 784 +#define ITEM_ICE_TERA_SHARD 785 +#define ITEM_NORMAL_TERA_SHARD 786 +#define ITEM_POISON_TERA_SHARD 787 +#define ITEM_PSYCHIC_TERA_SHARD 788 +#define ITEM_ROCK_TERA_SHARD 789 +#define ITEM_STEEL_TERA_SHARD 790 +#define ITEM_WATER_TERA_SHARD 791 + +#define ITEMS_COUNT 792 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0107b71ab7..0dbec3f856 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -808,6 +808,35 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, + [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, + [ITEM_BOOSTER_ENERGY] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, + [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, + [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, + [ITEM_LEADERS_CREST] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, + [ITEM_MALICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, + [ITEM_MIRROR_HERB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, + [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, + [ITEM_SCROLL_OF_WATERS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, + [ITEM_TERA_ORB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, + [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, + [ITEM_BUG_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BugTeraShard, gItemIconPalette_BugTeraShard}, + [ITEM_DARK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DarkTeraShard, gItemIconPalette_DarkTeraShard}, + [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DragonTeraShard, gItemIconPalette_DragonTeraShard}, + [ITEM_ELECTRIC_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ElectricTeraShard, gItemIconPalette_ElectricTeraShard}, + [ITEM_FAIRY_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FairyTeraShard, gItemIconPalette_FairyTeraShard}, + [ITEM_FIGHTING_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FightingTeraShard, gItemIconPalette_FightingTeraShard}, + [ITEM_FIRE_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FireTeraShard, gItemIconPalette_FireTeraShard}, + [ITEM_FLYING_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_FlyingTeraShard, gItemIconPalette_FlyingTeraShard}, + [ITEM_GHOST_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GhostTeraShard, gItemIconPalette_GhostTeraShard}, + [ITEM_GRASS_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GrassTeraShard, gItemIconPalette_GrassTeraShard}, + [ITEM_GROUND_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GroundTeraShard, gItemIconPalette_GroundTeraShard}, + [ITEM_ICE_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_IceTeraShard, gItemIconPalette_IceTeraShard}, + [ITEM_NORMAL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_NormalTeraShard, gItemIconPalette_NormalTeraShard}, + [ITEM_POISON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PoisonTeraShard, gItemIconPalette_PoisonTeraShard}, + [ITEM_PSYCHIC_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PsychicTeraShard, gItemIconPalette_PsychicTeraShard}, + [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, + [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, + [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 63446913ec..a4e311338b 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -9907,7 +9907,6 @@ const struct Item gItems[] = [ITEM_LOADED_DICE] = { - //YellwApricorn .name = _("Loaded Dice"), .itemId = ITEM_LOADED_DICE, .price = 20000, @@ -9918,4 +9917,334 @@ const struct Item gItems[] = .fieldUseFunc = ItemUseOutOfBattle_CannotUse, .flingPower = 30, }, + + [ITEM_AUSPICIOUS_ARMOR] = + { + .name = _("AuspciousArmr"), + .itemId = ITEM_AUSPICIOUS_ARMOR, + .price = 3000, + .description = sAuspiciousArmorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_BOOSTER_ENERGY] = + { + .name = _("BoosterEnergy"), + .itemId = ITEM_BOOSTER_ENERGY, + .price = 0, + .holdEffect = HOLD_EFFECT_BOOSTER_ENERGY, + .description = sBoosterEnergyDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BIG_BAMBOO_SHOOT] = + { + .name = _("BigBmbooShoot"), + .itemId = ITEM_BIG_BAMBOO_SHOOT, + .price = 3000, + .description = sBigBambooShootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_GIMMIGHOUL_COIN] = + { + .name = _("GimighoulCoin"), + .itemId = ITEM_GIMMIGHOUL_COIN, + .price = 400, + .description = sGimmighoulCoinDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_LEADERS_CREST] = + { + .name = _("Leader'sCrest"), + .itemId = ITEM_LEADERS_CREST, + .price = 3000, + .description = sLeadersCrestDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_MALICIOUS_ARMOR] = + { + .name = _("MaliciousArmr"), + .itemId = ITEM_MALICIOUS_ARMOR, + .price = 3000, + .description = sMaliciousArmorDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_PARTY_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + .flingPower = 30, + }, + + [ITEM_MIRROR_HERB] = + { + .name = _("Mirror Herb"), + .itemId = ITEM_MIRROR_HERB, + .price = 30000, + .holdEffect = HOLD_EFFECT_MIRROR_HERB, + .description = sMirrorHerbDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_SCROLL_OF_DARKNESS] = + { + .name = _("ScrllOfDrknss"), + .itemId = ITEM_SCROLL_OF_DARKNESS, + .price = 0, + .description = sScrollOfDarknessDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + }, + + [ITEM_SCROLL_OF_WATERS] = + { + .name = _("ScrollOfWatrs"), + .itemId = ITEM_SCROLL_OF_WATERS, + .price = 0, + .description = sScrollOfWatersDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, + }, + + [ITEM_TERA_ORB] = + { + .name = _("Tera Orb"), + .itemId = ITEM_TERA_ORB, + .price = 0, + .description = sTeraOrbDesc, + .importance = 1, + .pocket = POCKET_KEY_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_TINY_BAMBOO_SHOOT] = + { + .name = _("TinyBmbooShot"), + .itemId = ITEM_TINY_BAMBOO_SHOOT, + .price = 750, + .description = sTinyBambooShootDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 30, + }, + + [ITEM_BUG_TERA_SHARD] = + { + .name = _("Bug TeraShard"), + .itemId = ITEM_BUG_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DARK_TERA_SHARD] = + { + .name = _("DarkTeraShard"), + .itemId = ITEM_DARK_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_DRAGON_TERA_SHARD] = + { + .name = _("DragnTeraShrd"), + .itemId = ITEM_DRAGON_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ELECTRIC_TERA_SHARD] = + { + .name = _("EltrcTeraShrd"), + .itemId = ITEM_ELECTRIC_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FAIRY_TERA_SHARD] = + { + .name = _("FairyTeraShrd"), + .itemId = ITEM_FAIRY_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FIGHTING_TERA_SHARD] = + { + .name = _("FghtngTerShrd"), + .itemId = ITEM_FIGHTING_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FIRE_TERA_SHARD] = + { + .name = _("FireTeraShard"), + .itemId = ITEM_FIRE_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_FLYING_TERA_SHARD] = + { + .name = _("FlyngTeraShrd"), + .itemId = ITEM_FLYING_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GHOST_TERA_SHARD] = + { + .name = _("GhostTeraShrd"), + .itemId = ITEM_GHOST_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GRASS_TERA_SHARD] = + { + .name = _("GrassTeraShrd"), + .itemId = ITEM_GRASS_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_GROUND_TERA_SHARD] = + { + .name = _("GrondTeraShrd"), + .itemId = ITEM_GROUND_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ICE_TERA_SHARD] = + { + .name = _("Ice TeraShard"), + .itemId = ITEM_ICE_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_NORMAL_TERA_SHARD] = + { + .name = _("NormlTeraShrd"), + .itemId = ITEM_NORMAL_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_POISON_TERA_SHARD] = + { + .name = _("PoisnTeraShrd"), + .itemId = ITEM_POISON_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_PSYCHIC_TERA_SHARD] = + { + .name = _("PschcTeraShrd"), + .itemId = ITEM_PSYCHIC_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_ROCK_TERA_SHARD] = + { + .name = _("RockTeraShard"), + .itemId = ITEM_ROCK_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_STEEL_TERA_SHARD] = + { + .name = _("SteelTeraShrd"), + .itemId = ITEM_STEEL_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, + + [ITEM_WATER_TERA_SHARD] = + { + .name = _("WaterTeraShrd"), + .itemId = ITEM_WATER_TERA_SHARD, + .price = 0, + .description = sTeraShardDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + }, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index e815d8ae1f..cee413aa51 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3817,3 +3817,63 @@ static const u8 sLoadedDiceDesc[] = _( "Rolls high numbers.\n" "Multihit strikes\n" "hit more times."); + +static const u8 sAuspiciousArmorDesc[] = _( + "Armor inhabited by\n" + "auspicious wishes.\n" + "Causes evolution."); + +static const u8 sBoosterEnergyDesc[] = _( + "Encapsuled energy\n" + "ups Pokémon with\n" + "certain Abilities."); + +static const u8 sBigBambooShootDesc[] = _( + "A large and rare\n" + "bamboo shoot. Best\n" + "sold to gourmands."); + +static const u8 sGimmighoulCoinDesc[] = _( + "Gimmighoul hoard\n" + "and treasure these\n" + "curious coins."); + +static const u8 sLeadersCrestDesc[] = _( + "A shard of an old\n" + "blade of some sort.\n" + "Held by Bisharp."); + +static const u8 sMaliciousArmorDesc[] = _( + "Armor inhabited by\n" + "malicious will.\n" + "Causes evolution."); + +static const u8 sMirrorHerbDesc[] = _( + "Mirrors an enemy's\n" + "stat increases\n" + "but only once."); + +static const u8 sScrollOfDarknessDesc[] = _( + "A peculiar scroll\n" + "with secrets of\n" + "the dark path."); + +static const u8 sScrollOfWatersDesc[] = _( + "A peculiar scroll\n" + "with secrets of\n" + "the water path."); + +static const u8 sTeraOrbDesc[] = _( + "Energy charges can\n" + "be used to cause\n" + "Terastallization."); + +static const u8 sTinyBambooShootDesc[] = _( + "A small and rare\n" + "bamboo shoot. Best\n" + "sold to gourmands."); + +static const u8 sTeraShardDesc[] = _( + "These shards may\n" + "form when a Tera\n" + "Pokémon faints."); From d480fc90f2edd085da8e1ba7fd983fa8c57d2b0c Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 19 Mar 2023 21:21:43 +0100 Subject: [PATCH 206/290] Fix Scrolls type --- src/data/items.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/items.h b/src/data/items.h index a4e311338b..982375f3ee 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10010,7 +10010,7 @@ const struct Item gItems[] = .description = sScrollOfDarknessDesc, .importance = 1, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, + .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, }, @@ -10022,7 +10022,7 @@ const struct Item gItems[] = .description = sScrollOfWatersDesc, .importance = 1, .pocket = POCKET_KEY_ITEMS, - .type = ITEM_USE_BAG_MENU, + .type = ITEM_USE_PARTY_MENU, .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone, }, From 47b4e6095d53bca527fc740119564f8eabb8cded Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sun, 19 Mar 2023 21:59:51 -0300 Subject: [PATCH 207/290] Undo Timburr and Stunfisk friendships, as they don't change --- src/data/pokemon/species_info.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 5de73a21ac..7b60f1b1a6 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -13034,7 +13034,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 1, .genderRatio = PERCENT_FEMALE(25), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, + .friendship = 70, .growthRate = GROWTH_MEDIUM_SLOW, .eggGroups = { EGG_GROUP_HUMAN_LIKE, EGG_GROUP_HUMAN_LIKE}, .abilities = {ABILITY_GUTS, ABILITY_SHEER_FORCE, ABILITY_IRON_FIST}, @@ -14987,7 +14987,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .itemRare = ITEM_SOFT_SAND, .genderRatio = PERCENT_FEMALE(50), .eggCycles = 20, - .friendship = STANDARD_FRIENDSHIP, + .friendship = 70, .growthRate = GROWTH_MEDIUM_FAST, .eggGroups = { EGG_GROUP_WATER_1, EGG_GROUP_AMORPHOUS}, .abilities = {ABILITY_STATIC, ABILITY_LIMBER, ABILITY_SAND_VEIL}, From 170ff2f422b80c7a1fcd70777d8d120c029d00e2 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:41:37 +0100 Subject: [PATCH 208/290] Tests for Eject Button (#2843) * eject button tests + 1 intim test Add KNOWN_FAILING Eject Button Tests = 1 Intim Test * Update test/ability_intimidate.c * Update test/ability_intimidate.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/hold_effect_eject_button.c * Update test/ability_intimidate.c Eject Button Tests Eject Button Tests * Update test/hold_effect_eject_button.c Co-authored-by: Philipp AUER --------- Co-authored-by: Philipp AUER --- test/ability_intimidate.c | 28 +++++ test/hold_effect_eject_button.c | 189 ++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 test/hold_effect_eject_button.c diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 08d8d606e4..347c0bc712 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -95,3 +95,31 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba MESSAGE("Foe Arbok's Intimidate cuts Abra's attack!"); } } + +SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") +{ + KNOWN_FAILING; // Issue #2837 + GIVEN { + ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); }; + } WHEN { + TURN { + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("2 sent out Hitmontop!"); + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + MESSAGE("Foe Hitmontop's Intimidate cuts Wobbuffet's attack!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("Foe Hitmontop used Tackle!"); + } + } +} diff --git a/test/hold_effect_eject_button.c b/test/hold_effect_eject_button.c new file mode 100644 index 0000000000..0d28d7bf04 --- /dev/null +++ b/test/hold_effect_eject_button.c @@ -0,0 +1,189 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered when there is nothing to switch in") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(0); }; + } WHEN { + TURN { + MOVE(player, MOVE_QUICK_ATTACK); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not activated by a Sheer Force boosted move") +{ + GIVEN { + PLAYER(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_FLAMETHROWER); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLAMETHROWER, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button will not activate under Substitute") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAICHU) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponent, MOVE_SUBSTITUTE); + MOVE(player, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + MESSAGE("Foe Raichu made a SUBSTITUTE!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + MESSAGE("The SUBSTITUTE took damage for Foe Raichu!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Raichu is switched out with the Eject Button!"); + } + } +} + +SINGLE_BATTLE_TEST("Eject Button is not blocked by trapping abilities or moves") +{ + GIVEN { + PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + MESSAGE("2 sent out Wobbuffet!"); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered after the mon loses Eject Button") +{ + GIVEN { + PLAYER(SPECIES_RAICHU); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_KNOCK_OFF); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button is not triggered after given to player by Picketpocket") +{ + GIVEN { + PLAYER(SPECIES_REGIELEKI) { Item(ITEM_EJECT_BUTTON); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_SNEASEL) { Ability(ABILITY_PICKPOCKET); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(opponent, ABILITY_PICKPOCKET); + MESSAGE("Foe Sneasel stole Regieleki's Eject Button!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + } +} + +SINGLE_BATTLE_TEST("Eject Button has no chance to activate after Dragon Tail") +{ + GIVEN { + PLAYER(SPECIES_KOMMO_O); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_CHANSEY); + } WHEN { + TURN { + MOVE(player, MOVE_DRAGON_TAIL); + MOVE(opponent, MOVE_TACKLE); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, player); + MESSAGE("Foe Chansey was dragged out!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Chansey is switched out with the Eject Button!"); + } + } +} + +SINGLE_BATTLE_TEST("Eject Button prevents Volt Switch / U-Turn from activating") +{ + GIVEN { + PLAYER(SPECIES_MANECTRIC); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(player, MOVE_VOLT_SWITCH); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VOLT_SWITCH, player); + MESSAGE("Foe Wobbuffet is switched out with the Eject Button!"); + } +} + +SINGLE_BATTLE_TEST("Eject Button is activated before Emergency Exit") +{ + GIVEN { + PLAYER(SPECIES_LATIAS); + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(player, MOVE_THUNDERBOLT); + SEND_OUT(opponent, 1); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + MESSAGE("Foe Golisopod is switched out with the Eject Button!"); + } +} From 3bd680cab9b5992fa7aa2337fb0c50e8f66df15f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 13:36:45 -0400 Subject: [PATCH 209/290] fix GetBattleAnimMoveTargets for non-player gBattleAnimAttacker --- src/battle_anim.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index fd81152e1c..984f7b0a9d 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -440,22 +440,22 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { - targets[1] = targets[0] ^ BIT_FLANK; - numTargets++; + if (IsBattlerAlive(BATTLE_PARTNER(targets[0])) { + targets[1] = BATTLE_PARTNER(targets[0]); + numTargets = 2; } break; case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(targets[0] ^ BIT_FLANK)) { - targets[1] = targets[0] ^ BIT_FLANK; + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) { + targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - - if (IsBattlerAlive(gBattleAnimAttacker ^ BIT_FLANK)) { - targets[2] = gBattleAnimAttacker ^ BIT_FLANK; + + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { + targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; } break; From 1adc6b761e19a716d42ccf76d68a8996ae89a3a5 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 13:38:24 -0400 Subject: [PATCH 210/290] remove random space --- src/battle_anim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index 984f7b0a9d..0c688f20bb 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -453,7 +453,7 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; From c61797bc38e5cdb60393b19b987b96e4075d3bb2 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 21 Mar 2023 14:31:09 -0400 Subject: [PATCH 211/290] styling and syntax fix --- src/battle_anim.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/battle_anim.c b/src/battle_anim.c index 0c688f20bb..4191fe7aa1 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -440,7 +440,8 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_BOTH: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - if (IsBattlerAlive(BATTLE_PARTNER(targets[0])) { + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) + { targets[1] = BATTLE_PARTNER(targets[0]); numTargets = 2; } @@ -448,13 +449,14 @@ static u8 GetBattleAnimMoveTargets(u8 battlerArgIndex, u8 *targets) case MOVE_TARGET_FOES_AND_ALLY: targets[0] = gBattleAnimArgs[battlerArgIndex]; numTargets = 1; - - if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) { + if (IsBattlerAlive(BATTLE_PARTNER(targets[0]))) + { targets[1] = BATTLE_PARTNER(targets[0]); numTargets++; } - if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) { + if (IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])))) + { targets[2] = BATTLE_PARTNER(BATTLE_OPPOSITE(targets[0])); numTargets++; } From 9ec31c61bfdfe01803a83f152b962ae324b8df69 Mon Sep 17 00:00:00 2001 From: May8th1995 <69943962+May8th1995@users.noreply.github.com> Date: Tue, 21 Mar 2023 19:12:46 +0000 Subject: [PATCH 212/290] Fixes weirdly set value for eject buttons etc (#2846) * Fixes weirdly set value for eject buttons etc * Remove known fialing from fixed test --------- Co-authored-by: tennis --- data/battle_scripts_1.s | 1 + test/ability_intimidate.c | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 52c1352943..a32e9a4ec8 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8654,6 +8654,7 @@ BattleScript_IntimidateLoopIncrement: addbyte gBattlerTarget, 1 jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop BattleScript_IntimidateEnd: + copybyte sBATTLER, gBattlerAttacker destroyabilitypopup pause B_WAIT_TIME_MED end3 diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 347c0bc712..0318435e0b 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -98,7 +98,6 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") { - KNOWN_FAILING; // Issue #2837 GIVEN { ASSUME(gItems[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); PLAYER(SPECIES_WOBBUFFET); From 358180946d60e5acc6fd5a95bb95f39232b93382 Mon Sep 17 00:00:00 2001 From: tennis Date: Wed, 22 Mar 2023 11:42:32 +0000 Subject: [PATCH 213/290] Fix Intimidate targetting dead sides and false postpones --- data/battle_scripts_1.s | 1 + src/battle_script_commands.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index a32e9a4ec8..2754b5d7ae 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -8627,6 +8627,7 @@ BattleScript_IntimidateActivates:: BattleScript_IntimidateLoop: jumpifbyteequal gBattlerTarget, gBattlerAttacker, BattleScript_IntimidateLoopIncrement jumpiftargetally BattleScript_IntimidateLoopIncrement + jumpifabsent BS_TARGET, BattleScript_IntimidateLoopIncrement jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateLoopIncrement jumpifholdeffect BS_TARGET, HOLD_EFFECT_CLEAR_AMULET, BattleScript_IntimidatePrevented_Item jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd1..7949dbae83 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6973,9 +6973,9 @@ bool32 ShouldPostponeSwitchInAbilities(u32 battlerId) // Checks for double battle, so abilities like Intimidate wait until all battlers are switched-in before activating. if (IsDoubleBattle()) { - if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) + if (aliveOpposing1 && !aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) return TRUE; - if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerId)), PARTY_SIZE, PARTY_SIZE)) + if (!aliveOpposing1 && aliveOpposing2 && !HasNoMonsToSwitch(BATTLE_OPPOSITE(battlerId), PARTY_SIZE, PARTY_SIZE)) return TRUE; } From 4541cc3319454410db2dc5f298546117357960c3 Mon Sep 17 00:00:00 2001 From: CallmeEchoo Date: Wed, 22 Mar 2023 22:30:24 +0100 Subject: [PATCH 214/290] add check for Gorilla Tactics knock off shouldnt reset choicedMove when the pokemon has the Gorilla Tactics ability --- src/battle_script_commands.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126ca06fd1..0038844ac8 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5330,7 +5330,8 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef) gLastUsedItem = gBattleMons[battlerDef].item; gBattleMons[battlerDef].item = 0; - gBattleStruct->choicedMove[battlerDef] = 0; + if (gBattleMons[battlerDef].ability != ABILITY_GORILLA_TACTICS) + gBattleStruct->choicedMove[battlerDef] = 0; gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]]; CheckSetUnburden(battlerDef); From 299911139a56e36460fb54d0784cf55ca9d947d8 Mon Sep 17 00:00:00 2001 From: tennis Date: Wed, 22 Mar 2023 22:25:20 +0000 Subject: [PATCH 215/290] Add test for intimidate on empty slot --- test/ability_intimidate.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/test/ability_intimidate.c b/test/ability_intimidate.c index 0318435e0b..a891f9af87 100644 --- a/test/ability_intimidate.c +++ b/test/ability_intimidate.c @@ -122,3 +122,40 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack") } } } + +DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_CROAGUNK); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_HITMONTOP) { Ability(ABILITY_INTIMIDATE); }; + OPPONENT(SPECIES_RALTS); + OPPONENT(SPECIES_AZURILL); + } WHEN { + TURN { + SWITCH(playerLeft, 2); + MOVE(playerRight, MOVE_GUNK_SHOT, target: opponentLeft); + MOVE(opponentRight, MOVE_SPLASH); + } + TURN { + SWITCH(playerLeft, 3); + MOVE(playerRight, MOVE_SPLASH); + } + + + } SCENE { + MESSAGE("Wobbuffet, that's enough! Come back!"); + MESSAGE("Go! Wynaut!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUNK_SHOT, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight); + MESSAGE("Wynaut, that's enough! Come back!"); + MESSAGE("Go! Hitmontop!"); + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + NONE_OF { + MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Hitmontop's Intimidate cuts Foe Azurill's attack!"); + } +} From 03f6fe635f856f6f87798bbe5651daf23e919e40 Mon Sep 17 00:00:00 2001 From: AgustinGDLV <103095241+AgustinGDLV@users.noreply.github.com> Date: Thu, 23 Mar 2023 01:50:44 -0700 Subject: [PATCH 216/290] changed CanBeConfused to actually check its argument (#2855) --- src/battle_util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index fcfec90c2b..bcdc13080a 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -6546,8 +6546,8 @@ bool32 CanBeFrozen(u8 battlerId) bool32 CanBeConfused(u8 battlerId) { - if (GetBattlerAbility(gEffectBattler) == ABILITY_OWN_TEMPO - || gBattleMons[gEffectBattler].status2 & STATUS2_CONFUSION + if (GetBattlerAbility(battlerId) == ABILITY_OWN_TEMPO + || gBattleMons[battlerId].status2 & STATUS2_CONFUSION || IsBattlerTerrainAffected(battlerId, STATUS_FIELD_MISTY_TERRAIN)) return FALSE; return TRUE; From 023cc4d38dc144f13cd76baeded914f3b01fe709 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 05:58:26 -0300 Subject: [PATCH 217/290] Fixed erroneous uses of non e-reader Enigma Berries (#2839) --- src/battle_util.c | 6 +++--- src/battle_z_move.c | 2 +- src/pokemon.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index bcdc13080a..3e8f94bf69 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8194,7 +8194,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) return gBattleStruct->debugHoldEffects[battlerId]; else #endif - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffect; else return ItemId_GetHoldEffect(gBattleMons[battlerId].item); @@ -8203,7 +8203,7 @@ u32 GetBattlerHoldEffect(u8 battlerId, bool32 checkNegating) // static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) { - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffectParam; else return ItemId_GetHoldEffectParam(item); @@ -8211,7 +8211,7 @@ static u32 GetBattlerItemHoldEffectParam(u8 battlerId, u16 item) u32 GetBattlerHoldEffectParam(u8 battlerId) { - if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY) + if (gBattleMons[battlerId].item == ITEM_ENIGMA_BERRY_E_READER) return gEnigmaBerries[battlerId].holdEffectParam; else return ItemId_GetHoldEffectParam(gBattleMons[battlerId].item); diff --git a/src/battle_z_move.c b/src/battle_z_move.c index 9c9c5e0fa3..104a44daa5 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -199,7 +199,7 @@ bool32 IsViableZMove(u8 battlerId, u16 move) holdEffect = gBattleStruct->debugHoldEffects[battlerId]; else #endif - if (item == ITEM_ENIGMA_BERRY) + if (item == ITEM_ENIGMA_BERRY_E_READER) return FALSE; // HoldEffect = gEnigmaBerries[battlerId].holdEffect; else holdEffect = ItemId_GetHoldEffect(item); diff --git a/src/pokemon.c b/src/pokemon.c index 8087b9621c..4250d3244a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -6543,7 +6543,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s partnerSpecies = GetMonData(tradePartner, MON_DATA_SPECIES, 0); partnerHeldItem = GetMonData(tradePartner, MON_DATA_HELD_ITEM, 0); - if (partnerHeldItem == ITEM_ENIGMA_BERRY) + if (partnerHeldItem == ITEM_ENIGMA_BERRY_E_READER) partnerHoldEffect = gSaveBlock1Ptr->enigmaBerry.holdEffect; else partnerHoldEffect = ItemId_GetHoldEffect(partnerHeldItem); @@ -7213,7 +7213,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) u8 bonus; heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); - if (heldItem == ITEM_ENIGMA_BERRY) + if (heldItem == ITEM_ENIGMA_BERRY_E_READER) { if (gMain.inBattle) holdEffect = gEnigmaBerries[0].holdEffect; From 2658fe32c20d338cf5073a407353d028a449fdd5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 06:02:32 -0300 Subject: [PATCH 218/290] Removed ITEM_HAS_EFFECT (#2840) --- include/constants/items.h | 3 - include/pokemon.h | 3 +- src/battle_ai_switch_items.c | 4 +- src/data/pokemon/item_effects.h | 208 ++++++++++++++++---------------- src/party_menu.c | 17 +-- src/pokemon.c | 12 +- 6 files changed, 123 insertions(+), 124 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index 1cb2803f37..a5a3c95e2e 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -1001,7 +1001,4 @@ #define ITEM_B_USE_MEDICINE 1 #define ITEM_B_USE_OTHER 2 -// Check if the item is one that can be used on a Pokemon. -#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= LAST_BERRY_INDEX) - #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/pokemon.h b/include/pokemon.h index cbfd194c67..581677cae7 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -2,6 +2,7 @@ #define GUARD_POKEMON_H #include "sprite.h" +#include "constants/items.h" #include "constants/region_map_sections.h" #include "constants/map_groups.h" @@ -401,7 +402,7 @@ extern const struct BattleMove gBattleMoves[]; extern const u8 gFacilityClassToPicIndex[]; extern const u8 gFacilityClassToTrainerClass[]; extern const struct SpeciesInfo gSpeciesInfo[]; -extern const u8 *const gItemEffectTable[]; +extern const u8 *const gItemEffectTable[ITEMS_COUNT]; extern const u32 gExperienceTables[][MAX_LEVEL + 1]; extern const struct LevelUpMove *const gLevelUpLearnsets[]; extern const u16 *const gTeachableLearnsets[]; diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index e8512affa2..d1272d67d7 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1085,13 +1085,13 @@ static bool8 ShouldUseItem(void) item = gBattleResources->battleHistory->trainerItems[i]; if (item == ITEM_NONE) continue; - if (gItemEffectTable[item - ITEM_POTION] == NULL) + if (gItemEffectTable[item] == NULL) continue; if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffects = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffects = gItemEffectTable[item - ITEM_POTION]; + itemEffects = gItemEffectTable[item]; *(gBattleStruct->AI_itemType + gActiveBattler / 2) = GetAI_ItemType(item, itemEffects); diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 2651b4daf7..8323801d54 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -447,128 +447,128 @@ const u8 gItemEffect_TamatoBerry[10] = { EV_BERRY_FRIENDSHIP_CHANGE, }; -const u8 *const gItemEffectTable[] = +const u8 *const gItemEffectTable[ITEMS_COUNT] = { // Medicine - [ITEM_POTION - ITEM_POTION] = gItemEffect_Potion, - [ITEM_SUPER_POTION - ITEM_POTION] = gItemEffect_SuperPotion, - [ITEM_HYPER_POTION - ITEM_POTION] = gItemEffect_HyperPotion, - [ITEM_MAX_POTION - ITEM_POTION] = gItemEffect_MaxPotion, - [ITEM_FULL_RESTORE - ITEM_POTION] = gItemEffect_FullRestore, - [ITEM_REVIVE - ITEM_POTION] = gItemEffect_Revive, - [ITEM_MAX_REVIVE - ITEM_POTION] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER - ITEM_POTION] = gItemEffect_FreshWater, - [ITEM_SODA_POP - ITEM_POTION] = gItemEffect_SodaPop, - [ITEM_LEMONADE - ITEM_POTION] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK - ITEM_POTION] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER - ITEM_POTION] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT - ITEM_POTION] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER - ITEM_POTION] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB - ITEM_POTION] = gItemEffect_RevivalHerb, - [ITEM_ANTIDOTE - ITEM_POTION] = gItemEffect_Antidote, - [ITEM_PARALYZE_HEAL - ITEM_POTION] = gItemEffect_ParalyzeHeal, - [ITEM_BURN_HEAL - ITEM_POTION] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL - ITEM_POTION] = gItemEffect_IceHeal, - [ITEM_AWAKENING - ITEM_POTION] = gItemEffect_Awakening, - [ITEM_FULL_HEAL - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_ETHER - ITEM_POTION] = gItemEffect_Ether, - [ITEM_MAX_ETHER - ITEM_POTION] = gItemEffect_MaxEther, - [ITEM_ELIXIR - ITEM_POTION] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR - ITEM_POTION] = gItemEffect_MaxElixir, - [ITEM_BERRY_JUICE - ITEM_POTION] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH - ITEM_POTION] = gItemEffect_SacredAsh, - [ITEM_SWEET_HEART - ITEM_POTION] = gItemEffect_Potion, - [ITEM_MAX_HONEY - ITEM_POTION] = gItemEffect_MaxRevive, + [ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, + [ITEM_REVIVE] = gItemEffect_Revive, + [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER] = gItemEffect_FreshWater, + [ITEM_SODA_POP] = gItemEffect_SodaPop, + [ITEM_LEMONADE] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL] = gItemEffect_IceHeal, + [ITEM_AWAKENING] = gItemEffect_Awakening, + [ITEM_FULL_HEAL] = gItemEffect_FullHeal, + [ITEM_ETHER] = gItemEffect_Ether, + [ITEM_MAX_ETHER] = gItemEffect_MaxEther, + [ITEM_ELIXIR] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART] = gItemEffect_Potion, + [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, // Regional Specialties - [ITEM_PEWTER_CRUNCHIES - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_RAGE_CANDY_BAR - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_LAVA_COOKIE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_OLD_GATEAU - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_CASTELIACONE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_LUMIOSE_GALETTE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_SHALOUR_SABLE - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_BIG_MALASADA - ITEM_POTION] = gItemEffect_FullHeal, + [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, // Vitamins - [ITEM_HP_UP - ITEM_POTION] = gItemEffect_HPUp, - [ITEM_PROTEIN - ITEM_POTION] = gItemEffect_Protein, - [ITEM_IRON - ITEM_POTION] = gItemEffect_Iron, - [ITEM_CALCIUM - ITEM_POTION] = gItemEffect_Calcium, - [ITEM_ZINC - ITEM_POTION] = gItemEffect_Zinc, - [ITEM_CARBOS - ITEM_POTION] = gItemEffect_Carbos, - [ITEM_PP_UP - ITEM_POTION] = gItemEffect_PPUp, - [ITEM_PP_MAX - ITEM_POTION] = gItemEffect_PPMax, + [ITEM_HP_UP] = gItemEffect_HPUp, + [ITEM_PROTEIN] = gItemEffect_Protein, + [ITEM_IRON] = gItemEffect_Iron, + [ITEM_CALCIUM] = gItemEffect_Calcium, + [ITEM_ZINC] = gItemEffect_Zinc, + [ITEM_CARBOS] = gItemEffect_Carbos, + [ITEM_PP_UP] = gItemEffect_PPUp, + [ITEM_PP_MAX] = gItemEffect_PPMax, // EV Feathers - [ITEM_HEALTH_FEATHER - ITEM_POTION] = gItemEffect_HpFeather, - [ITEM_MUSCLE_FEATHER - ITEM_POTION] = gItemEffect_AtkFeather, - [ITEM_RESIST_FEATHER - ITEM_POTION] = gItemEffect_DefFeather, - [ITEM_GENIUS_FEATHER - ITEM_POTION] = gItemEffect_SpatkFeather, - [ITEM_CLEVER_FEATHER - ITEM_POTION] = gItemEffect_SpdefFeather, - [ITEM_SWIFT_FEATHER - ITEM_POTION] = gItemEffect_SpeedFeather, + [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, // Candy - [ITEM_RARE_CANDY - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XS - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_S - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_M - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_L - ITEM_POTION] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XL - ITEM_POTION] = gItemEffect_RareCandy, - //[ITEM_DYNAMAX_CANDY - ITEM_POTION] = gItemEffect_DynamaxCandy, // Todo + [ITEM_RARE_CANDY] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo // Medicinal Flutes - [ITEM_BLUE_FLUTE - ITEM_POTION] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE - ITEM_POTION] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE - ITEM_POTION] = gItemEffect_RedFlute, + [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE] = gItemEffect_RedFlute, // X Items - [ITEM_X_ATTACK - ITEM_POTION] = gItemEffect_XAttack, - [ITEM_X_DEFENSE - ITEM_POTION] = gItemEffect_XDefense, - [ITEM_X_SPEED - ITEM_POTION] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY - ITEM_POTION] = gItemEffect_XAccuracy, - [ITEM_X_SP_ATK - ITEM_POTION] = gItemEffect_XSpecialAttack, - [ITEM_X_SP_DEF - ITEM_POTION] = gItemEffect_XSpecialDefense, + [ITEM_X_ATTACK] = gItemEffect_XAttack, + [ITEM_X_DEFENSE] = gItemEffect_XDefense, + [ITEM_X_SPEED] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, - [ITEM_DIRE_HIT - ITEM_POTION] = gItemEffect_DireHit, - [ITEM_GUARD_SPEC - ITEM_POTION] = gItemEffect_GuardSpec, + [ITEM_DIRE_HIT] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS - ITEM_POTION] = gItemEffect_MaxMushrooms, // Todo + //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo // Evolution Items - [ITEM_FIRE_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_WATER_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_THUNDER_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_LEAF_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_ICE_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SUN_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_MOON_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SHINY_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_DUSK_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_DAWN_STONE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_SWEET_APPLE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_TART_APPLE - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_CRACKED_POT - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_CHIPPED_POT - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_GALARICA_CUFF - ITEM_POTION] = gItemEffect_EvoItem, - [ITEM_GALARICA_WREATH - ITEM_POTION] = gItemEffect_EvoItem, + [ITEM_FIRE_STONE] = gItemEffect_EvoItem, + [ITEM_WATER_STONE] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE] = gItemEffect_EvoItem, + [ITEM_ICE_STONE] = gItemEffect_EvoItem, + [ITEM_SUN_STONE] = gItemEffect_EvoItem, + [ITEM_MOON_STONE] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, + [ITEM_TART_APPLE] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, // Berries - [ITEM_CHERI_BERRY - ITEM_POTION] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY - ITEM_POTION] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY - ITEM_POTION] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY - ITEM_POTION] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY - ITEM_POTION] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY - ITEM_POTION] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY - ITEM_POTION] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY - ITEM_POTION] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY - ITEM_POTION] = gItemEffect_FullHeal, - [ITEM_SITRUS_BERRY - ITEM_POTION] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX - ITEM_POTION] = NULL, + [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX] = NULL, }; diff --git a/src/party_menu.c b/src/party_menu.c index 9a04f4c503..6964fa0c59 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4287,7 +4287,10 @@ static bool8 IsHPRecoveryItem(u16 item) if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - effect = gItemEffectTable[item - ITEM_POTION]; + effect = gItemEffectTable[item]; + + if (effect == NULL) + return FALSE; if (effect[4] & ITEM4_HEAL_HP) return TRUE; @@ -4798,9 +4801,9 @@ void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) if (item == ITEM_ENIGMA_BERRY_E_READER) effect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - effect = gItemEffectTable[item - ITEM_POTION]; + effect = gItemEffectTable[item]; - if (!(effect[4] & ITEM4_HEAL_PP_ONE)) + if (effect == NULL || !(effect[4] & ITEM4_HEAL_PP_ONE)) { gPartyMenu.data1 = 0; TryUsePPItem(taskId); @@ -5673,14 +5676,14 @@ u8 GetItemEffectType(u16 item) const u8 *itemEffect; u32 statusCure; - if (!ITEM_HAS_EFFECT(item)) - return ITEM_EFFECT_NONE; - // Read the item's effect properties. if (item == ITEM_ENIGMA_BERRY_E_READER) itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect; else - itemEffect = gItemEffectTable[item - ITEM_POTION]; + itemEffect = gItemEffectTable[item]; + + if (itemEffect == NULL) + return ITEM_EFFECT_NONE; if ((itemEffect[0] & ITEM0_DIRE_HIT) || itemEffect[1] || (itemEffect[3] & ITEM3_GUARD_SPEC)) return ITEM_EFFECT_X_ITEM; diff --git a/src/pokemon.c b/src/pokemon.c index 4250d3244a..f9f7d811db 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5770,9 +5770,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } // Skip using the item if it won't do anything - if (!ITEM_HAS_EFFECT(item)) - return TRUE; - if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) + if (gItemEffectTable[item] == NULL && item != ITEM_ENIGMA_BERRY_E_READER) return TRUE; // Get item effect @@ -5785,7 +5783,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } else { - itemEffect = gItemEffectTable[item - ITEM_POTION]; + itemEffect = gItemEffectTable[item]; } // Do item effect @@ -6339,9 +6337,9 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) offset = ITEM_EFFECT_ARG_START; - temp = gItemEffectTable[itemId - ITEM_POTION]; + temp = gItemEffectTable[itemId]; - if (!temp && itemId != ITEM_ENIGMA_BERRY_E_READER) + if (temp != NULL && !temp && itemId != ITEM_ENIGMA_BERRY_E_READER) return 0; if (itemId == ITEM_ENIGMA_BERRY_E_READER) @@ -6469,7 +6467,7 @@ u8 *UseStatIncreaseItem(u16 itemId) } else { - itemEffect = gItemEffectTable[itemId - ITEM_POTION]; + itemEffect = gItemEffectTable[itemId]; } gPotentialItemEffectBattler = gBattlerInMenuId; From 8cf357a37ba4c57efd638a1bd22e24a3e31a649e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 23 Mar 2023 12:29:04 +0100 Subject: [PATCH 219/290] tests for dire claw ceaseless edge barb barrage --- src/battle_message.c | 2 +- src/battle_script_commands.c | 2 +- test/move_effect_barb_barrage.c | 43 +++++++ test/move_effect_dire_claw.c | 138 +++++++++++++++++++++ test/move_effect_hit_set_entry_hazardss.c | 117 ++++++++++++++++++ test/move_effect_spikes.c | 8 +- test/move_effect_tri_attack.c | 144 ++++++++++++++++++++++ test/move_effect_venoshock.c | 27 ++++ 8 files changed, 475 insertions(+), 6 deletions(-) create mode 100644 test/move_effect_barb_barrage.c create mode 100644 test/move_effect_dire_claw.c create mode 100644 test/move_effect_hit_set_entry_hazardss.c create mode 100644 test/move_effect_tri_attack.c create mode 100644 test/move_effect_venoshock.c diff --git a/src/battle_message.c b/src/battle_message.c index 562680f897..2ecfac0c7d 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -209,7 +209,7 @@ static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!"); static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!"); -static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\nthe opponent's side!"); +static const u8 sText_SpikesScattered[] = _("Spikes were scattered all around\n{B_DEF_TEAM2} team!"); static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby spikes!"); static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!"); static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}'s PERISH count\nfell to {B_BUFF1}!"); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index bd444e04ec..34257d896b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3783,7 +3783,7 @@ void SetMoveEffect(bool32 primary, u32 certain) } break; case MOVE_EFFECT_SPIKES: - if (!(gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SPIKES)) + if (gSideTimers[GetBattlerSide(gEffectBattler)].spikesAmount < 3) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SPIKESSCATTERED; BattleScriptPush(gBattlescriptCurrInstr + 1); diff --git a/test/move_effect_barb_barrage.c b/test/move_effect_barb_barrage.c new file mode 100644 index 0000000000..9d9c2cc843 --- /dev/null +++ b/test/move_effect_barb_barrage.c @@ -0,0 +1,43 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + //ASSUME(gBattleMoves[MOVE_BARB_BARRAGE].effect == EFFECT_BARB_BARRAGE); +} + +SINGLE_BATTLE_TEST("Barb Barrage inflicts poison") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_BARB_BARRAGE); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BARB_BARRAGE, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); + STATUS_ICON(opponent, poison: TRUE); + } +} + +SINGLE_BATTLE_TEST("Barb Barrage's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(status1);} + } WHEN { + TURN { MOVE(player, MOVE_BARB_BARRAGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BARB_BARRAGE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c new file mode 100644 index 0000000000..a5270ce3fb --- /dev/null +++ b/test/move_effect_dire_claw.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_DIRE_CLAW].effect == EFFECT_DIRE_CLAW); +} + +// found by brute-force +#define RNG_SLEEP 0xcb0 +#define RNG_POISON 0x2BE +#define RNG_PARALYSIS 5 + +SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respectively") +{ + u8 statusAnim; + u16 species; + u32 rng; + #if B_PARALYZE_ELECTRIC >= GEN_6 + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; } + #endif // B_PARALYZE_ELECTRIC + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ARBOK;} + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemon with abilities preventing respective statuses") +{ + u8 statusAnim; + u16 species, ability; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + #if P_GEN_4_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + #endif // P_GEN_4_POKEMON + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } + + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) {Ability(ability);} + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + NOT STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon which is already statused") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_BURN);} + } WHEN { + TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_SLP) { + NOT STATUS_ICON(opponent, sleep: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PSN) { + NOT STATUS_ICON(opponent, poison: TRUE); + } + } +} diff --git a/test/move_effect_hit_set_entry_hazardss.c b/test/move_effect_hit_set_entry_hazardss.c new file mode 100644 index 0000000000..4e9761aac3 --- /dev/null +++ b/test/move_effect_hit_set_entry_hazardss.c @@ -0,0 +1,117 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STONE_AXE].effect == EFFECT_HIT_SET_ENTRY_HAZARD); + ASSUME(gBattleMoves[MOVE_CEASELESS_EDGE].effect == EFFECT_HIT_SET_ENTRY_HAZARD); +} + +SINGLE_BATTLE_TEST("Stone Axe / Ceaseless Edge set up hazards after hitting the target") +{ + u16 move; + PARAMETRIZE {move = MOVE_STONE_AXE; } + PARAMETRIZE {move = MOVE_CEASELESS_EDGE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (move == MOVE_CEASELESS_EDGE) { + MESSAGE("Spikes were scattered all around the opposing team!"); + } + else { + MESSAGE("Pointed stones float in the air around the opposing team!"); + } + MESSAGE("2 sent out Wobbuffet!"); + if (move == MOVE_CEASELESS_EDGE) { + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Foe Wobbuffet is hurt by spikes!"); + } + else { + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wobbuffet!"); + } + } +} + +SINGLE_BATTLE_TEST("Ceaseless Edge can set up to 3 layers of Spikes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { MOVE(player, MOVE_CEASELESS_EDGE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + MESSAGE("Spikes were scattered all around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_CEASELESS_EDGE, player); + HP_BAR(opponent); + NOT MESSAGE("Spikes were scattered all around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 4); + MESSAGE("Foe Wynaut is hurt by spikes!"); + } +} + +SINGLE_BATTLE_TEST("Stone Axe can set up pointed stones only once") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { MOVE(player, MOVE_STONE_AXE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STONE_AXE, player); + HP_BAR(opponent); + NOT MESSAGE("Pointed stones float in the air around the opposing team!"); + + MESSAGE("2 sent out Wynaut!"); + HP_BAR(opponent, damage: maxHP / 8); + MESSAGE("Pointed stones dug into Foe Wynaut!"); + } +} + diff --git a/test/move_effect_spikes.c b/test/move_effect_spikes.c index 33b0bad4b9..0c84a5fb1e 100644 --- a/test/move_effect_spikes.c +++ b/test/move_effect_spikes.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Spikes damage on switch in") s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); for (count = 0; count < layers; ++count) { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); } MESSAGE("2 sent out Wynaut!"); HP_BAR(opponent, damage: maxHP / divisor); @@ -51,11 +51,11 @@ SINGLE_BATTLE_TEST("Spikes fails after 3 layers") } SCENE { s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKES, player); - MESSAGE("Spikes were scattered all around the opponent's side!"); + MESSAGE("Spikes were scattered all around the opposing team!"); MESSAGE("Wobbuffet used Spikes!"); MESSAGE("But it failed!"); MESSAGE("2 sent out Wynaut!"); diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c new file mode 100644 index 0000000000..31627ef2d1 --- /dev/null +++ b/test/move_effect_tri_attack.c @@ -0,0 +1,144 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); +} + +// found by brute-force +#define RNG_PARALYSIS 0xcb0 +#define RNG_BURN 0x2BE +#define RNG_FREEZE 5 + +SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice types respectively") +{ + u8 statusAnim; + u16 species; + u32 rng; + #if B_PARALYZE_ELECTRIC >= GEN_6 + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU;} + #endif // B_PARALYZE_ELECTRIC + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_ARCANINE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_GLALIE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilities preventing respective statuses") +{ + u8 statusAnim; + u16 species, ability; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + #if P_GEN_4_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + #endif // P_GEN_4_POKEMON + #if P_GEN_7_POKEMON == TRUE + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + #endif // P_GEN_7_POKEMON + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) {Ability(ability);} + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} + +SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is already statused") +{ + u8 statusAnim; + u32 rng; + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + GIVEN { + RNGSeed(rng); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + } WHEN { + TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN {} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_STATUS, statusAnim, opponent); + if (statusAnim == B_ANIM_STATUS_BRN) { + NOT STATUS_ICON(opponent, burn: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_FRZ) { + NOT STATUS_ICON(opponent, freeze: TRUE); + } + else if (statusAnim == B_ANIM_STATUS_PRZ) { + NOT STATUS_ICON(opponent, paralysis: TRUE); + } + } +} diff --git a/test/move_effect_venoshock.c b/test/move_effect_venoshock.c new file mode 100644 index 0000000000..876f611c93 --- /dev/null +++ b/test/move_effect_venoshock.c @@ -0,0 +1,27 @@ +#include "global.h" +#include "test_battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_VENOSHOCK].effect == EFFECT_VENOSHOCK); +} + +SINGLE_BATTLE_TEST("Venoshock's power doubles if the target is poisoned/badly poisoned", s16 damage) +{ + u32 status1; + PARAMETRIZE { status1 = 0; } + PARAMETRIZE { status1 = STATUS1_POISON; } + PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) {Status1(status1);} + } WHEN { + TURN { MOVE(player, MOVE_VENOSHOCK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_VENOSHOCK, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[2].damage); + } +} From f15fb1540fe60d4f791cb537406cbd5f3ecdba0a Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Thu, 23 Mar 2023 23:16:08 +0100 Subject: [PATCH 220/290] Allow Kubfu evolution with Scroll items --- src/data/pokemon/evolution.h | 4 +- src/data/pokemon/item_effects.h | 210 ++++++++++++++++---------------- src/party_menu.c | 3 +- 3 files changed, 112 insertions(+), 105 deletions(-) diff --git a/src/data/pokemon/evolution.h b/src/data/pokemon/evolution.h index 4f09867a6c..b76e83a730 100644 --- a/src/data/pokemon/evolution.h +++ b/src/data/pokemon/evolution.h @@ -542,7 +542,9 @@ const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] = [SPECIES_DREEPY] = {{EVO_LEVEL, 50, SPECIES_DRAKLOAK}}, [SPECIES_DRAKLOAK] = {{EVO_LEVEL, 60, SPECIES_DRAGAPULT}}, [SPECIES_KUBFU] = {{EVO_DARK_SCROLL, 0, SPECIES_URSHIFU}, - {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, + {EVO_ITEM, ITEM_SCROLL_OF_DARKNESS, SPECIES_URSHIFU}, + {EVO_WATER_SCROLL, 0, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}, + {EVO_ITEM, ITEM_SCROLL_OF_WATERS, SPECIES_URSHIFU_RAPID_STRIKE_STYLE}}, #endif [SPECIES_RATTATA_ALOLAN] = {{EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN}}, [SPECIES_SANDSHREW_ALOLAN] = {{EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}}, diff --git a/src/data/pokemon/item_effects.h b/src/data/pokemon/item_effects.h index 8323801d54..607f578140 100644 --- a/src/data/pokemon/item_effects.h +++ b/src/data/pokemon/item_effects.h @@ -450,125 +450,129 @@ const u8 gItemEffect_TamatoBerry[10] = { const u8 *const gItemEffectTable[ITEMS_COUNT] = { // Medicine - [ITEM_POTION] = gItemEffect_Potion, - [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, - [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, - [ITEM_MAX_POTION] = gItemEffect_MaxPotion, - [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, - [ITEM_REVIVE] = gItemEffect_Revive, - [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, - [ITEM_FRESH_WATER] = gItemEffect_FreshWater, - [ITEM_SODA_POP] = gItemEffect_SodaPop, - [ITEM_LEMONADE] = gItemEffect_Lemonade, - [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, - [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, - [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, - [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, - [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, - [ITEM_ANTIDOTE] = gItemEffect_Antidote, - [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, - [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, - [ITEM_ICE_HEAL] = gItemEffect_IceHeal, - [ITEM_AWAKENING] = gItemEffect_Awakening, - [ITEM_FULL_HEAL] = gItemEffect_FullHeal, - [ITEM_ETHER] = gItemEffect_Ether, - [ITEM_MAX_ETHER] = gItemEffect_MaxEther, - [ITEM_ELIXIR] = gItemEffect_Elixir, - [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, - [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, - [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, - [ITEM_SWEET_HEART] = gItemEffect_Potion, - [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, + [ITEM_POTION] = gItemEffect_Potion, + [ITEM_SUPER_POTION] = gItemEffect_SuperPotion, + [ITEM_HYPER_POTION] = gItemEffect_HyperPotion, + [ITEM_MAX_POTION] = gItemEffect_MaxPotion, + [ITEM_FULL_RESTORE] = gItemEffect_FullRestore, + [ITEM_REVIVE] = gItemEffect_Revive, + [ITEM_MAX_REVIVE] = gItemEffect_MaxRevive, + [ITEM_FRESH_WATER] = gItemEffect_FreshWater, + [ITEM_SODA_POP] = gItemEffect_SodaPop, + [ITEM_LEMONADE] = gItemEffect_Lemonade, + [ITEM_MOOMOO_MILK] = gItemEffect_MoomooMilk, + [ITEM_ENERGY_POWDER] = gItemEffect_EnergyPowder, + [ITEM_ENERGY_ROOT] = gItemEffect_EnergyRoot, + [ITEM_HEAL_POWDER] = gItemEffect_HealPowder, + [ITEM_REVIVAL_HERB] = gItemEffect_RevivalHerb, + [ITEM_ANTIDOTE] = gItemEffect_Antidote, + [ITEM_PARALYZE_HEAL] = gItemEffect_ParalyzeHeal, + [ITEM_BURN_HEAL] = gItemEffect_BurnHeal, + [ITEM_ICE_HEAL] = gItemEffect_IceHeal, + [ITEM_AWAKENING] = gItemEffect_Awakening, + [ITEM_FULL_HEAL] = gItemEffect_FullHeal, + [ITEM_ETHER] = gItemEffect_Ether, + [ITEM_MAX_ETHER] = gItemEffect_MaxEther, + [ITEM_ELIXIR] = gItemEffect_Elixir, + [ITEM_MAX_ELIXIR] = gItemEffect_MaxElixir, + [ITEM_BERRY_JUICE] = gItemEffect_BerryJuice, + [ITEM_SACRED_ASH] = gItemEffect_SacredAsh, + [ITEM_SWEET_HEART] = gItemEffect_Potion, + [ITEM_MAX_HONEY] = gItemEffect_MaxRevive, // Regional Specialties - [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, - [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, - [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, - [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, - [ITEM_CASTELIACONE] = gItemEffect_FullHeal, - [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, - [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, - [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, + [ITEM_PEWTER_CRUNCHIES] = gItemEffect_FullHeal, + [ITEM_RAGE_CANDY_BAR] = gItemEffect_FullHeal, + [ITEM_LAVA_COOKIE] = gItemEffect_FullHeal, + [ITEM_OLD_GATEAU] = gItemEffect_FullHeal, + [ITEM_CASTELIACONE] = gItemEffect_FullHeal, + [ITEM_LUMIOSE_GALETTE] = gItemEffect_FullHeal, + [ITEM_SHALOUR_SABLE] = gItemEffect_FullHeal, + [ITEM_BIG_MALASADA] = gItemEffect_FullHeal, // Vitamins - [ITEM_HP_UP] = gItemEffect_HPUp, - [ITEM_PROTEIN] = gItemEffect_Protein, - [ITEM_IRON] = gItemEffect_Iron, - [ITEM_CALCIUM] = gItemEffect_Calcium, - [ITEM_ZINC] = gItemEffect_Zinc, - [ITEM_CARBOS] = gItemEffect_Carbos, - [ITEM_PP_UP] = gItemEffect_PPUp, - [ITEM_PP_MAX] = gItemEffect_PPMax, + [ITEM_HP_UP] = gItemEffect_HPUp, + [ITEM_PROTEIN] = gItemEffect_Protein, + [ITEM_IRON] = gItemEffect_Iron, + [ITEM_CALCIUM] = gItemEffect_Calcium, + [ITEM_ZINC] = gItemEffect_Zinc, + [ITEM_CARBOS] = gItemEffect_Carbos, + [ITEM_PP_UP] = gItemEffect_PPUp, + [ITEM_PP_MAX] = gItemEffect_PPMax, // EV Feathers - [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, - [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, - [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, - [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, - [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, - [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, + [ITEM_HEALTH_FEATHER] = gItemEffect_HpFeather, + [ITEM_MUSCLE_FEATHER] = gItemEffect_AtkFeather, + [ITEM_RESIST_FEATHER] = gItemEffect_DefFeather, + [ITEM_GENIUS_FEATHER] = gItemEffect_SpatkFeather, + [ITEM_CLEVER_FEATHER] = gItemEffect_SpdefFeather, + [ITEM_SWIFT_FEATHER] = gItemEffect_SpeedFeather, // Candy - [ITEM_RARE_CANDY] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, - [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, - //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo + [ITEM_RARE_CANDY] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XS] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_S] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_M] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_L] = gItemEffect_RareCandy, + [ITEM_EXP_CANDY_XL] = gItemEffect_RareCandy, + //[ITEM_DYNAMAX_CANDY] = gItemEffect_DynamaxCandy, // Todo // Medicinal Flutes - [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, - [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, - [ITEM_RED_FLUTE] = gItemEffect_RedFlute, + [ITEM_BLUE_FLUTE] = gItemEffect_BlueFlute, + [ITEM_YELLOW_FLUTE] = gItemEffect_YellowFlute, + [ITEM_RED_FLUTE] = gItemEffect_RedFlute, // X Items - [ITEM_X_ATTACK] = gItemEffect_XAttack, - [ITEM_X_DEFENSE] = gItemEffect_XDefense, - [ITEM_X_SPEED] = gItemEffect_XSpeed, - [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, - [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, - [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, + [ITEM_X_ATTACK] = gItemEffect_XAttack, + [ITEM_X_DEFENSE] = gItemEffect_XDefense, + [ITEM_X_SPEED] = gItemEffect_XSpeed, + [ITEM_X_ACCURACY] = gItemEffect_XAccuracy, + [ITEM_X_SP_ATK] = gItemEffect_XSpecialAttack, + [ITEM_X_SP_DEF] = gItemEffect_XSpecialDefense, - [ITEM_DIRE_HIT] = gItemEffect_DireHit, - [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, + [ITEM_DIRE_HIT] = gItemEffect_DireHit, + [ITEM_GUARD_SPEC] = gItemEffect_GuardSpec, - //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo + //[ITEM_MAX_MUSHROOMS] = gItemEffect_MaxMushrooms, // Todo // Evolution Items - [ITEM_FIRE_STONE] = gItemEffect_EvoItem, - [ITEM_WATER_STONE] = gItemEffect_EvoItem, - [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, - [ITEM_LEAF_STONE] = gItemEffect_EvoItem, - [ITEM_ICE_STONE] = gItemEffect_EvoItem, - [ITEM_SUN_STONE] = gItemEffect_EvoItem, - [ITEM_MOON_STONE] = gItemEffect_EvoItem, - [ITEM_SHINY_STONE] = gItemEffect_EvoItem, - [ITEM_DUSK_STONE] = gItemEffect_EvoItem, - [ITEM_DAWN_STONE] = gItemEffect_EvoItem, - [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, - [ITEM_TART_APPLE] = gItemEffect_EvoItem, - [ITEM_CRACKED_POT] = gItemEffect_EvoItem, - [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, - [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, - [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_FIRE_STONE] = gItemEffect_EvoItem, + [ITEM_WATER_STONE] = gItemEffect_EvoItem, + [ITEM_THUNDER_STONE] = gItemEffect_EvoItem, + [ITEM_LEAF_STONE] = gItemEffect_EvoItem, + [ITEM_ICE_STONE] = gItemEffect_EvoItem, + [ITEM_SUN_STONE] = gItemEffect_EvoItem, + [ITEM_MOON_STONE] = gItemEffect_EvoItem, + [ITEM_SHINY_STONE] = gItemEffect_EvoItem, + [ITEM_DUSK_STONE] = gItemEffect_EvoItem, + [ITEM_DAWN_STONE] = gItemEffect_EvoItem, + [ITEM_SWEET_APPLE] = gItemEffect_EvoItem, + [ITEM_TART_APPLE] = gItemEffect_EvoItem, + [ITEM_CRACKED_POT] = gItemEffect_EvoItem, + [ITEM_CHIPPED_POT] = gItemEffect_EvoItem, + [ITEM_GALARICA_CUFF] = gItemEffect_EvoItem, + [ITEM_GALARICA_WREATH] = gItemEffect_EvoItem, + [ITEM_AUSPICIOUS_ARMOR] = gItemEffect_EvoItem, + [ITEM_MALICIOUS_ARMOR] = gItemEffect_EvoItem, + [ITEM_SCROLL_OF_DARKNESS] = gItemEffect_EvoItem, + [ITEM_SCROLL_OF_WATERS] = gItemEffect_EvoItem, // Berries - [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, - [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, - [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, - [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, - [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, - [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, - [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, - [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, - [ITEM_LUM_BERRY] = gItemEffect_FullHeal, - [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, - [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, - [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, - [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, - [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, - [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, - [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, - [LAST_BERRY_INDEX] = NULL, + [ITEM_CHERI_BERRY] = gItemEffect_CheriBerry, + [ITEM_CHESTO_BERRY] = gItemEffect_ChestoBerry, + [ITEM_PECHA_BERRY] = gItemEffect_PechaBerry, + [ITEM_RAWST_BERRY] = gItemEffect_RawstBerry, + [ITEM_ASPEAR_BERRY] = gItemEffect_AspearBerry, + [ITEM_LEPPA_BERRY] = gItemEffect_LeppaBerry, + [ITEM_ORAN_BERRY] = gItemEffect_OranBerry, + [ITEM_PERSIM_BERRY] = gItemEffect_PersimBerry, + [ITEM_LUM_BERRY] = gItemEffect_FullHeal, + [ITEM_SITRUS_BERRY] = gItemEffect_SitrusBerry, + [ITEM_POMEG_BERRY] = gItemEffect_PomegBerry, + [ITEM_KELPSY_BERRY] = gItemEffect_KelpsyBerry, + [ITEM_QUALOT_BERRY] = gItemEffect_QualotBerry, + [ITEM_HONDEW_BERRY] = gItemEffect_HondewBerry, + [ITEM_GREPA_BERRY] = gItemEffect_GrepaBerry, + [ITEM_TAMATO_BERRY] = gItemEffect_TamatoBerry, + [LAST_BERRY_INDEX] = NULL, }; diff --git a/src/party_menu.c b/src/party_menu.c index 6964fa0c59..9185657a78 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -5516,7 +5516,8 @@ void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) } else { - RemoveBagItem(gSpecialVar_ItemId, 1); + if (ItemId_GetPocket(gSpecialVar_ItemId) != POCKET_KEY_ITEMS) + RemoveBagItem(gSpecialVar_ItemId, 1); FreePartyPointers(); } } From e601719c911b7c21421c36c69089a9f379e2704d Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Mar 2023 00:04:08 +0100 Subject: [PATCH 221/290] Add new PLA form change items --- include/constants/items.h | 6 +++- src/data/item_icon_table.h | 3 ++ src/data/items.h | 36 +++++++++++++++++++ src/data/pokemon/form_change_table_pointers.h | 4 +++ src/data/pokemon/form_change_tables.h | 14 +++++++- src/data/text/item_descriptions.h | 15 ++++++++ 6 files changed, 76 insertions(+), 2 deletions(-) diff --git a/include/constants/items.h b/include/constants/items.h index d7d3253762..2d186601b6 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -965,7 +965,11 @@ #define ITEM_STEEL_TERA_SHARD 790 #define ITEM_WATER_TERA_SHARD 791 -#define ITEMS_COUNT 792 +#define ITEM_ADAMANT_CRYSTAL 792 +#define ITEM_GRISEOUS_CORE 793 +#define ITEM_LUSTROUS_GLOBE 794 + +#define ITEMS_COUNT 795 #define ITEM_FIELD_ARROW ITEMS_COUNT // A special item id associated with "Cancel"/"Exit" etc. in a list of items or decorations diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index 0dbec3f856..a0c27ea72a 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -837,6 +837,9 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, + [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, + [ITEM_GRISEOUS_CORE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, + [ITEM_LUSTROUS_GLOBE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; diff --git a/src/data/items.h b/src/data/items.h index 982375f3ee..82e41901c9 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -10247,4 +10247,40 @@ const struct Item gItems[] = .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, }, + + [ITEM_ADAMANT_CRYSTAL] = + { + .name = _("AdamantCrystl"), + .itemId = ITEM_ADAMANT_CRYSTAL, + .price = 0, + .description = sAdamantCrystalDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_GRISEOUS_CORE] = + { + .name = _("Griseous Core"), + .itemId = ITEM_GRISEOUS_CORE, + .price = 0, + .description = sGriseousCoreDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, + + [ITEM_LUSTROUS_GLOBE] = + { + .name = _("LustrousGlobe"), + .itemId = ITEM_LUSTROUS_GLOBE, + .price = 0, + .description = sLustrousGlobeDesc, + .pocket = POCKET_ITEMS, + .type = ITEM_USE_BAG_MENU, + .fieldUseFunc = ItemUseOutOfBattle_CannotUse, + .flingPower = 60, + }, }; diff --git a/src/data/pokemon/form_change_table_pointers.h b/src/data/pokemon/form_change_table_pointers.h index 90be7112b6..62afeb2e05 100644 --- a/src/data/pokemon/form_change_table_pointers.h +++ b/src/data/pokemon/form_change_table_pointers.h @@ -1,6 +1,10 @@ const struct FormChange *const gFormChangeTablePointers[NUM_SPECIES] = { #if P_GEN_4_POKEMON == TRUE + [SPECIES_DIALGA] = sDialgaFormChangeTable, + [SPECIES_DIALGA_ORIGIN] = sDialgaFormChangeTable, + [SPECIES_PALKIA] = sPalkiaFormChangeTable, + [SPECIES_PALKIA_ORIGIN] = sPalkiaFormChangeTable, [SPECIES_GIRATINA] = sGiratinaFormChangeTable, [SPECIES_GIRATINA_ORIGIN] = sGiratinaFormChangeTable, [SPECIES_SHAYMIN] = sShayminFormChangeTable, diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h index 94da0add36..723bda4b2d 100644 --- a/src/data/pokemon/form_change_tables.h +++ b/src/data/pokemon/form_change_tables.h @@ -44,9 +44,21 @@ FORM_BATTLE_END: #define NIGHT 2 #if P_GEN_4_POKEMON == TRUE +static const struct FormChange sDialgaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_DIALGA, ITEM_NONE}, + {FORM_ITEM_HOLD, SPECIES_DIALGA_ORIGIN, ITEM_ADAMANT_CRYSTAL}, + {FORM_CHANGE_END}, +}; + +static const struct FormChange sPalkiaFormChangeTable[] = { + {FORM_ITEM_HOLD, SPECIES_PALKIA, ITEM_NONE}, + {FORM_ITEM_HOLD, SPECIES_PALKIA_ORIGIN, ITEM_LUSTROUS_GLOBE}, + {FORM_CHANGE_END}, +}; + static const struct FormChange sGiratinaFormChangeTable[] = { {FORM_ITEM_HOLD, SPECIES_GIRATINA, ITEM_NONE}, - {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_ORB}, + {FORM_ITEM_HOLD, SPECIES_GIRATINA_ORIGIN, ITEM_GRISEOUS_CORE}, {FORM_CHANGE_END}, }; diff --git a/src/data/text/item_descriptions.h b/src/data/text/item_descriptions.h index cee413aa51..da15f001c8 100644 --- a/src/data/text/item_descriptions.h +++ b/src/data/text/item_descriptions.h @@ -3877,3 +3877,18 @@ static const u8 sTeraShardDesc[] = _( "These shards may\n" "form when a Tera\n" "Pokémon faints."); + +static const u8 sAdamantCrystalDesc[] = _( + "A large, glowing gem\n" + "that lets Dialga\n" + "change form."); + +static const u8 sGriseousCoreDesc[] = _( + "A large, glowing gem\n" + "that lets Giratina\n" + "change form."); + +static const u8 sLustrousGlobeDesc[] = _( + "A large, glowing gem\n" + "that lets Palkia\n" + "change form."); From cd6d71cd01118ecab1405ddf28ce8dc4b00a51fb Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Fri, 24 Mar 2023 00:50:06 +0100 Subject: [PATCH 222/290] Add most of the new item icons (Clear Amulet & Shards missing) --- .../items/icon_palettes/ability_shield.pal | 19 ++++++ .../items/icon_palettes/adamant_crystal.pal | 19 ++++++ .../items/icon_palettes/auspicious_armor.pal | 19 ++++++ .../items/icon_palettes/big_bamboo_shoot.pal | 19 ++++++ .../items/icon_palettes/booster_energy.pal | 19 ++++++ graphics/items/icon_palettes/covert_cloak.pal | 19 ++++++ .../items/icon_palettes/gimmighoul_coin.pal | 19 ++++++ .../items/icon_palettes/griseous_core.pal | 19 ++++++ .../items/icon_palettes/leaders_crest.pal | 19 ++++++ graphics/items/icon_palettes/loaded_dice.pal | 19 ++++++ .../items/icon_palettes/lustrous_globe.pal | 19 ++++++ .../items/icon_palettes/malicious_armor.pal | 19 ++++++ graphics/items/icon_palettes/mirror_herb.pal | 19 ++++++ .../items/icon_palettes/punching_glove.pal | 19 ++++++ .../icon_palettes/scroll_of_darkness.pal | 19 ++++++ .../items/icon_palettes/scroll_of_waters.pal | 19 ++++++ graphics/items/icon_palettes/tera_orb.pal | 19 ++++++ .../items/icon_palettes/tiny_bamboo_shoot.pal | 19 ++++++ graphics/items/icons/ability_shield.png | Bin 0 -> 692 bytes graphics/items/icons/adamant_crystal.png | Bin 0 -> 735 bytes graphics/items/icons/auspicious_armor.png | Bin 0 -> 710 bytes graphics/items/icons/big_bamboo_shoot.png | Bin 0 -> 300 bytes graphics/items/icons/booster_energy.png | Bin 0 -> 309 bytes graphics/items/icons/covert_cloak.png | Bin 0 -> 308 bytes graphics/items/icons/gimmighoul_coin.png | Bin 0 -> 270 bytes graphics/items/icons/griseous_core.png | Bin 0 -> 724 bytes graphics/items/icons/leaders_crest.png | Bin 0 -> 276 bytes graphics/items/icons/loaded_dice.png | Bin 0 -> 307 bytes graphics/items/icons/lustrous_globe.png | Bin 0 -> 750 bytes graphics/items/icons/malicious_armor.png | Bin 0 -> 690 bytes graphics/items/icons/mirror_herb.png | Bin 0 -> 331 bytes graphics/items/icons/punching_glove.png | Bin 0 -> 682 bytes graphics/items/icons/scroll_of_darkness.png | Bin 0 -> 264 bytes graphics/items/icons/scroll_of_waters.png | Bin 0 -> 264 bytes graphics/items/icons/tera_orb.png | Bin 0 -> 327 bytes graphics/items/icons/tiny_bamboo_shoot.png | Bin 0 -> 249 bytes include/graphics.h | 39 ++++++++++++ src/data/graphics/items.h | 60 +++++++++++++++--- src/data/item_icon_table.h | 36 +++++------ 39 files changed, 451 insertions(+), 26 deletions(-) create mode 100644 graphics/items/icon_palettes/ability_shield.pal create mode 100644 graphics/items/icon_palettes/adamant_crystal.pal create mode 100644 graphics/items/icon_palettes/auspicious_armor.pal create mode 100644 graphics/items/icon_palettes/big_bamboo_shoot.pal create mode 100644 graphics/items/icon_palettes/booster_energy.pal create mode 100644 graphics/items/icon_palettes/covert_cloak.pal create mode 100644 graphics/items/icon_palettes/gimmighoul_coin.pal create mode 100644 graphics/items/icon_palettes/griseous_core.pal create mode 100644 graphics/items/icon_palettes/leaders_crest.pal create mode 100644 graphics/items/icon_palettes/loaded_dice.pal create mode 100644 graphics/items/icon_palettes/lustrous_globe.pal create mode 100644 graphics/items/icon_palettes/malicious_armor.pal create mode 100644 graphics/items/icon_palettes/mirror_herb.pal create mode 100644 graphics/items/icon_palettes/punching_glove.pal create mode 100644 graphics/items/icon_palettes/scroll_of_darkness.pal create mode 100644 graphics/items/icon_palettes/scroll_of_waters.pal create mode 100644 graphics/items/icon_palettes/tera_orb.pal create mode 100644 graphics/items/icon_palettes/tiny_bamboo_shoot.pal create mode 100644 graphics/items/icons/ability_shield.png create mode 100644 graphics/items/icons/adamant_crystal.png create mode 100644 graphics/items/icons/auspicious_armor.png create mode 100644 graphics/items/icons/big_bamboo_shoot.png create mode 100644 graphics/items/icons/booster_energy.png create mode 100644 graphics/items/icons/covert_cloak.png create mode 100644 graphics/items/icons/gimmighoul_coin.png create mode 100644 graphics/items/icons/griseous_core.png create mode 100644 graphics/items/icons/leaders_crest.png create mode 100644 graphics/items/icons/loaded_dice.png create mode 100644 graphics/items/icons/lustrous_globe.png create mode 100644 graphics/items/icons/malicious_armor.png create mode 100644 graphics/items/icons/mirror_herb.png create mode 100644 graphics/items/icons/punching_glove.png create mode 100644 graphics/items/icons/scroll_of_darkness.png create mode 100644 graphics/items/icons/scroll_of_waters.png create mode 100644 graphics/items/icons/tera_orb.png create mode 100644 graphics/items/icons/tiny_bamboo_shoot.png diff --git a/graphics/items/icon_palettes/ability_shield.pal b/graphics/items/icon_palettes/ability_shield.pal new file mode 100644 index 0000000000..d11016b32c --- /dev/null +++ b/graphics/items/icon_palettes/ability_shield.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +248 200 240 +224 176 232 +200 144 224 +240 224 248 +176 120 216 +77 146 186 +105 179 221 +238 246 246 +222 222 222 +197 197 197 +161 161 161 +48 48 48 +255 255 255 +0 0 0 diff --git a/graphics/items/icon_palettes/adamant_crystal.pal b/graphics/items/icon_palettes/adamant_crystal.pal new file mode 100644 index 0000000000..738ff04981 --- /dev/null +++ b/graphics/items/icon_palettes/adamant_crystal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +184 208 248 +168 200 248 +81 123 173 +128 168 216 +200 232 248 +224 248 248 +248 248 248 +104 104 104 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/auspicious_armor.pal b/graphics/items/icon_palettes/auspicious_armor.pal new file mode 100644 index 0000000000..9d0c8e444c --- /dev/null +++ b/graphics/items/icon_palettes/auspicious_armor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +160 144 32 +192 176 56 +224 208 88 +128 112 32 +72 56 24 +224 80 80 +176 88 88 +120 72 72 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/big_bamboo_shoot.pal b/graphics/items/icon_palettes/big_bamboo_shoot.pal new file mode 100644 index 0000000000..28ab4fe699 --- /dev/null +++ b/graphics/items/icon_palettes/big_bamboo_shoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +189 202 71 +121 168 43 +120 167 42 +163 126 74 +116 101 78 +79 66 46 +115 77 43 +180 133 94 +233 176 96 +241 241 193 +183 170 147 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/booster_energy.pal b/graphics/items/icon_palettes/booster_energy.pal new file mode 100644 index 0000000000..21dc17ba2f --- /dev/null +++ b/graphics/items/icon_palettes/booster_energy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +111 45 22 +0 0 0 +190 91 13 +255 139 1 +255 255 255 +255 231 10 +251 42 6 +154 157 151 +193 161 19 +234 238 234 +122 111 115 +74 67 68 +90 185 248 +78 86 255 +111 52 255 diff --git a/graphics/items/icon_palettes/covert_cloak.pal b/graphics/items/icon_palettes/covert_cloak.pal new file mode 100644 index 0000000000..06491d2ada --- /dev/null +++ b/graphics/items/icon_palettes/covert_cloak.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +54 52 72 +101 120 143 +103 139 163 +84 105 130 +74 75 101 +90 108 136 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/gimmighoul_coin.pal b/graphics/items/icon_palettes/gimmighoul_coin.pal new file mode 100644 index 0000000000..555a04dbe3 --- /dev/null +++ b/graphics/items/icon_palettes/gimmighoul_coin.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +180 124 35 +115 66 13 +255 249 234 +224 159 27 +255 226 121 +255 200 59 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/griseous_core.pal b/graphics/items/icon_palettes/griseous_core.pal new file mode 100644 index 0000000000..05980782c6 --- /dev/null +++ b/graphics/items/icon_palettes/griseous_core.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +206 181 41 +222 198 57 +247 231 140 +156 132 33 +189 156 41 +123 99 33 +49 49 49 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/leaders_crest.pal b/graphics/items/icon_palettes/leaders_crest.pal new file mode 100644 index 0000000000..1f60ee2204 --- /dev/null +++ b/graphics/items/icon_palettes/leaders_crest.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +188 143 70 +131 85 43 +186 181 176 +80 74 71 +239 185 78 +138 128 128 +220 217 215 +250 225 159 +246 205 93 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/loaded_dice.pal b/graphics/items/icon_palettes/loaded_dice.pal new file mode 100644 index 0000000000..16624b9e9e --- /dev/null +++ b/graphics/items/icon_palettes/loaded_dice.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +48 52 78 +127 216 17 +0 0 0 +192 240 140 +128 217 18 +90 137 46 +129 218 19 +88 135 48 +107 182 17 +128 217 18 +93 144 44 +89 136 47 +255 255 255 +127 216 19 +48 38 64 diff --git a/graphics/items/icon_palettes/lustrous_globe.pal b/graphics/items/icon_palettes/lustrous_globe.pal new file mode 100644 index 0000000000..b62730a161 --- /dev/null +++ b/graphics/items/icon_palettes/lustrous_globe.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +248 216 232 +198 159 217 +210 171 229 +224 192 240 +210 192 240 +160 192 232 +144 200 232 +160 216 240 +128 216 224 +208 240 240 +248 240 240 +248 248 248 +80 80 80 +48 48 48 diff --git a/graphics/items/icon_palettes/malicious_armor.pal b/graphics/items/icon_palettes/malicious_armor.pal new file mode 100644 index 0000000000..1ef3efe89e --- /dev/null +++ b/graphics/items/icon_palettes/malicious_armor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +66 66 99 +90 90 132 +115 115 156 +90 115 230 +132 140 181 +125 147 246 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/mirror_herb.pal b/graphics/items/icon_palettes/mirror_herb.pal new file mode 100644 index 0000000000..b4ad3f9726 --- /dev/null +++ b/graphics/items/icon_palettes/mirror_herb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +39 194 168 +124 228 211 +19 101 84 +187 228 77 +238 250 169 +234 244 124 +24 152 108 +126 106 28 +173 171 15 +43 138 128 +127 175 55 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/punching_glove.pal b/graphics/items/icon_palettes/punching_glove.pal new file mode 100644 index 0000000000..f21cb39ec5 --- /dev/null +++ b/graphics/items/icon_palettes/punching_glove.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 255 +255 212 0 +200 56 32 +248 64 48 +232 232 232 +48 48 48 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scroll_of_darkness.pal b/graphics/items/icon_palettes/scroll_of_darkness.pal new file mode 100644 index 0000000000..1b66d85e00 --- /dev/null +++ b/graphics/items/icon_palettes/scroll_of_darkness.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +130 116 116 +86 86 86 +54 41 49 +104 78 86 +56 56 56 +141 105 41 +223 191 65 +242 241 242 +184 172 179 +186 140 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/scroll_of_waters.pal b/graphics/items/icon_palettes/scroll_of_waters.pal new file mode 100644 index 0000000000..41a94976f0 --- /dev/null +++ b/graphics/items/icon_palettes/scroll_of_waters.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +118 109 109 +143 130 127 +101 77 83 +73 68 68 +122 108 104 +141 105 41 +223 191 65 +242 241 242 +184 172 179 +186 140 57 +102 78 84 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/items/icon_palettes/tera_orb.pal b/graphics/items/icon_palettes/tera_orb.pal new file mode 100644 index 0000000000..78b3689f9d --- /dev/null +++ b/graphics/items/icon_palettes/tera_orb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +81 41 75 +98 61 92 +66 72 65 +51 4 43 +201 185 199 +110 86 106 +84 73 92 +32 41 34 +255 255 255 +71 50 92 +64 71 94 +139 165 201 +183 191 209 +0 0 0 diff --git a/graphics/items/icon_palettes/tiny_bamboo_shoot.pal b/graphics/items/icon_palettes/tiny_bamboo_shoot.pal new file mode 100644 index 0000000000..1172befa6c --- /dev/null +++ b/graphics/items/icon_palettes/tiny_bamboo_shoot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +111 167 43 +179 192 68 +107 144 66 +84 116 48 +68 93 37 +124 137 52 +168 87 80 +168 116 111 +241 241 193 +168 87 80 +183 170 147 +121 52 57 +0 0 0 +0 0 0 diff --git a/graphics/items/icons/ability_shield.png b/graphics/items/icons/ability_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..de7354d71f8ab38c4042d94cfad8b58b856dc5f2 GIT binary patch literal 692 zcmV;l0!#ggP)EX>4Tx04R}tkv&MmKpe$i(@I4u4t5ZA$j~}j5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR0!X5l%$?&0I>U5saWpZjz4D+QAQK9P8i>4rtTK|Hf* z>74h8!>lYR#OK8023?T&k?XR{Z=6dG3p_JyWYhD+VPdh=#c~(3vY`@B6Gs$PqkJLf zvch?bvs$gQ_C5IvLj`Rm!*!aYNMH#`q#!~@9TikzAx5i4iitGs$36VRjz2{%nOqex zax9<*6_Voz|AXJ%n#HL}Hz^bcdR}b%BMJm}fmXw|zmILZbprUGfh(=!uQh?$PtqG5 zEph}5Yy%h99ZlW?E_Z;TCtWfmNAlAYibdf4jJ_!k4Bi5LYi@7teVjf3S?X%}1~@nb z#!8gE?(y#4?%w`A)9&vFlVWnTjs1QK0000mP)t-s00030|Nr>N@ZhlM$dKUh;P|k3 z*iDkUX|vt#_V(W1-o?emp`oELFfjlB{{R30f`gsi0000GbW%=J0RR90|NsC0|NsC0 z|NsC0z)*`r0001!Nkl8f8U5zc zlZ8E!NQqx7-RP-z+M?uzA6lc2s23cMnUkR#m}&(K$w2i8$sh(tGeMH`(+%uUYZLaM z=*X~NcXYPi1UZ4-ng9m-D<*)S0+imz83rTxKqU1(!3az4Z4x5aKE!kDT|D=G{oIHC a_q+k9MhXH6sl^!p0000fQS8WW2&PqdmRCNqX=2;|!TkpJ`Unud?RrDvnWg}+IW^2rVL;u+U;U;n%pM-e+KMKTt7o)AiVUcQ4<(y+1wb?_Y*1CPn8WH}?qvW5^)DC&U#< z|NsAg$Aup&PW%Y0UfZzZ#)%g{9{d1-jEoEe0|THePz@ZUCdg+2IRYg?e!(D}$lyRg zw=+;~v!{z=h{nXN6L0e!R^V~g?oj;rzy5>Fi$i8_6ZN~Vn0+eLoAUZsw1LtI{a*#& z0~f^1kw37vIpxQk4;SY(6ss8)GG73yk)hf%1JM;eJ}Ybc+V+Rw`b-1mnIFD7dk5G*jj5|=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{{R2~f(Z%-Hds8k z5YbSe;9(*0ARu5vL_~#$hk=0sP!^~L4zd;t_5(QrB|(0{Af3qIKtQ)MP;RNGi(`n! z#HE23g$^rly!I5B_5c3^*0P zU#>Q+uaZTQD!GDu72M<7jVC@c;t_oKROLg*lHI#LhAr@2A9N)&Zr!Sf0av6`6`xG0 zDbn1>mO6LVRAasD2MXWje*d~b+-QGTSXY{0S#re7z?mD3a+>0J<5hFKk{>ng6EZ!% jvFq#c3Z1tF$nMpaRt&q zu=kXE92{GIfQeYLl=#=YE-@bTlp?W-n3lmW?8&QGrbDS?t8zhH*{ z|Ns93Vi<`2dRzx6*XQZt7@{$;b<%CVW&}?|IAO7FBX7?4=UHQz*=Ese_mu|%~ zYH!fx*cR@pu-7}`MYTSMj%Vn?jjO}fI5ux&$czp=Y3gC4^~tnfOSti~5{G;~+rlje zm0jAL)HLURu|7EUO8dhnEJnT`H!hs>%)_eb*bgte<8S}f%;zgQB3PGY)7NJlYFo4K d;j8)`ubFlCu)NHY>l6oh!PC{xWt~$(699KKc>w?b literal 0 HcmV?d00001 diff --git a/graphics/items/icons/booster_energy.png b/graphics/items/icons/booster_energy.png new file mode 100644 index 0000000000000000000000000000000000000000..df583a2508d4e908ff8c32664f65480c4da30528 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt)( zx?(_bUo`LkZpQyW@SN+n7Tc`3(+@5be)aBERerITvrE*@AAVu~^G*IU*UvKmsum~- z@(X4FsYU_^0=k`na??Fs978lF_D=E?J8Zz=tlM^r(`4WO+~(aZVyT*Y`Q0jd{&Owx zOWWY_c*6>Y7@3-o=TC0+M7S<9P=49{;>?aB{av}b?4Mmd_lHY_wf)Y0x9yDA;`Of{ zpRP%HAaRS~+ncrb7@k$<>pR$-IQM}kV9kfmMh7~!@=sF$nMpaRt&q zU}oZxTG5~0y*MPZ$;&%6DyIV?j!C{d_dE_LDo_&S7tHV<6&wiYb_U8#^K@|x(U_P! zDUgpvk;8eZ^T&VY_ngXv*m8U1Yc;htg-!N+tz>hl^}t>EV~%HHyN^g3+)$ll=aQzv zEjmL`+uoCB!~X<+g-^dE7=FLfS3Z*>U)KNl~s zV^~wB!f?CRc!6*PlXQVft)oeTsC7e|0<+`awYT4_`#sImo^7ey^0VjpSBo>x>7OsG P3G$PttDnm{r-UW|j&*9# literal 0 HcmV?d00001 diff --git a/graphics/items/icons/gimmighoul_coin.png b/graphics/items/icons/gimmighoul_coin.png new file mode 100644 index 0000000000000000000000000000000000000000..b161cf12ac37b2e9eaa9beeb36382e8e3e97d9e4 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&_ zYLttec>n)=^A)n z2SpDka5ziz6#nm(UQ_#u!FHt6`zyLClZz{=(PSIF}1I-uJVTbg@^6O{5H=%z@p<_8|%G)m**9O`N2sqTYv4@ dE&pkIDRYD()2!=@=KTY?+0)g}Wt~$(695QOXPN*2 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/griseous_core.png b/graphics/items/icons/griseous_core.png new file mode 100644 index 0000000000000000000000000000000000000000..08748fe7bba170faebb029c29aa9fc4b8046143e GIT binary patch literal 724 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfw4c+**PE}BfliSI3vG6!PD7U zp`a)~Ei)&Tfk9(p?L=FT!wxb>fQS8WW2&PqdmRCNqX=2;|!TkpJ`Unud?RrDvnWg}+IW^2rVL;u+U;U;n%pM-e+KMKTt7o)AiVUcQ4<(y+1wb?_Y*1CPn8WH}?qvW5^)DC&U#< z|NsC0+*Zwd$1J};@0ru0xOa|bb+V$Np&?KlD2oQl0xWg|g#=21{DMI`k->q0ZfBs} z3Qrfu5RHjTCpropHsD|mZf^Pa|B+I9)NbD@En~Zg*B%aikJqn?uX+`i{;99y;{)-P zlS0@Q#GJ0#Q0m7pWtz9!#EB*=c^6zwNP8{4LW;r7rTOz@@e>A$?#)d198OpSZV$Nd zX_m^J8DH)67tIiSDwG(z{9fn2Z|C*OA}u tXl*c?-tNWQ?yd{<+VQvDYTf$vUs;$V*>)OpRnGx=(bLt>Wt~$(6995%J!Sv^ literal 0 HcmV?d00001 diff --git a/graphics/items/icons/leaders_crest.png b/graphics/items/icons/leaders_crest.png new file mode 100644 index 0000000000000000000000000000000000000000..b105fcd29d95d1ff1f2c240fea023c8001e9db50 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zu&3XxIaGVs)(rt(?(cW{bu~2Hxq1E9!};IN#zGXp$se5`4+1#?B|(0{4F6HVfq-sj zpj?@!i(`n!#I1prOa~M=9tU0dZ@**V;=~+RSs{-AmwyqfqS(Lt&R9MBsPBrI;YW6K zTFOqW6mCsA9;9X9V&WCLA$j8@#`7sluP@$sFD^gf_1;82MLmn-O6*%p8q~{Mrm20B uJZ_#kU0->^y$42O2~y2_lwUnqe~sDVE7Pe4Cr literal 0 HcmV?d00001 diff --git a/graphics/items/icons/loaded_dice.png b/graphics/items/icons/loaded_dice.png new file mode 100644 index 0000000000000000000000000000000000000000..1295450928df350a450cc87ab127f5248959175e GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt#P ze)Ts5fs6wmdKzvDMRn>m-V%;zH^|;52;|02(24BO|NsAg{S9FQH3!|-_8=PsN`m}? z8Gxey|A7bywKK{18BlJjr;B5V#>Bl74)PsQ;Bax32zKiE|9^Y;me4zo<-To=OZ#+S z+m!!~-Rt-0^|i4&a4&4!tT53$#>In6`yJZ?ZqJVi=Zazug~eRh&KcLr^O;jwJ11q| zrfvrn?KLh@o+ZWFZ(U6k1qO+6Kl3EAAL;D1FQMlpyWq9QZ2M0zm;*YR}^4`1&hJj?yupCc&e4F-4w z;yI@2Ch-Pwbko#0?-PeuNtB7ti6?ZrAn_yDC5PWQ7j5?P%#fZ*%@c=+g<=Ow9n4C) zLOeqpmKBxqy;+B4&Rd+7N{zMd$zK@At1D@)(;Pt@OGqFI0TOB`qXH8VT2)dEq-a0p z;vcsCNpeZ#Dua<@0aYjvZ9n)Q{O;B$OiwvUff&&JVp$(!fPWWg)-CJ%*s_`@fbSW& zQrrG&1DO3Jz24TsM?n8JaB8-Vo z(+40!T`k`L2Zz9Tk+Roa-rdvL+rMX8{rv#cG;+>avyKt~001yhOjJbx00960|M=MG z#-G{JtL5Op@Y2BWpup&m$mpQh@POFh(D3m1@bLKf_)t(#FfcGLRPaau000nlQchC< z|NsC0|NsC0|NsC0|NsBMP>VwV006>CL_t(2k%f{`4#OY}Lnj)uKq1`!wljpbw9_>I zRPw_KBz?X9$*fUkPrD&hDxlp^Lk%&?wn?aHi%&aI6SdXPlp~RY80hbH&q^hd0Gk1% z%*F#~Ch-UZ1V=*SCh&*_AS+vFPGnI43FejHhtr<)J;11Sfu4xyI>975{R?EoVNc&d zZ%)N{+CZ^+-J#?kHlHsXP3Wr*e`BB>BROk`obU4?`q?fPD(iR;a`XG5iX#bSU6il3 gP|wx={u#dY0duGe>o^(Lg8%>k07*qoM6N<$f=vBdUH||9 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/malicious_armor.png b/graphics/items/icons/malicious_armor.png new file mode 100644 index 0000000000000000000000000000000000000000..931850013a6d012fc4855aba69ff7a0cffe928c0 GIT binary patch literal 690 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbQ|Pfw3ji**U<|*;%2WC_gPTCzXLg zV`A+@TaUvIGDqVtd%0@yl?jxdxL_42AX+#@OYERiruLRs2}Li(O)@=#Vq{paH#N(5 zhq8;O$I8aAI(}e2a`B|+MOUvs@j)4aj}I2w-@99VXD@S0+SHY42}}W|r#;jkCF$+g zVv83%#KF{&=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{{R2KlT&h3R7-L3 zoT%bwEj?RnCx0_AFaU}JWzm4S>z6k`A%T)0zhIC~WN;v$+ZiY~(bL5-L}TLG07s$2 z4ji`vw}1LCE`H`p&KuL1Ne&JrYo{|h_MdE5Wa2n}XrWlXOAu$d$$Pf_6_(MO&67_Q z-Q!C6;nJcS|3~0J{-?a?iF2++vOUfh(pvp7IXjb8p*? zJ)Mg>PRwaD5WTmJ*;(VpUZ;5OOFPaNpSoHoSNpf>e`qat{LiHmdK II;Vst0PmeHtpET3 literal 0 HcmV?d00001 diff --git a/graphics/items/icons/mirror_herb.png b/graphics/items/icons/mirror_herb.png new file mode 100644 index 0000000000000000000000000000000000000000..e792bad8294cd25b4411e62c7e9f5de1b7f1fc0f GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zpnhmY&6CT*sUf?c_`dtK^3|6bi5WR{Su$%^^J{lC)UP*(CH_Ji$Ht1!&MgubxT~`)h%xZ_GNrUbe{&XRG0n9Wl|ET^@PL?34o{K5-J*l?*|`y7 zXI^Bt%(<9n4!5C{g!;M6869Q zreJ;e64QQ-??#SW#3ojsaGhTqXm|BxCZpWFUk~~3T$L_QVl~d=hnD-^J$(E+wkN%E{_o;1+N_fq?Iu?Ay=-&c<7l%v^W~iH zorl-xXdZcf=+_n zW&LEcuwXgnHD&L+kMHiiyZ6ub^1Ju!laq?J^!}{_MU+8+Plzj!{tpCK7*1Fy{BSUM z@#2MnfdNneD2^4#Eh{(#ln^Kh@(Tv*1nGu?0|DL6K)Fs&7sn8diLDbG`Hm=XI8PV* z`QP78z)!tmXWGq4b}J0#Ki_|)bo0?8ZBx>c7d>JY`0-lh)zt$zRl?j&JR6rUS-Jd# z#OLHoyf!H*%;DYrTNd4Lkh|y5_xc;7irAd5zjM?$>&;J`HrvlsxApH0uP*u9iK=t! uwZt;aMO)r{PoFFxeqaAv*!&mlD}FI#|6?h?YGU&gF$nMpaRt&q z&{R?q78YivX_(;`W?^B`o2hw!zvHKmpLVR-ysO6&q6R{`f39i;vII(k{DK+&qk;ng z-OfO{EKe855RHjzCwlT7FyLT*><}^O|NrePtF+H8462oBK6>ev{2|80!R(79jx^4A zIh%R5^%kjpubErTTOzLg+O3?;x6P(z(w`F_Og;M)rW?;Q)BGMVD_P;QeR+b+f<1Sm k1Mjsr?N2DE`}5R2*6=dprNWffA0W4Ry85}Sb4q9e030c3F$nMpaRt&q zP?nq9-&CLK8|>-gQk9d@o2hw!zvHKmpLVR-ysO7D%`XI^3`ow5no$F!1WJPZf*Jm! zf&&5F&Oo^=PZ!4!jfra~dh#7G;9!325Hach|LrTQw9hRJs+DOzdg+$@A;!hQ?29Ch zG|qTAn|ZeN7O8!&nOn_UBCh?~t(?ub&8BA3pA#QUJ^K`<8_zS-{2nkXS>dyNd4kM> nJ$Iu6@3lAWPbjGS^VB`o@G|42!j#q@Am@3y`njxgN@xNAvm$E` literal 0 HcmV?d00001 diff --git a/graphics/items/icons/tera_orb.png b/graphics/items/icons/tera_orb.png new file mode 100644 index 0000000000000000000000000000000000000000..03ecb8e82c2d5267de84291cc4d4e79e2f12bf98 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q z5UA;$WEeNIW(5J~yWRmhr~lXIZH`!LWw)&|VTQ0!-sLas zCoeFEE&h_n`{o>@xI5R=&q3}l_Uv1eJu}zS-Cr_7D(3I1cdIOzo<*AST#o8Ds>pj2 z?G*a@_=L2`1%B%i9FmKdsI!@}UD+pn@#N0RiBI;r-`>4wu>)`0)E^ICZaB6{uVeol zah4M^GkY(8zRG;Ebz#Tr(rdoe`+;3BNh5rlN)=R8>KIJaCKu0rpy85}S Ib4q9e05-0R6aWAK literal 0 HcmV?d00001 diff --git a/graphics/items/icons/tiny_bamboo_shoot.png b/graphics/items/icons/tiny_bamboo_shoot.png new file mode 100644 index 0000000000000000000000000000000000000000..6b24c7e383e46234a138381d7fa8b30383a2b5e3 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF%}28J29*~C-V}>F$nMpaRt&q zkiT4e^8uIa2~Hs;1}?FxHJv6a!UI;61u3d46@@1yb}qQYP+aJ@X;% zBin-OOt;o#7slkf-O&xM-EmLgeAC}_$2*%9?55u=cvP&rUhl^CnK>P@&o?|}5xnwq b!ThI;%bqgsYv+=T2RX*m)z4*}Q$iB}thHwP literal 0 HcmV?d00001 diff --git a/include/graphics.h b/include/graphics.h index 8b1e0c3a2d..7cf9030349 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -8834,6 +8834,45 @@ extern const u32 gItemIcon_Gem[]; extern const u32 gItemIconPalette_Ruby[]; extern const u32 gItemIconPalette_Sapphire[]; +// GEN IX ITEMS +extern const u32 gItemIcon_AbilityShield[]; +extern const u32 gItemIconPalette_AbilityShield[]; +extern const u32 gItemIcon_AuspiciousArmor[]; +extern const u32 gItemIconPalette_AuspiciousArmor[]; +extern const u32 gItemIcon_BigBambooShoot[]; +extern const u32 gItemIconPalette_BigBambooShoot[]; +extern const u32 gItemIcon_BoosterEnergy[]; +extern const u32 gItemIconPalette_BoosterEnergy[]; +extern const u32 gItemIcon_CovertCloak[]; +extern const u32 gItemIconPalette_CovertCloak[]; +extern const u32 gItemIcon_GimmighoulCoin[]; +extern const u32 gItemIconPalette_GimmighoulCoin[]; +extern const u32 gItemIcon_LeadersCrest[]; +extern const u32 gItemIconPalette_LeadersCrest[]; +extern const u32 gItemIcon_LoadedDice[]; +extern const u32 gItemIconPalette_LoadedDice[]; +extern const u32 gItemIcon_MaliciousArmor[]; +extern const u32 gItemIconPalette_MaliciousArmor[]; +extern const u32 gItemIcon_MirrorHerb[]; +extern const u32 gItemIconPalette_MirrorHerb[]; +extern const u32 gItemIcon_PunchingGlove[]; +extern const u32 gItemIconPalette_PunchingGlove[]; +extern const u32 gItemIcon_ScrollOfDarkness[]; +extern const u32 gItemIconPalette_ScrollOfDarkness[]; +extern const u32 gItemIcon_ScrollOfWaters[]; +extern const u32 gItemIconPalette_ScrollOfWaters[]; +extern const u32 gItemIcon_TeraOrb[]; +extern const u32 gItemIconPalette_TeraOrb[]; +extern const u32 gItemIcon_TinyBambooShoot[]; +extern const u32 gItemIconPalette_TinyBambooShoot[]; + +extern const u32 gItemIcon_AdamantCrystal[]; +extern const u32 gItemIconPalette_AdamantCrystal[]; +extern const u32 gItemIcon_GriseousCore[]; +extern const u32 gItemIconPalette_GriseousCore[]; +extern const u32 gItemIcon_LustrousGlobe[]; +extern const u32 gItemIconPalette_LustrousGlobe[]; + extern const u32 gItemIcon_ReturnToFieldArrow[]; extern const u32 gItemIconPalette_ReturnToFieldArrow[]; diff --git a/src/data/graphics/items.h b/src/data/graphics/items.h index 35ce13db25..ce4ecf6082 100644 --- a/src/data/graphics/items.h +++ b/src/data/graphics/items.h @@ -1931,17 +1931,61 @@ const u32 gItemIconPalette_Ruby[] = INCBIN_U32("graphics/items/icon_palettes/rub const u32 gItemIconPalette_Sapphire[] = INCBIN_U32("graphics/items/icon_palettes/sapphire.gbapal.lz"); -//const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); -//const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); +const u32 gItemIcon_AbilityShield[] = INCBIN_U32("graphics/items/icons/ability_shield.4bpp.lz"); +const u32 gItemIconPalette_AbilityShield[] = INCBIN_U32("graphics/items/icon_palettes/ability_shield.gbapal.lz"); //const u32 gItemIcon_ClearAmulet[] = INCBIN_U32("graphics/items/icons/clear_amulet.4bpp.lz"); //const u32 gItemIconPalette_ClearAmulet[] = INCBIN_U32("graphics/items/icon_palettes/clear_amulet.gbapal.lz"); -//const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); -//const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); +const u32 gItemIcon_PunchingGlove[] = INCBIN_U32("graphics/items/icons/punching_glove.4bpp.lz"); +const u32 gItemIconPalette_PunchingGlove[] = INCBIN_U32("graphics/items/icon_palettes/punching_glove.gbapal.lz"); -//const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); -//const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); +const u32 gItemIcon_CovertCloak[] = INCBIN_U32("graphics/items/icons/covert_cloak.4bpp.lz"); +const u32 gItemIconPalette_CovertCloak[] = INCBIN_U32("graphics/items/icon_palettes/covert_cloak.gbapal.lz"); -//const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); -//const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); +const u32 gItemIcon_LoadedDice[] = INCBIN_U32("graphics/items/icons/loaded_dice.4bpp.lz"); +const u32 gItemIconPalette_LoadedDice[] = INCBIN_U32("graphics/items/icon_palettes/loaded_dice.gbapal.lz"); + +const u32 gItemIcon_AuspiciousArmor[] = INCBIN_U32("graphics/items/icons/auspicious_armor.4bpp.lz"); +const u32 gItemIconPalette_AuspiciousArmor[] = INCBIN_U32("graphics/items/icon_palettes/auspicious_armor.gbapal.lz"); + +const u32 gItemIcon_BigBambooShoot[] = INCBIN_U32("graphics/items/icons/big_bamboo_shoot.4bpp.lz"); +const u32 gItemIconPalette_BigBambooShoot[] = INCBIN_U32("graphics/items/icon_palettes/big_bamboo_shoot.gbapal.lz"); + +const u32 gItemIcon_BoosterEnergy[] = INCBIN_U32("graphics/items/icons/booster_energy.4bpp.lz"); +const u32 gItemIconPalette_BoosterEnergy[] = INCBIN_U32("graphics/items/icon_palettes/booster_energy.gbapal.lz"); + +const u32 gItemIcon_GimmighoulCoin[] = INCBIN_U32("graphics/items/icons/gimmighoul_coin.4bpp.lz"); +const u32 gItemIconPalette_GimmighoulCoin[] = INCBIN_U32("graphics/items/icon_palettes/gimmighoul_coin.gbapal.lz"); + +const u32 gItemIcon_LeadersCrest[] = INCBIN_U32("graphics/items/icons/leaders_crest.4bpp.lz"); +const u32 gItemIconPalette_LeadersCrest[] = INCBIN_U32("graphics/items/icon_palettes/leaders_crest.gbapal.lz"); + +const u32 gItemIcon_MaliciousArmor[] = INCBIN_U32("graphics/items/icons/malicious_armor.4bpp.lz"); +const u32 gItemIconPalette_MaliciousArmor[] = INCBIN_U32("graphics/items/icon_palettes/malicious_armor.gbapal.lz"); + +const u32 gItemIcon_MirrorHerb[] = INCBIN_U32("graphics/items/icons/mirror_herb.4bpp.lz"); +const u32 gItemIconPalette_MirrorHerb[] = INCBIN_U32("graphics/items/icon_palettes/mirror_herb.gbapal.lz"); + +const u32 gItemIcon_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icons/scroll_of_darkness.4bpp.lz"); +const u32 gItemIconPalette_ScrollOfDarkness[] = INCBIN_U32("graphics/items/icon_palettes/scroll_of_darkness.gbapal.lz"); + +const u32 gItemIcon_ScrollOfWaters[] = INCBIN_U32("graphics/items/icons/scroll_of_waters.4bpp.lz"); +const u32 gItemIconPalette_ScrollOfWaters[] = INCBIN_U32("graphics/items/icon_palettes/scroll_of_waters.gbapal.lz"); + +const u32 gItemIcon_TeraOrb[] = INCBIN_U32("graphics/items/icons/tera_orb.4bpp.lz"); +const u32 gItemIconPalette_TeraOrb[] = INCBIN_U32("graphics/items/icon_palettes/tera_orb.gbapal.lz"); + +const u32 gItemIcon_TinyBambooShoot[] = INCBIN_U32("graphics/items/icons/tiny_bamboo_shoot.4bpp.lz"); +const u32 gItemIconPalette_TinyBambooShoot[] = INCBIN_U32("graphics/items/icon_palettes/tiny_bamboo_shoot.gbapal.lz"); + +// Tera Shards here + +const u32 gItemIcon_AdamantCrystal[] = INCBIN_U32("graphics/items/icons/adamant_crystal.4bpp.lz"); +const u32 gItemIconPalette_AdamantCrystal[] = INCBIN_U32("graphics/items/icon_palettes/adamant_crystal.gbapal.lz"); + +const u32 gItemIcon_GriseousCore[] = INCBIN_U32("graphics/items/icons/griseous_core.4bpp.lz"); +const u32 gItemIconPalette_GriseousCore[] = INCBIN_U32("graphics/items/icon_palettes/griseous_core.gbapal.lz"); + +const u32 gItemIcon_LustrousGlobe[] = INCBIN_U32("graphics/items/icons/lustrous_globe.4bpp.lz"); +const u32 gItemIconPalette_LustrousGlobe[] = INCBIN_U32("graphics/items/icon_palettes/lustrous_globe.gbapal.lz"); diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h index a0c27ea72a..9e4b567775 100644 --- a/src/data/item_icon_table.h +++ b/src/data/item_icon_table.h @@ -803,22 +803,22 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea}, [ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby}, [ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire}, - [ITEM_ABILITY_SHIELD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, + [ITEM_ABILITY_SHIELD] = {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield}, [ITEM_CLEAR_AMULET] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ClearAmulet, gItemIconPalette_ClearAmulet}, - [ITEM_PUNCHING_GLOVE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, - [ITEM_COVERT_CLOAK] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, - [ITEM_LOADED_DICE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, - [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, - [ITEM_BOOSTER_ENERGY] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, - [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, - [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, - [ITEM_LEADERS_CREST] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, - [ITEM_MALICIOUS_ARMOR] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, - [ITEM_MIRROR_HERB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, - [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, - [ITEM_SCROLL_OF_WATERS] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, - [ITEM_TERA_ORB] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, - [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, + [ITEM_PUNCHING_GLOVE] = {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove}, + [ITEM_COVERT_CLOAK] = {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak}, + [ITEM_LOADED_DICE] = {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice}, + [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor}, + [ITEM_BOOSTER_ENERGY] = {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy}, + [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot}, + [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin}, + [ITEM_LEADERS_CREST] = {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest}, + [ITEM_MALICIOUS_ARMOR] = {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor}, + [ITEM_MIRROR_HERB] = {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb}, + [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness}, + [ITEM_SCROLL_OF_WATERS] = {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters}, + [ITEM_TERA_ORB] = {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb}, + [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot}, [ITEM_BUG_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_BugTeraShard, gItemIconPalette_BugTeraShard}, [ITEM_DARK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DarkTeraShard, gItemIconPalette_DarkTeraShard}, [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_DragonTeraShard, gItemIconPalette_DragonTeraShard}, @@ -837,9 +837,9 @@ const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] = [ITEM_ROCK_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_RockTeraShard, gItemIconPalette_RockTeraShard}, [ITEM_STEEL_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_SteelTeraShard, gItemIconPalette_SteelTeraShard}, [ITEM_WATER_TERA_SHARD] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_WaterTeraShard, gItemIconPalette_WaterTeraShard}, - [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, - [ITEM_GRISEOUS_CORE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, - [ITEM_LUSTROUS_GLOBE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark}, // {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, + [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal}, + [ITEM_GRISEOUS_CORE] = {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore}, + [ITEM_LUSTROUS_GLOBE] = {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe}, // Return to field arrow [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow}, }; From 1da65c40517a64a4ef0695b27d3aa3d26ecb2e9f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 22:33:47 -0300 Subject: [PATCH 223/290] Fixed Grassy Terrain not healing --- src/battle_util.c | 32 +++++++++++++++++++++----------- test/terrain_grassy.c | 16 ++++++++++++++++ 2 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 test/terrain_grassy.c diff --git a/src/battle_util.c b/src/battle_util.c index 3e8f94bf69..cfb1d577b5 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2127,15 +2127,25 @@ enum ENDTURN_FIELD_COUNT, }; -static bool32 TryEndTerrain(u32 terrainFlag, u32 stringTableId) +static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { - if (gFieldStatuses & terrainFlag - && (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0)) + if (gFieldStatuses & terrainFlag) { - gFieldStatuses &= ~terrainFlag; - TryToRevertMimicry(); - gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; - BattleScriptExecute(BattleScript_TerrainEnds); + if (!(gFieldStatuses & STATUS_FIELD_TERRAIN_PERMANENT) && --gFieldTimers.terrainTimer == 0) + { + gFieldStatuses &= ~terrainFlag; + TryToRevertMimicry(); + + if (terrainFlag != STATUS_FIELD_GRASSY_TERRAIN) + { + gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; + BattleScriptExecute(BattleScript_TerrainEnds); + } + } + if (terrainFlag == STATUS_FIELD_GRASSY_TERRAIN) + { + BattleScriptExecute(BattleScript_GrassyTerrainHeals); + } return TRUE; } return FALSE; @@ -2492,19 +2502,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); + effect += EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); + effect += EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); + effect += EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - effect = TryEndTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); + effect += EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c new file mode 100644 index 0000000000..6b3a93234e --- /dev/null +++ b/test/terrain_grassy.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test_battle.h" + +SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + MESSAGE("Wobbuffet is healed by the grassy terrain!"); + HP_BAR(player, damage: -maxHP / 16); + } +} From c922ff69b91ace7dd00eb2303b18b01e4f59120a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Thu, 23 Mar 2023 22:34:08 -0300 Subject: [PATCH 224/290] Added To-Do test results --- test/terrain_grassy.c | 3 +++ test/test.h | 7 +++++++ test/test_battle.h | 9 +++++++++ test/test_runner.c | 6 ++++++ tools/mgba-rom-test-hydra/main.c | 8 ++++++++ 5 files changed, 33 insertions(+) diff --git a/test/terrain_grassy.c b/test/terrain_grassy.c index 6b3a93234e..77f8a99271 100644 --- a/test/terrain_grassy.c +++ b/test/terrain_grassy.c @@ -14,3 +14,6 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") HP_BAR(player, damage: -maxHP / 16); } } + +TO_DO_BATTLE_TEST("Grassy Terrain increases power of Grass-type moves by 30/50 percent") +TO_DO_BATTLE_TEST("Grassy Terrain decreases power of Earthquake, Magnitude and Bulldoze by 50 percent") diff --git a/test/test.h b/test/test.h index 27475bb48e..a05e42a046 100644 --- a/test/test.h +++ b/test/test.h @@ -13,6 +13,7 @@ enum TestResult TEST_RESULT_INVALID, TEST_RESULT_ERROR, TEST_RESULT_TIMEOUT, + TEST_RESULT_TODO, }; struct TestRunner @@ -138,4 +139,10 @@ s32 MgbaPrintf_(const char *fmt, ...); #define KNOWN_FAILING \ Test_ExpectedResult(TEST_RESULT_FAIL) +#define TO_DO \ + Test_ExpectedResult(TEST_RESULT_TODO) + +#define EXPECT_TO_DO \ + Test_ExitWithResult(TEST_RESULT_TODO, "%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__) + #endif diff --git a/test/test_battle.h b/test/test_battle.h index 16918251b1..1e97229bdc 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -601,6 +601,15 @@ extern struct BattleTestRunnerState *gBattleTestRunnerState; /* Test */ +#define TO_DO_BATTLE_TEST(_name) \ + SINGLE_BATTLE_TEST("TODO: " _name) \ + { \ + TO_DO; \ + GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } \ + WHEN { TURN { } } \ + THEN { EXPECT_TO_DO; } \ + } + #define SINGLE_BATTLE_TEST(_name, ...) \ struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \ static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, u32, struct BattlePokemon *, struct BattlePokemon *); \ diff --git a/test/test_runner.c b/test/test_runner.c index f2d4d5de3f..1d3f14aadd 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -193,6 +193,10 @@ void CB2_TestRunner(void) result = "ASSUMPTION_FAIL"; color = "\e[33m"; break; + case TEST_RESULT_TODO: + result = "TO_DO"; + color = "\e[33m"; + break; case TEST_RESULT_INVALID: result = "INVALID"; break; @@ -211,6 +215,8 @@ void CB2_TestRunner(void) MgbaPrintf_(":P%s%s\e[0m", color, result); else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL) MgbaPrintf_(":A%s%s\e[0m", color, result); + else if (gTestRunnerState.result == TEST_RESULT_TODO) + MgbaPrintf_(":T%s%s\e[0m", color, result); else if (gTestRunnerState.expectedResult == gTestRunnerState.result) MgbaPrintf_(":K%s%s\e[0m", color, result); else diff --git a/tools/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c index f506d0428d..8705225b85 100644 --- a/tools/mgba-rom-test-hydra/main.c +++ b/tools/mgba-rom-test-hydra/main.c @@ -44,6 +44,7 @@ struct Runner char *output_buffer; int passes; int knownFails; + int todos; int assumptionFails; int fails; int results; @@ -87,6 +88,9 @@ static void handle_read(struct Runner *runner) case 'K': runner->knownFails++; goto add_to_results; + case 'T': + runner->todos++; + goto add_to_results; case 'A': runner->assumptionFails++; goto add_to_results; @@ -427,6 +431,7 @@ int main(int argc, char *argv[]) int exit_code = 0; int passes = 0; int knownFails = 0; + int todos = 0; int assumptionFails = 0; int fails = 0; int results = 0; @@ -444,6 +449,7 @@ int main(int argc, char *argv[]) exit_code = WEXITSTATUS(wstatus); passes += runners[i].passes; knownFails += runners[i].knownFails; + todos += runners[i].todos; assumptionFails += runners[i].assumptionFails; fails += runners[i].fails; results += runners[i].results; @@ -459,6 +465,8 @@ int main(int argc, char *argv[]) fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes); if (knownFails > 0) fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails); + if (todos > 0) + fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos); if (fails > 0) fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d\n", fails); if (assumptionFails > 0) From 492422b6bd268178aa687ca017fe44d67a399546 Mon Sep 17 00:00:00 2001 From: Zunawe Date: Thu, 23 Mar 2023 21:47:26 -0700 Subject: [PATCH 225/290] Fix scanner item flag name --- data/maps/AbandonedShip_CaptainsOffice/scripts.inc | 2 +- data/maps/AbandonedShip_HiddenFloorRooms/map.json | 2 +- include/constants/flags.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc index 7c59fec967..78fdc6434a 100644 --- a/data/maps/AbandonedShip_CaptainsOffice/scripts.inc +++ b/data/maps/AbandonedShip_CaptainsOffice/scripts.inc @@ -7,7 +7,7 @@ AbandonedShip_CaptainsOffice_EventScript_CaptSternAide:: goto_if_set FLAG_EXCHANGED_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus checkitem ITEM_SCANNER goto_if_eq VAR_RESULT, TRUE, AbandonedShip_CaptainsOffice_EventScript_CanYouDeliverScanner - goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus + goto_if_set FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER, AbandonedShip_CaptainsOffice_EventScript_ThisIsSSCactus msgbox AbandonedShip_CaptainsOffice_Text_NoSuccessFindingScanner, MSGBOX_DEFAULT release end diff --git a/data/maps/AbandonedShip_HiddenFloorRooms/map.json b/data/maps/AbandonedShip_HiddenFloorRooms/map.json index 9c480a1c92..e808250f47 100644 --- a/data/maps/AbandonedShip_HiddenFloorRooms/map.json +++ b/data/maps/AbandonedShip_HiddenFloorRooms/map.json @@ -38,7 +38,7 @@ "trainer_type": "TRAINER_TYPE_NONE", "trainer_sight_or_berry_tree_id": "0", "script": "AbandonedShip_HiddenFloorRooms_EventScript_ItemScanner", - "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER" + "flag": "FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER" }, { "graphics_id": "OBJ_EVENT_GFX_ITEM_BALL", diff --git a/include/constants/flags.h b/include/constants/flags.h index 99a8377a75..ed5dd5c68b 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1123,7 +1123,7 @@ #define FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL 0x433 #define FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE 0x434 #define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL 0x435 -#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER 0x436 +#define FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER 0x436 #define FLAG_ITEM_SCORCHED_SLAB_TM11 0x437 #define FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02 0x438 #define FLAG_ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL 0x439 From c08df20166cb8103e599d306b47f1c73579f95c7 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 24 Mar 2023 10:17:57 +0000 Subject: [PATCH 226/290] Fix "Too many different moves" detection --- test/test_runner_battle.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 0c3c230635..b1a94b14ec 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -1106,6 +1106,31 @@ void Status1_(u32 sourceLine, u32 status1) SetMonData(DATA.currentMon, MON_DATA_STATUS, &status1); } +static const char *const sBattlerIdentifiersSingles[] = +{ + "player", + "opponent", +}; + +static const char *const sBattlerIdentifiersDoubles[] = +{ + "playerLeft", + "opponentLeft", + "playerRight", + "opponentRight", +}; + +static const char *BattlerIdentifier(s32 battlerId) +{ + const struct BattleTest *test = gTestRunnerState.test->data; + switch (test->type) + { + case BATTLE_TEST_SINGLES: return sBattlerIdentifiersSingles[battlerId]; + case BATTLE_TEST_DOUBLES: return sBattlerIdentifiersDoubles[battlerId]; + } + return ""; +} + static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32 byte) { u32 recordIndex = DATA.recordIndexes[battlerId]++; @@ -1267,7 +1292,6 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) else if (moveId == MOVE_NONE) { INVALID_IF(DATA.explicitMoves[battlerId & BIT_SIDE] & (1 << DATA.currentMonIndexes[battlerId]), "Missing explicit %S", gMoveNames[ctx.move]); - INVALID_IF(i == MAX_MON_MOVES, "Too many different moves"); SetMonData(mon, MON_DATA_MOVE1 + i, &ctx.move); SetMonData(DATA.currentMon, MON_DATA_PP1 + i, &gBattleMoves[ctx.move].pp); moveSlot = i; @@ -1275,6 +1299,7 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) break; } } + INVALID_IF(i == MAX_MON_MOVES, "Too many different moves for %s", BattlerIdentifier(battlerId)); } else if (ctx.explicitMoveSlot) { From efc9bad8427c91a4a577facd4d2b56614245d742 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Fri, 24 Mar 2023 10:21:38 +0000 Subject: [PATCH 227/290] Fix Defog "Too many moves" --- test/move_effect_defog.c | 47 ++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/test/move_effect_defog.c b/test/move_effect_defog.c index d877899bb5..e9e55d57fe 100644 --- a/test/move_effect_defog.c +++ b/test/move_effect_defog.c @@ -327,7 +327,6 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Aurora Veil from p DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can") { - bool32 defogTurn = FALSE; GIVEN { ASSUME(gBattleMoves[MOVE_HAIL].effect == EFFECT_HAIL); ASSUME(gSpeciesInfo[SPECIES_GLALIE].types[0] == TYPE_ICE); @@ -343,33 +342,29 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" TURN { MOVE(playerLeft, MOVE_STICKY_WEB); MOVE(playerRight, MOVE_SPIKES); MOVE(opponentLeft, MOVE_STICKY_WEB); MOVE(opponentRight, MOVE_SPIKES); } TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); SWITCH(opponentLeft, 2); SWITCH(opponentRight, 3);} TURN { MOVE(playerLeft, MOVE_TOXIC_SPIKES); MOVE(playerRight, MOVE_STEALTH_ROCK); MOVE(opponentLeft, MOVE_TOXIC_SPIKES); MOVE(opponentRight, MOVE_STEALTH_ROCK); } - TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_STEALTH_ROCK); } - TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } - TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } - TURN { defogTurn = TRUE ; MOVE(opponentRight, MOVE_DEFOG, target:playerLeft);} + TURN { MOVE(playerLeft, MOVE_HAIL); MOVE(playerRight, MOVE_AURORA_VEIL); MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_LIGHT_SCREEN); } + TURN { MOVE(playerLeft, MOVE_REFLECT); MOVE(playerRight, MOVE_LIGHT_SCREEN); MOVE(opponentLeft, MOVE_REFLECT); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_DEFOG, target: playerLeft); } } SCENE { - if (defogTurn == TRUE) - { - MESSAGE("Foe Glalie used Defog!"); - MESSAGE("Glalie is protected by MIST!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); - // Player side - MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Ally's Light Screen wore off!"); - MESSAGE("Ally's Mist wore off!"); - MESSAGE("Ally's Aurora Veil wore off!"); - MESSAGE("Ally's Safeguard wore off!"); + MESSAGE("Foe Glalie used Defog!"); + MESSAGE("Glalie is protected by MIST!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponentRight); + // Player side + MESSAGE("Ally's Reflect wore off!"); + MESSAGE("Ally's Light Screen wore off!"); + MESSAGE("Ally's Mist wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); + MESSAGE("Ally's Safeguard wore off!"); - MESSAGE("The spikes disappeared from the ground around your team!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The poison spikes disappeared from the ground around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The poison spikes disappeared from the ground around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); - // Opponent side - MESSAGE("The spikes disappeared from the ground around the opposing team!"); - MESSAGE("The pointed stones disappeared from around the opposing team!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); - } + // Opponent side + MESSAGE("The spikes disappeared from the ground around the opposing team!"); + MESSAGE("The pointed stones disappeared from around the opposing team!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); } } From c383c995f1413091846b9140155ca8426d759ce3 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Fri, 24 Mar 2023 10:12:09 -0300 Subject: [PATCH 228/290] Applied review changes --- src/battle_util.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index cfb1d577b5..e8adc8a112 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -2135,17 +2135,14 @@ static bool32 EndTurnTerrain(u32 terrainFlag, u32 stringTableId) { gFieldStatuses &= ~terrainFlag; TryToRevertMimicry(); - - if (terrainFlag != STATUS_FIELD_GRASSY_TERRAIN) + if (!(terrainFlag & STATUS_FIELD_GRASSY_TERRAIN)) { gBattleCommunication[MULTISTRING_CHOOSER] = stringTableId; BattleScriptExecute(BattleScript_TerrainEnds); } } - if (terrainFlag == STATUS_FIELD_GRASSY_TERRAIN) - { + if (terrainFlag & STATUS_FIELD_GRASSY_TERRAIN) BattleScriptExecute(BattleScript_GrassyTerrainHeals); - } return TRUE; } return FALSE; @@ -2502,19 +2499,19 @@ u8 DoFieldEndTurnEffects(void) gBattleStruct->turnCountersTracker++; break; case ENDTURN_ELECTRIC_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); + effect = EndTurnTerrain(STATUS_FIELD_ELECTRIC_TERRAIN, B_MSG_TERRAINENDS_ELECTRIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_MISTY_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); + effect = EndTurnTerrain(STATUS_FIELD_MISTY_TERRAIN, B_MSG_TERRAINENDS_MISTY); gBattleStruct->turnCountersTracker++; break; case ENDTURN_GRASSY_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); + effect = EndTurnTerrain(STATUS_FIELD_GRASSY_TERRAIN, B_MSG_TERRAINENDS_GRASS); gBattleStruct->turnCountersTracker++; break; case ENDTURN_PSYCHIC_TERRAIN: - effect += EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); + effect = EndTurnTerrain(STATUS_FIELD_PSYCHIC_TERRAIN, B_MSG_TERRAINENDS_PSYCHIC); gBattleStruct->turnCountersTracker++; break; case ENDTURN_WATER_SPORT: From 2c3db747027aab2346b57058115c50814619562f Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Fri, 24 Mar 2023 10:36:10 -0400 Subject: [PATCH 229/290] fix base power calcs using battler addresses --- src/battle_util.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 7bf090a73b..8338d10459 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8602,7 +8602,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) basePower *= 2; break; case EFFECT_PURSUIT: - if (gActionsByTurnOrder[GetBattlerTurnOrderNum(gBattlerTarget)] == B_ACTION_SWITCH) + if (gActionsByTurnOrder[GetBattlerTurnOrderNum(battlerDef)] == B_ACTION_SWITCH) basePower *= 2; break; case EFFECT_NATURAL_GIFT: @@ -8736,12 +8736,12 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) #if B_HIDDEN_POWER_DMG < GEN_6 u8 powerBits; - powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1) - | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0) - | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1) - | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2) - | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3) - | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4); + powerBits = ((gBattleMons[battlerAtk].hpIV & 2) >> 1) + | ((gBattleMons[battlerAtk].attackIV & 2) << 0) + | ((gBattleMons[battlerAtk].defenseIV & 2) << 1) + | ((gBattleMons[battlerAtk].speedIV & 2) << 2) + | ((gBattleMons[battlerAtk].spAttackIV & 2) << 3) + | ((gBattleMons[battlerAtk].spDefenseIV & 2) << 4); basePower = (40 * powerBits) / 63 + 30; #endif @@ -8753,15 +8753,15 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) break; case EFFECT_TERRAIN_PULSE: if ((gFieldStatuses & STATUS_FIELD_TERRAIN_ANY) - && IsBattlerGrounded(gBattlerAttacker)) + && IsBattlerGrounded(battlerAtk)) basePower *= 2; break; case EFFECT_EXPANDING_FORCE: - if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_PSYCHIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN)) MulModifier(&basePower, UQ_4_12(1.5)); break; case EFFECT_RISING_VOLTAGE: - if (IsBattlerTerrainAffected(gBattlerTarget, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerDef, STATUS_FIELD_ELECTRIC_TERRAIN)) basePower *= 2; break; case EFFECT_BEAT_UP: @@ -8770,7 +8770,7 @@ static u16 CalcMoveBasePower(u16 move, u8 battlerAtk, u8 battlerDef) #endif break; case EFFECT_PSYBLADE: - if (IsBattlerTerrainAffected(gBattlerAttacker, STATUS_FIELD_ELECTRIC_TERRAIN)) + if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_ELECTRIC_TERRAIN)) MulModifier(&basePower, UQ_4_12(1.5)); break; } @@ -9611,7 +9611,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move || (gSideStatuses[defSide] & SIDE_STATUS_AURORA_VEIL)) && abilityAtk != ABILITY_INFILTRATOR && !(isCrit) - && !gProtectStructs[gBattlerAttacker].confusionSelfDmg) + && !gProtectStructs[battlerAtk].confusionSelfDmg) { if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) MulModifier(&finalModifier, UQ_4_12(0.66)); @@ -9620,7 +9620,7 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move } // Parental Bond Second Strike - if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT) + if (gSpecialStatuses[battlerAtk].parentalBondState == PARENTAL_BOND_2ND_HIT) { if (B_PARENTAL_BOND_DMG < GEN_7) MulModifier(&finalModifier, UQ_4_12(0.5)); From b9447f88fc3a30b78206bca459b60bdc831f461a Mon Sep 17 00:00:00 2001 From: sbird Date: Fri, 24 Mar 2023 15:41:18 +0100 Subject: [PATCH 230/290] fix compound eyes ohko test --- src/battle_script_commands.c | 2 +- test/ability_compound_eyes.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 283adb54a9..9ace33bf09 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12562,7 +12562,7 @@ static void Cmd_tryKO(void) if (gCurrentMove == MOVE_SHEER_COLD && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)) odds -= 10; #endif - if (Random() % 100 + 1 < odds && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) + if (RandomPercentage(RNG_ACCURACY, odds) && gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) lands = TRUE; } diff --git a/test/ability_compound_eyes.c b/test/ability_compound_eyes.c index bbe718176a..d90604d5c3 100644 --- a/test/ability_compound_eyes.c +++ b/test/ability_compound_eyes.c @@ -21,12 +21,11 @@ SINGLE_BATTLE_TEST("Compound Eyes raises accuracy") // than we expect. SINGLE_BATTLE_TEST("Compound Eyes does not affect OHKO moves") { - KNOWN_FAILING; PASSES_RANDOMLY(30, 100, RNG_ACCURACY); GIVEN { ASSUME(gBattleMoves[MOVE_FISSURE].accuracy == 30); ASSUME(gBattleMoves[MOVE_FISSURE].effect == EFFECT_OHKO); - PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_TINTED_LENS); }; + PLAYER(SPECIES_BUTTERFREE) { Ability(ABILITY_COMPOUND_EYES); }; OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_FISSURE); } From aea5d79aa2965e88fc69ef483f7f2c87b02dfc28 Mon Sep 17 00:00:00 2001 From: sbird Date: Thu, 23 Feb 2023 23:14:14 +0100 Subject: [PATCH 231/290] [trainer_parties] implement fully customizable npc trainer parties fix nature related bug, fix hash generation, add tests --- include/battle_main.h | 4 + include/constants/trainers.h | 9 +- include/data.h | 42 +++++-- include/global.h | 3 + src/battle_main.c | 217 +++++++++++++++++++++++++++-------- src/data.c | 1 + test/trainer_control.c | 140 ++++++++++++++++++++++ 7 files changed, 356 insertions(+), 60 deletions(-) create mode 100644 test/trainer_control.c diff --git a/include/battle_main.h b/include/battle_main.h index df59dcae34..8d1aad454e 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -1,6 +1,9 @@ #ifndef GUARD_BATTLE_MAIN_H #define GUARD_BATTLE_MAIN_H +#include "pokemon.h" +#include "data.h" + struct TrainerMoney { u8 classId; @@ -66,6 +69,7 @@ bool8 TryRunFromBattle(u8 battlerId); void SpecialStatusesClear(void); void SetTypeBeforeUsingMove(u16 move, u8 battlerAtk); bool32 IsWildMonSmart(void); +u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); extern struct MultiPartnerMenuPokemon gMultiPartnerParty[MULTI_PARTY_SIZE]; diff --git a/include/constants/trainers.h b/include/constants/trainers.h index 39ca2a2b86..25660ac073 100644 --- a/include/constants/trainers.h +++ b/include/constants/trainers.h @@ -374,7 +374,12 @@ // All trainer parties specify the IV, level, and species for each Pokémon in the // party. Some trainer parties also specify held items and custom moves for each // Pokémon. -#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0) -#define F_TRAINER_PARTY_HELD_ITEM (1 << 1) +#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0) +#define F_TRAINER_PARTY_HELD_ITEM (1 << 1) +#define F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED (1 << 3) + +// Trainer party defines +#define TRAINER_MON_MALE 1 +#define TRAINER_MON_FEMALE 2 #endif // GUARD_TRAINERS_H diff --git a/include/data.h b/include/data.h index 79f6a3715a..6e41ac703a 100644 --- a/include/data.h +++ b/include/data.h @@ -31,6 +31,26 @@ struct MonCoords #define MON_COORDS_SIZE(width, height)(DIV_ROUND_UP(width, 8) << 4 | DIV_ROUND_UP(height, 8)) #define GET_MON_COORDS_WIDTH(size)((size >> 4) * 8) #define GET_MON_COORDS_HEIGHT(size)((size & 0xF) * 8) +#define TRAINER_PARTY_IVS(hp, atk, def, speed, spatk, spdef) (hp | (atk << 5) | (def << 10) | (speed << 15) | (spatk << 20) | (spdef << 25)) +#define TRAINER_PARTY_EVS(hp, atk, def, speed, spatk, spdef) ((const u8[6]){hp,atk,def,spatk,spdef,speed}) +#define TRAINER_PARTY_NATURE(nature) (nature+1) + +struct TrainerMonCustomized +{ + const u8 *nickname; + const u8 *ev; + u32 iv; + u16 moves[4]; + u16 species; + u16 heldItem; + u16 ability; + u8 lvl; + u8 ball; + u8 friendship; + u8 nature : 5; + bool8 gender : 2; + bool8 isShiny : 1; +}; struct TrainerMonNoItemDefaultMoves { @@ -68,6 +88,7 @@ struct TrainerMonItemCustomMoves #define NO_ITEM_CUSTOM_MOVES(party) { .NoItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET #define ITEM_DEFAULT_MOVES(party) { .ItemDefaultMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_HELD_ITEM #define ITEM_CUSTOM_MOVES(party) { .ItemCustomMoves = party }, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM +#define EVERYTHING_CUSTOMIZED(party) { .EverythingCustomized = party}, .partySize = ARRAY_COUNT(party), .partyFlags = F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED union TrainerMonPtr { @@ -75,20 +96,21 @@ union TrainerMonPtr const struct TrainerMonNoItemCustomMoves *NoItemCustomMoves; const struct TrainerMonItemDefaultMoves *ItemDefaultMoves; const struct TrainerMonItemCustomMoves *ItemCustomMoves; + const struct TrainerMonCustomized *EverythingCustomized; }; struct Trainer { - /*0x00*/ u8 partyFlags; - /*0x01*/ u8 trainerClass; - /*0x02*/ u8 encounterMusic_gender; // last bit is gender - /*0x03*/ u8 trainerPic; - /*0x04*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; - /*0x10*/ u16 items[MAX_TRAINER_ITEMS]; - /*0x18*/ bool8 doubleBattle; - /*0x1C*/ u32 aiFlags; - /*0x20*/ u8 partySize; - /*0x24*/ union TrainerMonPtr party; + /*0x00*/ u32 aiFlags; + /*0x04*/ union TrainerMonPtr party; + /*0x08*/ u16 items[MAX_TRAINER_ITEMS]; + /*0x10*/ u8 trainerClass; + /*0x11*/ u8 encounterMusic_gender; // last bit is gender + /*0x12*/ u8 trainerPic; + /*0x13*/ u8 trainerName[TRAINER_NAME_LENGTH + 1]; + /*0x1E*/ bool8 doubleBattle:1; + u8 partyFlags:7; + /*0x1F*/ u8 partySize; }; #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) diff --git a/include/global.h b/include/global.h index 4b3e90bfac..f7d166bb5b 100644 --- a/include/global.h +++ b/include/global.h @@ -147,6 +147,9 @@ #define CAT(a, b) CAT_(a, b) #define CAT_(a, b) a ## b +// Converts a string to a compound literal, essentially making it a pointer to const u8 +#define COMPOUND_STRING(str) (const u8[]) _(str) + // This produces an error at compile-time if expr is zero. // It looks like file.c:line: size of array `id' is negative #define STATIC_ASSERT(expr, id) typedef char id[(expr) ? 1 : -1]; diff --git a/src/battle_main.c b/src/battle_main.c index 9ea3b66446..efbf1b8195 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -118,6 +118,10 @@ static void HandleEndTurn_FinishBattle(void); static void SpriteCB_UnusedBattleInit(struct Sprite *sprite); static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite); static void TrySpecialEvolution(void); +static u32 Crc32B (const u8 *data, u32 size); +static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i); +static void ModifyPersonalityForNature(u32 *personality, u32 newNature); +static u32 GeneratePersonalityForGender(u32 gender, u32 species); EWRAM_DATA u16 gBattle_BG0_X = 0; EWRAM_DATA u16 gBattle_BG0_Y = 0; @@ -1869,72 +1873,129 @@ static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite) } } -static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer) +static u32 Crc32B (const u8 *data, u32 size) +{ + s32 i, j; + u32 byte, crc, mask; + + i = 0; + crc = 0xFFFFFFFF; + for (i = 0; i < size; ++i) + { + byte = data[i]; + crc = crc ^ byte; + for (j = 7; j >= 0; --j) + { + mask = -(crc & 1); + crc = (crc >> 1) ^ (0xEDB88320 & mask); + } + } + return ~crc; +} + +static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i) +{ + const u8 *buffer; + u32 n; + if (trainer->partyFlags == 0) + { + buffer = (const u8 *) &trainer->party.NoItemDefaultMoves[i]; + n = sizeof(*trainer->party.NoItemDefaultMoves); + } + else if (trainer->partyFlags == F_TRAINER_PARTY_CUSTOM_MOVESET) + { + buffer = (const u8 *) &trainer->party.NoItemCustomMoves[i]; + n = sizeof(*trainer->party.NoItemCustomMoves); + } + else if (trainer->partyFlags == F_TRAINER_PARTY_HELD_ITEM) + { + buffer = (const u8 *) &trainer->party.ItemDefaultMoves[i]; + n = sizeof(*trainer->party.ItemDefaultMoves); + } + else if (trainer->partyFlags == (F_TRAINER_PARTY_HELD_ITEM | F_TRAINER_PARTY_CUSTOM_MOVESET)) + { + buffer = (const u8 *) &trainer->party.ItemCustomMoves[i]; + n = sizeof(*trainer->party.ItemCustomMoves); + } + else if (trainer->partyFlags == F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED) + { + buffer = (const u8 *) &trainer->party.EverythingCustomized[i]; + n = sizeof(*trainer->party.EverythingCustomized); + } + return Crc32B(buffer, n); +} + +static void ModifyPersonalityForNature(u32 *personality, u32 newNature) +{ + u32 nature = GetNatureFromPersonality(*personality); + s32 diff = abs(nature - newNature); + s32 sign = (nature > newNature) ? 1 : -1; + if (diff > NUM_NATURES / 2) + { + diff = NUM_NATURES - diff; + sign *= -1; + } + *personality -= (diff * sign); +} + +static u32 GeneratePersonalityForGender(u32 gender, u32 species) +{ + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species]; + if (gender == MON_MALE) + return ((255 - speciesInfo->genderRatio) / 2) + speciesInfo->genderRatio; + else + return speciesInfo->genderRatio / 2; +} + +u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags) { - u32 nameHash = 0; u32 personalityValue; u8 fixedIV; s32 i, j; u8 monsCount; - u16 ball; - - if (trainerNum == TRAINER_SECRET_BASE) - return 0; - - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & (BATTLE_TYPE_FRONTIER + s32 ball = -1; + if (battleTypeFlags & BATTLE_TYPE_TRAINER && !(battleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER_HILL))) { if (firstTrainer == TRUE) ZeroEnemyPartyMons(); - if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + if (battleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) { - if (gTrainers[trainerNum].partySize > PARTY_SIZE / 2) + if (trainer->partySize > PARTY_SIZE / 2) monsCount = PARTY_SIZE / 2; else - monsCount = gTrainers[trainerNum].partySize; + monsCount = trainer->partySize; } else { - monsCount = gTrainers[trainerNum].partySize; + monsCount = trainer->partySize; } for (i = 0; i < monsCount; i++) { - - if (gTrainers[trainerNum].doubleBattle == TRUE) + u32 personalityHash = GeneratePartyHash(trainer, i); + if (trainer->doubleBattle == TRUE) personalityValue = 0x80; - else if (gTrainers[trainerNum].encounterMusic_gender & F_TRAINER_FEMALE) + else if (trainer->encounterMusic_gender & F_TRAINER_FEMALE) personalityValue = 0x78; // Use personality more likely to result in a female Pokémon else personalityValue = 0x88; // Use personality more likely to result in a male Pokémon - for (j = 0; gTrainers[trainerNum].trainerName[j] != EOS; j++) - nameHash += gTrainers[trainerNum].trainerName[j]; - - switch (gTrainers[trainerNum].partyFlags) + personalityValue += personalityHash << 8; + switch (trainer->partyFlags) { case 0: { - const struct TrainerMonNoItemDefaultMoves *partyData = gTrainers[trainerNum].party.NoItemDefaultMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonNoItemDefaultMoves *partyData = trainer->party.NoItemDefaultMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); break; } case F_TRAINER_PARTY_CUSTOM_MOVESET: { - const struct TrainerMonNoItemCustomMoves *partyData = gTrainers[trainerNum].party.NoItemCustomMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonNoItemCustomMoves *partyData = trainer->party.NoItemCustomMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); @@ -1947,12 +2008,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } case F_TRAINER_PARTY_HELD_ITEM: { - const struct TrainerMonItemDefaultMoves *partyData = gTrainers[trainerNum].party.ItemDefaultMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonItemDefaultMoves *partyData = trainer->party.ItemDefaultMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); @@ -1961,12 +2017,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: { - const struct TrainerMonItemCustomMoves *partyData = gTrainers[trainerNum].party.ItemCustomMoves; - - for (j = 0; gSpeciesNames[partyData[i].species][j] != EOS; j++) - nameHash += gSpeciesNames[partyData[i].species][j]; - - personalityValue += nameHash << 8; + const struct TrainerMonItemCustomMoves *partyData = trainer->party.ItemCustomMoves; fixedIV = partyData[i].iv * MAX_PER_STAT_IVS / 255; CreateMon(&party[i], partyData[i].species, partyData[i].lvl, fixedIV, TRUE, personalityValue, OT_ID_RANDOM_NO_SHINY, 0); @@ -1979,18 +2030,88 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 fir } break; } + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *partyData = trainer->party.EverythingCustomized; + u32 otIdType = OT_ID_RANDOM_NO_SHINY; + u32 fixedOtId = 0; + if (partyData[i].gender == TRAINER_MON_MALE) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species); + else if (partyData[i].gender == TRAINER_MON_FEMALE) + personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species); + if (partyData[i].nature != 0) + ModifyPersonalityForNature(&personalityValue, partyData[i].nature - 1); + if (partyData[i].isShiny) + { + otIdType = OT_ID_PRESET; + fixedOtId = HIHALF(personalityValue) ^ LOHALF(personalityValue); + } + CreateMon(&party[i], partyData[i].species, partyData[i].lvl, 0, TRUE, personalityValue, otIdType, fixedOtId); + SetMonData(&party[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&party[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&party[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + SetMonData(&party[i], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) + { + SetMonData(&party[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&party[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&party[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&party[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&party[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&party[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + } + if (partyData[i].ability != ABILITY_NONE) + { + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); + for (j = 0; j < maxAbilities; ++j) + { + if (speciesInfo->abilities[j] == partyData[i].ability) + break; + } + if (j < maxAbilities) + SetMonData(&party[i], MON_DATA_ABILITY_NUM, &j); + } + SetMonData(&party[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) + { + ball = partyData[i].ball; + SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + } + if (partyData[i].nickname != NULL) + { + SetMonData(&party[i], MON_DATA_NICKNAME, partyData[i].nickname); + } + CalculateMonStats(&party[i]); + } } #if B_TRAINER_CLASS_POKE_BALLS >= GEN_7 - ball = (sTrainerBallTable[gTrainers[trainerNum].trainerClass]) ? sTrainerBallTable[gTrainers[trainerNum].trainerClass] : ITEM_POKE_BALL; - SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + if (ball == -1) + { + ball = (sTrainerBallTable[trainer->trainerClass]) ? sTrainerBallTable[trainer->trainerClass] : ITEM_POKE_BALL; + SetMonData(&party[i], MON_DATA_POKEBALL, &ball); + } #endif } - - gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } - return gTrainers[trainerNum].partySize; + return trainer->partySize; +} + +static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum, bool8 firstTrainer) +{ + u8 retVal; + if (trainerNum == TRAINER_SECRET_BASE) + return 0; + retVal = CreateNPCTrainerPartyFromTrainer(party, &gTrainers[trainerNum], firstTrainer, gBattleTypeFlags); + + gBattleTypeFlags |= gTrainers[trainerNum].doubleBattle; } void VBlankCB_Battle(void) diff --git a/src/data.c b/src/data.c index 08b2c96e05..1ced9ce81d 100644 --- a/src/data.c +++ b/src/data.c @@ -3,6 +3,7 @@ #include "battle.h" #include "data.h" #include "graphics.h" +#include "constants/abilities.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/trainers.h" diff --git a/test/trainer_control.c b/test/trainer_control.c new file mode 100644 index 0000000000..3079422076 --- /dev/null +++ b/test/trainer_control.c @@ -0,0 +1,140 @@ +#include "global.h" +#include "test.h" +#include "battle.h" +#include "battle_main.h" +#include "data.h" +#include "malloc.h" +#include "string_util.h" +#include "constants/item.h" +#include "constants/abilities.h" +#include "constants/trainers.h" +#include "constants/battle.h" + + +static const struct TrainerMonCustomized sTestParty1[] = +{ + { + .species = SPECIES_WOBBUFFET, + .ball = ITEM_MASTER_BALL, + .ability = ABILITY_TELEPATHY, + .friendship = 42, + .gender = TRAINER_MON_FEMALE, + .heldItem = ITEM_ASSAULT_VEST, + .isShiny = TRUE, + .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30), + .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0), + .lvl = 67, + .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION}, + .nature = TRAINER_PARTY_NATURE(NATURE_HASTY), + .nickname = COMPOUND_STRING("Bubbles") + }, + { + .species = SPECIES_WOBBUFFET, + .ability = ABILITY_SHADOW_TAG, + .lvl = 5, + }, +}; + +static const struct TrainerMonNoItemDefaultMoves sTestParty2[] = +{ + { + .species = SPECIES_WOBBUFFET, + .lvl = 5, + }, + { + .species = SPECIES_WOBBUFFET, + .lvl = 6, + } +}; + +static const struct Trainer sTestTrainer1 = +{ + .trainerName = _("Test1"), + .party = EVERYTHING_CUSTOMIZED(sTestParty1), +}; + +static const struct Trainer sTestTrainer2 = +{ + .trainerName = _("Test2"), + .party = NO_ITEM_DEFAULT_MOVES(sTestParty2), +}; + +TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + u8 nickBuffer[20]; + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer1, TRUE, BATTLE_TYPE_TRAINER); + EXPECT(IsMonShiny(&testParty[0])); + EXPECT(!IsMonShiny(&testParty[1])); + + EXPECT(GetMonData(&testParty[0], MON_DATA_POKEBALL, 0) == ITEM_MASTER_BALL); + EXPECT(GetMonData(&testParty[1], MON_DATA_POKEBALL, 0) == ITEM_POKE_BALL); + + EXPECT(GetMonData(&testParty[0], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPECIES, 0) == SPECIES_WOBBUFFET); + + EXPECT(GetMonAbility(&testParty[0]) == ABILITY_TELEPATHY); + EXPECT(GetMonAbility(&testParty[1]) == ABILITY_SHADOW_TAG); + + EXPECT(GetMonData(&testParty[0], MON_DATA_FRIENDSHIP, 0) == 42); + EXPECT(GetMonData(&testParty[1], MON_DATA_FRIENDSHIP, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HELD_ITEM, 0) == ITEM_ASSAULT_VEST); + EXPECT(GetMonData(&testParty[1], MON_DATA_HELD_ITEM, 0) == ITEM_NONE); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_IV, 0) == 25); + EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_IV, 0) == 26); + EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_IV, 0) == 27); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPEED_IV, 0) == 28); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPATK_IV, 0) == 29); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPDEF_IV, 0) == 30); + + EXPECT(GetMonData(&testParty[1], MON_DATA_HP_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_ATK_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_DEF_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPEED_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPATK_IV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPDEF_IV, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_HP_EV, 0) == 252); + EXPECT(GetMonData(&testParty[0], MON_DATA_ATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[0], MON_DATA_DEF_EV, 0) == 0); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPEED_EV, 0) == 252); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPATK_EV, 0) == 4); + EXPECT(GetMonData(&testParty[0], MON_DATA_SPDEF_EV, 0) == 0); + + EXPECT(GetMonData(&testParty[1], MON_DATA_HP_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_ATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_DEF_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPEED_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPATK_EV, 0) == 0); + EXPECT(GetMonData(&testParty[1], MON_DATA_SPDEF_EV, 0) == 0); + + EXPECT(GetMonData(&testParty[0], MON_DATA_LEVEL, 0) == 67); + EXPECT(GetMonData(&testParty[1], MON_DATA_LEVEL, 0) == 5); + + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE1, 0) == MOVE_AIR_SLASH); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE2, 0) == MOVE_BARRIER); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE3, 0) == MOVE_SOLAR_BEAM); + EXPECT(GetMonData(&testParty[0], MON_DATA_MOVE4, 0) == MOVE_EXPLOSION); + + GetMonData(&testParty[0], MON_DATA_NICKNAME, nickBuffer); + EXPECT(StringCompare(nickBuffer, COMPOUND_STRING("Bubbles")) == 0); + + GetMonData(&testParty[1], MON_DATA_NICKNAME, nickBuffer); + EXPECT(StringCompare(nickBuffer, COMPOUND_STRING("Wobbuffet")) == 0); + + EXPECT(GetGenderFromSpeciesAndPersonality(GetMonData(&testParty[0], MON_DATA_SPECIES, 0), testParty[0].box.personality) == MON_FEMALE); + + EXPECT(GetNature(&testParty[0]) == NATURE_HASTY); + + Free(testParty); +} + +TEST("CreateNPCTrainerPartyForTrainer generates different personalities for different mons") +{ + struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon)); + CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER); + EXPECT(testParty[0].box.personality != testParty[1].box.personality); + Free(testParty); +} From 4b43f3eb9df60e42758666411fcf8ed79c5890f6 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 26 Mar 2023 21:10:51 +0200 Subject: [PATCH 232/290] add cases for everything customized --- src/battle_script_commands.c | 6 +++++ src/battle_setup.c | 8 ++++++ src/battle_tower.c | 49 ++++++++++++++++++++++++++++++++++++ src/match_call.c | 3 +++ 4 files changed, 66 insertions(+) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c50d801b18..b1ce7f964b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -7504,6 +7504,12 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; } break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *party = gTrainers[trainerId].party.EverythingCustomized; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; } for (; gTrainerMoneyTable[i].classId != 0xFF; i++) diff --git a/src/battle_setup.c b/src/battle_setup.c index 220edd394a..2b8e63e766 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -798,6 +798,14 @@ static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons) sum += party[i].lvl; } break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *party; + party = gTrainers[opponentId].party.EverythingCustomized; + for (i = 0; i < count; i++) + sum += party[i].lvl; + } + break; } return sum; diff --git a/src/battle_tower.c b/src/battle_tower.c index 9300756561..a4758b9304 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -23,6 +23,7 @@ #include "field_message_box.h" #include "tv.h" #include "battle_factory.h" +#include "constants/abilities.h" #include "constants/apprentice.h" #include "constants/battle_dome.h" #include "constants/battle_frontier.h" @@ -3007,6 +3008,7 @@ static void FillPartnerParty(u16 trainerId) u16 monId; u32 otID; u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1]; + s32 ball = -1; SetFacilityPtrsGetLevel(); if (trainerId == TRAINER_STEVEN_PARTNER) @@ -3098,6 +3100,53 @@ static void FillPartnerParty(u16 trainerId) } break; } + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + { + const struct TrainerMonCustomized *partyData = gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].party.EverythingCustomized; + + CreateMon(&gPlayerParty[i], partyData[i].species, partyData[i].lvl, 0, TRUE, j, TRUE, otID); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &partyData[i].heldItem); + + // TODO: Figure out a default strategy when moves are not set, to generate a good moveset + for (j = 0; j < MAX_MON_MOVES; ++j) + { + SetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, &partyData[i].moves[j]); + SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, &gBattleMoves[partyData[i].moves[j]].pp); + } + SetMonData(&gPlayerParty[i], MON_DATA_IVS, &(partyData[i].iv)); + if (partyData[i].ev != NULL) + { + SetMonData(&gPlayerParty[i], MON_DATA_HP_EV, &(partyData[i].ev[0])); + SetMonData(&gPlayerParty[i], MON_DATA_ATK_EV, &(partyData[i].ev[1])); + SetMonData(&gPlayerParty[i], MON_DATA_DEF_EV, &(partyData[i].ev[2])); + SetMonData(&gPlayerParty[i], MON_DATA_SPATK_EV, &(partyData[i].ev[3])); + SetMonData(&gPlayerParty[i], MON_DATA_SPDEF_EV, &(partyData[i].ev[4])); + SetMonData(&gPlayerParty[i], MON_DATA_SPEED_EV, &(partyData[i].ev[5])); + } + if (partyData[i].ability != ABILITY_NONE) + { + const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[partyData[i].species]; + u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities); + for (j = 0; j < maxAbilities; ++j) + { + if (speciesInfo->abilities[j] == partyData[i].ability) + break; + } + if (j < maxAbilities) + SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &j); + } + SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &(partyData[i].friendship)); + if (partyData[i].ball != ITEM_NONE) + { + ball = partyData[i].ball; + SetMonData(&gPlayerParty[i], MON_DATA_POKEBALL, &ball); + } + if (partyData[i].nickname != NULL) + { + SetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, partyData[i].nickname); + } + CalculateMonStats(&gPlayerParty[i]); + } } StringCopy(trainerName, gTrainers[trainerId - TRAINER_CUSTOM_PARTNER].trainerName); diff --git a/src/match_call.c b/src/match_call.c index a9d18b3477..c3378040e3 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1812,6 +1812,9 @@ static void PopulateSpeciesFromTrainerParty(int matchCallId, u8 *destStr) case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: speciesName = gSpeciesNames[party.ItemCustomMoves[monId].species]; break; + case F_TRAINER_PARTY_EVERYTHING_CUSTOMIZED: + speciesName = gSpeciesNames[party.EverythingCustomized[monId].species]; + break; } StringCopy(destStr, speciesName); From 0b8285737a7434c8d48d05e623105fea2e8186cf Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 09:19:48 -0300 Subject: [PATCH 233/290] Fixed Comatose AI checks --- include/battle_ai_util.h | 1 + src/battle_ai_main.c | 8 ++++---- src/battle_ai_util.c | 5 +++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 11eba7b661..892736b54e 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -144,6 +144,7 @@ bool32 AnyPartyMemberStatused(u8 battlerId, bool32 checkSoundproof); u32 ShouldTryToFlinch(u8 battlerAtk, u8 battlerDef, u16 atkAbility, u16 defAbility, u16 move); bool32 ShouldTrap(u8 battlerAtk, u8 battlerDef, u16 move); bool32 IsWakeupTurn(u8 battler); +bool32 AI_IsBattlerAsleepOrComatose(u8 battlerId); // partner logic u16 GetAllyChosenMove(u8 battlerId); diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19eedb41cc..a359358b92 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -974,7 +974,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) } break; case EFFECT_DREAM_EATER: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + if (!AI_IsBattlerAsleepOrComatose(battlerDef)) score -= 8; else if (effectiveness == AI_EFFECTIVENESS_x0) score -= 10; @@ -1453,7 +1453,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) break; case EFFECT_SNORE: case EFFECT_SLEEP_TALK: - if (IsWakeupTurn(battlerAtk) || (!(gBattleMons[battlerAtk].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerAtk] != ABILITY_COMATOSE)) + if (IsWakeupTurn(battlerAtk) || !AI_IsBattlerAsleepOrComatose(battlerAtk)) score -= 10; // if mon will wake up, is not asleep, or is not comatose break; case EFFECT_MEAN_LOOK: @@ -1463,7 +1463,7 @@ static s16 AI_CheckBadMove(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_NIGHTMARE: if (gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) score -= 10; - else if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE) + else if (!AI_IsBattlerAsleepOrComatose(battlerDef)) score -= 8; else if (DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, AI_DATA->partnerMove)) score -= 10; @@ -3780,7 +3780,7 @@ static s16 AI_CheckViability(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) case EFFECT_NIGHTMARE: if (AI_DATA->abilities[battlerDef] != ABILITY_MAGIC_GUARD && !(gBattleMons[battlerDef].status2 & STATUS2_NIGHTMARE) - && (AI_DATA->abilities[battlerDef] == ABILITY_COMATOSE || gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) + && AI_IsBattlerAsleepOrComatose(battlerDef)) { score += 5; if (IsBattlerTrapped(battlerDef, TRUE)) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a9e3ed3e0b..7b8fb04638 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -3749,3 +3749,8 @@ bool32 ShouldUseZMove(u8 battlerAtk, u8 battlerDef, u16 chosenMove) return FALSE; } + +bool32 AI_IsBattlerAsleepOrComatose(u8 battlerId) +{ + return (gBattleMons[battlerId].status1 & STATUS1_SLEEP) || AI_DATA->abilities[battlerId] == ABILITY_COMATOSE; +} From 2fba07c501df6e9434ffe53f18aa67385078aa06 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 11:30:38 -0300 Subject: [PATCH 234/290] Added KNOWN_FAILING to Dire Claw and Tri Attack's force-bruted RNG failing tests --- test/move_effect_dire_claw.c | 1 + test/move_effect_tri_attack.c | 1 + 2 files changed, 2 insertions(+) diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c index a5270ce3fb..f02555df30 100644 --- a/test/move_effect_dire_claw.c +++ b/test/move_effect_dire_claw.c @@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") { u8 statusAnim; u32 rng; + KNOWN_FAILING; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c index 31627ef2d1..9bfacdb985 100644 --- a/test/move_effect_tri_attack.c +++ b/test/move_effect_tri_attack.c @@ -15,6 +15,7 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") { u8 statusAnim; u32 rng; + KNOWN_FAILING; PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } From f6a924a7917008e2e1e0a9201c78aaa91884f81f Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 27 Mar 2023 11:49:50 -0300 Subject: [PATCH 235/290] Fixed instances of gSideTimers not using side constants --- src/battle_script_commands.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3376f9db60..28bf60c39b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3923,14 +3923,14 @@ static void Cmd_tryfaintmon(void) if (gBattleResults.playerFaintCounter < 255) gBattleResults.playerFaintCounter++; AdjustFriendshipOnBattleFaint(gActiveBattler); - gSideTimers[0].retaliateTimer = 2; + gSideTimers[B_SIDE_PLAYER].retaliateTimer = 2; } else { if (gBattleResults.opponentFaintCounter < 255) gBattleResults.opponentFaintCounter++; gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES, NULL); - gSideTimers[1].retaliateTimer = 2; + gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2; } if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0) { From 7b306b61473f2fa31b676769c7fb66fbf6bb7d2d Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Mon, 27 Mar 2023 17:32:16 +0100 Subject: [PATCH 236/290] RandomElement for structured RNG Converts Tri Attack and Dire Claw to use structured RNG. --- include/random.h | 16 ++++- src/battle_script_commands.c | 5 +- src/random.c | 10 +++- test/move_effect_dire_claw.c | 46 ++++++-------- test/move_effect_tri_attack.c | 48 ++++++--------- test/random.c | 33 +++++++++- test/test_battle.h | 16 ++++- test/test_runner_battle.c | 109 +++++++++++++++++++++++++++------- 8 files changed, 199 insertions(+), 84 deletions(-) diff --git a/include/random.h b/include/random.h index 60c718348c..fd340c26db 100644 --- a/include/random.h +++ b/include/random.h @@ -29,7 +29,12 @@ void SeedRng2(u16 seed); * * RandomTag identifies the purpose of the value. * - * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive. + * RandomUniform(tag, lo, hi) returns a number from lo to hi inclusive + * with uniform probability. + * + * RandomElement(tag, array) returns an element in array with uniform + * probability. The array must be known at compile-time (e.g. a global + * const array). * * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100, * and TRUE with probability t/100. @@ -47,6 +52,7 @@ enum RandomTag RNG_CRITICAL_HIT, RNG_CUTE_CHARM, RNG_DAMAGE_MODIFIER, + RNG_DIRE_CLAW, RNG_FLAME_BODY, RNG_FORCE_RANDOM_SWITCH, RNG_FROZEN, @@ -60,6 +66,7 @@ enum RandomTag RNG_SPEED_TIE, RNG_STATIC, RNG_STENCH, + RNG_TRI_ATTACK, }; #define RandomWeighted(tag, ...) \ @@ -77,10 +84,17 @@ enum RandomTag RandomWeightedArray(tag, 100, ARRAY_COUNT(weights), weights); \ }) +#define RandomElement(tag, array) \ + ({ \ + *(typeof((array)[0]) *)RandomElementArray(tag, array, sizeof((array)[0]), ARRAY_COUNT(array)); \ + }) + u32 RandomUniform(enum RandomTag, u32 lo, u32 hi); u32 RandomWeightedArray(enum RandomTag, u32 sum, u32 n, const u8 *weights); +const void *RandomElementArray(enum RandomTag, const void *array, size_t size, size_t count); u32 RandomUniformDefault(enum RandomTag, u32 lo, u32 hi); u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights); +const void *RandomElementArrayDefault(enum RandomTag, const void *array, size_t size, size_t count); #endif // GUARD_RANDOM_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 3376f9db60..62dcbf4472 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -3318,7 +3318,8 @@ void SetMoveEffect(bool32 primary, u32 certain) } else { - gBattleScripting.moveEffect = Random() % 3 + 3; + static const u8 sTriAttackEffects[] = { MOVE_EFFECT_BURN, MOVE_EFFECT_FREEZE, MOVE_EFFECT_PARALYSIS }; + gBattleScripting.moveEffect = RandomElement(RNG_TRI_ATTACK, sTriAttackEffects); SetMoveEffect(FALSE, 0); } break; @@ -3779,7 +3780,7 @@ void SetMoveEffect(bool32 primary, u32 certain) if (!gBattleMons[gEffectBattler].status1) { static const u8 sDireClawEffects[] = { MOVE_EFFECT_POISON, MOVE_EFFECT_PARALYSIS, MOVE_EFFECT_SLEEP }; - gBattleScripting.moveEffect = sDireClawEffects[Random() % ARRAY_COUNT(sDireClawEffects)]; + gBattleScripting.moveEffect = RandomElement(RNG_DIRE_CLAW, sDireClawEffects); SetMoveEffect(TRUE, 0); } break; diff --git a/src/random.c b/src/random.c index e59b563876..14983e7764 100644 --- a/src/random.c +++ b/src/random.c @@ -38,9 +38,12 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi); __attribute__((weak, alias("RandomWeightedArrayDefault"))) u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights); +__attribute__((weak, alias("RandomElementArrayDefault"))) +const void *RandomElementArray(enum RandomTag tag, const void *array, size_t size, size_t count); + u32 RandomUniformDefault(enum RandomTag tag, u32 lo, u32 hi) { - return lo + (((hi - lo) * Random()) >> 16); + return lo + (((hi - lo + 1) * Random()) >> 16); } u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) @@ -55,3 +58,8 @@ u32 RandomWeightedArrayDefault(enum RandomTag tag, u32 sum, u32 n, const u8 *wei } return n - 1; } + +const void *RandomElementArrayDefault(enum RandomTag tag, const void *array, size_t size, size_t count) +{ + return (const u8 *)array + size * RandomUniformDefault(tag, 0, count - 1); +} diff --git a/test/move_effect_dire_claw.c b/test/move_effect_dire_claw.c index f02555df30..2212c3cb0e 100644 --- a/test/move_effect_dire_claw.c +++ b/test/move_effect_dire_claw.c @@ -6,21 +6,14 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_DIRE_CLAW].effect == EFFECT_DIRE_CLAW); } -// found by brute-force -#define RNG_SLEEP 0xcb0 -#define RNG_POISON 0x2BE -#define RNG_PARALYSIS 5 - SINGLE_BATTLE_TEST("Dire Claw can inflict poison, paralysis or sleep") { u8 statusAnim; - u32 rng; - KNOWN_FAILING; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; } + PASSES_RANDOMLY(1, 3, RNG_DIRE_CLAW); GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,15 +41,14 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze poison/electric types respe u16 species; u32 rng; #if B_PARALYZE_ELECTRIC >= GEN_6 - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; } #endif // B_PARALYZE_ELECTRIC - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ARBOK;} + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ARBOK;} GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); @@ -76,21 +68,20 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep pokemo u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } #if P_GEN_4_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } #endif // P_GEN_4_POKEMON - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; species = SPECIES_ZANGOOSE; ability = ABILITY_IMMUNITY; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; species = SPECIES_VIGOROTH; ability = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; species = SPECIES_HYPNO; ability = ABILITY_INSOMNIA; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) {Ability(ability);} } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); @@ -112,15 +103,14 @@ SINGLE_BATTLE_TEST("Dire Claw cannot poison/paralyze/cause to fall asleep a mon { u8 statusAnim; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = RNG_POISON; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = RNG_SLEEP; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PSN; rng = MOVE_EFFECT_POISON; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_SLP; rng = MOVE_EFFECT_SLEEP; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_BURN);} } WHEN { - TURN { MOVE(player, MOVE_DIRE_CLAW); } + TURN { MOVE(player, MOVE_DIRE_CLAW, WITH_RNG(RNG_DIRE_CLAW, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DIRE_CLAW, player); diff --git a/test/move_effect_tri_attack.c b/test/move_effect_tri_attack.c index 9bfacdb985..c3fbfaaceb 100644 --- a/test/move_effect_tri_attack.c +++ b/test/move_effect_tri_attack.c @@ -6,21 +6,14 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_TRI_ATTACK].effect == EFFECT_TRI_ATTACK); } -// found by brute-force -#define RNG_PARALYSIS 0xcb0 -#define RNG_BURN 0x2BE -#define RNG_FREEZE 5 - SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze") { u8 statusAnim; - u32 rng; - KNOWN_FAILING; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; } + PASSES_RANDOMLY(1, 3, RNG_TRI_ATTACK); GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -48,16 +41,15 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ u16 species; u32 rng; #if B_PARALYZE_ELECTRIC >= GEN_6 - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU;} + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU;} #endif // B_PARALYZE_ELECTRIC - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_ARCANINE; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_GLALIE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_ARCANINE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_GLALIE; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species); } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); @@ -80,23 +72,22 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie u8 statusAnim; u16 species, ability; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; ability = ABILITY_LIGHTNING_ROD; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_JOLTEON; ability = ABILITY_VOLT_ABSORB; } #if P_GEN_4_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_ELECTIVIRE; ability = ABILITY_MOTOR_DRIVE; } #endif // P_GEN_4_POKEMON #if P_GEN_7_POKEMON == TRUE - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; } #endif // P_GEN_7_POKEMON - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) {Ability(ability);} } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); @@ -118,15 +109,14 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is alread { u8 statusAnim; u32 rng; - PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = RNG_PARALYSIS; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = RNG_BURN; } - PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = RNG_FREEZE; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; } + PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; } GIVEN { - RNGSeed(rng); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} } WHEN { - TURN { MOVE(player, MOVE_TRI_ATTACK); } + TURN { MOVE(player, MOVE_TRI_ATTACK, WITH_RNG(RNG_TRI_ATTACK, rng)); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TRI_ATTACK, player); diff --git a/test/random.c b/test/random.c index abaf4a4f82..39f587c062 100644 --- a/test/random.c +++ b/test/random.c @@ -34,6 +34,17 @@ TEST("RandomWeighted generates 0..n-1") } } +TEST("RandomElement generates an element") +{ + u32 i; + static const u8 es[4] = { 1, 2, 4, 8 }; + for (i = 0; i < 1024; i++) + { + u32 e = *(const u8 *)RandomElementArrayDefault(RNG_NONE, es, sizeof(es[0]), ARRAY_COUNT(es)); + EXPECT(e == 1 || e == 2 || e == 4 || e == 8); + } +} + TEST("RandomUniform generates uniform distribution") { u32 i, error; @@ -42,7 +53,7 @@ TEST("RandomUniform generates uniform distribution") memset(distribution, 0, sizeof(distribution)); for (i = 0; i < 4096; i++) { - u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution)); + u32 r = RandomUniformDefault(RNG_NONE, 0, ARRAY_COUNT(distribution) - 1); EXPECT(0 <= r && r < ARRAY_COUNT(distribution)); distribution[r]++; } @@ -79,3 +90,23 @@ TEST("RandomWeighted generates distribution in proportion to the weights") EXPECT_LT(error, UQ_4_12(0.025)); } + +TEST("RandomElement generates a uniform distribution") +{ + u32 i, error; + static const u8 es[4] = { 1, 2, 4, 8 }; + u16 distribution[9]; + + memset(distribution, 0, sizeof(distribution)); + for (i = 0; i < 4096; i++) + { + u32 e = *(const u8 *)RandomElementArrayDefault(RNG_NONE, es, sizeof(es[0]), ARRAY_COUNT(es)); + distribution[e]++; + } + + error = 0; + for (i = 0; i < ARRAY_COUNT(es); i++) + error += abs(UQ_4_12(0.25) - distribution[es[i]]); + + EXPECT_LT(error, UQ_4_12(0.025)); +} diff --git a/test/test_battle.h b/test/test_battle.h index 0e0464254f..60d0dc33cc 100644 --- a/test/test_battle.h +++ b/test/test_battle.h @@ -303,13 +303,14 @@ * The inference process is naive, if your test contains anything that * modifies the speed of a battler you should specify them explicitly. * - * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:]) + * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value]) * Used when the battler chooses Fight. Either the move ID or move slot * must be specified. megaEvolve: TRUE causes the battler to Mega Evolve * if able, hit: FALSE causes the move to miss, criticalHit: TRUE causes * the move to land a critical hit, target: is used in double battles to * choose the target (when necessary), and allowed: FALSE is used to - * reject an illegal move e.g. a Disabled one. + * reject an illegal move e.g. a Disabled one. WITH_RNG allows the move + * to specify an explicit outcome for an RNG tag. * MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); * If the battler does not have an explicit Moves specified the moveset * will be populated based on the MOVEs it uses. @@ -538,11 +539,18 @@ struct QueuedEvent } as; }; +struct TurnRNG +{ + u16 tag; + u16 value; +}; + struct BattlerTurn { u8 hit:2; u8 criticalHit:2; u8 secondaryEffect:2; + struct TurnRNG rng; }; struct BattleTestData @@ -758,6 +766,8 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING }; #define SKIP_TURN(battler) SkipTurn(__LINE__, battler) #define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex) +#define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value }) + struct MoveContext { u16 move; @@ -777,6 +787,8 @@ struct MoveContext u16 explicitAllowed:1; struct BattlePokemon *target; bool8 explicitTarget; + struct TurnRNG rng; + bool8 explicitRNG; }; void OpenTurn(u32 sourceLine); diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index d869bf2e51..1b03341a45 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -292,6 +292,20 @@ static void BattleTest_Run(void *data) u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) { + const struct BattlerTurn *turn = NULL; + u32 default_ = hi; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + if (turn && turn->rng.tag == tag) + { + default_ = turn->rng.value; + } + if (tag == STATE->rngTag) { u32 n = hi - lo + 1; @@ -308,7 +322,7 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi) return STATE->runTrial + lo; } - return hi; + return default_; } u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) @@ -322,28 +336,35 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; } - switch (tag) + if (turn && turn->rng.tag == tag) { - case RNG_ACCURACY: - ASSUME(n == 2); - if (turn && turn->hit) - return turn->hit - 1; - default_ = TRUE; - break; + default_ = turn->rng.value; + } + else + { + switch (tag) + { + case RNG_ACCURACY: + ASSUME(n == 2); + if (turn && turn->hit) + return turn->hit - 1; + default_ = TRUE; + break; - case RNG_CRITICAL_HIT: - ASSUME(n == 2); - if (turn && turn->criticalHit) - return turn->criticalHit - 1; - default_ = FALSE; - break; + case RNG_CRITICAL_HIT: + ASSUME(n == 2); + if (turn && turn->criticalHit) + return turn->criticalHit - 1; + default_ = FALSE; + break; - case RNG_SECONDARY_EFFECT: - ASSUME(n == 2); - if (turn && turn->secondaryEffect) - return turn->secondaryEffect - 1; - default_ = TRUE; - break; + case RNG_SECONDARY_EFFECT: + ASSUME(n == 2); + if (turn && turn->secondaryEffect) + return turn->secondaryEffect - 1; + default_ = TRUE; + break; + } } if (tag == STATE->rngTag) @@ -365,6 +386,52 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights) return default_; } +const void *RandomElementArray(enum RandomTag tag, const void *array, size_t size, size_t count) +{ + const struct BattlerTurn *turn = NULL; + u32 index = count-1; + + if (gCurrentTurnActionNumber < gBattlersCount) + { + u32 battlerId = gBattlerByTurnOrder[gCurrentTurnActionNumber]; + turn = &DATA.battleRecordTurns[gBattleResults.battleTurnCounter][battlerId]; + } + + if (turn && turn->rng.tag == tag) + { + u32 element; + for (index = 0; index < count; index++) + { + memcpy(&element, (const u8 *)array + size * index, size); + if (element == turn->rng.value) + break; + } + if (index == count) + { + // TODO: Incorporate the line number. + const char *filename = gTestRunnerState.test->filename; + Test_ExitWithResult(TEST_RESULT_ERROR, "%s: RandomElement illegal value requested: %d", filename, turn->rng.value); + } + } + + if (tag == STATE->rngTag) + { + if (STATE->trials == 1) + { + STATE->trials = count; + PrintTestName(); + } + else if (STATE->trials != count) + { + Test_ExitWithResult(TEST_RESULT_ERROR, "RandomElement called with inconsistent trials %d and %d", STATE->trials, count); + } + STATE->trialRatio = Q_4_12(1) / count; + index = STATE->runTrial; + } + + return (const u8 *)array + size * index; +} + static s32 TryAbilityPopUp(s32 i, s32 n, u32 battlerId, u32 ability) { struct QueuedAbilityEvent *event; @@ -1357,6 +1424,8 @@ void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx) DATA.battleRecordTurns[DATA.turns][battlerId].criticalHit = 1 + ctx.criticalHit; if (ctx.explicitSecondaryEffect) DATA.battleRecordTurns[DATA.turns][battlerId].secondaryEffect = 1 + ctx.secondaryEffect; + if (ctx.explicitRNG) + DATA.battleRecordTurns[DATA.turns][battlerId].rng = ctx.rng; if (!(DATA.actionBattlers & (1 << battlerId))) { From 00d695ac2b313c5a887d20aad4618f350725713c Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 10:38:48 -0400 Subject: [PATCH 237/290] add AI_FLAG_OMNISCIENT --- include/battle.h | 4 ++-- include/battle_ai_util.h | 1 + include/constants/battle_ai.h | 1 + src/battle_ai_main.c | 13 +++++++++++++ src/battle_ai_util.c | 19 ++++++++++++++----- src/battle_debug.c | 4 ++-- src/battle_main.c | 4 ++-- 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/include/battle.h b/include/battle.h index 491273b80b..19f9df13d8 100644 --- a/include/battle.h +++ b/include/battle.h @@ -272,8 +272,8 @@ struct AiPartyMon struct AIPartyData // Opposing battlers - party mons. { - struct AiPartyMon mons[2][PARTY_SIZE]; // 2 parties(player, opponent). Used to save information on opposing party. - u8 count[2]; + struct AiPartyMon mons[NUM_BATTLE_SIDES][PARTY_SIZE]; // 2 parties(player, opponent). Used to save information on opposing party. + u8 count[NUM_BATTLE_SIDES]; }; struct AiLogicData diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 11eba7b661..95f6619c5e 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -9,6 +9,7 @@ bool32 AI_RandLessThan(u8 val); void RecordLastUsedMoveByTarget(void); +bool32 BattlerHasAi(u32 battlerId); bool32 IsBattlerAIControlled(u32 battlerId); void ClearBattlerMoveHistory(u8 battlerId); void RecordLastUsedMoveBy(u32 battlerId, u32 move); diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 1cfb9cd4dc..1316054cd1 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -57,6 +57,7 @@ #define AI_FLAG_SCREENER (1 << 14) // AI prefers screening effects like reflect, mist, etc. TODO unfinished #define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks #define AI_FLAG_ACE_POKEMON (1 << 16) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. +#define AI_FLAG_OMNISCIENT (1 << 17) // AI has full knowledge of player moves, abilities, hold items // 'other' ai logic flags #define AI_FLAG_ROAMING (1 << 29) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 19eedb41cc..6e308003ad 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -257,6 +257,8 @@ static void CopyBattlerDataToAIParty(u32 bPosition, u32 side) void Ai_InitPartyStruct(void) { u32 i; + bool32 isOmniscient = (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT); + struct Pokemon *mon; AI_PARTY->count[B_SIDE_PLAYER] = gPlayerPartyCount; AI_PARTY->count[B_SIDE_OPPONENT] = gEnemyPartyCount; @@ -278,6 +280,17 @@ void Ai_InitPartyStruct(void) { if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) AI_PARTY->mons[B_SIDE_PLAYER][i].isFainted = TRUE; + + if (isOmniscient) + { + u32 j; + mon = &gPlayerParty[i]; + AI_PARTY->mons[B_SIDE_PLAYER][i].item = GetMonData(mon, MON_DATA_HELD_ITEM); + AI_PARTY->mons[B_SIDE_PLAYER][i].heldEffect = ItemId_GetHoldEffect(AI_PARTY->mons[B_SIDE_PLAYER][i].item); + AI_PARTY->mons[B_SIDE_PLAYER][i].ability = GetMonAbility(mon); + for (j = 0; j < MAX_MON_MOVES; j++) + AI_PARTY->mons[B_SIDE_PLAYER][i].moves[j] = GetMonData(mon, MON_DATA_MOVE1 + j); + } } } diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index a9e3ed3e0b..93586626e2 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -457,7 +457,7 @@ void RecordLastUsedMoveByTarget(void) RecordKnownMove(gBattlerTarget, gLastMoves[gBattlerTarget]); } -bool32 IsBattlerAIControlled(u32 battlerId) +bool32 BattlerHasAi(u32 battlerId) { switch (GetBattlerPosition(battlerId)) { @@ -473,6 +473,14 @@ bool32 IsBattlerAIControlled(u32 battlerId) } } +bool32 IsBattlerAIControlled(u32 battlerId) +{ + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_OMNISCIENT) + return TRUE; + + return BattlerHasAi(battlerId); +} + void ClearBattlerMoveHistory(u8 battlerId) { memset(BATTLE_HISTORY->usedMoves[battlerId], 0, sizeof(BATTLE_HISTORY->usedMoves[battlerId])); @@ -1230,8 +1238,9 @@ s32 AI_GetAbility(u32 battlerId) if (knownAbility == ABILITY_NONE) return knownAbility; - if (BATTLE_HISTORY->abilities[battlerId] != ABILITY_NONE) - return BATTLE_HISTORY->abilities[battlerId]; + if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) { + return AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability; + } // Abilities that prevent fleeing - treat as always known if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) @@ -1257,10 +1266,10 @@ u16 AI_GetHoldEffect(u32 battlerId) u32 holdEffect; if (!IsBattlerAIControlled(battlerId)) - holdEffect = BATTLE_HISTORY->itemEffects[battlerId]; + holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); - + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return holdEffect; diff --git a/src/battle_debug.c b/src/battle_debug.c index 027be03a45..1d690caaa0 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -774,7 +774,7 @@ static void Task_ShowAiPoints(u8 taskId) // Swap battler if it's player mon data->aiBattlerId = data->battlerId; - while (!IsBattlerAIControlled(data->aiBattlerId)) + while (!BattlerHasAi(data->aiBattlerId)) { if (++data->aiBattlerId >= gBattlersCount) data->aiBattlerId = 0; @@ -931,7 +931,7 @@ static void Task_ShowAiKnowledge(u8 taskId) // Swap battler if it's player mon data->aiBattlerId = data->battlerId; - while (!IsBattlerAIControlled(data->aiBattlerId)) + while (!BattlerHasAi(data->aiBattlerId)) { if (++data->aiBattlerId >= gBattlersCount) data->aiBattlerId = 0; diff --git a/src/battle_main.c b/src/battle_main.c index efbf1b8195..8e0dc6d878 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3859,7 +3859,7 @@ static void TryDoEventsBeforeFirstTurn(void) gChosenActionByBattler[i] = B_ACTION_NONE; gChosenMoveByBattler[i] = MOVE_NONE; // Record party slots of player's mons that appeared in battle - if (!IsBattlerAIControlled(i)) + if (!BattlerHasAi(i)) gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; } TurnValuesCleanUp(FALSE); @@ -4096,7 +4096,7 @@ static void HandleTurnActionSelectionState(void) // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (IsBattlerAIControlled(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); } break; From 10ef3e83483c08cc5f62a1f7f0469aafdfa4f7b8 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Tue, 28 Mar 2023 10:58:44 -0400 Subject: [PATCH 238/290] style fixes --- src/battle_ai_util.c | 5 ++--- src/battle_main.c | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 93586626e2..51f4ef0467 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -1238,9 +1238,8 @@ s32 AI_GetAbility(u32 battlerId) if (knownAbility == ABILITY_NONE) return knownAbility; - if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) { + if (AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability != ABILITY_NONE) return AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].ability; - } // Abilities that prevent fleeing - treat as always known if (knownAbility == ABILITY_SHADOW_TAG || knownAbility == ABILITY_MAGNET_PULL || knownAbility == ABILITY_ARENA_TRAP) @@ -1269,7 +1268,7 @@ u16 AI_GetHoldEffect(u32 battlerId) holdEffect = AI_PARTY->mons[GetBattlerSide(battlerId)][gBattlerPartyIndexes[battlerId]].heldEffect; else holdEffect = GetBattlerHoldEffect(battlerId, FALSE); - + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_NEGATE_UNAWARE) return holdEffect; diff --git a/src/battle_main.c b/src/battle_main.c index 8e0dc6d878..8175528525 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4096,7 +4096,8 @@ static void HandleTurnActionSelectionState(void) // Do AI score computations here so we can use them in AI_TrySwitchOrUseItem if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart()) - && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) { + && (BattlerHasAi(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE))) + { gBattleStruct->aiMoveOrAction[gActiveBattler] = ComputeBattleAiScores(gActiveBattler); } break; From 686d42709a6281c5baed0e5a6d8aad34b6b642a5 Mon Sep 17 00:00:00 2001 From: PSF Date: Tue, 28 Mar 2023 15:50:58 -0700 Subject: [PATCH 239/290] Added documentation on resetting battle flags and vars Added Overworld_ResetBattleFlagsAndVars to Overworld_ResetStateAfterWhiteOut --- include/config/battle.h | 2 ++ src/overworld.c | 21 ++++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382fb..c6bca6de89 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -143,6 +143,7 @@ // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. +// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon @@ -152,6 +153,7 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. +// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) diff --git a/src/overworld.c b/src/overworld.c index 6b63a60d5b..9fabe3ed90 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,6 +401,23 @@ void Overworld_ResetStateAfterDigEscRope(void) FlagClear(FLAG_SYS_USE_FLASH); } +void Overworld_ResetBattleFlagsAndVars(void) +{ +#if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); +#endif + +#if B_VAR_WILD_AI_FLAGS != 0 + VarSet(B_VAR_WILD_AI_FLAGS,0); +#endif + + FlagClear(B_FLAG_INVERSE_BATTLE); + FlagClear(B_FLAG_FORCE_DOUBLE_WILD); + FlagClear(B_SMART_WILD_AI_FLAG); + FlagClear(B_FLAG_NO_BAG_USE); + FlagClear(B_FLAG_NO_CATCHING); +} + static void Overworld_ResetStateAfterWhiteOut(void) { ResetInitialPlayerAvatarState(); @@ -409,9 +426,7 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); -#if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); -#endif + Overworld_ResetBattleFlagsAndVars(); // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) From 6a7466c92982bb63f98554857f0ce48cf1347c2b Mon Sep 17 00:00:00 2001 From: pkmnsnfrn Date: Wed, 29 Mar 2023 11:11:07 -0700 Subject: [PATCH 240/290] =?UTF-8?q?Added=20B=5FDOUBLE=5FWILD=5FREQUIRE=5F2?= =?UTF-8?q?=5FMONS=20to=20allow=20use=20of=20B=5FDOUBLE=5FWILD=5FCHANCE=20?= =?UTF-8?q?even=20when=20there=20is=20only=20one=20Pok=C3=A9mon=20in=20the?= =?UTF-8?q?=20party?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/config/battle.h | 1 + src/wild_encounter.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/config/battle.h b/include/config/battle.h index 4a3d6382fb..66d4b92aa3 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -183,6 +183,7 @@ // Other settings #define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter. +#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, when the player only has one Pokémon in the party, randomly generated wild battles will always be a Single battle, regardless of the number used in B_DOUBLE_WILD_CHANCE. #define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight. #define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses. #define B_WILD_NATURAL_ENEMIES TRUE // If set to TRUE, certain wild mon species will attack other species when partnered in double wild battles (eg. Zangoose vs Seviper) diff --git a/src/wild_encounter.c b/src/wild_encounter.c index d228b87a14..ef668c3a1c 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -1097,7 +1097,11 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate) bool8 TryDoDoubleWildBattle(void) { +#if B_DOUBLE_WILD_REQUIRE_2_MONS == TRUE if (GetSafariZoneFlag() || GetMonsStateToDoubles() != PLAYER_HAS_TWO_USABLE_MONS) +#else + if (GetSafariZoneFlag()) +#endif return FALSE; #if B_FLAG_FORCE_DOUBLE_WILD != 0 else if (FlagGet(B_FLAG_FORCE_DOUBLE_WILD)) From 24df9823e8f1c20e723b2b9b8b2ab01ee84db379 Mon Sep 17 00:00:00 2001 From: PSF Date: Thu, 30 Mar 2023 06:35:38 -0700 Subject: [PATCH 241/290] In response to PR discussion, added new preproc config for developers to toggle Overworld_ResetBattleFlagsAndVars --- include/config/battle.h | 5 +++-- src/overworld.c | 18 +++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index c6bca6de89..77e0e0f4d9 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -143,7 +143,6 @@ // Flag settings // To use the following features in scripting, replace the 0s with the flag ID you're assigning it to. // Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature. -// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water. #define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles. #define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon @@ -153,10 +152,12 @@ // Var Settings // To use the following features in scripting, replace the 0s with the var ID you're assigning it to. // Eg: Replace with VAR_UNUSED_0x40F7 so you can use VAR_TERRAIN for that feature. -// Once these features are turned on within the game, they will remain on until they are explcitily turned off or until the player whites out. This can be turned off by disabling Overworld_ResetBattleFlagsAndVars. #define VAR_TERRAIN 0 // If this var has a value, assigning a STATUS_FIELD_xx_TERRAIN to it before battle causes the battle to start with that terrain active #define B_VAR_WILD_AI_FLAGS 0 // If not 0, you can use this var to add to default wild AI flags. NOT usable with flags above (1 << 15) +//Flag and Var settings +#define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If set to TRUE, Flag and Var settings (B_FLAG_INVERSE_BATTLE,B_FLAG_FORCE_DOUBLE_WILD,B_SMART_WILD_AI_FLAG,B_FLAG_NO_BAG_USE,B_FLAG_NO_CATCHING,B_VAR_WILD_AI_FLAGS, and VAR_TERRAIN) will be reset when the player whites out. + // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. #define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8. diff --git a/src/overworld.c b/src/overworld.c index 9fabe3ed90..3af1cfd6d8 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -401,15 +401,16 @@ void Overworld_ResetStateAfterDigEscRope(void) FlagClear(FLAG_SYS_USE_FLASH); } -void Overworld_ResetBattleFlagsAndVars(void) +#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE + void Overworld_ResetBattleFlagsAndVars(void) { -#if VAR_TERRAIN != 0 - VarSet(VAR_TERRAIN, 0); -#endif + #if VAR_TERRAIN != 0 + VarSet(VAR_TERRAIN, 0); + #endif -#if B_VAR_WILD_AI_FLAGS != 0 - VarSet(B_VAR_WILD_AI_FLAGS,0); -#endif + #if B_VAR_WILD_AI_FLAGS != 0 + VarSet(B_VAR_WILD_AI_FLAGS,0); + #endif FlagClear(B_FLAG_INVERSE_BATTLE); FlagClear(B_FLAG_FORCE_DOUBLE_WILD); @@ -417,6 +418,7 @@ void Overworld_ResetBattleFlagsAndVars(void) FlagClear(B_FLAG_NO_BAG_USE); FlagClear(B_FLAG_NO_CATCHING); } +#endif static void Overworld_ResetStateAfterWhiteOut(void) { @@ -426,7 +428,9 @@ static void Overworld_ResetStateAfterWhiteOut(void) FlagClear(FLAG_SYS_SAFARI_MODE); FlagClear(FLAG_SYS_USE_STRENGTH); FlagClear(FLAG_SYS_USE_FLASH); +#if B_RESET_FLAGS_VARS_AFTER_WHITEOUT == TRUE Overworld_ResetBattleFlagsAndVars(); +#endif // If you were defeated by Kyogre/Groudon and the step counter has // maxed out, end the abnormal weather. if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1) From 4b859ff1e47b482d578f37d5cba7815a86a3ded9 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Mar 2023 00:44:22 -0400 Subject: [PATCH 242/290] Use tilemap file for cable car pylons --- .../cable_car/{pylons.bin => pylon_pole.bin} | 0 graphics/cable_car/pylon_top.bin | Bin 0 -> 20 bytes src/cable_car.c | 65 ++++++++---------- 3 files changed, 27 insertions(+), 38 deletions(-) rename graphics/cable_car/{pylons.bin => pylon_pole.bin} (100%) create mode 100755 graphics/cable_car/pylon_top.bin diff --git a/graphics/cable_car/pylons.bin b/graphics/cable_car/pylon_pole.bin similarity index 100% rename from graphics/cable_car/pylons.bin rename to graphics/cable_car/pylon_pole.bin diff --git a/graphics/cable_car/pylon_top.bin b/graphics/cable_car/pylon_top.bin new file mode 100755 index 0000000000000000000000000000000000000000..44b20744d4383964fb62e47f513541fbc6ad594e GIT binary patch literal 20 bcmZQDU^HMdU^ZYeU^QSfU^n0};4}aL6dnQ& literal 0 HcmV?d00001 diff --git a/src/cable_car.c b/src/cable_car.c index 4eb4c30804..7d18df7b7f 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -27,9 +27,11 @@ #define STATE_END 0xFF -#define TAG_CABLE_CAR 1 -#define TAG_DOOR 2 -#define TAG_CABLE 3 +enum { + TAG_CABLE_CAR = 1, + TAG_DOOR, + TAG_CABLE, +}; struct CableCar { @@ -62,8 +64,8 @@ struct CableCar u16 *groundTilemap; u16 *treesTilemap; u16 *bgMountainsTilemap; - const u16 *pylonHookTilemapEntries; - u8 *pylonStemTilemap; + const u16 *pylonTopTilemap; + u16 *pylonPoleTilemap; }; static EWRAM_DATA struct CableCar *sCableCar = NULL; @@ -129,24 +131,11 @@ static const struct BgTemplate sBgTemplates[4] = { }, }; -static const u8 sGround_Tilemap[] = INCBIN_U8("graphics/cable_car/ground.bin.lz"); -static const u8 sTrees_Tilemap[] = INCBIN_U8("graphics/cable_car/trees.bin.lz"); -static const u8 sBgMountains_Tilemap[] = INCBIN_U8("graphics/cable_car/bg_mountains.bin.lz"); - -static const u16 sPylonHook_TilemapEntries[] = { - 0x3000, - 0x3001, - 0x3002, - 0x3003, - 0x3004, - 0x3005, - 0x3006, - 0x3007, - 0x3008, - 0x3009, -}; - -static const u8 sPylonStems_Tilemap[] = INCBIN_U8("graphics/cable_car/pylons.bin.lz"); +static const u16 sGround_Tilemap[] = INCBIN_U16("graphics/cable_car/ground.bin.lz"); +static const u16 sTrees_Tilemap[] = INCBIN_U16("graphics/cable_car/trees.bin.lz"); +static const u16 sBgMountains_Tilemap[] = INCBIN_U16("graphics/cable_car/bg_mountains.bin.lz"); +static const u16 sPylonTop_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_top.bin"); +static const u16 sPylonPole_Tilemap[] = INCBIN_U16("graphics/cable_car/pylon_pole.bin.lz"); static const struct CompressedSpriteSheet sSpriteSheets[] = { { gCableCar_Gfx, 0x800, TAG_CABLE_CAR }, @@ -299,8 +288,8 @@ static void CB2_LoadCableCar(void) sCableCar->groundTilemap = malloc_and_decompress(sGround_Tilemap, &sizeOut); sCableCar->treesTilemap = malloc_and_decompress(sTrees_Tilemap, &sizeOut); sCableCar->bgMountainsTilemap = malloc_and_decompress(sBgMountains_Tilemap, &sizeOut); - sCableCar->pylonStemTilemap = malloc_and_decompress(sPylonStems_Tilemap, &sizeOut); - sCableCar->pylonHookTilemapEntries = sPylonHook_TilemapEntries; + sCableCar->pylonPoleTilemap = malloc_and_decompress(sPylonPole_Tilemap, &sizeOut); + sCableCar->pylonTopTilemap = sPylonTop_Tilemap; DecompressAndCopyTileDataToVram(0, gCableCarBg_Gfx, 0, 0, 0); gMain.state++; break; @@ -335,8 +324,8 @@ static void CB2_LoadCableCar(void) case 6: CopyToBgTilemapBufferRect_ChangePalette(1, sCableCar->treesTilemap, 0, 17, 32, 15, 17); CopyToBgTilemapBufferRect_ChangePalette(2, sCableCar->bgMountainsTilemap, 0, 0, 30, 20, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 20, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonTopTilemap, 0, 0, 5, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 20, 17); gMain.state++; break; case 7: @@ -404,8 +393,8 @@ static void CB2_EndCableCar(void) UnsetBgTilemapBuffer(2); UnsetBgTilemapBuffer(3); ResetBgsAndClearDma3BusyFlags(0); - sCableCar->pylonHookTilemapEntries = NULL; - FREE_AND_SET_NULL(sCableCar->pylonStemTilemap); + sCableCar->pylonTopTilemap = NULL; + FREE_AND_SET_NULL(sCableCar->pylonPoleTilemap); FREE_AND_SET_NULL(sCableCar->bgMountainsTilemap); FREE_AND_SET_NULL(sCableCar->treesTilemap); FREE_AND_SET_NULL(sCableCar->groundTilemap); @@ -514,8 +503,8 @@ static void Task_AnimateBgGoingUp(u8 taskId) FillBgTilemapBufferRect(3, 0, 2, 0, 1, 2, 17); break; case 16: - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonTopTilemap, 0, 0, 5, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 30, 17); sCableCar->bg3VerticalOffset = 64; break; } @@ -542,7 +531,7 @@ static void Task_AnimateBgGoingDown(u8 taskId) switch (sCableCar->bg3HorizontalOffset) { case 176: - CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17); + CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonPoleTilemap, 0, 2, 2, 30, 17); break; case 16: FillBgTilemapBufferRect(3, 0, 2, 0, 3, 2, 17); @@ -550,14 +539,14 @@ static void Task_AnimateBgGoingDown(u8 taskId) sCableCar->bg3VerticalOffset = 192; break; case 32: - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[2], 2, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[3], 3, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[7], 2, 1, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[8], 3, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[2], 2, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[3], 3, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[7], 2, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[8], 3, 1, 1, 1, 17); break; case 40: - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[4], 4, 0, 1, 1, 17); - FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[9], 4, 1, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[4], 4, 0, 1, 1, 17); + FillBgTilemapBufferRect(3, sCableCar->pylonTopTilemap[9], 4, 1, 1, 1, 17); break; } } From 57396026b2f212bbc7c2fa04d230311738d9f8ef Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 31 Mar 2023 14:57:51 -0400 Subject: [PATCH 243/290] Replace NUM_TEXT_PRINTERS with WINDOWS_MAX --- gflib/text.c | 6 +++--- gflib/text.h | 2 -- gflib/window.c | 2 -- gflib/window.h | 2 ++ src/contest.c | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gflib/text.c b/gflib/text.c index 86dca38291..1bded26b5a 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -36,7 +36,7 @@ static u32 GetGlyphWidth_Narrow(u16, bool32); static u32 GetGlyphWidth_SmallNarrow(u16, bool32); static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0}; -static EWRAM_DATA struct TextPrinter sTextPrinters[NUM_TEXT_PRINTERS] = {0}; +static EWRAM_DATA struct TextPrinter sTextPrinters[WINDOWS_MAX] = {0}; static u16 sFontHalfRowLookupTable[0x51]; static u16 sLastTextBgColor; @@ -244,7 +244,7 @@ static void SetFontsPointer(const struct FontInfo *fonts) void DeactivateAllTextPrinters(void) { int printer; - for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) + for (printer = 0; printer < WINDOWS_MAX; ++printer) sTextPrinters[printer].active = FALSE; } @@ -322,7 +322,7 @@ void RunTextPrinters(void) if (!gDisableTextPrinters) { - for (i = 0; i < NUM_TEXT_PRINTERS; ++i) + for (i = 0; i < WINDOWS_MAX; ++i) { if (sTextPrinters[i].active) { diff --git a/gflib/text.h b/gflib/text.h index a88cb990e1..ff13efa9a8 100644 --- a/gflib/text.h +++ b/gflib/text.h @@ -3,8 +3,6 @@ #include "characters.h" -#define NUM_TEXT_PRINTERS 32 - // Given as a text speed when all the text should be // loaded at once but not copied to vram yet. #define TEXT_SKIP_DRAW 0xFF diff --git a/gflib/window.c b/gflib/window.c index 1621a08842..76e863f10e 100644 --- a/gflib/window.c +++ b/gflib/window.c @@ -9,8 +9,6 @@ u8 gTransparentTileNumber; void *gWindowBgTilemapBuffers[NUM_BACKGROUNDS]; extern u32 gWindowTileAutoAllocEnabled; -#define WINDOWS_MAX 32 - EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0}; EWRAM_DATA static struct Window* sWindowPtr = NULL; EWRAM_DATA static u16 sWindowSize = 0; diff --git a/gflib/window.h b/gflib/window.h index 0000dd864d..0f2dff2a8a 100644 --- a/gflib/window.h +++ b/gflib/window.h @@ -1,6 +1,8 @@ #ifndef GUARD_WINDOW_H #define GUARD_WINDOW_H +#define WINDOWS_MAX 32 + #define PIXEL_FILL(num) ((num) | ((num) << 4)) enum { diff --git a/src/contest.c b/src/contest.c index 2c0f66f6bd..8a1847f111 100644 --- a/src/contest.c +++ b/src/contest.c @@ -5503,7 +5503,7 @@ static void ContestBG_FillBoxWithTile(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 wi static bool32 Contest_RunTextPrinters(void) { RunTextPrinters(); - return IsTextPrinterActive(4); + return IsTextPrinterActive(WIN_GENERAL_TEXT); } static void Contest_SetBgCopyFlags(u32 flagIndex) From 83ef5a229de4aede0beb81270b807c65b2b6f0c9 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Fri, 31 Mar 2023 20:26:19 +0200 Subject: [PATCH 244/290] =?UTF-8?q?Center=20gen=201=20pok=C3=A9mon=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graphics/pokemon/aerodactyl/icon.png | Bin 403 -> 431 bytes graphics/pokemon/alakazam/icon.png | Bin 492 -> 512 bytes graphics/pokemon/articuno/icon.png | Bin 386 -> 406 bytes graphics/pokemon/bellsprout/icon.png | Bin 311 -> 296 bytes graphics/pokemon/butterfree/icon.png | Bin 413 -> 430 bytes graphics/pokemon/cloyster/icon.png | Bin 454 -> 418 bytes graphics/pokemon/dodrio/icon.png | Bin 492 -> 452 bytes graphics/pokemon/dragonite/icon.png | Bin 407 -> 412 bytes graphics/pokemon/exeggutor/icon.png | Bin 376 -> 385 bytes graphics/pokemon/gastly/icon.png | Bin 400 -> 389 bytes graphics/pokemon/gyarados/icon.png | Bin 608 -> 563 bytes graphics/pokemon/haunter/icon.png | Bin 482 -> 405 bytes graphics/pokemon/hypno/icon.png | Bin 424 -> 443 bytes graphics/pokemon/kingler/icon.png | Bin 496 -> 461 bytes graphics/pokemon/koffing/icon.png | Bin 463 -> 476 bytes graphics/pokemon/krabby/icon.png | Bin 468 -> 407 bytes graphics/pokemon/magnemite/icon.png | Bin 313 -> 319 bytes graphics/pokemon/magneton/icon.png | Bin 360 -> 387 bytes graphics/pokemon/marowak/icon.png | Bin 330 -> 351 bytes graphics/pokemon/meowth/icon.png | Bin 348 -> 362 bytes graphics/pokemon/mew/icon.png | Bin 338 -> 348 bytes graphics/pokemon/mewtwo/icon.png | Bin 401 -> 403 bytes graphics/pokemon/moltres/icon.png | Bin 428 -> 457 bytes graphics/pokemon/muk/icon.png | Bin 475 -> 458 bytes graphics/pokemon/nidoking/icon.png | Bin 426 -> 457 bytes graphics/pokemon/oddish/icon.png | Bin 311 -> 327 bytes graphics/pokemon/onix/icon.png | Bin 492 -> 436 bytes graphics/pokemon/paras/icon.png | Bin 396 -> 377 bytes graphics/pokemon/parasect/icon.png | Bin 388 -> 386 bytes graphics/pokemon/rapidash/icon.png | Bin 520 -> 526 bytes graphics/pokemon/sandslash/icon.png | Bin 429 -> 448 bytes graphics/pokemon/shellder/icon.png | Bin 311 -> 338 bytes graphics/pokemon/snorlax/icon.png | Bin 381 -> 386 bytes graphics/pokemon/tauros/icon.png | Bin 436 -> 414 bytes graphics/pokemon/tentacool/icon.png | Bin 355 -> 360 bytes graphics/pokemon/tentacruel/icon.png | Bin 432 -> 428 bytes graphics/pokemon/victini/icon.png | Bin 346 -> 358 bytes graphics/pokemon/vileplume/icon.png | Bin 399 -> 392 bytes graphics/pokemon/voltorb/icon.png | Bin 230 -> 244 bytes graphics/pokemon/weezing/icon.png | Bin 493 -> 503 bytes 40 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/aerodactyl/icon.png b/graphics/pokemon/aerodactyl/icon.png index e354dbb0dcaaaa9cac8a26df89d4e138167a71d8..58c96d57c7fce6c6433c4cc58f8525ab2236e04f 100644 GIT binary patch delta 357 zcmV-r0h<1k1Fr*+7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SElET{R7i>KRKc!; zFbpH%fJCSG|NnMQ7;4iNxa{d&7Kv%pZjv_G%kqnxz!NSHj3)v_?inz#8KJHXB>NraH>@ zR_~VE)m{+^C%puJLAbpH+~MM=pV-)QN!$IXQQwO@0p4|YmrRX)X9IqY=(-;S@oirP zW*3tLwr$%H7ds^^SUmxWrdKKSn5RxZhNX^h=GwHT)wPNS6P{A6f@Q=;U7p13BeSar!wh7|2Kd zR5uBs;NC#|B%yBDF{art4|QM5|GeL8`B&mS{_S`Jl$8|TD$z^c00000NkvXXu0mjf DHBY5s delta 329 zcmV-P0k;0H1Cs-g7zqRe0001qplF?uE`tvdE)?mI1yx!H! z^%}sY1X%e=@wCiw9cn$p7_)emVM7gB1=h-ruZ|JX0Qj0yLWqqcq6$+&RjUcPbt8Yu zF*M$^vG~^aSJ{E~Rh!D4`)k^OTC=XZu1{C>t!5hP3tw`Z=7qcqH_Lr~J{{(v=oLPW zC)hN9dp0oJBH(6H^j^MRI1cu2{J+Of#6%9I7~xQe5e|wARX-*Q-ff5Rb$ bzsKPYqRF+jd!m|200000NkvXXu0mjf@TQh| diff --git a/graphics/pokemon/alakazam/icon.png b/graphics/pokemon/alakazam/icon.png index 6d136899d988ee651e5227763a1d5217fc442a78..e823e94cd36a740de8d352f1e5a02f75810ab1ee 100644 GIT binary patch delta 439 zcmV;o0Z9Jr1AqjO7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sen~_@R7i>4luM4p zAPhu1K_YnLy8msb%7jm560+_=O1Ff|Ha7TuK3}zfH-WtJfA zJ=F-bD>qw35fuml&)Xs>08ru%)b8TSsFt^8K(4JMs1&t@b)a4E+%~z%{Wxa9-un3MN|+Z1yuq}Ne- zvH#2U^#IW;T>&JqL+W3Q1GD>=7|rLQCRSyB4))0o_fs( h3D$hTB0a2002ovPDHLkV1kQ<#5Di_ delta 419 zcmV;U0bKro1ndKl7zqRe0001qplF?uE5dr5C?FcASX3@q~rlo z1(s$>-i9%3Wn?uA43R3lz^f&S)WTxBAOT){wN3K@>e_g)~wM<7AQatb+Fqxjx1;)>Cg#0PoRt`rN52fxaEO4)9a_2?T0NWIS!FzTvmUS zGLnXoO=j~&kkIUnkS^plaMwEECU`%vlkV!SQRalC=pQO?uY;FG8RrDQH=okm>Mkvo zsf<(qvf@WiS3p3y=+g`@tBRTm2(T9*WOiOw1)BRIF*{T_!!Am1w+2+S3y0v z7q#LVG)bAzuJvuTO&fxU!0xluooasp_ZgT~3z?4s09TF24+#6|lTBajx$7BV*aVE4 zFUDY$yB>o9>*E28<}e1+A{&7*9C`yrF<)LepaFB<3}7sWM=KRLc&- zFbJzuSfw4{|NnM8QbI^NX@_Y$l-`D892R@q?)q{u^ZPy!1Y&_@%6-HM!T^*2B#?1@ z?kj^pLKG`~R-gbtE%xcs6-Z(*3hf(*$QK99)lslS zs5Iw5x&TCfvA0Hl(Qbo83kWgsZpRy_An0+>bGPd@4jd759OSz^=TyKR>v0m<_Nb%$ zn=6v>Qj2}x^}qE|Kx}hH3<2Sj~BvVYV};eA*m!v3~J&w&gp==N_HuQI#+V>tz|Ps?Gv ewEy)_KdKjKycKSuv3f%Q0000NHz#11)Y= zEtEMzE(}cypn!H20mAmW%cRLf4dchN(9fsT9}J+2P($g*E<@VJflC3M$Kh}o6;)fN z!};!^q=N_s*#p6*=}--kEntI|WX-o$scy6<_x{;XpNb-@so}F66$i@}cNXG?82x{t zyfnXr=}>aMJ615u_wD2B?%9*12X*_5SfE>$@aQ!WTe2w9ZSUbSK`QG1#bq9K4B(KEZ**`6YB5 zdaOMS9L#CC9S2VpqX+{BCY4s!fx{$hN`%KMslDOQ-}}KZe-+;uRkU;wSo=c&0000< KMNUMnLSTYa8jFMg diff --git a/graphics/pokemon/bellsprout/icon.png b/graphics/pokemon/bellsprout/icon.png index 59ae8d037ed7e014f2dbe322d03e4fb411ec1fdc..ff6ca2c33716e1c4a6f249f313c9a099e2a2f3e4 100644 GIT binary patch delta 221 zcmV<303!dl0;mFz7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Srb$FWR7i>Kl)(-H zAq+%0K$jZR`TxJQWkDlQG@djv374JO3C!Vzu=R_AYUy88i$w7?;kL9ua1zyLM)Ct_ z0a48x%ufJON__&S&wx;j@k;cZfR?iPHV0`#e^un1h3zY3z8K^CD>5)_jt{^RutQiW zQJ@t3>+|A`qv`$9(e&Jow;*?Y3JgU7x|9d0FuGvxGeA04`@+p2dZK_sbvw=A)%NNC mIF!p6d|Z$tWQ#d`J0EZF)pk#lEc%Q90000Kl*?{J zAq+!#NGK90`TxJI1DRU}0$o(IYO@?0V+QUC;jfLzkA|~jXtxM+Tz8UTkeKccNp}MR zjs}%AAX$~Y%w!PBImN|+C9FH(cgUE4q4c3c0m^f*}-)2@&fVf^gE&xQM$U*vtH%PtLCh^B&gL82|lc~V>D8&74Luc z`pzj-xyR97-a2IzwoA`&zuP%%%z8q=^UIZ^0-5giCq~oF{tv#PGGv~B?%0w;^hS9yyB6-upoh9 le++@SU?UKltB{1 zAP4}9dV`Vw|F(eEM8TwoPA@H2Hh>uS@%YCS%r|*}H;4&YO9~(aA88^-FmXqikqAS8 zv=J91#HFDGaTP!^jJV|G^OSUiMj)?wEg^_91V*g=?U1bsAt0<1fSyrC1RDi{5$p)n zLKa|yx+cU)^N_WF1nU~+F492KnR9MEXxUT;QqG`2(4-T!Z=$-p9VPmzTpp@iU&^VK z0Dn`uDJk3+;Qc_HLZLh0_7VJYd|VK|VEboA+Ueo-{#!cG zg8^GT3_Ip)Wa-@NDpU0Z1ivvM68E5+= delta 380 zcmV-?0fYXc1I7c87zqRe0001qplF?uE zdw{4?c3t$WUK0hewk6Kct}ARJ?>x%yq=_MR4iHx6F@Fs6zYvdGnC+$NW+a&lk>f#9 zIDbkCqs9a#a%fxuWV(KDuM&Vxq}^c0g0wPdy>(-OkZHAq*A{tixQ41~tVqg)1bBZt z0-5L(W7}w#HFS*ei8R$$BEu+?m0d~S|!ktH{; zKk$1B0L1XY7i({)$OZ0eI#~3(*=Xe)+_~}iCGX=fuTYm;qk#X!pvlrie29Hr06gSp zo$~?&Z(&Ou7E7L>9kLAqixnyBatCNAEH*VenSZJXhBa9N6JjK8TQuQ?&2~-hayHv| zyU)R8@V)U>(VP>*O^dfzP^OZ8!@BiV35+sBi(7zBR-_M;L2_RD>12W3G%!N+b8u(I aW&HsaY4WVL_x7X!0000Kl);XJ zFbqVAA~{kHp8x;b^*Du?;2`Z~FI&?Jsu{*k3hy}nT>;~})fEQ{PVd7CRiG4C&>BBk zKmkKc)n*PX2Gf-p7SgrTgEioz7j$}p0T30a8C>^9+WTdIiWQof_{)Q=NuL2jXPu3j z>Cu2{y6}K?0_;kEr*6yg07d25WQ?$>H{RJ=JsZ&>2s(h;!Xy$6%sfmNIxt2NZyNu^ z${tp9aTHAb48btla+o8FVa`)+7TY(K{K4>6>XjNe0=R8k19#eVzeo+dow{xe=cYU! zx0peFw}#6k`-E$jZ*A*0{KxC*g3jhEB07*qoM6N<$f@J%rWdHyG delta 419 zcmV;U0bKsX1MCBk7zqRe0001qplF?uE7&WQTtt zkf!)^0g1i$GKfFE*G_hPOpb*@TL%O$;h?F&z5*ucYK?CIC?-!%LhsmB5TQenK2L{? zZQ(4@fIK^Kcs~rC)X6yBH+u_qc)46wAXCg`4LAw{tq&DkENh^zf)Lk0B99xOsDA(t zpXOhT9^-bEszY200~gup!;dhk!%ly!`4I-D`R2#j|-?xPb3>ZlHd9Py=?sedhkR4uiy0J3mU*1Dpep7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S8c9S!R7i>Kl)(CEIaHl4%?FdE28z=as2C>#pgF~^4bCh;t=Zq0{~z6LTEx+ zT3GIya1{iRs8-7n9YKr$RLP!Y%$`7LPzhU(c_COAKm_bS&SeCcLGxq~YhH302!23| zIN7JQFxka8 zte6FutA+bYXYiwx4kSi8KJ~3Z3K<;g@=X9M9U@Hq*#K929}%Y7#(DSTfGB!l(pY~z z9+nQ?+0}(KXGd`$w~coq{bj&aMy_cd9d{KXMQjNKBr+A6=s{FC$anind_U#^VA(Xa zmOPJt$@{jTQw-Qj*%U-WdL@+UOtgNrd2bEdxjdUKK!IDISqHe*0o7Iq7=P1Y6>&On zd=Re#?_*@q0cjT^P6wTJZ>T0Hd zr?7y!Y6p|`pal(o%nFJ!nFSVZ?V+Apyk={q8M?I=4#ASvI)~&w$^Y~%p_;7eN3Ao` zD}%wa>Kgwj*L6CK)Pmh<;V#(@o6qMiizS$fmMy>8N7+*U#}Q|zv;@d6gqZ+2Aq)Yr zBFqHHf-na_Qo=j|k`U$vkoeBL10*8MCqP1nivR@U6d;!u<-;8*S{R|o?cLG<0000< KMNUMnLSTY3Ux_*Z delta 303 zcmV+~0nq+|1NZ`v7zqRe0001qplF?uEzl09kzF%U*|gE>NuVO*ur zw%*3RLRyz@0y#t~;ov<)szrtC5P>eS&4NJ+mIz{v$958|PfObTOgA6%B#n4N{A6+2 zd0G}haI_>30mys;fmto}83nmM4Fb zu^eh3$RyniZGIWqwX*HnUW0?xx6|ignX!*gxKgqKLitm&K!gB+NGkMb9IHcwQQG7N#`l zEKFh0MHn>bLl{6lg#m-Ugn^0Q5r!MwSeQTe;{^T`&r>@VKmC+8v zAP7YpdGiwe|Gyn*rxmbEmcA?*4_h+MEDD|;$3MOc;J_!~E{OpJAi&JZ$TtE&(^Z07 z1P_9wi$q5}P`RZW66Vv$E8%OXl&%27t|CA_)2R^#K&6t4B8jL2dKOn8$v<-;joiyz zS72G96snR>Iobz*AiKy7$UzCM%%X%=5CifM`Bk#KSpeDzNsxTHLwFO~EQ*eC5Yq8_ zGcjXMZl~%WKNQai#FNt>u|QUTY=(OJ!{3V4AHlU+{o!k{{;+okfj=x@{b2=T{m}$6 z>+t?ybC}*AZl~5C7O?&ZfawoLU=Z!q=?~t#Eqb#nwiAOIIVR5vxFptG<6S z>_WFioy#>a&}C7*Xr!V^wIqNINI&Hg20maHteAy|>m1|+PI2}jLQc{A`LMHpeclr$ z?+h#&ZGgZZSn3Vz!oYIoc;tUFm?j!kd2G0k(@iBE z^i~CYOPy*Gcnx6IsY^zcMpn8g5&$whUg;`i=hpE%qAAiL#w9qh5}tlAQW$vd=51kq Y0fs#1kjArV*8l(j07*qoM6N<$f>UFR-T(jq diff --git a/graphics/pokemon/gyarados/icon.png b/graphics/pokemon/gyarados/icon.png index 889943b04f4be2d2e1b2a6d23462f79502bebac1..41ccb5aee2ad3bc30c2eb1562c50f6fac21413b8 100644 GIT binary patch delta 490 zcmV1hWK?7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Su}MThR7i>4lu>hp zAPj^ZF`aM+$^ZYi-2~L2)J~^w$IRV>`Pc+ycUeAhss2(=>l30XX-z)>wh{XiBF zuqyyq4?s}#dd?t!qye=aM@A8=ZMM}Pp6?7Dsz_$eia+%hi{@}z715MUfN@6ep`gz? z4)+Bh+nW?0LN(I?D3x67d?>A}unb#h)K*WL z#DF5SZRE4Y25cj}Kmf32gx$Q+2)y2cCpe%@<0FMHZZo`plLPpky*%6qJQZW7bdfuMGQzEj@_0L%U2ncuJLqIfpw}6;xgn*dZzxlrfM7jdO{}vE(6Bzwp z=EUItkSsee_+KswvrPRT6XxdsWf>D@x%&T>FjxP#A!5Q@{qI0Xn4AC2jiY@>{}VJq z!i@f>%>qP8VgQW(-}6Cf1YYU%|0Q9Z==L^un~xz9LeAfNx3?!m%aGfh=mBj0xAKpd g+x`E1_y6esZ>fDG)0R-u)Bpeg07*qoM6N<$g2F)RjQ{`u delta 536 zcmV+z0_Xj+1mFaa7zqRe0001qplF?uEy_^a;K)FTAmoYz+$uQv+VraGO%(+tl7N%Xd$5Z_?JY4A@bF919KtX{WH#m1sObc| z%@15Ih=jOluUluQNG}~`k(a(ts>%yG7K=?dX zLNjn5(Dh6S2nMM`v*+M0!9P#x|13DZMm`=A7Q7t|07N1mS$B_X0N74G1kCo>R{amE zXr&+fy=0ZDB93&hReixO3pF8$E(6$v#*a5;)){1K!qDi#EINZk9i|KK2GxJTAOUH< zz|!V}K|%*F7E62LtAjz$-v)@^9vRRY1XKA0Ikgk&3@W*pQ!LZiZw&%+CUd%y=a+u# z0}$NC*;V5QJ?p@`Se3Cn7$nLfbKRLc&- zAPi&WR#5!^f4e*>R84!FHZAI*!cO8um{NW(@PzjV#uEX(x0C@m0l4OXA;vYFvU1TH z1)+Dr&J7`i!RY$GGy_#5^nlNTQ3LZrXS`Je43oOfV=5Ikd?}(^koJ5=TW!m@qK^kF znnD$|DuL)o*V^2F(aLUh)1MQrlwI~I>Xs>lpj+fFJ9hnSh^Yi=0%+$#ioYZdk%g=v zNYyB2l(7Y}j$i}=J8jw%#X{uVH76HC(si!-0|Ltw4E$aZ&usZq$z7&K&mWBmR9 zasMkd_rKXc_kY;GB>q3_U#|T>*+23Buz%|RVgJeh{s4?BMTC#s|M37!iwYlkqCWuT dD)5C5z#Bz}C5#iMsign_002ovPDHLkV1nuLnpFS* delta 409 zcmV;K0cQS{1L6aa7zqRe0001qplF?uEVUj32Kd3Umj`AqgxTr*N6+eod3?7$r&ytl)>f67+s)q$*U} zl~j9CVqF#rU@2ad#l=pxj9+SVnY@y;N21w7a(SEsD6(|^)WxZogT-m#o_y}zhx`#} z4>OG@km;whnAu8Tuuh#b_eDmfdSib9Q9lR!;jEzde{6lVbg1l>kIz=?pnZo?8Zxal z4AD%boF2mWCXTi^IL2(d-eC6YhB$y;UcK<(zB=X_mLPFTi~}UQCehHjAr7v4rycLT zH`2!eE|h!AgLSbuxLRtKltGTe zFbG8>kPzPR?|<8V>@>AwyIIXASwWCDY!dOO4$)`Gsb;K z!1H0oeGO#pB)nKz7F!b}0kahV*Ehkt1;M}DCeFji3?SSs!>R;y0w8h5(TF*N)FO?& zVi69#g&D6ESUV_x8=+mx!AC-nC(If(@-9RI@A};cFh~BN5=@XOK0R#7zqRe0001qplF?uE4=xu97rE z5Gz1U3sDN;U^tI}0TBEcHP!%tbOEH|HlnMXOd4U@;UaG7)pcM8nX4RkmtJA+K+QhW^ra|a24kaSTI?+F zB?;-tcUG1i2oiQOc3sD#g%EmRcG&3WDAhH@3mQ)ZA>EK6_!RFe*xVVZLTy4Y~^>rxw;AFU&9<#u_A@FngK#6l)MV wVXnEFYkEShFsA?}Kg3+(;_gR$?Z5f)10Ue(SR1mX{Qv*}07*qoM6N<$g3^MVO8@`> diff --git a/graphics/pokemon/kingler/icon.png b/graphics/pokemon/kingler/icon.png index 34a72990600a16081c6ed9d6f3d700db1c1eaa70..3f9d0b8b78e41ed6730b3c0b2149a71e4a70d614 100644 GIT binary patch delta 387 zcmV-}0et@O1I+`F7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SOG!jQR7i>Clu>WP zAPj_qknjVN@BjbX`pig(OT6u+(lpenQGGcZu)pK@M+>&ncoUIK0TKOae5Zpn3<2yJ zUQ(!_@k1q4#%~lfWszn@ft4H*VG5cw3o>QM0`(O1w(u}pT~NEK=T=53yB`Z`t&CTm zmskR-?kUUyC@!#nD(qC^$pRg{^6ys72<{a2N`dX7G986?g@rpRH^YSym#Yp77uy;Y zym+r8DEP=E_U)qrx}bzQN}VOx%WZWyjS3xj?v`!aL*9ElO4Y2%;MbFOA=9*Px-d78 z%@$&@S@>_Rk52zSKBxb9z{8yW1P^oi_jtIb{|OIs`XBLPFsDDkgSGlE@eum;4G$Xc zCg7oMdUnObW-TeOK=c&5T*fcQ4{mMAb_4hF=^spQ!1TvVGL9{)e3{_BZs|6nm}1$=BBe3=bz z6ZjYu04c~Cn9(VYq<9g|82C(JOVpTz(OdB$mxs+Bcgw2 zDk0V5c|>n7TsoGvVLS~Ek;-(<=(T1nL&kq z%6Xq!*D1i3$_k!M+f%fqOj0DU-0>~Unp!(vO7Hi}-EEt3e~;b&Zy(6E9W`!8D%W2{ z{KCV{0<2Ov6I4hnlu1U@6Hp(Zq=tW4@O>DUTG0fshS+7Mpt=Xek}jQb0Nn<-AhF~H zg09t&uISL^9K%fx77gCZOfXF~`ugaQ7Nxc)edJ8TOiG9N>9A_*XxG9Obt zRcsOC*2sGO! z(qiQQ|Mn1+Rt%V_wljdE4x7?9{uBUUPws=h9>)RW38oK*_YX<{I3~u8AT9KL zD$y$^BA;+k1TW>0(UPemRXr4vJ?AaV`qbJr;g;Ox=^wNIJ}i9W>`j-V~dW(1F? zElqv>laSl1EU=d?{LngG=!K^~^CAIw5q@=|FVY1X3&C6_$qz?!}c1>jj1w300000NkvXXu0mjfCw05z delta 384 zcmV-`0e}A71J47H7zqRe0001qplF?uE<}Ggjm?s=PQx$|hHv!dH-Q00M&5}5Bs|(v z*LY&@01x0O89Ff3A}_(zR3(A|RgPrtY{yPAu);}glHdRN&i5JM{{)ltCjg{~g3|b+ zDqy;b22C$0NUcQ?n80Tga76$g(n3@K#*X$%4gk;l1}&ei=(x@X|uo&&!>}VN(#8`_S&>% z9-IEon3zLyboE>{`rM1?y#@Vnk>>PC$n?V|c;zzv zSVn>yC;F+byBw``L_ZyfA6~pC`so@L`qK>fiavI_q%UDjAMbvkKNBK-ky9dBwH)G7 e2#%ccd;9>x{^J5E(!ebM0000KRLcqj zF$mlsn1kT_|KE0WTk_a!pip{gJ+zBXMq_l2<8N;mfPGwR-6BxoI{_3SOX{lBZ6t0hX}@bph1v`#^KCDpW!$`d99v8Jg!Oi6QtEAfCytk&zUNU(k?|% z7^-AtaV{>#(z~*MVJ==tA<2_f^>I4ff|R*T*)@@|br1`mMn}~7Wl_`^j~@n^Ndn=+ z>*Y8E1w&Hu52ajRhrBGoiWz*3fTd+qWjSR?JL&dA*pI{CK4`zS{at*y{Y@V3w*Ms$ zi|scX;KVJ8nPIWWCEq&{5UZ+&aBA^%4WN%Ynu~x(9%s9^fSJl%ThzBrp`v`n^ z1i%j^zMHlTNWt70vEL=YOz8?d1;EC$O~iVhQUZ&hDqDe=cq(?rf>_b~xdF6}`?G(Y z+aZ?#QN8C}0GnCvzUcAPJ8lE(^7G*~aID*iWkRSOVQkRkLUV#sP!EO>G*brA0vh}v zn!fDcUJ&J*(m(I}3Kl7qUFdxg5aT+#I&Sy4+^0YBAU-tW0L1hNyg1n79QI$Q09Y99 zc9+F($I{hjY3DX8S^@B!GISPFLhyFkFl4Hh6+vSPs8!|dikN9~2~s$Twa?rY_1(== zzWNP@Vh^~Ip3{>6vP~GSO^@G`!=fBe99Y}p4a>w%xofMnCdO_Hazx{+(e!;c{RQhU o8Sw6pD5Z?>*B>#i@xS@w7sJ!jh|T2NQUCw|07*qoM6N<$f?ILFpa1{> diff --git a/graphics/pokemon/magnemite/icon.png b/graphics/pokemon/magnemite/icon.png index ffefd1a45b9e50bda43a7f8ef42018efe54016e6..95b81cae03d1139804566a9bb7958ef968c43edd 100644 GIT binary patch delta 244 zcmV1)~7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sy-7qtR7i>Kl)(4lmNMit{5TP|yZ6N`3 z%pVE}4^ZTsTgy&#?fqIUAm>h4j;+eevLige28P~XK{7(3ZCVugLBlzRnveV2)54_YnxRtm2zRbL^*|gqf@c6U4#H8N@t%)gU+B-A=g^{ zM>*56?*IS*07*qoM6N<$g3~T;B>(^b diff --git a/graphics/pokemon/magneton/icon.png b/graphics/pokemon/magneton/icon.png index 733049b1d68e18c9e21b0d5547e5bd3a5c813311..bde234ea113243d3d81d3323ca319a2a0107b0d4 100644 GIT binary patch delta 314 zcmV-A0mc640)qpP7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&^R0Rc%wK~zYI?UTWd z!ypVq14t+bnEC&|-LausTAWs@_O|h}oli}}a#1I(=&+?`mqNdN!< M07*qoM6N<$g6YzX;{X5v delta 287 zcmV+)0pR|F1Ly*f7zqRe0001qplF?uEFbqX`0u#PKjGmwa z*BUuXPT*^F%b~IgU9y&LlP(=e2@`fZ_F+ib+MMJ2mP zu<{pcc@cs5c1d+{oVKiSuvXv%1bQc@WAk002ovPDHLkV1iWqf`$M9 diff --git a/graphics/pokemon/marowak/icon.png b/graphics/pokemon/marowak/icon.png index a9738970562aeb62305736aa6dfcce3095e92da2..af56d377c599bc95cf1c497a0ffb7f02baa7ae42 100644 GIT binary patch delta 276 zcmV+v0qg$C0^b6V7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S-AP12R7i>Kl)Vna zFbITgkYMB9|7{C)nxr;y)uqZ1hAe!X`BAQvCw>gzOTH4842Z~hO&BqnO0MJp8#DV$ zoGEz^k?xTxv=_FZOu!C-G%sphp*o2&O$=2HfWVc!O;s5Q(|Do^`#vCS`U%7gm81Gy zKMKSeqqs&|=S?|t0OB|Yi|RauC($6U)*yx{(3b~TH0pqfOh6;VJQ*rB_K3DVnE1g0 zNV-7(ddMs=u=zD7wI^;IkAajs8c4G9!$7qCyCbq2$ig4m39kHMH;_wz*bHRl52vR7 a?hh|V_lLx zE01C5)^2!%x0Xn-K?G9Sa8ue4Le~xz-fW#?$GRZ+qu^Z*A#1-N;><^eI%5qRYETO0 z=qLykns5Zfk;zk6nBx~99dPL)OzIx&IzVNVj-i|i+ccM$=KulB+e-OYd;118!+-w0gT&bnfPUTcXqgry0m|o@w^}Dm7f3@$! z9wiPZOyvtR(dx${%Kl)(yv zKnz4J9wa7Y{{L?~iO_13RoYVz1_W{5PO`f=({$JOg)3cg3IT@66&Nva0|>Zx1ed`@ z9%e2*z}2#@qNG}Ygb7Or25jLT4rWTA8I%T45u0beK()HS`B`U>(9NU})Qx~~Bh*Ej zE+j(cL)|}#*eD%-xIC%?TyKKVQ$RI{gQo7egLZ`YZm!wGs=m48eR&*3t4j`HCl@~G zzAwMfN%*;b*PqlKAU_01O^{=NbU)A`K-z!+mREpOAOggfcYu@x*#}4lL>(axdkc^Z lh~~I5ALxzYh5lcJi;h=00dA~!UeD5{AAjkd*exqC=|C2ESl3yU&pRab`2SK>-$rIdo|g*SDRn; zuJz)9nJk_6x(8-4>pw8zFuTS0yah%8RqpE+7)XNt0t1xdFQ{u>w8?!TLxg;)o}Z5^ XY}nJ{D3}!;00000NkvXXu0mjfjgNr; diff --git a/graphics/pokemon/mew/icon.png b/graphics/pokemon/mew/icon.png index 6e7175f437391b2c2f68c247c255b6d98b14f822..d4b6ec9a72cec9ce5587d7f7bab8d189a3f7f338 100644 GIT binary patch delta 273 zcmV+s0q*|N0^9CR9gxJ zF$fzdltsbZ|F-L+^MI-cnDIBM#Egb56a8{a9;&;|%ax>u&bmWlq@ z)%t6wfVD}+fVWw2%@cy(C<}8m*hJg}PDKVoL^*L48GgQ6^EnJb{cRVie9~u|ch~#v z-xH)?KkVPcgKyEs!?LECsvh0@4DI7zqRe0001qplF?uEuvn$F zlh>gZ@FQ#9skjVW`nh*gH|FHJDo<<&L*nZY@%#-i-(Dn0hqLjcEBc{)W~4|G;COQ( zpe&=#sYj2%m~t>isOvfhh|XXWswvNy7Ba7eC{Al^sO?(bb7M4H`j`3zFs+fB76nH9 zy5!D&p^5{O17_rYw!m!Tbm_7IX5&d5Fq$!t1x7Q_15;`Dz(DyqFdzMX)kGcCi2e diff --git a/graphics/pokemon/mewtwo/icon.png b/graphics/pokemon/mewtwo/icon.png index 8463a04ddc33cc2efa1a315acb06bf6d7796a9d8..b0dc901658c6931d8024affbf60ab2706eabfcf2 100644 GIT binary patch delta 329 zcmV-P0k-~;1Cs-g7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S5lKWrR7i>KluHi7 zFbG6bvBk{&Z(G1gQ=4(BNR_%NQoNZlpM<<^`^WtNKInos7jZ)$03>bh*4crFi1?F& z>#Z1EQ#le)y+6gKk4Q`a}FzO za60l{j(ZV!ZN$o8VwZ+((cwS78u$1?`~yD-K?Z&>f(-m11R40j2r}@4|NaL*j3egc z#{wWHKcI^gogX_u2ti_<-vCnPm;h1a{n00000NkvXXu0mjflH`fR delta 327 zcmV-N0l5B?1Caxe7zqRe0001qplF?uEVAQ3;_9oi+e!c5V=Lm z+ap@C6jz_NNW0{S+_E@WcNnsL6om#cGPW^e%pWeuCqUV7+gL$)Vax_>4}=R|+JW8` zU_jU6Hcf%p0NgY+S=<}YfR@eKHBX@WWXs(gdZnPfL!1EEf;F0|cM4l4jrB4Ra*2QB zOjWQ(L`F{9NI5(?TyG=Cv7xie=oI4SkQnl{SB&z3ee7g?`#1yLAZWe_IC=n}U%Y@}kf-pO2Y`LK z#xMy39@orql8mAkVIcJoeh8ywx-c`4I(Q0GRgkAJvq75|VYEsU=0k)T;s&m97UtLe Z_y#ix&7cm(M)Lpw002ovPDHLkV1j2Uk<0)9 diff --git a/graphics/pokemon/moltres/icon.png b/graphics/pokemon/moltres/icon.png index 99affaa0b2cab8d2e31db51e44d34582ad672bd0..70de8545068fbd265d59066d42e2e26097e9eb46 100644 GIT binary patch delta 383 zcmV-_0f7Fj1IYuB7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SM@d9MR7i>Kl);X} zFbG5=)xaSV{Quu}7$-8eBlXh5YE>Vq1||bWc^t>@eDTDmyv2hkq6jo7DwZ`6qUz9$ z_mH$ZK!F$}8HnJosabV|LLmv*G91dsNdQTjXck9ar~IvO)OGxAG+VEPJOrLf@u#_j zXQLy(c^s@vg|S_K-2`aSo3!38s(Gw^x;Gqmv7DSvlSl)!|7tKlor7C1dY;|_0=6e< zVzmbHXBLPtm&pYA;3;zvDS`dcPodxWHz$cYX1?cq;#@aCEMKH2t>$+$DW2$7z(5|l zB9i_}4%zL5U;BfGb%F2$1(ayx!aqtE_t%^FD)A34iuI;m&i#;;=(A0N?=$Zkch^-0 z{$f|V%PcPZQzMpWPNN<8_gmXir{YgC;TJRB1OE=M*Il{b-%FMSvEknpql>4xU~_(0 d0e@&gyaCvL7G<@!U=siU002ovPDHLkV1k*%u{i($ delta 354 zcmV-o0iFKI1FQp(7zqRe0001qplF?uE&kbe)1dfUmqRMRnq>vwLMr@}ZZ z?}*|J!DnpDso1f${a3-c%j?gA_if@}wRF_YxLD}3=`)PrpjRL zWIY8OC=nE_ebYD{6}n>b&4l&)&Gb%?FhGr1goMLMt0x=)&c^1QMI0=I-R4;n4g^A` zcQX!Q+1K=L#vzne_6dhDbbMsPfs0oli2X|Z07kXH_q}!S<^TWy07*qoM6N<$f=-sN Ay#N3J diff --git a/graphics/pokemon/muk/icon.png b/graphics/pokemon/muk/icon.png index f56a9b367d8b0ec0c44fe6487af47ec60467a042..3168d1be464250b28d69e8506147a8f2fad78528 100644 GIT binary patch delta 384 zcmV-`0e}A61Ih!C7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SNJ&INR7i>Cl))0i zAP7WbV^28j|Nm`4NFr#`bEiA)C9JR-^S13z1<_-*iEb^R=DKm9eRqhM9}SwKEDb%r z{?;Qrz9%K3)>JX(CN4-(?qiCT;-@p7TQIxy*_Mk7?yGIAKfz++go8^5%pZj9<%~u!pnELAFb+R?cy(jV0SMf*s zaXfg+J3MUX2G@9q0GaU+0J6Zt0w8Hd1jvMk3=lg|!~r8;Kn^}2P8a~bFf0pbKPLX1bneHqNUA_R`> ej)}5asrLtb%_xS8SA1^(0000at()CL-XlhArYtmEq;IP z363{S5fa+|=^Y`~Qe!R>kM0)iUe7Hw~ zu+t}zLXdG-xuB*8lHL)(YBQz{7R85p6Y4zU7*Dkv~+yHi&M#x*sK z0+adRa~}eX@ByqI8JLleu@qB)8TlBu6&0AU13x}dU@{+tsI~wjXJ0I264VA1Ky=}P v2YLCM0V$Q8AoQZ10Wo<6aSg~7{{qMlmZexmK~?Dk00000NkvXXu0mjfgdnUb diff --git a/graphics/pokemon/nidoking/icon.png b/graphics/pokemon/nidoking/icon.png index 377cb6672e543b7717395bd6c426d7e5f679d98b..93d0b5f80e5f8735ebd30285daf5fa0f9dbb4719 100644 GIT binary patch delta 383 zcmV-_0f7Fh1IYuB7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SM@d9MR7i>Kl);X} zFbG7g;G96r|Nm_V>^M$prN^$+jZ{lD4+dyDrTowXd;;_&Rxlcn5!edQN+LplnJh-g7uFR=inxC^!|M-Cz;>k7j0<@(#M<{J- z!(b2FezA#LB!x<;f;uY#SJWmD#{(_q6~7B1=W77#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#Ysd#R7i>Kl(7!O zFbG6F0F%r8|KApHYjxn6ZFdV#nD5)V|hO@u4rP?5euI4-U# z{pS_X^40rAtU&q_O=yqsQ>;V;JgSKFb7T`KSNjSxq*#!L>7C$&ZiXR7n)YUx!ByTP@KuE%$ z0AYa*kORdQKo|!%Ko}r4K>9I$0U&q>kWAn!`EUnFzYhue`adfG0000%bI3rn5vqTh0n||AiVkMv-6`z^mC=e3N3TXCFB>F=cYJFu#7k9aYDM_ zJIx3rj1G2`#&;>H0ZClI8F4;9Vu{D3cL2?Hx7Rbg5Ln=q3#D2eYeQibUu m@e~I7uL#5M!jS4G{dfQ=W`Ao>!^-^t00007#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SGD$>1R7i>4l))0i zAP7W*xwHTOw`Gw~G^U+)dTE?VbYxkTn73_z)bK9e-Y9-3z*-3D0-!aM0JF~K72esP zd52jbiikH?XmzoWFyaCB(tVKmA!uNjitaNA)NOrrM1NSoCpjfP6oHr%*HIh-Zw&Dz z9N449!q?o@W5P0j@J&mP+mdSQ?|US(a5;=UGMxqzr$=~&K)f#IC|Mh%Hg>7vXDKI# zrXEMU7KJJIWt`?o62H>(`rlszf+l>DLK z>R#WX-IX7MXvvQPnXmbgJHO&b!NZat2Oci?@x;RgKMEd6&it71aOOw+JsN@)KT!Cv z;K#^^B|q?rA50neF!7@U0we7UKl&M`Ke+H?B49aI4u1`Z2av5A{cVe_-T(jq07*qo IM6N<$g7{3Sg8%>k delta 419 zcmV;U0bKsH1MCBk7zqRe0001qplF?uEV1b)Zs0|{v9R$8t@0EE>zv2l^{NWp(| zPt0a)NXyc-)K3qmrTKT%P`TeZxdq}D!kP^nj#{!XnpcEHl0E{29g@x-atQ0b^&ybz z9s#Ykj~nXV&dh#9rfz9Yq_M>lT(6PYeDj~#((yLxZ^B~BFQ0bHx?YsfcapT0DB7<)DATSGjuhKoS3u5N^ob3sku78-^%0hlkrCHw*!T z9%<}j*KKUyk-Iwx$%f{S)SRCmK}H+YxN$uH>^wXXTlepV>RXMbEcnpDM|hrmr~}lZ z*U3lAYYIMS@QT$@~A`)`k!PCG^-F;v7B3n>LJdZ~dnL?E5*#9f2d}oHqngN-^yKQ9?Av zZ4}@DGb6`k6rE!x(tchMD6@uWR$Vm%KwzsvlqmD*-rD3nNQpTm>Lig52q1mF`bv-; zpqn%Y6dB*&;%Nte6ha9>G7w;k1V|t%t3cxt1zJ?00!%9$I@bEeE`G`LFrn=~E-d?R zMtI+MKjz@lCN&VFc63D3Fdbg*#k@( z4H_;Q=|H6d7asGm_-RHAHdGX_R~bsAfyGiITWTeH`BSGpzrl7=KtBD>vhO~CKVKpi z;BvG)@Z5ZIVBS7B_%^+bc~{(!KJK!AuMU^yWsOAAUJYB5fH)CpLi29Zr5;G#I~9M^ z<-8`juPVe8Aab;im5+D@ojyhP=#^`ih^VayPe{^X0@JxI$fH!2cky3N;@H z+-WF45%^aXi^qv($HDO0@W|P0ISA`w(-}ix!c2bT!pweT!YqDd!YqF1n=p$X{wB=q zN7U=G1C4%Eg!1YK_QDyO`URCy VqXB;aeKY_7002ovPDHLkV1igdl&}B* diff --git a/graphics/pokemon/parasect/icon.png b/graphics/pokemon/parasect/icon.png index c6aaff12d702bcb696d4ad28da9d4bb66d1e60ed..27b8e098932cb01dc43e5ad5b3c40b8c3f88f186 100644 GIT binary patch delta 312 zcmV-80muG?1A+sP7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S07*naR7i>Klx+*c zAPj`diUuO&{{O$-MQu0h%V4m5YCcHeE@z7RY};Mm6C z5FqUc%r5|`fVdFkc#x7YaWG;QGm?vxJJ%M=0$cyP5;0(ZE|j_g>5?&%Na(9hj3bpC|6bpgBF=>S5twcUCa3|J4%-QsphjSD zTl2;6Is$W#sJq06kA)eLCqBlX4rnG^#s`!-=R*XS^D!pnD-(a{7sQXlAG(A-_y7O^ M07*qoM6N<$f?~UrBLDyZ diff --git a/graphics/pokemon/rapidash/icon.png b/graphics/pokemon/rapidash/icon.png index 92dae70a64c0d8911ff899508ecea3a5fdda41b3..a15a0a18a2071cf16601f0011371b49237184d64 100644 GIT binary patch delta 453 zcmV;$0XqJO1dard7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sj7da6R7i>Kl)-Yt zAPhvEAqQnZ+W-ICY9+A2vD039=~Rapvk!q}vfK9O0@ybD2&kEULwJBAJ9EYvh;+b| znK0=Te7zHx-ZASc@gqE_k<4+P-S{TpL(y>|69g*vcBMikD%B)(Y=LTAUj@vWM`2(b z0kv9X8lQ1l0*6e0H6$UP8k$S7)QD0`Db*2AUPMZp!~{xd#YjjA^aPM-o~AKTq`F99 z;?uQ;T$#eAuYp`Wcb6ofz1A(y0}~#$l(ve)2A}Mvc(_HE*1@* v{b9Qb5*ptm>ytmc+0&$Vf4Dc0U-E}9tPvv;er#0=00000NkvXXu0mjfnwHN2 delta 447 zcmV;w0YLta1c(HX7zqRe0001qplF?uE^6BHKi@dsO4;rhSWwS8C)FWO0q@dtff$a|J>)h@6OT>;O|xs z#Z>6(Y$^~$1)<9dYiO7jstlABD(sQw_LEt$US1|d>j$z1D{>OyE6#@c_5 zD=kQ7O30e>Rij8JDdonLhP=EU}}sS7ewej$*;&^q_|F0gi1tiGdt%;X+aHe;0c10a0PF3yWRg zRFYKyP3E%dx@3Ao8{Cbt0V4;(&?fXD!@OkN3U^?Dp{OriL6KWO3k)Z!8F(3hX?g?9 zxJzeX#u0pAOdB7Vzz%W-rW|TUU<@CH_0SfdmX9hQOf@hMhK~(%ZPR|>gS#tVS0f+Z p>5=UVl^1*<_hQS( diff --git a/graphics/pokemon/sandslash/icon.png b/graphics/pokemon/sandslash/icon.png index a1d72a1ba7cb5d5908ba16b215d57bd361baa682..18970df1555ddbd1c641c6d501a9eed6e61c0155 100644 GIT binary patch delta 374 zcmV-+0g3*t1Hc227#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SK1oDDR7i>Kl);X} zAPhtkkdV1}{{L^+12h8TWOsY$sg`J@%mmv|zvKAEJAq#$6h45!2eFq>GXSOB7$~W& zNT&hSHb8}$f+P^FRZ%Nc#ljn!UcqH*ki=fsDqUw0#pM9MwGftA(0><0SHXqWjPAN- zXjW0G8f;+SYBs}v*xywNay+ZAhtTTLEKXX0I$L#6fVPD@j><4l^9 z41L)F<2X+;kkQ+Ws0NF>=1Ekln=rch2e6ML%fRu(+h)s6@**5S1STFg^^zxcMLaV1iDV2R<}{Jn&%<=KhbxY99H(V*km9AAI>5 U^#NHlpa1{>07*qoM6N<$f`#Lw0uMebswRzi636$dbO)b3Sp^Dpi=qmPikUF`A88iHmCoMAVE zunrIgsB??MYdzW__qdPi*!G;KfC<&AmYIX0kb8rV^*FNrGaOGnLGi4tE zOtXl5aG+16_i<1%aiFE~ zKD;0i*Pv$h;RS7d=>4?uLA{_22U>n@eK7N@k8jj_=z%BYx^e&j002ovPDHLkV1ko> BplbjC diff --git a/graphics/pokemon/shellder/icon.png b/graphics/pokemon/shellder/icon.png index 8d74f82624c8a138908183308884952431f237a4..8ffeb3edfa95cf44487ddbfd4c8f2cf5cf4b5787 100644 GIT binary patch delta 263 zcmV+i0r>v60@4DI7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&`Cr=R7i>KQ(X^) zAPjTyfdt6<|NrfELo~-Y?(IGj7bTMxXw`1pT|ZaA*_`bYUP_y1)7!u(@a62JOc|<> zT19~A9#Eo$IaGl6h*!sJC+R@ouIiVOIAByk1*T6ZkjwcHWCFWVB`J2wRHPAfhn-SJ z1*WDGbq88R5GnnLU(bC*yJ9vpTNux3sMQdVrJLTkee>XR7fh14Q5_t7MwxNE;aamX$0^dfEE8!m)3z#I;`zchj{(7 m4)sxoc>R+OaUn+?eqA5UCd2+*X_OZL0000KltB)K zFbG6V3X2B9-2b*8S`#a6{VR8}F=3vxD9mwuu?^slPLBjYM2P1aLlqHbz=$&tuRtIz z*dqam6slK1lwl@hy|lLjsgSHYP;i!yYY5H2shdaW8HjAx3$wXy=?YyIMTrJ1>jMxv z-%f}x29=SZ5r8*;1?WH!-2v~)FQpw(CCY#+Y5}Nvhcp2}XfI)<7EF2rBBdr?OY#*u z(X#zhVbWWpF((#3s>7>U@foQe0qjN&4X}raMANtOv7gj0mhqlHw9JD)Tori<~ delta 307 zcmV-30nGk_1N{P!7zqRe0001qplF?uEW*S z@V)tvvO0?hbW-B9gvHWKD4<^=<=rn0uIF#s{x>dwAB_=))$ zgGDTjDHZ^>#f+#36MiqWnN}WOGlb7Pw@HMM=Vcmc|9DP%0lfZ%zf(W-gPYWkQHR)% zQHQ74k5Px%k4XpmrUR~ZNc_0y5ON=Ni4MV!s}BFhk1y*92zSmY-+2H4002ovPDHLk FV1n(pkwE|e diff --git a/graphics/pokemon/tauros/icon.png b/graphics/pokemon/tauros/icon.png index 08975b0bcedd9bfada576131ab88bf1dc730800b..de4bdd330d435f7d221310649a61c4b74b9f2a4f 100644 GIT binary patch delta 340 zcmV-a0jvJB1D*qr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S97#k$R7i>Kl);k3 zAP7X`C~&j?|8Ex@ErT#QZ0%*MhC>eF0TR=FUElb10Q;E(4fBx|V-}|kfbx2`zi=d0 zT4NF(sEVNXZuyFL3*3gF5}}g_3?QSAV}huQ1qREwO`eN&(FW2<10oz&z-Yj|R%)JJVR)PFk6ss6-ay!sIx#;M=_ zTfjMtS3ghnJ0m>QFF`$C{n0?Y`V)U}>d*aQtDiX);8uS#?hhAm%V!b=uLFGY2XhcS m_=7dghwnoy?gQYsKaC$Ip%hSF?r+op00007zqRe0001qplF?uE5dr5Pcp!;_Y5?0TE z)6Ds2itl{_j6olZkg+krIw(Jd)l9qJ9GiCgLfA~Zp(>Fa>4d=r18@{J$o6~=x z9pdqE*CGLk^38YBq9U*>HmYiK0xjmU3Z*2_pmaP?jU0;rSDZH*2sGu#6~qMm2Z3T! zvk)8JP{nJ%5G;Z3yiS&2^*e8Cfm_8UoDAwWMhHy?!B%&r2)ASqMA-?eFw$huvb3ddp3mqVKY$c4p^k4e%1HrSa$7<9mbpQYW07*qo IM6N<$g6;&Ry#N3J diff --git a/graphics/pokemon/tentacool/icon.png b/graphics/pokemon/tentacool/icon.png index 5870f50b8ec9a40b8028accc708279f61ae62ee6..64a9ef364532259daefb064464b3ce3eea6c9226 100644 GIT binary patch delta 285 zcmV+&0pkAS0_Xye7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S=1D|BR7i>Kl*tOi zFbqV!fRGnF|Npm@RX3zTwl6I`G$spV9wXUg6;qvilT}{kMxi>_loCTOgFs6nBXT!; zBZecusm9ogyaVujAq*nvL0=7o@V+-DPtkn?Ut3VILk&X9ZMHbRqWR@7p#`@@u#f6g zE`-q5|6Uk7UzlwA`1f_E`^V`%h)KFn#3bDZFiZEdX^|%B)&YW7W?@8Ehl5|mALpa7 jEUtb#VmBV#XUD?>{(}_$QAcD~00000NkvXXu0mjf7h`%= delta 281 zcmV+!0p|Yb0^F$%&!5X=vjyx`y-pbyaZ zq_FW9a>7Ac1#1y4ECfGblj0yx$z6nyh-5uuVm8~@2DdqGnAu%sHV8&uXxV?C4G_30 zGvGW9CXJR9c$(ru0Z^uxMMMK9y^0nDs24hoj+Q7&qaWvO%qao3C&4qywC^0aOM{)k+`~=tSx=)ip&IirPAheb4v6S_}>GN@h{urpz_S zWyVBu%0%4gQPh8=-)v6PZzweV2B7Ktg8@g=chaASf4&VM48`yqu-OQH-$#zfD00F$ fxnuw^Nn0<;2)MMuG%&CL0000Kl--WR zAP9x4CI&6xy#Lz{PKV*=M&I!dK^!D5r8gykTbwccL>g`a;de_mOyR# znd&A9Af}T6XRX2$0%{3zt`=FC2Lg;MK{g`g%*1^sAOlDP`3mM4V2}tE2Ws_fJy4X8 zWL2=!?GVJ04bb*~vFfc2(=D`@RTtvol6C4Iq`wIu2&hoe(9I#}E8-hKj1mJ-5>m45 z2r&+Nu%(yfx^Ex8I-=NOFD~#3(l@EqE7>i~R?8Z|oliZ!GqAfA{)o|Dk+A6fE}NxPP$!L>xcBul;BH z+L7G;y4&rK+28)EU3xpVeLr>H%g3=jzW6h|0Np|%9Hgt1DF6Tf07*qoM6N<$f`zcA A9{>OV delta 358 zcmV-s0h#`+1F!>-7zqRe0001qplF?uE1pw6o!2R;T*uBK7cb6 zI&{fxG-UBLYzTO5LLoyT6bI6+LrFU$FR! z&D~^@>rl}Nuz1to4X*(m4^9EIkr3kV;I3J;F%Yk%Yt)T5I%Tn_vN%BGmm5 zZAA=XqhfRl3Jel*Z@5f-Xt|rX-1AcJb#U8nbpV~|(6gIqb%^}-TOHiQ1YQTX`~fMe zL+JddkKm{S`E64T@roGmfE{!oMRDD!jFCEPnf)opH;7ChcY&$GX8-^I07*qoM6N<$ Ef|aKl*4>1X=v{g)Njl&my7EC{#@nPZD@1$05ShA=ur)9(mLFHz z>~+FY2pd?yhJiYDQFH-s*cJ18rz{1hP)f`?%zW>K;+C`x4G8oXr9k+*I;QJPO`V%SXx;=)}VqJHv#(@XGJ=b$`qSV{^f* zQiy{0%?|l0UMqIDFpLp0)Yb#0x23#fe8MC4nGWm6b8u*fm8;e h;fG?wKIR0XJOFJ54y7i`LJ9x?002ovPDHLkV1imZc4Ytn delta 271 zcmV+q0r39j0@?zQ7zqRe0001qplF?uEtfb+sMOKTH~Ja+d4*cX63{l|Gg0up7DXHcG21=d`^a#F_~|G6z?wHe!c&0Q0TO|F z77SW|4c!D>1FYzfORznrbYkRkt*LO{Ll#$55X~SPhpZr)NF72}5K^mQ2Lu>3V(Ds4d8ZQtT zC)3GwlEX002ovPDHLkV1h1Ud5Hi3 diff --git a/graphics/pokemon/vileplume/icon.png b/graphics/pokemon/vileplume/icon.png index a3cb2b0b59a050075baa9bf7fcb1d65c6edd5092..3dcf11ce3912894ffc6924c219ac0521c7b60985 100644 GIT binary patch delta 318 zcmV-E0m1%{1Be5V7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S21!IgR7i>KR9z2* zAPgfx793{#|Nr(nP@{ZZa=F~g*#{)FbZ*f)_n?Iqj7d&JiKV9j>3t#zK_vOawL~ca z;F*J9?>*lX%FF^RO9;ziJK~!{K{Jd^f*s7T-YvYHT9Hy9aa)2jAw|f(DuI&TB(h%z z=x#yzkcAIW-KUy=hIS!!$7!RC^I=mg81b8cq>%u=+a|X36}qnAGGbhN7I-l!0zA43 zXkxw}11;oG{dg7*< Qi~s-t07*qoM6N<$f&wy$Pyhe` delta 325 zcmV-L0lNN(1CIlc7zqRe0001qplF?uEbEG@rFn!5fevSI2SWx4lC5|Ud5Ka8PPrHgCTR;-BVF4f? zqCZv4+)mo!S{~W;tK?=zl^hh2sr3t9WmRll??{x+Qlj~z6=)?Xr9zPvM6A@BvMPVU z(Na`Nqm+#8M2B&)Q5O<1x0X3#iG4i`*|@{J7ju_P@F~dN0l>oR#SU(LL9jl4*5EAX zrPjK>bAo7JwchEa_sB`tu-9&c@At4^F9rbfdAh>h<>xS8g@S0K|5?G(g#pG};hOB00000NkvXXu0mjfn=P5M diff --git a/graphics/pokemon/voltorb/icon.png b/graphics/pokemon/voltorb/icon.png index 551dbf281c4b9ff65c99f66baf812fdd2050fc82..f0113355b0b81df695a1c5886fb6b1819baa5a22 100644 GIT binary patch delta 169 zcmV;a09OCz0rUZo7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{Sa!Eu%R7i>KlR*l= zFbD*Tf(HY;|Nm_@>7@{JEfnWEV~~VgSMysK9JTxKI-!r@X68jfdjhk4!I)isA5ahq zbwTCyKoxifgycEfASaco;bp%B)&eMeEFnlliXaMAk=o}~Pknxkqi&iv{k!{jf6fg# XdkVt@hYAh=00008NkvXXu0mjfdtpLU delta 155 zcmV;M0A&C40pDE8T__^_t9PYk zeLxcU1{6rkM;6Fhh9bbPmzI~7mWI&7Z=d!o?-{bd`n30t((;f5o~79vr#(Wl=HIil zw0HVQwtUum_f82}fZy0iNeS6u4F8ps&^?339|dS&H1=r-0B5;bM>N2xnE(I)07(Z$ JPDHLkV1jQwM4RM~FC zFbK5bNM>UP{{L^w5wF2<(@K4)v`DK>V1hZulhQ{Tzz^})t3y2W{mgMT=urRJF9DoO zo{4CEg!zeDtBUc)?-H=TS{c#;f-16K-4Ye65rCJQ0UG6Bj)?AV)N-b*Pp(9XTW-ma zIgZ!?)|ddYoUf&SNVtyp3ux2NvwSMeU>;rQ@L)U7%7)sYLXfWU7=Z9RkK@RAFba7} zd;s{NllT$0%sFu9sZ@f#70X1WGyzouu#wxAj7(7D9wmw8b@Sg`MuY~y|nqg(}mb8ti--w-XFxQ7=lGoQGi}`Tb+7Ls z`Hg@B_s#i%Ll`~W05I(aI#bsP)Jz<_FgZG;bQci4z5gp9J^r1548U4ItcPa-;d}Kg zAd=!qKvW*?0+QnOSO`d@%tAoo{{A8$rUza?IN?OXARwdnJK$o>f~6DXCV^Pokm33Q YI8-JoNgC1(*Z=?k07*qoM6N<$f)v8cTmS$7 delta 420 zcmV;V0bBm}1MLHl7zqRe0001qplF?uEKb05eFQ8#WaJd@l{&SXQx~N}BE=FtADEDI=n%z&1;60<@8^TDYku-< z&efSxDpicjcrglm5OKU5)Zw2CxK8+Ni*QWz*1K5Ii@tH*R<;RqVR{^E0H~wT;<$gQ zz``o->2VDG2Y5H#Ie}+-g`&z{3Zf!j*b@*Sf8&htBcA zzk2?9d%1fx-@Yc-SVMQ+O>1VR#{J}c_ozE*AJ9CRCu zO7XCp+q(7I$21Es{M0e&$9S=_m^y!%Vy47=j5&qOGGV-#kZrCM?CRg2Gs2Z;YB~5U zmxCfn=EMg@sDfq5qEM=150dtcO(HNv3~_V|8I-{ O0000 Date: Sat, 1 Apr 2023 07:34:59 +0200 Subject: [PATCH 245/290] Forgot to fix Venusaur --- graphics/pokemon/venusaur/icon.png | Bin 493 -> 489 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/venusaur/icon.png b/graphics/pokemon/venusaur/icon.png index c841ddde4fe57b5833b98dbe10868839264c683b..ce3b2290ac95bbb4a77df21b7ad9513739f06424 100644 GIT binary patch delta 415 zcmV;Q0bu^^1L*^h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Kl;Mtp zAP|JR6@pC{=KbIHW&o{J+T7*Rf8D56W*jz1zsu!YlLDXO1r)nN^rTea%p}96UN|M$r5# zaMMbJVKs0!loCUKFv`@K_SED3jueqc0aOEV{dZ-h)+qmuYv^VAo@bh*-E5`X$KR6eDU)~zt?fP&1y08IczLxrT z3LvitQu)yVG9yUk#{(c|f}nxn4L~pgBn^9R0+4h92%6pjLV}zCLLpUvlx>GT933DU zy;1)pK=2WOU<#1(FMybrkq^%RIrCuz$b=6^fV|?v{(1h)haU-yCp!A$RptNy002ov JPDHLkV1mvdzz6^U delta 420 zcmV;V0bBm*1MLHl7zqRe0001qplF?uENVj`1Gcmbn> zYZnu`mNY4IALFplj<6W#F8T~k4z~$$?oAo%(!s$=QmMHOCSZT>1qyW1PR6_O@t%ejD&5SI6Xtv z=xl2kIbe&ya4=E<7H-Xq@jTiL98(5nj3Hw)%6YVLk`gdJe;jkpBh_>_XY3)&_=3kV zS3UDL3DU0ozXvajg;z5kcNXWD#pHh%^E1X}1vjh70o5*l;!(XH0LcgE?Ip{~Zubyq zfc7sAq%iGKK|$*J4bcOV!cb5@FQt_dh8p0}p)h(SOzBihm=Z`~Y}rr>L!uT2zKc7x z+9INa0jBRq3WH;WK_g83gD{ Date: Sat, 1 Apr 2023 07:35:18 +0200 Subject: [PATCH 246/290] Fix gen 2 icons --- graphics/pokemon/aipom/icon.png | Bin 380 -> 407 bytes graphics/pokemon/ariados/icon.png | Bin 389 -> 421 bytes graphics/pokemon/azumarill/icon.png | Bin 417 -> 419 bytes graphics/pokemon/chikorita/icon.png | Bin 314 -> 326 bytes graphics/pokemon/corsola/icon.png | Bin 315 -> 346 bytes graphics/pokemon/crobat/icon.png | Bin 391 -> 404 bytes graphics/pokemon/donphan/icon.png | Bin 479 -> 401 bytes graphics/pokemon/entei/icon.png | Bin 488 -> 461 bytes graphics/pokemon/espeon/icon.png | Bin 348 -> 382 bytes graphics/pokemon/feraligatr/icon.png | Bin 469 -> 492 bytes graphics/pokemon/hitmontop/icon.png | Bin 473 -> 463 bytes graphics/pokemon/ho_oh/icon.png | Bin 558 -> 539 bytes graphics/pokemon/hoppip/icon.png | Bin 342 -> 366 bytes graphics/pokemon/kingdra/icon.png | Bin 402 -> 349 bytes graphics/pokemon/lugia/icon.png | Bin 517 -> 523 bytes graphics/pokemon/meganium/icon.png | Bin 431 -> 425 bytes graphics/pokemon/pichu/icon.png | Bin 266 -> 288 bytes graphics/pokemon/politoed/icon.png | Bin 399 -> 398 bytes graphics/pokemon/raikou/icon.png | Bin 572 -> 489 bytes graphics/pokemon/sentret/icon.png | Bin 320 -> 336 bytes graphics/pokemon/slowking/icon.png | Bin 401 -> 402 bytes graphics/pokemon/steelix/icon.png | Bin 442 -> 483 bytes graphics/pokemon/suicune/icon.png | Bin 538 -> 533 bytes graphics/pokemon/typhlosion/icon.png | Bin 441 -> 446 bytes graphics/pokemon/tyranitar/icon.png | Bin 458 -> 431 bytes 25 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/aipom/icon.png b/graphics/pokemon/aipom/icon.png index 43822f098048c30c6d76abcbe6506c6ca28f80a9..294ab74eb43d491423a0017e5a39e4e63d0ead98 100644 GIT binary patch delta 333 zcmV-T0kZ!50+$1j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6-h)vR7i>Kl)-Mq zFbG7WbZfa}9 zv=Y>#Yk^>`HUV}POmz?pk|&^|p;x360GTlnn@Ru@0JkA<5+MSy3J1W<9>_O9q6i6i zNB~PRZNy`Z;82KvllNW4gE-z_PuGO~J94k_6b9b=sWbGO76YBOGv<131ZDv2slgFV z=r{pzuh++ZZ3ox?ygeB24%MgrO8rawUx;r10qFK0fNuW*==PsJwAud{ywU7`WJv8P zb=tr3AqMR!b=rUJ5-R5yJtUU>-3wr0-%_OPugm;Mjl3@`5y_YKe`Ukvr=`NQ|J!qO f$+ipe1Nra;Y!4V2<&_w<00000NkvXXu0mjfnZ}rj delta 306 zcmV-20nPrG1N;Jz7zqRe0001qplF?uEb>!3;^{5KBkK^^>JMs z7>I^0;gY_ihygyp0{nJryhu+F?ZE_F0QcUEOrbczBdKsK zd*HRuRZmtO`cLtzI;0#?hYX?)8AKg2h&trDQHMO4r~~*Undl&!ffmW`Iv5!~qmIgm z4x@nW&P5Kl);X} zAPhvSf(cwa|Npl;4oM1&DN?ms^$;JDsxz6G7~bP?*C&OQE(^!nkmKn9JTG#_A&VPE zgTg9%x@AH%rKI^x8seF(s^aQm(Ho$V@koP%;p$x20b)D)9Y78~ zOaTI;1`dFD4YU9;J`ATqI)IFh4j`2eGk|z}=mB!^p*`L@4L~M*cmc%a15f@15SI_+ t#|03d52!g6AX7eE1exuMb6tPThad8=7f>!Itjqua002ovPDHLkV1m}^lIQ>c delta 315 zcmV-B0mS~L1BC;S7zqRe0001qplF?uE3G@Oo^q|uBZN_ahf;=1Pc;)^RGM0clx5}j~@yHt-cHF z-MJ55Pg`H@J0JPvHQ-_tJ z%Pi^?BO*Bk(SFfAwNa5b+>e&_VbA~d`~nzK0hrFm3=FMGbYKvGNsAGTc3@;Z2V-n9 z12g#;!1O*`;K2AkdN7`k*B*@LV~-~@7|#cFMF@PvDp(0V+tC+3-T^ZE%8iZ4)c^nh N002ovPDHLkV1nsWk$3KmBEg~ zAPhtimLe;)Jpcc<#RO6eF}>_zrCm!^5i>D1bzW2YV*$*INf$v|aNyv}aXVMXVG87k z4X-Z-In3}nf*LFZ`azL_u}ffmi0%?djkp3b)hy9XS_X<8MLti#U~s<)Y5}LTK$@-` ztRy5d7~txy1`DcxUwRpMXb9zS6U&FW9l^d~Wg^pK0^?OTeDR zl7Vr_xs+(?GMcv4bX(5{d`#g;-tFjK|Bs)Gh%kLWAdC$$wuGs#%oZSMg!#Pyu_@jG z#NNX#K&oK?$Vw0g5Pcv>8UUhC1W67cJ%J<02oOatY^d`%1CZSJ{a_3L$@ia=zbX%q rg&@EHkY|FV1`yd0#2!=q0+1=*kN_D%rCf2*00000NkvXXu0mjf5d)8j delta 343 zcmV-d0jU0?1EB+u7zqRe0001qplF?uEVlBg0~4OaM0!$u|86k|fCEJV(Y82>a0mi;+uHUZEk6Bw(>49@B(BRQLDMyzK8xd$ z<+j^t%>?TVBjYU*^OB5N>#JhQ(lcYRe5s52w^a}{FFPk_LM{n{9xGsY|Led2Rls;t z0pm>shT<()fswO?)E9smrDsak5tu_6sUZpxn2{7jf+8@F^T%}j5txVhEeQ!2Mav8h pzyR=?R)9GZFl1ZAml~KK>l%Q67#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#7RU!R7i>Kl+6;t zFbISb`RTz4y#L#ZNv%C((ea>mrhDBl6w+OkB~D8tNO%i?77_?(^w1WH&wx2%h|#9lbQI??L||gm5~hK$_N$%( z_j_1>1pqE}wJU*IF5LsEl0Aq@$y*piP3=>Erg!!qEq8hB|L1;rQNIUB*5L?{#Q$P| zfW6uR1Wd9E5EKwwfXoA8A0YGFc6kQK95`-1+yIf(3zGOF4`BcR002ovPDHLkV1gwP BY#jgq delta 239 zcmViY;P)?An z6;eIYE{Rt*j>b{o1at(16h=Y_L%%a3F@QHe+26ALmHPS6@hbB`gCK#3S}ZWsiJnJ) zjzYnWgOCi&j19WkJ1fABH;XNT1Fx0>cs@1`$J`CGKTRsyrYWWe+0i;r1R!u)1;Jab zPI(1D$9g@8WmF}vq10@y{yAbSa_YnZG*R(gancN0k!w?&Fd0S`d}tVa+{-W?=DZEl pgKjnqU8ag`7+fY~!vOfYKb}}9V72%=#>4;s002ovPDHLkV1nWtV|V}n diff --git a/graphics/pokemon/corsola/icon.png b/graphics/pokemon/corsola/icon.png index 9fb51a0b146038411c78300dc5d07de33ba9d74f..e5ebe6c08d6adf125e0e9ee9cbca9637b13c16a7 100644 GIT binary patch delta 271 zcmV+q0r3920@?zQ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S*hxe|R7i>KR6z>E zFbr!5^k4_;|G%A_l(uV}48{%{s}Ai!ilsQ9Wx4Tb;1#c!N&q#PDWIYUA1NW)6m&u! zC+0)nR4r0UkbrwyeLVL-!D!dCw?YJqqM#(0TH^5(PN=VBDE=G2J7W9i zF*p7J-_kG*!-i=EGH94nfeaevTp-o0Pk9uGEAsPx@B$f<+n7231|CZz V6_bnuHY5N5002ovPDHLkV1kn2aM}O> delta 240 zcmVr9LId5U(y?0GCRw=Eu)i(wbrLkx!LqbQpc5(D^Oq=t`Zy*XY-i^^u#Y$k} z1}3S7q6{MIVxL4HMeUJ|aCr#RQXbJ!05Nj$k55Y}Sw9>vFnc?0J%(wfVA$Ge-;Br^@Z)o+04{&P zwgGSNuQU5`=Lom^hZp=BD&^=t?+~T&i6J7MJARP27k6YVsquKV%t!&N0@7^VWByBk zrq23WMg1->>UVkE)UT2JlGU#vry;A~4X{&IzYgWoRMcO01ms73YIYFJ>a(wgG1(5u zq~7lT&UU~nk*~{S+aePU{r=ZE?I$Gt!g5JSPpO%|VWJQ9tM~@rL&kZ+e=Xqv0000< KMNUMnLSTZAl#Kl)(~% zAPhtWE;%^a|Nq-&69iGQGo7|4_oU>JkihJ+Jo-p5-G()1oiZM#Gz|!9T4=I>6G++# zUt(G$iU?E(f=IILf#@dei=?Q|ogOm{gw;nSJS^)f7=czi!W0fgh*&)3gtZbCfOkTK zVec{!i4-V^?h*BW8zO=VlfhFn6~enzsmdf`snX^ z9HcwQ`Yi{Mdk1lUc;g_=A0`gc`#d>_xPy#M>>b4Y0hj(J!1%R4bO)LGLvxV1Kjh!| Z!wa`uAvdSamec?M002ovPDHLkV1fesk*ELw delta 406 zcmV;H0crk`1K$IX7zqRe0001qplF?uEb>!3`KndK{EYLU}rNCS&$QIq6D(&kjZ(>U?%{6pUE%)sD9?;KgA()$t8_gZKCY%ZVXEqMA*b0 zU>LvZYl)?|$MZ?{wp>1R9%JM2b0vxSrnu&p8snSz@vs6<}Y zG0{|sAUWy$S*jm|_ncrH;>C>>%-J}f{iq6w zZWC`>fJ+891qpdWB+d<}Q3s5W*rSgOgJeH!0Ei<<@gp9L=XAJVvPl`JFl&E^)(v8- zADFrCE&N!1{D`~s;zw3UR(|CFVC~2D7k+#LH-8%dYcN+j00000NkvXXu0jG}g1yVS A$p8QV diff --git a/graphics/pokemon/entei/icon.png b/graphics/pokemon/entei/icon.png index b7707797f0cb9261e12a1af310cac50f0e75d636..eeb80f46047d49d661461cd800c4b0e3bec4d48b 100644 GIT binary patch delta 387 zcmV-}0et@G1I+`F7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SOG!jQR7i>Kl-;g_ zFbsp2R4SB<`2F8@ZrVZ#Fddz1Dv&1Gb$&Fy&*wei0QGrPKPbS~OgBENrC{5jNU1&- zeJy1L=u0Un-w=YTmr_ldROzq~0$117pvu?0%49*Rs@ldbD4Q~ft>Dm^D@f)JG5%(T z>SWMG{eHDT#Dp1tbDz+hd7%~nB{2~TF91?eY h02T~@ynOfvAHGXM9ABY#P;3AI002ovPDHLkV1k>1t#kkY delta 415 zcmV;Q0bu^k1Ly;g7zqRe0001qplF?uEn= zu!N^B5f8ujC5VnJso{t?8qYJVEQ?j5M$xHvX!KHuar?}bD=V_ce{Tv zh~n*Y%8ScZI;0bvSDSyNVsR#yU zP_;Dn?4Fmgm|zN!^OU_+Fc)^ad?tTbdj22&?9<55G2sKnjVj#6xk9wWw1du)IiOf`!_iCbV?)O9?CZzKR6!2J zAPDTHo^}ZQ|F;Y1c13Btbdw&+p=q1}M%3B1CoT?I;aD&P6GOs+yn2FRLL`yU7^0z& z5XX{Mq9uB&lR^o0L7^=Zd9PMC^NCx;KMZ6bOa?L&qJd1L(Lm}Y?yHUl;xFyoK-w#mV+(_U zh&w=6U@(xH8WfBMk_;*sNcJ?Nfn>A1)IiSsL3P~HA3i!0Dj5Vsq)-(|K3c+s$S6cJQBMEARvw-nLm0`#o zuu~629yrgyNG#`@hd#M!xEyHc_Qr^tIsmW3flgigmU#lgoqEepjicE@=(x9x8n}G~ zBPU3Lt|X4P^y6K)y+9RRAU3UnMYY&E;B49GQg9=$wh+9y>9x%?XIw0?-!4tfzt#u9 zl&Zi~Ap=vT0!%bZQUykJ4NSmUsK9_rKd%B4<7A5hObeEPY4Hj$E$X|#Ecwv!yL`L= X&Ar$}EUn=}00000NkvXXu0mjf$&q}P diff --git a/graphics/pokemon/feraligatr/icon.png b/graphics/pokemon/feraligatr/icon.png index 2fe3556a84094255dacedc86769420f89d31c720..74aca6aea47a50f18c8729bcb8e37dec026c5b5b 100644 GIT binary patch delta 419 zcmV;U0bKso1MCBk7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SYDq*vR7i>Klu>Vk zFbsq%45?IX-~a!&J3BzrCd)KwPuuc<5O>(l1-{$ucP)IS@0feA7nIX6a?;?{fUNc| z!wVN`uf6n!J@n#;TQ8p(T=gt9bWo=w4TBOMdRSmKG^m@poQ{F6rh1ok4F|drAZDVt z>$a`RTla_+Z2=K~zA9@PY9l;@jhHx}DD^EQ7E!~sS#Th-8V2a83Yl+A?=S=O$@t-WB3g3Xu)FRkIQ#Uxw?7f1y67DgB>3^563@jgvD zn8L9W?e!%#!@YX8>c2Ypf(2Nqn{&*8Bh!zQ${sTL#sT4fUgtkSf8u{-{R1QoKLwEb z!A}4ZggF56LXZO>DlI_TWD_8&k0i_!Af*KeWvPU@0K(id+6s{E5%1@Jc>?4lNCn76 zmwA}yz delta 395 zcmV;60d)TC1JwhN7zqRe0001qplF?uEj?ft9zR&(INut`}#hV2TroR-K$+6_F($hn*0s^~8b@-tyPUcNhOW@3#(d zgIXykh@#87I@E!xZ5bX}a49Lwcd7y#t-@RdCvYo;;4R#W6n7Ea4x}bn@nzKmhZz1V|-T{2X2`iL$ zDn#~4R}JtY<)zRSR{}`~z_Y1rMQ&Ep6SqYy_az?!bFYvPce5E6Y77d9S53q1dTkcG z=st;EW+D!>kYJY~Zzo)4S!pXgB)WH*gze?eN8fi|1JV22^RK{w3uX=m4C#k6V75IN zRaI&L18W)>FcllXz@rvqz*HgjU~bo1P!FcadoV`O0LB2(&qKNq%r}q$jIY6r>$DCS pGSOfh9|u}q`oLxG_(1%rk1uw;NuW8Js+a%(002ovPDHLkV1i}>uH^s# diff --git a/graphics/pokemon/hitmontop/icon.png b/graphics/pokemon/hitmontop/icon.png index a2af3bd2484a06eacafced25d2941540a84f1751..7f8d63f91561d6e163204d912b3c7cfdaea7c560 100644 GIT binary patch delta 389 zcmV;00eb$~1J47H7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SO-V#SR7i>KmF>>M zAP9w*8sLWs-2dGUP^(sKw>R(4nQZCGk&o8%?DhJs|6lSHPp3k31%eFHqztf1B%_>{ z830y=P)otAlC+jlh2In;Ris5B?1?oKX_28*zZARAs0t$gISiGFGLwcG2{N?6p1d31fJsH5{=^4EHb)Ezv8nazL|I7BGKo3d-4Py59UMsw?0{4*gy7v zxBtffgZ(%D9~`sue+R_I{|yj}|Ic^@gxPoWf8SpLQ8{yD8C!d7fZ)sCMi2*tI7?=K zH-dPPfDnx!1rQ4%PJ&Eju)}%86kr9|F zlzc%V!v!LW5CA{cJHyj3720qS^DqvVa9*9)E>V|t1mbF{zs7v4=WiW=d_L(Ab%(^S zcG3X~mMqAm1E}J~H;rq9wE6IYfE;_*Sp>}nmH=uB09I_2=mZdfRq0x_%j?&BEqm(g zMUd~;ZK45#APr+B8S;X3aZ?zPqQrUEKzGDVhPbr2Uj=SaDKv`?+6iJ2cP97%B6hx< t3t}pMtb#!fF?_@6e2_4-mxBDmj~|*$*qLG?0=)nL002ovPDHLkV1k~jw%h;! diff --git a/graphics/pokemon/ho_oh/icon.png b/graphics/pokemon/ho_oh/icon.png index 7a7ce8af61360888a36885de5b855797a87c890f..315683cc5e8ef1b1d46983b419bc998ef7fcad88 100644 GIT binary patch delta 466 zcmV;@0WJQn1e*kq7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SnMp)JR7i>4l-+K_ zAPhze&WenLzxRLJ+585Ql3i>!ORH3sPrewEt+XBAW--T?)Yn*0R;l0Y-2P zknjbr<<$47EkD33kV^b|y>+1*qxDn*NUx969kk03L{cE#_~i4tXF!*ZR(L7;DRn*av%h-QBUvKw_i)U;;5 zzM_3X;7C>fVZR}v4FHX(`gi-60f4T5wZGQ~Q1#FDn>5RSK-WJ57=n()H~q(am<2!U zU&_mXSoF6s{CU94`X{fK&jV)FAD8;1|7!nL|LgEC=l`q!H|laC8>S6{^Z)<=07*qo IM6N<$f|fGg0RR91 delta 485 zcmV-7zqRe0001qplF?uE5I0D+i!~oqf=ROrc2`BSnU_16w zqeRpX^};IHj&?q!)%b^n>%nkr_!_m^@p*z-)DQ4G3BXGZANp%du(}Bdwc5*iKrJ#@Bt1RM;qKE*^h$Um~Ppr_IL9;}v- z_AZcJeprl0Nh95VNC2b}|7HF3MK0cvK}`Z)J#Q4A<)q~RSLQ_X0F^n?*fGWgXd@7Q zuuT&Q7sM;CPzNARgD?cReWuvuXzJJ|5yn7kjXDJ8!Wp9vRrJB*Iz(ercMMTYOc%Hg zkv$$U6h;+4;5yi`55geeIz;@Ns`0&I9W`6pHR7i>Kl(7zj zFbqT)65C?%{r}(Amw;Lt2bK<~!b2tG=R2p6Tb8GOT40?5RpcCyDxVsI9z@<6(TwLK z5);(eY4WAuTccD?0fp^hCu#)I-C}y&c_YB-0LL@I=+cjq9vKSS$B%pdm%xmSn^_9L zR_oXtXV=jQWv71I7SiJRh19}dOJ4nlvmNmH@3C2?d#N=M=0fNM#U0(D6k^I0=Yx#AX q0Ll7?0Lc4icOi+f!*^);sUa)~|o^r)je6hlAOz!DKdos;6WTl8zE^WM71- ziolw(cuQ*K;AYCD7Sql_xVP`Bz_p@MyTuHSrqGs>Idq(}zlu)oJ$pQ+GaL|c=md8N zXBMMw%L4X(+7Qz1AY?o=W1 z&fyj;;4$zC_s9=SBh8s-nGloZ&()0#k<%r56V2ZNp@vT!msB~j36;|C)$u2vs46t( zx$aw!+9WGXLnKmikWH$ZBBnBvLA6yIice^5ab0Z?!qQs$BOW)20tYLDYXm#K8$BgZ z1CK6e%m4NDs`L*CYx+meLr*__9`^L}=i#6JjTL6&^w-g-_|tU1E&e)MiHiR?-uS@$ Z-vQg=6O3ITXTAUc002ovPDHLkV1j2>ddL6( delta 329 zcmV-P0k;0#0+Iue7zqRe0001qplF?uErQ$b3^KoFcC^dHs-2!{bz>g>tDI`&wx53Fd$vMv@&~9;;F%4L(w#*8oZhwvqt8MjSS=WD< z;e^4!Cj~_49!^4>9~pY8v!UQtV%2ZX_}n$R;*>jEUDXS|6IiZFDtV9RWf|m#Ui-!f zK&^>V5r*_7{sW+iQM($0Vp5Y!>xnFig?aEo0e5MTQ}K8digbZ^!+VU_?Re%0tNW^( z32HlkjdNEh?39Kn9$$AMO4u)QV3#$6_uI$IDDocbej~2`yErsD4hOk3h>9?=R0PN$ b^aFeVBNn46KRlAbJ zAPh@P6)GUtWvg^dN*N6kg%6 zuYBlO5vt8%gHxZzihy!%2(qtk?SvK??6U<8mY?F9SzCu%Y8`TP5iIl21uNW>QoZV# zQ77oXi=!|^HKz`Lz5++zGN%qE!&$;~l2@iiVqnLsoLE)P4R=8T(i9NrLjh3g7T_10p^86!r?$2_GlSAGV~+p77zbNv!UuNmM;X z+T3!flT~b`9~!4r6MF_6!54`r$eS5o@c;3P0j%qY{v?@yy=Uw=y1T>P6F#}y?L9H> z?zZPC-}#5T@3wik`S|F)lBW#mQZF! zI3?VD7MeBSZp`kUB>KCa+>Oi_-`U-RkQ+*Jcbc@06l%@gXmK_tNAnr(ZvDjnD7n`) so_vXA&^mfO$KkD_g+PB|W&uq7hWt+lb=fG%l&Wf6b`L^d1@|_*?M9!% zSbP(G8q0H{uSQN2eKnBG^i_;{PXB|8G|uU-8E?ue^fl8rz*ywLdK+cc4mG9(kkH?{ zu@5|0Nc7tzkaWO6-=@wWkq7!Z2}59_KL{Q!Wn%i)$)-0&5}3Z-avpBNGWjUuY-R0O mAd_1zI#Vu-Ae46{!ht_m3gfJY!Qd7E0000R7i={l);X} zAPhvS7z`!K%>V!G+N7z9V$#FzN-c+6{J>+9yxZ-o7Wt;$8m}NWD|ToO?9g@nDgoJW z86mZM(ll=YZAop-CZX4pA(E$fn;?;=xzAgi|eX-hjJODoc`IMEFdkgr$dag^Mje%AwbON-E+}b1K zsfFF)R!Z4=Mym%I5~>Fj5#$h1h}}^Ftd0oCM!*Ni;If0A(gTl{lB`~dK-8IoZVL<#@^002ovPDHLkV1meqnVSFr delta 357 zcmV-r0h<1)1Fr*+7zqRe0001qplF?uE;SA;`<5U&b{!0muP9ryj(+p}quw_oR7A71dcG-FJUY{qOCB*kF7Aok4S*9?*wu4cRzjr`qtGUiV$N200000NkvXXu0mjf DX!WE< diff --git a/graphics/pokemon/pichu/icon.png b/graphics/pokemon/pichu/icon.png index 5e3de4b990dd7ebd579fc7e16967388d62b3ed2b..d29fa7fb4a5774895e43e3791ebff8b16c4344af 100644 GIT binary patch delta 213 zcmV;`04o2A0-yqr7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{So=HSOR7i>Kl)(yy zFbsnQ57Op$dH=U{9UFKs_97@h%QfHDwH;ZOsmDcTKuHLegrMP`AOQB)T!Iy_uqbQQ z8o?M$0SEPvF|s{wUpZP4Zy>i#1GFCyzNo=^o_!L6aMG<|qS4}RZH%f$ zv+ovGD|q%PvTrps^(UGE()~{bh}y~s5SbsR08xV&0U|fwrkt$wg?u;wLA4K;vDh$% P00000NkvXXu0mjfI2=^% delta 191 zcmV;w06_ns0*V5V7zqRe0001qplF?uE}M002ovPDHLkV1h#-PqF|2 diff --git a/graphics/pokemon/politoed/icon.png b/graphics/pokemon/politoed/icon.png index 8ea308aa35561da41df3bbb6a96292d8734c5beb..ffc6a38a4862c5af1e2b0eb16ab7a97faf349094 100644 GIT binary patch delta 324 zcmV-K0lWT>1C9fb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S3`s;mR7i>Kl(DkJ zAP7Y>226o+|Nn0nG+Ql@ZfD-SrAP{nf+n2f_=f?Y&bQVo0!mrVt01JkQ46?k2 zO%T~Vd74!vA(U5tsO=LH>NO0oW}_`&E18WTPHuv9kg!mvxXGbT*fYCqBL@5+oPLe{ zD;SY~^1D=(ze`oX<8=IDk8hc;1+onCpqPdyKm2Wh;6Whfk6sGI{Lz;{=3D~#oIUdg zVa_>Z8{%`i-5qel{qW z(2cgC;iQd2VYKZ+3q?Xu)CPj;F`IJX0}(TB`NVUB*DQe;kMWk>vB2*!%c#m=c6xuu zgjElhPfPGq`}Ip+=(!hELRLew_ET*N09C;(b^ZW&!-iClUl>-z)@QRx$`WN-loQ_l zt0vOHW897{1PgGnB;1*c3E|Jz9LJHZlmI5`npg<2U9b2 z5SdNi-|jV3gN2e^zJdA5SE1GsWY94q)bD}O##gfr7+4HL-AC_%3HWG=Qt&}^Kt6r} XtcRuKF!eK#00000NkvXXu0mjfn-rF` diff --git a/graphics/pokemon/raikou/icon.png b/graphics/pokemon/raikou/icon.png index fb0d48a5fd4a85560d166f6b4798e6f14022e100..77cc29d7e9f273f9fa110e59ebefca17e72ea8bd 100644 GIT binary patch delta 415 zcmV;Q0bu^T1nC2i7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Kl;Li} zAPj_q4HAsV_x^7?+msfkDE&EUo29C1?>IXIzT^0#1$@xY^UeX)?;JSM)gT+k=xq7@ z+;ssn%!6*~dj!BF=IPSUE@p}rBtX<7I;3Wpp&%xtq#h#jA$2{nI$klLG|Kc2nTZ69h&q&Csf3ZFTi>YeS z0X=$-m~-(!5?gPcvGlo(LMdxk)3w}n*#-#dV@YZi&7MQQgP~So2y8mv9Z;pk;R{sJ z;PI9~O#CwFi}H@}>HQzws5L-;TWp=f`%sq|J(t?;X^ee-HwNo_d*bowLi|^#U&W6j zp1F5^M1U;(I0rwD2#^gw7J#h$fb*m2@mv71@h4;wsO?&*)?;T!I1AAJqmEGPf~002ov JPDHLkV1g?G!nyze delta 499 zcmV1H1%~7zqRe0001qplF?uEbBTsNMuqqROhnJ%C>e|b7A0ALRS~*MHZ4bbfTFkE zkN?O!-bX_IX@DFFDjw!2#J~b^B+|F#AnN#RDO@DAil0sb6sC=j(W8n%3r1sYaixD$ zTpm4;QJh^zB9=S<&<#u}rL|ZV?(VhoV78`v{Dsxz=4I=(LYY%zVIgHfIxjuHt@uKV zANHCBT$Wg3>-c2++!h ze|J+Bf`kv($42?RtXMmHZn?)~cjBZXGt*1uP&kQ$f_6EjuImN5+sQX`)! zA&_Wb@|G7PTA_^xU;ro7xW^^(q{V1)?WAUz+@xMbg**KZgl p$*)H5cX>Gyl63S(ar|fB#$QG765Ki18?XQX002ovPDHLkV1oV~;Ise$ diff --git a/graphics/pokemon/sentret/icon.png b/graphics/pokemon/sentret/icon.png index 9a8040833beebacffdd0943654e2254839a3a85f..e95d75ccd41ee47c49b7d235e0371f4c8ced1ed8 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>Kl)(xE zAq+$nA%;Cn{{L^A*sZ-dku4P3(p=}ENp^ju{9c)D@;V5P*->p`oVa5z0>xlF_nWPE z#ldojp$EYLL3hAZbxjyNf;s@K=k%yG9fjo~Cas;s8t@tB8KeslCp;FmC?}+MVRHuI zn?jPutY8hyOY)y&#_|hdS9F5WVy#FBtMMt30P28dfW#8BCS#GCA$JewUuS)SVTM3b z1r334!)yeCD*{>H@DvEq!v%pbU00000 LNkvXXu0mjfdvI-t delta 245 zcmVA>07zqRe0001qplF?uEGc4!kgYsuxBq_J%Nn{jnccCa;afY#@4600000NkvXXu0mjfCZuI_ diff --git a/graphics/pokemon/slowking/icon.png b/graphics/pokemon/slowking/icon.png index c4d5bdbe7aaea3f343ee08fd1519be6600424d68..8527e8982de133801ba193d3ff892fafabecbecf 100644 GIT binary patch delta 328 zcmV-O0k{5<1Cj%f7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S5J^NqR7i>KluHi6 zFbqT+=d*Am&;4)9*rk9}r-&UAxN5qX7spPT*|uK{#B-q+2;VgVn<^$bz*s_c|C%l%0zCm@?8r9}{?_HS%tBoYk zh)k}N>*6V#z{pE~lmSly)UhB21#o1cNDn1Caxe7zqRe0001qplF?uE`Kpum=@#jSH2|ojR40+w|$~kbXYK{<5sK zqccnw(-DF5n;`(~_3^bK_ZQo8z90=rQyV_R2quQlO+uDjIp_15M*wxrXNCagG$wzB zY-PR_mkE7`T)7Gv1|fU12!mh3kez%G#zjBi zVGu^7L=Tmr+M!*KLCI4 Z$0yk{#oQP6d}ROt002ovPDHLkV1hQBl#~Df diff --git a/graphics/pokemon/steelix/icon.png b/graphics/pokemon/steelix/icon.png index 2cceec69a9d8d9c226c867af9b9af1f441ef2c62..defe78d7d6f53947f5eb7f13cd17b0a6bfac85e1 100644 GIT binary patch delta 409 zcmV;K0cQTX1LFgb7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SVM#C;w=qAF#4iw)=X`r-mU=&fOA6}lVHY;8d$mN$i2xm%MO zVZgP}xy+b`e~{}&Y=wX1VWMsk8e$(;fw6VCvr?x$^hCllKYHy99m@qX^Q<11Oyq z&$E|5p;W1Uk<}@&A8)kuVE@WWwBd00Aa_BFqI4Ya7DoneKNY z%mt7sKqgEE$dWJ_AWy<1fIJEF4v=@kh#(0di7JAibA5FmR4+eHvSyt1Gyi{%wQ`B2>Nzu?0!&{7-D_kEce00000NkvXXu0mjf DU8c7* delta 368 zcmV-$0gwLU1G)o{7zqRe0001qplF?uE9^;yXB#>jIBIST(8$+H_@0MO4fx0Lj_l%MKI_?1y-U02sMGVYmsG5M@ z#A=q7EnmTeQsq4I%0|*^K>nm)3)Th0s>;MOgIg?dcOGPVW@IPb0-702MV zqsjS3Tp-OaB{@@oE!Sn(OWWl0T#-zeYKkG8Y8(U}GIW7)t9Z+n#(!bAOv4$PDAQaa zPp4J7Jd$Ute15?`j+=5&L%>MhkAZ}o!+*v17{%}a O0000Cl-;s} zFbITe2seia@Bg-4h$cjB@6Xguwasq$$;kJ5{oG}^&L59DGlyiY$%DgK3mYVB`~F}s zu5OT~vbWY9IaAlG?E+nJ+mS8BaXkV+k$%H>KMgRmMgWnJTMLWL{fdw4u`aFKBpaY_ zsy#B2i>l;K%ymD12H%Q$%t}cucnQ1_9+8;XE2g9q>85{Fy$ZuWJZaI37NP>3xYioF z=KSQl;NaMaK+tQ=5e!vOoCAU>)mm`NA$lKGUH21512u;@jshw|N1@)>#eqJ(6a?X8 z-L3}zZ0d zNc?O;Dq$N7#oofq5d|b8wfZonn2mBVItIG5 zEm*}5F%3r_Z~*K*oS=)d7bi^mZuKRP!iXj>ZWE~r?^)(IYkzth(}lr(&~82M&e3!h z+-aTUCE%+cxOqtO;c;g_klh;Ck{dr5K{&qkqcQ_Duj$8MueAr>gBia^00000NkvXX Hu0mjf6lB@9 diff --git a/graphics/pokemon/typhlosion/icon.png b/graphics/pokemon/typhlosion/icon.png index b69680648cb83e16a1c3ab8fb2803ec140136840..e5e5ea51c1b5912ac01717d9c2470cfc44b1e6c1 100644 GIT binary patch delta 372 zcmV-)0gL{*1HJ>07#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SJV``BR7i>Cl-sU^ zFbGA>oSIZx*#G~x2dJ8{rJ9-7A^OCUi`um;zZrPSXC*MD;DAH3$8#3FV*r5U%vl*3 znrL0D8j0BQLk+B!c7`%(nV~?kyi-h>hx}rhEp7Ks3hQnZ9lIgVg~S~OPMV;I4z z%im^zE|F6TDj>gqibpO|BB0hPQjX{dSQ@CC6Fy2`0`QO69!Egz+}=RR@Qb5Ww=NhK zaX=?IW=Juy)!Lv^Q_w`$02*OSMML;1&TMx-ufLJ|zZ;YHaBcSEar*}FAc#W_Q$c6~ ztoKY1i)C0q6Tk#QcJRmz(w&T5Aff^xH^{ZfyFiGEnY$)a7lCL#JpZRan#M-p5Quwj z7~x$YZjkS5P3HDsN=yfTm*P>8!FtBRqxY6uSQUadD$!R}kGP^Th6#Z!w zoij`$Zk=IjP!L+DIt08IO6*)s!H6d+-P#nG;H1PXOKc+;Vp-xQd2$_aghM=??>v7% zJi9&@!j_bX713C^w&m#Jm`H2~K0_Z7-P|rbkasU+BDO%@S2LnDEo~Pr;FD-c6pX+C z;-v?W8<4-n9>}%%$70}9-lai#>;SA-N|M14IpRvL+JlB_)|os|cNHA{gMjW)7Z6@l z7xfncRxDaz`uGt7-e>AEeYLNvg?U?6*-kXu{SoGB^PrlVMwq!N53$BQ{TeSfiSrj1`dSbT9{R9+eVmKRKb>n zFbI=Zz{B|9|NnLqb$3QfJC{Am(O?K^n`L>bugsjoX0rysz{ecGH6n)`sip#s80kn; zBS)&14HRHajxkjS8YCM@q^8Iq$Wj?-$VML|EUeO*sgOrpOp77ZuE!9OEbyi&<_;SI zD*6rzFyCITw)?Sv;}_c@D>wI-<9ASy0j6JVPv5r9v4W^zAy^+*T+>mC4!{~%HgZm}71b1;@+#}CZ*V)zNtolZLc-E$On+{I#r@q&d zAK&r=&uW?<$E#V_JwK$-naqcEJ*Q~l1xU~QATE{6cYXjw-rvRD_P_j~+GUa-Mxe?M z`^^vJSeYN#hw;_=|9toXOF$K=1B64K00000NkvXXu0mjf D{d}i1 delta 384 zcmV-`0e}9l1Ih!C7zqRe0001qplF?uE;f5fRlg>OqB<#?V*-&hdp*lg9~$D3^cZ z7|74-ZDo`jDxmYbJ@-7EwGTklyln+C3%U;gyTiMlJ(H_?m%G#((^1KIFZfHtjCSlu z!x(Wc5pS#=$Dp_&(^EVm3kt=Q?!G!El6?qRq(WwG_8%5K9Fs5=05v3vS0^6}z*kts zUBYdtHliUQ_c~Xn2q`Z+jAE00000j(SW From 01a12d81c78df92f38fba3b721b1e969cafa7526 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sat, 1 Apr 2023 07:48:53 +0200 Subject: [PATCH 247/290] Fix gen 3 icons --- graphics/pokemon/absol/icon.png | Bin 359 -> 382 bytes graphics/pokemon/aggron/icon.png | Bin 450 -> 489 bytes graphics/pokemon/altaria/icon.png | Bin 432 -> 417 bytes graphics/pokemon/armaldo/icon.png | Bin 398 -> 424 bytes graphics/pokemon/beldum/icon.png | Bin 256 -> 277 bytes graphics/pokemon/cacturne/icon.png | Bin 307 -> 328 bytes graphics/pokemon/castform/icon.png | Bin 242 -> 255 bytes graphics/pokemon/chimecho/icon.png | Bin 282 -> 271 bytes graphics/pokemon/combusken/icon.png | Bin 367 -> 371 bytes graphics/pokemon/exploud/icon.png | Bin 411 -> 421 bytes graphics/pokemon/flygon/icon.png | Bin 432 -> 451 bytes graphics/pokemon/groudon/icon.png | Bin 414 -> 437 bytes graphics/pokemon/huntail/icon.png | Bin 378 -> 391 bytes graphics/pokemon/lairon/icon.png | Bin 377 -> 392 bytes graphics/pokemon/latias/icon.png | Bin 360 -> 368 bytes graphics/pokemon/latios/icon.png | Bin 371 -> 379 bytes graphics/pokemon/lileep/icon.png | Bin 353 -> 371 bytes graphics/pokemon/manectric/icon.png | Bin 309 -> 339 bytes graphics/pokemon/mawile/icon.png | Bin 424 -> 410 bytes graphics/pokemon/medicham/icon.png | Bin 320 -> 336 bytes graphics/pokemon/metang/icon.png | Bin 420 -> 416 bytes graphics/pokemon/milotic/icon.png | Bin 495 -> 478 bytes graphics/pokemon/pelipper/icon.png | Bin 391 -> 406 bytes graphics/pokemon/salamence/icon.png | Bin 410 -> 420 bytes graphics/pokemon/seviper/icon.png | Bin 375 -> 397 bytes graphics/pokemon/sharpedo/icon.png | Bin 353 -> 366 bytes graphics/pokemon/shiftry/icon.png | Bin 438 -> 459 bytes graphics/pokemon/slakoth/icon.png | Bin 349 -> 364 bytes graphics/pokemon/solrock/icon.png | Bin 293 -> 307 bytes graphics/pokemon/swablu/icon.png | Bin 320 -> 336 bytes graphics/pokemon/swalot/icon.png | Bin 293 -> 311 bytes graphics/pokemon/tropius/icon.png | Bin 426 -> 442 bytes graphics/pokemon/wailord/icon.png | Bin 362 -> 360 bytes graphics/pokemon/wynaut/icon.png | Bin 397 -> 353 bytes graphics/pokemon/zangoose/icon.png | Bin 430 -> 412 bytes 35 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/absol/icon.png b/graphics/pokemon/absol/icon.png index 681d98d1d9ee147ce1156b4d82d37364ec483805..d58d208a7bd322beb9e549793c41994940842ec9 100644 GIT binary patch delta 308 zcmV-40n7g90{#M!7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S{7FPXR7i>Kl+6yq zFbIPikb1=L|F*+nKTV+NZJV^Ehpw`R32DD=`?UpNEw{EZP`=Vr$ypzI@WjzzfT}(% zQ$?6j_9ZA2-JsgKJ=s?`yH$G1WzkppqgPNw1fT{a#-O!$`Op~&%3oDck z=DIE|CXx&rW!GJQle$9eQhFIqELmVN2jQvES!6s6{<|=^(skhwQR)5PQM`IR%qV!T z5m9x3*h|sf!PR=9g#osFwd?Tzn%4UPG8{_=$V89?kf~$>NI{qpAm@evNFqo9kdYwY z2#}HwM}TlQ#pnG3NGC{fcz1xD^WhGV1s@o{<^w*$ha0LBC>14yeVn=g0000V>>3`TteE9!otdJce! z_rq;^?{@YHW27!|lk(598ddd*BJBx!%sfP^O5yY6pK% zlvp|t*piy7t#8CTlXxZ50yzOl1!%0H6{MakbWAn%Er6Rrv>sY+M?S$$v0gqW5LXxr zr$6&g>i5FrM5-{LX{QQPGAzP0gR(FqIE2BiIhKUk^6AeMrt>2SBh8N_40e8;!VG?# j!i;{1PJZB1{rCnvMYHcGBn(Rc000R9NkvXXu0mjfvp0f2 diff --git a/graphics/pokemon/aggron/icon.png b/graphics/pokemon/aggron/icon.png index 5410a384f66a11a93a0fd673bf3011fba516e237..3eaa0605429f37a3e12194d559d8ac7ee5835fff 100644 GIT binary patch delta 415 zcmV;Q0bu^Z1L*^h7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SXGugsR7i>Klv|d= zAPhreGyUm@z5m^gBtnV_(=!VQr_Wf(kC1yD&l)Q;_13T437TiNhM+foZ50-XS>y7Z z!iOS~in}Bc){D73?s<~d5so6<>D7vY+nB)2U2(VBqKDn==Y8L&=BZ&13K(%H)R|oZT$MrzA{0rR;%p%Mc21;qgOVVaRxQv8irL^S z2Zho+I1W@z@j7leST-a~R)T+ZoF)NVZ2TQol5k$S$}DL^TntcJ$QXBw+oPmFAJ(@r zjyub76ay%NM-u}2FkG7$=amxUiP@drQSRnMtzO^a&-!zIJpj4f{|%7$43L>1CqUja zKo){f@h*Zw5MD#rA&l`zO$7N62C+ErM=>B_^h|}FgwdawL5d3?oiO46zkC1y002ov JPDHLkV1jOLw6_2N delta 376 zcmV-;0f+wS1HuE47zqRe0001qplF?uERdMw}RrVNVne(V?3#wEc>xdv`?3`+m@$R!4SQ$%+m>zN}AX@!JXJ=v;sA zvzEtkJ){LI<^y0IbaPCU0NSqToqK(B;7PpiwrV~ zv%qb((!YQaL9~NWxCwgjF#_;f^d5+h7%x1~4n}+km`FD;;zP0cDCrS|`1k|niH{#P W=JXOj^Ebr+0000Kl)fJb400rkd(7 zG!qfdw_z+|UdSXgSQF2WTcS(TnLp6+QhIP)-fGoh5Uqg)dR6R@x`AkMcmg7{2qo|k zIfz`~aie3Y0s|?3Vyr)isx3PCHh4IeB39jiB-m%97eAw8*>k=$cN>H{)_UR@nGBW(COcehfe=y zJUr-6#>0vJcs!iwPw;=zALD-7zqRe0001qplF?uEWrrY`=u z!5GaUgX%&hF&w6s+KqVAI!Yd07Y}79tBwGOW9*0!00*^zyq2J)}3HWcclE24mO#lD@07*qoM6N<$ Eg89y=U;qFB diff --git a/graphics/pokemon/armaldo/icon.png b/graphics/pokemon/armaldo/icon.png index 5dba6557dfd99f42185a3475fa7890203035ed36..1277dbbbe0eeeafab82fbcdfe199d901c8640db0 100644 GIT binary patch delta 350 zcmV-k0iphm1E>R#7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SCP_p=R7i>Kl+A9# zKnR5GEJ(XPFz^4ioxzdX{mJG~_0(|4A&gulN0e4?Y!2ESZI7;z_0RGIESmr5EeU^_G9S-$&Z><95S}V|$wtA1Nd1eW?vD&f( zIM1j+HATx3n9T5h-&Xm&`mh8&X)B${bP>_Q)XKcuDRREr_!}@(DSkF!N4hd?!a^RX z=nb$NABq~RoNuG{Bjn_)sy?}~Q6SAj=EBpyuU`5+Jur+ns^nJ{UMi?5=4JbZZa>aX z{4)M6K&JB_0WzQe2#^JfdVq}QfAj#sc>WVWhV!2Qf;rDU6iVAm wVTl_clR|qFA8vqb`QUp#2q1et;1Brl1-P9W1cPm{Qvd(}07*qoM6N<$g1*?Gz5oCK delta 324 zcmV-K0lWUF1C9fb7zqRe0001qplF?uE-%O;WdsO5AO$if7^~hNfs=Qf${)#)g33Np6V)#t66`i zgk843YlD|D{bNf&=i#^&JzKf+-@4~-Ed}T zUH-g|kEzlRa>gP6N}%*r5fBK+_r@!*tdu5g3DvB+^=ckyZq>i5-v*O72$;k{z$6X= zCUF?Ruy9CVgoA)#BLgMo1Pxcx5YRB?Pa6xpTrGkz6u~4P9DUetK5*e9@WO}wfsZdY WW7TG6iTiE<0000KlQ9m( zFbG4-!W8WL-?k>opF)_cuXu{;7elCco~sXvQtQVUqa!FktRZMpL{mmB2oQ3zvjrZ3 z*2_f++Cg}5QYsfI30SYPO4NytOUXkCa8!2^1D)?fPJLQ zNorPl0V{tZoCD7(CYyhFVEg*Z;16jeKqWU;LmE^Olf~H~;_u07*qoM6N<$ Ef>!xdTmS$7 delta 181 zcmV;m080Or0)PUL7zqRe0001qplF?uE=>YOI(%^ymxAQo1gAZwq#?zUm|+8&$ww2??D3q)FG*eV@Tp-A3^JMgme)* zHQ>rc_PHP)Sg3>LmeYZ0JwaVw>?&hEGqyR1GjIpK_`rTny;UFxNgmdh%>pKUPjeyZ ji<`^*s{Zfr!FPBAu?m|lP^s{a00000NkvXXu0mjf>!47O diff --git a/graphics/pokemon/cacturne/icon.png b/graphics/pokemon/cacturne/icon.png index fd1bb1d5fef7ac0963c678a67a2ebc54143c0411..8dd74b291de3ba24b86975590a9f2f23ee92edb2 100644 GIT binary patch delta 253 zcmV}c87#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S#z{m$R7i>KlsgW? zFbqRI$U`%T_rGmLxkV8`l&36djBI?M^>H}HEf03O^#she#73Xq5r75YH37=httR5` zkQN|_@inmQq;@gqN2=@wl(0_afK*>NRHI-U?ng5Tu!K&J%DmY{E{d~&7$x=TlcywD zAySn@)IbB5M3~H64^VG3TA&sS(N!3hhq%FQSu~SEmeD;+aNF&>&0Rm|36MVt5NrY@ z=hOuV>=YnXm!|+x|NqQUod-Hm;y+onf5tn+1dD33UsWl7KC*{<u+a{q QMgRZ+07*qoM6N<$f>IqpjQ{`u diff --git a/graphics/pokemon/chimecho/icon.png b/graphics/pokemon/chimecho/icon.png index f5480bc356735faec3595cb18fc51559907b11b3..d4d6b644855a35c3824edb6c48602090f8d41492 100644 GIT binary patch delta 196 zcmV;#06YJh0*?Za7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SjY&j7R7i>Kl)(zX zAPhs5*o)Nm|NnOF*x1EZ*l7a;ddaia2rXsnjZ`)F8?}rupE5!rRzVOE3P40`4+v#k z;whmZ_k2ZwS0@Jd0O0CPa5v4HFrrrOV+6j($fhyB;6`*Ac6R;(QsN9N{Vps3CoG2S y9dIH{!ihM^hgd};u}EU;BiaMxPXlC6kU$4pDht($A3YfW0000KltB`M zFbG8xC9uoC|7}Z1#;PH-n|9GDI&OFpQ0Ardn*kuoCWr(8MDr5VfUwxTBEV88$SYB( zN^k;-M)Z1*Wdr3cfbtq3&FdI0fEHDOT>+X2R3e>ExL6qn*ct)uO;Vi*Z0(5W95nq7 z99^~ogK@^>VyD!9fy{GO=3-syM6}-lFxwz{X*<|A2T-Cfgc4JMPN1!nZJm?PxpfX% zZsiyZHAj2hzFMC8yH|?y|FHNAL_00008NkvXXu0mjf5^H?A delta 293 zcmV+=0owla0`CHl7zqRe0001qplF?uEzKCKi@yupE17~#QN-SjlOSOqf)4L zW$j~7T34x>YtqCCh5>aZ0GTTI20SV7hIAVN<_<4gD_v=~I@H-ZjG>3sCI{?Ez=D7M zFvjvd#~WG$39yl>YnlSbo=8HVM|`0)Xc8JZDpK{$go00000NkvXXu0mjfeCUL8 diff --git a/graphics/pokemon/exploud/icon.png b/graphics/pokemon/exploud/icon.png index f803aecaba4454021e3dd855ead8ce245332fbf3..3cb142dde2afcdf4c9b5a440a7e9c5c73e685f72 100644 GIT binary patch delta 347 zcmV-h0i^z$1Em9y7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SBS}O-R7i>KR9%n5 zAPk#?BNZg@|NplahkgL-`gBisOSM+3UB?8H*X!>E$!C1a`GG;UoE{j=+#Jsz)6nQ} z-uOX;t(jTiw*+o51%h-(IB^5J<%z}v^?MVxWMb(!V6x(v>|Uw36G{n@oV+5Ap9EhZ z^nGC`Y?&@I6Z|!QiGTqL2L{~q&Lf3ailX1RLbq+APzDitb`kVnk5+4?mkBM_J1IaC zRUvgW9Q7I`c0z-KqrzTRClrt734(xSM_jo?$N+6t2oa<@5*7i5uToR7o?00000NkvXXu0mjfDwmpC diff --git a/graphics/pokemon/flygon/icon.png b/graphics/pokemon/flygon/icon.png index 10788b2253f8662bd11c6dcecee0d9b9806a1e9b..f0c4e165ad0abe88a8650002f43c6e025399f79a 100644 GIT binary patch delta 377 zcmV-<0fzpt1H%K57#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SK}keGR7i>KltGq+ zFbG6_uR&%5b^qHAkf;Q8cC%|-blUnMh*I13jfVhmte#ae3=!x1eAfrS0R-0zNMcBV+0)lDUMQl{d-_u!uk~4vUJUL{pVZp{EzdXpFOH#n z>vT?KHIVKwIT+PIdMeLQ3?x7N)nQN##N}PEI!rYXNK77B7Kf<@l6nBE!(0Y(0*l36 z1~T+`rggec14$r!qD}8%AmI<`BizUPG!V_=?!ac#KvK?i%TNr&r-%MD5T>tz^!k4R XSMD5N-7zqRe0001qplF?uEArWj zjxb-0DJx4XCECr9C3YQc>j)~7{oTG??qsp;D`Z&MevF-nG}v8I@n8rN|1m%$V3zQf zfmsRihJjgd5uSk|?UO|j7|_+22x3xTMpaEr5Ca46!AJx}V4}fgAObTgWtK%pU`BPY zLoy%$LzjaAxpX!I(-^xMF98^`Fv!2a4EO*{@l?S40)J=pXj+Z*SO5S307*qoM6N<$ Ef?vO(Z2$lO diff --git a/graphics/pokemon/groudon/icon.png b/graphics/pokemon/groudon/icon.png index 1c237537b6e80268033616117c154b238987cf41..69326145ca14df7079d5b2fd4884aca7ccb0b988 100644 GIT binary patch delta 363 zcmV-x0hIop1GNK?7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SGf6~2R7i>KRKa$G zFbpI1>fG%A|JzC;9V-NS*n8Ur=N2i7?0}Z#uB}Sz0`FR%2w8Q)sSqJ5a!#p%gV6hg zG8_~xiSRslsnB{r!_(alPFBL>D?3rE4!08qF6d#^h>Ng|2GTU(fU1cA`rBx#S@V{_ zNJzBfBqY~hu$l;e#Z7vN)T-g3wU$7Mb6!SI!IB$K4jHP@NGfO?;;>`lED@3|Kuwq6 zytx>*;;`wo$fH(8jT{Qb3$TGnCSFdj@;c8ROjfW1oRdUiVyqyR#W<3A^E z{2U;jNq@6v*XBB+IQ{;p^P1oZ13qm3;D?*8@Vl<+4v^(a{{p0bA0TxI5axpdgpMZx zqQFpqaOlQgbQd5o0^~a%b^*eCP=IXtun!PZfPBaYCCFdr!xM;9Bz2R}+P(k)002ov JPDHLkV1nCoryu|T delta 340 zcmV-a0jvJC1D*qr7zqRe0001qplF?uEbkfsv7$QeD~6?eTbQ#mCOrl!t2v}KKf?0I0vt?q}Eng8%0trih4-u4zYiI z8y&;l!^sax&jmHjoFm}ihtN#9>$)xqZaA1E>6JUem8BIV4ea1`6H3WoD<-YAjR|wO zC+t4kl3DR&jp^je53ef_0BRR2H$7<>;5R$y?7z+l>d2^@h@$f^|>7lB#$Sb-sP mIWK%*1tyc}Eg$$vK0W}U7&xn8e>2|z0000T7#0Wv0000?P=%ZT0004VQb$4nuFf3kks(BXNQv!KL9&BT28dR{ZW1v>UT(KvT^4W-Z7AZ50s~YL%E!_ZJFc3U5h@z^3!7)FrhM6te}3#2@xKGfpBraE>NtD=0000< KMNUMnLSTaK%ZDle delta 299 zcmV+`0o4A71Ns7x7zqRe0001qplF?uE<}Ggjn$H|Zo?oDhIxZ~n{=t#hp_}pgNI0F zvE+x#;DxxGw<|*=cRGwzDJ*el-2{yL0#87IEp}$O}%C2_N>n zqcMA%Nq6>CW;ZFr_0+3ui(_yRneZ#BhOH|&_KynI)4BjASD@h&kB{;I28;dO5`jsM x2uwO70+UiU0w(+c297f@w0zZ!!>|`M4&SJl>^qAptQ7zN002ovPDHLkV1o5zi-Z6G diff --git a/graphics/pokemon/lairon/icon.png b/graphics/pokemon/lairon/icon.png index 24bea9dfdc19b75eda89cf7eab1160c64b737ec0..27cb6edaa3edc97fb4879a499c624b6cf7e6129d 100644 GIT binary patch delta 318 zcmV-E0m1(H0*C{U7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S21!IgR7i>KRLc&- zAPk$6?y^Jt|9?9N_5#9oowOmLR@gCw);^v7<68&W=MJPhbJn;3Hw)9O7{ZML;W-xu zX#zxWhhx>CmPIhh2o`(RP<`UoFcQqSL7)*LEV}>#gorPM$P;L(<06C}13>~=Zz(Sv z=F=A0TiaNLv0g=g_Ndk4u-rflai%Wv2nWxWr*n$Um4GIkt?JsA52p4JL8+s-=YH3% ziXOiG+z;YA{6BtWeEJW1EbIfMxu4qrxw(HEAP@KN0_4U0Wq=IsuL5LnKZ^hv+>ata z2KS=~kjeeXPUir5y1&OmEN$G}j}{A|D<-?n_=Xd7A6``3Bh!OOm QNdN!<07*qoM6N<$f=n5bbN~PV delta 303 zcmV+~0nq-41Nj1w7zqRe0001qplF?uEb^l5JmR}Xx60onfO0`LNm7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S?ny*JR7i>Kl)(9w3EuziffQF4vdSG^rJ51cgN3OYucK6u8 z&3#a?&QvzY#W`PA<(qLS*ynORomYKW|B8Rdr}6Iuv-oevP)y_B{~%`Z&*@ypKXEs> sZ}G4BH=Yc;_>cIox#E9V{XYIrI?xmpZJVDo00000NkvWtM6N<$g2Wh&pa1{> delta 286 zcmV+(0pb4e0_Xye7zqRe0001qplF?uE_YWyJR_H+o z1^pC5AeJnfIgYMU7ivPAZI2+iA`dQD%N*bJd3CSnin>)p_G5l zP0U;`O=+Zov%Ja}%0NN2)lK)gt>;v)ck6^HA}*O06@^7wLdH6UfR z+*RfFId*-IOo~FXa4Kz9!vvVAP6qoM>mwcPjX(zrybe|vuLA)!)d6HL%%}rM`~OY{ kP|OPBbQojuzdF1Cj&rAgQhtX!000UA07*qoM6N<$f}(DB?*IS* diff --git a/graphics/pokemon/latios/icon.png b/graphics/pokemon/latios/icon.png index 95590eb52d691e35fa7589f62be39556394a1423..d63fb4710ea47b6b753866887a8244a9edbe6765 100644 GIT binary patch delta 305 zcmV-10nYyO0{a4x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S`AI}UR7i>KRLc&7 zKnOID7)ToC|NpkIt6jPeo1VN#^q@1sfXr^&6MqMAfyGU{WPq@N*8~t5z}yj9NvN`o zxSY?hm*_xfxL4Zd;00000NkvXXu0mjf DxTcXS delta 297 zcmV+^0oMNe0`mfp7zqRe0001qplF?uEjok>or|C2$rgY&TmZ< zTwqD9-QJIv<~ej_0ajIZ(&tsSKpfA#ai1xEKmLG&j|2x_5pnS52@W2Zh=X7UOvGUr v_lN@<|EMDl=V96&2QWHL!Qo*4Ar2KE6b-iBKvW{~00000NkvXXu0mjfO^$(g diff --git a/graphics/pokemon/lileep/icon.png b/graphics/pokemon/lileep/icon.png index 0f3132ed4324b7ba57a130578d50298868ff7684..034453bf99a581d3296221cf8b69cebb7edf5866 100644 GIT binary patch delta 297 zcmV+^0oMNE0`mfp7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S@kvBMR7i>Kl)(}#3EuI^rHxrRYZzribB}T?tmVJKm`1! z@01M;gY8D7_i0dnr{l0=ILmTfvbSIYDMdJr=#JKyvCzE^6`rjF0pZ|d&JU}2>bL4} zm^uPvcX@AsgqL>&NN{RQr_1-pe0Tu`)fMJ^$>K)<00008NkvXXu0mjfpyGl~ delta 279 zcmV+y0qFko0^tIX7zqRe0001qplF?uE`OdZu6fZ>@sswQBn`58>Wq(Qu(ypSfPKu~_FKv2F6 d0r)B(FB)9Ax(fW5l>h($07*qoM6LruV1h=-ev<$I diff --git a/graphics/pokemon/manectric/icon.png b/graphics/pokemon/manectric/icon.png index 5379bbafa1a5816567134eeee8a9cec1564b2420..5d7f3e95085295a66da64031dfa1d0b694f7661b 100644 GIT binary patch delta 264 zcmV+j0r&p30@DJJ7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S(Md!>R7i>Kl(7!O zAPhvK23H;|?*IR`XCP4p4lEry;4GEyaW*#faqJiZSm+{i0+MC`XfOjHS<;mw;z0ER zU;#mZdL<&D88kpg0!0-T0+t&AuBti!fvWZd0ezq9IdY;!-&EJne3~bM8MN;yn`jKy zsY+e=^@N$KpQmnT-qT?$K)FaR1`>{qiF0lSA;HpJZYjcXRH9rm94o8vEAq!{=+kXc zl0O*mAlS>v!{k8{i)Xod*gJj`dx7i)@(t7lg2%B{0`*@U=-$r%+z%g^%M?*AMLQz^ O0000C^u&>rVA)GOy))-*aC@&KR6%mY zFbE6D#dti{|9@LBb~2&hnI76+mc49NG7+q$2&K^3$+uCQM}xwp(+M~!M!-e#rCe1&#{j8FYfw-d^rsg= z^iKt&l<>y2^vqy?1T%~sUD_1mc!*=-g+0UYHgOq~-|razf-O&nlrcJWr*JI}g0l|l zT0GCX59zVFSiR#7zqRe0001qplF?uEB&9- zQCDt%19VM5dkN4m5LT{dlf>!RDk+DK0j8OoZTMLY-P&D48G949DSIIgOedP_RW98 z1iFeVh{%J__pA|!=8tH7ha%eI;wpF`4f4}K;s%awZb^9 z;LO~5#qDZ}KgRlR7o^p`Q%k}=EOY?Lpfu*ZTl&F2S0k2Z7+f&SwcwoUIdU5!gL)H5 zw%IDU-_^(1v~~6al)Rv6o)D&DzE(<)hWbwtMlg81Ni2*NDF^WABiUTZ)_x#Zn*FF? w2;77bDfI~)y&eiO`jLgXuECGRjDF$AH{YYAwF{lytpET307*qoM6N<$f=#`tF#rGn diff --git a/graphics/pokemon/medicham/icon.png b/graphics/pokemon/medicham/icon.png index 9e4bbc27cd9c616db92cf7c00ad1f3646cc1e121..79883928382f12697a7bf1a61a362e78390a600c 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>Kl(7!O zFbG5=2n-(J|Npj!ld7o#v|TDy4HDBmgADd9%b$k(3w?~9@S!c>*6NN1)&P(ZWeFUY zNfdzVEFfhG06JwY31UUCmR+2g&6&zs1;9*X<+Oc-Uf(j(YaK@;nK$wb7zKhJfgqC> zZbH0@Z?{R?2(2+>ZLqnnDibKTA*w63Athj{hJ8r0aEt-#=$?!(^{DPlGJ;c;E8d99 zKz_hL=AUQ`WOtC=KvKXC29iQg29kfThk@h{b1;y?VZLS{ANs=${ZJ6B-nDU}00000 LNkvXXu0mjf*uiay delta 245 zcmVA>07zqRe0001qplF?uExpBhc?P z=!sN>cSN!%R79?BCGf8HG85+I+LJtjS!XrCbjIphOk^L>0$aHsY_Q1YmANLiOOavm znF2mdmW-JwbDlb4aSfC!r-vyvlq=9|eXi#Zmr}nFgX(NZEh1nz20ya?R+#&*Xkj4X vK^Os!4`Bovg~3=DVbCayH0U#7-uB}L1*nB&s4Sd$00000NkvXXu0mjf^SEfF diff --git a/graphics/pokemon/metang/icon.png b/graphics/pokemon/metang/icon.png index 3916b65310dcfb481570e48999f2224376698704..8d27afff4f3f024b87a3046a24b7bb1bce7105d5 100644 GIT binary patch delta 342 zcmV-c0jd6^1E2$t7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S9!W$&R7i>KlfjOI zFbqWNMB7KnKjbMNTc6V*-r%-k&X6GaGtxYvd_PC!?gqn`~ zLabTaMqv{3M{5j-i&t<3;mLqv59%1~NX#X8=_LXAR&)5W@49d#=BL8~uB#zw}P^m)@!V(mT~Z^v?7(f9bvIe@0gQN4+ogpN}%? ozv?~df1&rN|E1oC{{KzyABol-SrbkFW&i*H07*qoM6N<$g7YM$bN~PV delta 346 zcmV-g0j2(+1Ed3x7zqRe0001qplF?uEV%HdKV9EmD*Z7r63`W=k<0RB}W%};j(0gY+?AUN?x6r$SC z7@S2alrWJyahVpW5Um01ro6c&@zw~cGE>qk5?|&kkUW!0GGCP&@Jp}urBbR6mmYt- zRXhr>T9ucVw*{QKA&NiVWgR}z(nA=XnyYTU1KWG1W*$srL5uk|D{oSf=~nd{fSzl8 zW?i2cfIVl7FirL^Mk0cdiQ`fLM!_tAag$pCoZ{93FkI{_fC&D2{i*}GI#iAhSh+e# zTL-vvTLKl-rJj zFbqVInu}zmp8x;b`Vt^c!b7FiKGmhr%7bl&XjSA}y6C?{9 zh%=f2MK6-D8fmBiGpM+kI;AL58(k8Qx!RMcLi;DTbSP0h{C!9p9V0%Zg^sDgJS`mb zbSZ!-mSy8M6xgEEF2@q+Ci~Ad|BHW$zXwRf!wQfM9wI<AoAf0Kzsl$;~}c)5IO_^0000(S)peRr|#CVy}>fS;Qr(1W9$!CWZ>3o zFbrB$ZxtN7wDWf*jBVP-9FPDz=}_=dc$a#NjWVHUUUWPi46jyO?V#`8s1rzg(&&FJ zUhI^FJE@+nWAJ`FiexiN8Bt(?mwgu6dmHhL7c>mW=F?8)+-12;UE6Tr4ocb)ZLIB3 z6dRy1pi%wK8h+pd?YLUKm)68kJ{r25I*qbX4hluCaF!AU6M3OBGz z58Dp{=sfdbl^Y&32})-^h7Gx1Pni$h=YZtGhgl-5i4SuNG7=xF6j${Hsk;&%=YBR~ Q4FCWD07*qoM6N<$g1a}gkpKVy diff --git a/graphics/pokemon/pelipper/icon.png b/graphics/pokemon/pelipper/icon.png index 43ae7c2760806e5b7a62b62e721aa0c4937f5644..49debae7177426b50540d81b8ad7e7846d70283b 100644 GIT binary patch delta 332 zcmV-S0ki&x1C|4j7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S6iGxuR7i>KRLc&- zFbL~HI?+r0|9?9IeFTzb(zHoC)IIcI*M$T;O*ei56pZM3o^!rb7@bnOQivcY5?ou9 z&j-8+2$Ti}%tBvSl=hZ|8KgzTUIAVV{8R<`PLyUnq$e96S~X5!Wl(z-;KEB8B9JnW zI5;fWtJFHt8d!yYya}keF>r-PY$7U(MSG=KPeCHNw&o{g5RAt7X;13nLsZBFU{aZWmKr~?GZZf0Q1a0E!1$}n}R*aO7oIus-8b_59NX7~iC z0wifZ1Udvr+J%hCvX8m?*gO~Q9eMp6Hz`u%7#xX5nh3wVy*d(KzrQ+r0Z~= ehrFh5ZvPAKY!sn-xZkG$0000b^l5JmR{nIbnZ2e8Cw zYox@z8(gPbrQ1WSv|=mT<%TIOTN~jf6Kog+E|NN#?tk%N{QVAxKQ=&A>&MWIr4e+~ zR)!X+s>n-&RRmsVQ5pUsL=ho!W=14FLpSH#6%o@raC4UE9Z|M9@p(EMiFp&Sr}KYe z6izl73(;~n7AL;cJ9jt1P;7wN=2_;|{ASG9=fyu(V>;@b(S5k%OY671`$#l`9&#p? z(vP(PJN<9wXJCLBm~`sVQ3Qs%=)jD$0`sJYR5PGjfeE#9snZ4wB9|J05!kX$z{vDS z21eDu6h;IF_rP4Rsev)F*#ToX!N4gPpT9Q(V@+8=(B7ASe+349X_e<2#XPQ#u5eU@ P00000NkvXXu0mjfISGvt diff --git a/graphics/pokemon/salamence/icon.png b/graphics/pokemon/salamence/icon.png index 16cdf981f4926a7fcc1de42ea6db07a4eefafc98..74b4ae776abf62bd8932e146f73a39b7d084fc95 100644 GIT binary patch delta 346 zcmV-g0j2($1Ed3x7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SB1uF+R7i>Kl+mt( zFbqRkD@6&4;{X5K>$FhHCN^DZZ^I7*;j=Ueo0sL*{{-sN$`7F$^h!b-kw`eOQfCC( z2o?!|xtHyhsQ3Wwq~@N8OQ7*5V^f1yn$w*46+W(d{KSzm)zy zNkrckpIMn&#J&>FyAxMGL2SUaP_4cNu8ZILitYe82M9hn1_(X`$dM0IfUK*Oo(<=G sIR2WY^Z>cc2i|E5koWlz@w@r(2X0O#d0zv)&;S4c07*qoM6N<$f`03ka{vGU delta 336 zcmV-W0k8g~1DXSn7zqRe0001qplF?uER|oE3z?SfUCpzb|E~QS)-E{SM09sCrNkK zShVyzQ*9HXRDurOK%noErB62D);DY(LfO513JAJ})433{Ug|9OVEsM6v}E{3`-tM4 zp**n^tKzZCWVc$mEc|^+5HNh{@@YH-2L1o0rX);07KX>dct1K}qHD3E_ruRnT%@~! iAHdp<{dhf0&W|54S4oiKltFI9 zAPhxgb%U|wfB)OgHxmX7$yBP;MXPak@xvGk-f?{5Hv{+%sFwuLSEB9&lfroZhin9j zidYAN$N;qPGw}gr0xfU70D)Wrs`iCyisNh)k_(7gt>y}%5>zJO1l(OUdSR!9q|HE$ z5vZyQG|tK@?ipZz)65f)HVqyp_t1(ke@3id2UVl5hC~rhJDf$>tDS&j%O9^illulw zpdB^xdVL+xMnRz5T^Ft`z`N@-ZpMIW0VR()(GCVliq z^6Q`U(e$wTVb(_pV)4VQ4^`RyF!bT*&p-KL(#PqK)el1=AGdz!`ndN))5kyd!vjOD V7RotH21Wn?002ovPDHLkV1oG}lLG(% delta 301 zcmV+|0n+}B1NQ=u7zqRe0001qplF?uEZt~5I|9GFq$@z)<@a% zQAO@RD=j@KH~(?0IMFKRa2^nbbJ#f~F9nC>v3`7lr zDKDM>|J$8H$VM(@lifGB8e^QXr6ru>cxV6{U3>#1e`nYy$k}x;!KOl9W`MPiVvy-1 zC;_6TGbRoiRNgUjXp$IHq^hbjLt<2!k8!0)F(pf`iyGiZOF*5kW3MQ`CF;m_OW!Nb zP%MfIf>{-uB{YM5m(>}j1zJJ~HY%Ih*rrY5vY=_PUpOhViiXvO+B$%+)Z3OihGyFs z{_$Bn8X(vKq}28RVg?@|Ja0Zg@Oyw@)b9Z4nw#L#BSAWVOle#Ja`^x;eRcjD kVb*-8gz*4U*LGjv3*r$J8c63G*#H0l07*qoM6N<$f+je4CjbBd delta 273 zcmV+s0q*|p0^tIX7zqRe0001qplF?uE<}Ggjm?rV3c^4TMRS9>Lk^(ef~8%+0~oNj z$Vn8wO}2F#b2mXTO$-UjZnY+mWU~XJl{(#g=I{JjUJ!h>EbB=!L1%9S+LugFY(gtG zVY~@jl2M0I5R>U#0nTKOXv;;T^EO(dxH%z?n;tI8Jz68h=n;(-t`b8O0(Pl97|4B2 zp&5`qw03)HAr@J7gdIHfEXTgNl7fKwS9S`aLkj zfoc3cFr+vzh67_i2BzOL0E13(!1Sgb7&&-4VB9$^FdGI;GMV~;2i diff --git a/graphics/pokemon/shiftry/icon.png b/graphics/pokemon/shiftry/icon.png index 14b4bdab6ab77fef9955db78c56ac63f9cbb6908..3d2be13a6852587ce145da424e68055b05aea63d 100644 GIT binary patch delta 385 zcmV-{0e=3r1Iq)D7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SNl8ROR7i>KRMC#Z zAPidq1nnjH|GzyO+6}tG-Rnt zmmrJ?GY`F?95^?qp{g^Z%R@gUH{x=^bME^m5m#586_D`Qf8#Il?+xU@mj?3M|K31gj_KVP2u5vdAk5zyNE?Km zfpmqPf%F;UIratubTW`ngW=c?2119~8A#3?@UfYGHIO`gvet;Jf!zATU?An*Bi;tG fynDYG$OZZVIAI$m;pI8u00000NkvXXu0mjf{S~w| delta 364 zcmV-y0h9jA1GWQ@7zqRe0001qplF?uEbsT(VRgu+abAsWOD|^kDTxB6tf{+!i#?} z$(LdQ3tfrHG^lqLAJklu38*{9&d@MP$D+>+Rm^U5)v~Zd9J>9!=Zx`9 zPm-42qCxtb9)TZ7{z3eOFk~al)L~d9j6MHG7(DsH&}<`&J)19#&DaQIpMEP$!<;Y{ z%)%Ha3}WC5lNIj#)GWf}ZhGs-BFxHPbXFR7i>KR6z>E zFbpdV$dH5e|KH9|mo{;dj$HXahYj@?Sz_Tc|O@}3rv8wnu}@DOiS=HPJ6FVso?v<>;#%o1*L_CIjp}6><+aA z;vhDJAZJ%}Te(VqWMi2!N_W@TRyswtYpC*Er)?!R0m``bISrr2OShv%{=tJU5PqkT z9)I+X$7TO@KD_O}&WCFMRX&{dU*tn$|7kw7_MhiNV}E!&#C+)NKZ%Fl{+Mm8vHvt4 og8e7)u!Zk6iH9iv!2b|0;ztt7x(>cD00000NkvXXu0mh|f~g6I9smFU delta 274 zcmV+t0qy?m0^I_T7zqRe0001qplF?uE5m z?lPU-ZEizB!KIKWD8fic;|{NhXV4@iq5^k$`i_61*EHWXpsQ!$B}vQ_8;CC|2HGe( z#=ODw=r$u0W&#-CJcWeB!9gEnV3eMD?~ydH&1i4Z46bN^kZz^N8F@k$OJt%KI$nO* z>&){wp6&-yMQZcT=`e|%)NWgL`aV3<_gLDiAB4Al)(;NoQU~*cVhz%)!@`e0(_!I< znhsL?@zkOA!*!_qa2+Z?Tn8M=8E_qhLuunWSe;NJvkscLD-qWL(r%>#wCm4~Yw)T0 Y2M{cy3}ioYx&QzG07*qoM6N<$f^*Y+ng9R* diff --git a/graphics/pokemon/solrock/icon.png b/graphics/pokemon/solrock/icon.png index 4a0410cb55d9afd00e0f985a84ea7bedf5bcdfd3..07a416c283246b82975a468c69a7bf27924f185a 100644 GIT binary patch delta 232 zcmVKlQ|N_ zFbG4#3`>XZf7{5o`yuu(Q&=qznZ;b!Q7i1?wjp2(0u|R+01QD@7C;dd2O4YuqXfKG z0+ld{KzaQJD=|u9`Y>QJ{lh#WNi>~c_)}>{qHSav7!}esF>3dKBVES0x>r~ME!=&S z)YX}cr6*^J=OeR64-zi@v>`PKN%qq(bnc+`VX7TbeUv>GE1%z?AHxK;e{u&L{i}2S ipE>_>IOqS(^S=SoY7gW9A5hi+0000<^TXR;HGLlNEI+_TH)F}r5fj2+>eCJyR_-ut;kL@0qLV~d90>lty2^1;- z3Jff5;5I0S%14!3g4MZ;&Xc2{p&OmZFECbaG&j$_u{MJ_*ThKU`{|%JLY*_Vm#0RT z3(Cn(*Fag3##k%r&0;2)?~yG4pK0`w=htA-GlF~A3BGm_=9tJ06w0G U<5S@u{Qv*}07*qoM6N<$g8B+wZ2$lO diff --git a/graphics/pokemon/swablu/icon.png b/graphics/pokemon/swablu/icon.png index c1aa25e996421e92170246dfeb4833486e3a8b7e..46be1f4033f1585999dd75f3f8680e96850c0187 100644 GIT binary patch delta 261 zcmV+g0s8*H0?-1G7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S&PhZ;R7i>KlsgW? zFbqQ-aZvz+y8mq}scmW?mNRt85U!;4G3?jcqdUs%!dJCr%4}D&-WPRD*{vu+G7{x+ zLWJH#S)6wt@cunVICo+Cs_%s9xeR3!0~8+M#E&7}hk6$lV>H9IK|6u>MzaKVb>AgL z!pEdQ>V!v(QA4U^z_HQF|6co}M}O*yAMNwwRs>1HtN@aPSv5++6dvQP*8mBE3;>z> zG5};wm;oSj!VCbZ2=fC-vE%`enhpVw;0LPj9RNuNm5H49c7%BWb(IU{H_d7_00000 LNkvXXu0mjfDlc%V delta 245 zcmVA>07zqRe0001qplF?uE!LbD6z zmI_i|uq10AD%e*DW^s_T&?Q6R#0d7TlZ%7kjeq_mH+(|;_^5FeWG9dX*rDg8d`A+< zBven2V-?WSg3)L1`{h|#L2kWA_pV$wQ+@Kc<&qqro-YGk^ssGXlSnchEr1E6lC5FZ zu&0+WfuTY9EAT)j@t=zQ8O6qYD@!$P_R{(5`@? vf(n>Go-JS)k8CRdT2UAQ8n&y{UljBJz%pYq8hqHC00000NkvXXu0mjf>i1_Y diff --git a/graphics/pokemon/swalot/icon.png b/graphics/pokemon/swalot/icon.png index 3611b27feea1fd75ad4cee5839fa44005d0ed6f9..09f7162d2a3399f4659bcc50c7a391cc9861267a 100644 GIT binary patch delta 236 zcmVKl+6mn zAPj_sp4^1w{oi);qp%RiUKY9w&LM}+r%79#){Y*MnzlBZFcNkkH$Ecn0Oc6rLWFj+ ziTMQp?ex)N4R{OcfY2_v!yu?^p-SXK8p$kFfo6cqT8a5mcW_sN@G6DScp5}hDNSsM z1hTHDNXHiYz{Q_SZ{lm=A9rJWVvhbt=kkB!^5<7VfZw})I*fRj>44*5rUQ mW;)<_h>%&1>Br?a^WhD)br{LC*g|>$0000 zWsg`8g?ZrXv!SQt}Q;1h;~UNfzOe$Wizo~mK4+TTX0 z0ql1nAFh91SFu4TTHxTU2YmEU8@exk*JGO?@z8@+n3{O#fpZf-q^fhOYrpm54L*O+ Ur#U^KBLDyZ07*qoM6N<$g31nD*8l(j diff --git a/graphics/pokemon/tropius/icon.png b/graphics/pokemon/tropius/icon.png index 647767ca3de1b28329db67c794779eed76fb908e..9e7b61b531a138941fd2398b1c0ca04525a639f0 100644 GIT binary patch delta 368 zcmV-$0gwKw1G)o{7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SI7vi7R7i>Kl)(90L*ht8_>FW z#UEe>REQcuMr`l7XTlP zn76$sksT_z>nqDn!AYzd=%~X-dP}_fc>ZhqJIw4bX)G{LJIpEGJIvWYP7X5}$k|~Q z2GTps+CZAa+!=^F%$JOI&;$QaX26E{S_JKdF>}#OD^oJ*vb|9??h;h;Y O0000DxTHBye|DwxrDK%cA@r}MG@#wavCvGOGtqKl*1*h}==}rzKiEAj!%qKUx7|;6Tlzz}YwJG| jhW^SSQ-8gS|E~WFL{uA(?SW=X00000NkvXXu0mjf7nXzQ delta 288 zcmV+*0pI@U0_p;g7zqRe0001qplF?uEt)S8lfX6cx1}ce#E4_}jbf_mPX(Pe)j1gWNtXFi+c0C$OET+ z6sAAjce?G}gCU(*0Muz7H2A>yI8@I5H4e`05QoNf{t}0+`>=I?SlkcXxgX+SAD+Zv m87;)&W$lXM;3oY?9KK-K^x!41Ghhq=0000*Q%z2WKn$H5^a7usw{u}) zxEG1ufqkKI^R1}Ftw9(ztUA<^2y}4iM!Oi&m;Sy!LikgrG4}zx91*PVGawcerG)AF8G|PP(%YF;4gbP^%qew_7|*BU zw>6*i!Jg1HBpIjP7n;!PW66&nfF#$4*saIv004We+Gz(=a3REMD`Ha;%pys4!BB)- zQ9Q{u8dz?6EQ{2+KL9>n?D)&*)@Lv>eH;<%sG13;xePI7au_%!zwdPA2st6Y(8m|~ WLf$zUu8wX10000V71Dpep7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{S8c9S!R7i>Kl)-Am zFbqU(39_KT=>Pw=BPCgOWxJuYr?R?*d6peHd98iw=jC^~+z?N|=b+00xZ4WoVB)sO zn|D>^auxgOE2s1km@5!2S;cJR;-B3qT_FFpF5?q2!!G z9MLrT2V2JKTx7d{WbS&G4f24^sI=+i_tbnxI`Xdr`CxmfY7=+vpzri1iZ_v4t5Kec*i zPm`a3Mqo5RpD+k|Dsj#L=~W(31aK(x-orrc52QMuS1>_$Ya%qGxoh(P4U26`HTkOit> zU{zeapy9?l9VvwX)nrng)0s#epxvJT$)YY8-9Z*WaUZ5mdc`2@$QAoSeb6#TCnm`D z9Qk5E;lJVt5En2Jtrf=O4;OwSSeQ`74=l`>Eq)+j=GBjzFuN~5Heu-MM{>KNB50lr zu Date: Sat, 1 Apr 2023 08:02:14 +0200 Subject: [PATCH 248/290] Fix gen 4 icons --- graphics/pokemon/arceus/icon.png | Bin 397 -> 423 bytes graphics/pokemon/azelf/icon.png | Bin 429 -> 425 bytes graphics/pokemon/chatot/icon.png | Bin 384 -> 337 bytes graphics/pokemon/cherrim/icon.png | Bin 266 -> 280 bytes graphics/pokemon/cresselia/icon.png | Bin 474 -> 482 bytes graphics/pokemon/darkrai/icon.png | Bin 474 -> 481 bytes graphics/pokemon/dialga/icon.png | Bin 450 -> 480 bytes graphics/pokemon/drifblim/icon.png | Bin 389 -> 381 bytes graphics/pokemon/empoleon/icon.png | Bin 368 -> 384 bytes graphics/pokemon/froslass/icon.png | Bin 366 -> 376 bytes graphics/pokemon/gallade/icon.png | Bin 360 -> 378 bytes graphics/pokemon/giratina/icon.png | Bin 442 -> 465 bytes graphics/pokemon/gliscor/icon.png | Bin 458 -> 492 bytes graphics/pokemon/infernape/icon.png | Bin 510 -> 518 bytes graphics/pokemon/leafeon/icon.png | Bin 399 -> 408 bytes graphics/pokemon/luxray/icon.png | Bin 449 -> 462 bytes graphics/pokemon/manaphy/icon.png | Bin 351 -> 373 bytes graphics/pokemon/mesprit/icon.png | Bin 455 -> 441 bytes graphics/pokemon/mismagius/icon.png | Bin 379 -> 399 bytes graphics/pokemon/monferno/icon.png | Bin 435 -> 446 bytes graphics/pokemon/mothim/icon.png | Bin 425 -> 435 bytes graphics/pokemon/palkia/icon.png | Bin 437 -> 461 bytes graphics/pokemon/phione/icon.png | Bin 332 -> 345 bytes graphics/pokemon/probopass/icon.png | Bin 399 -> 408 bytes graphics/pokemon/rotom/icon.png | Bin 387 -> 395 bytes graphics/pokemon/staraptor/icon.png | Bin 446 -> 432 bytes graphics/pokemon/staravia/icon.png | Bin 388 -> 381 bytes graphics/pokemon/wormadam/icon.png | Bin 374 -> 374 bytes graphics/pokemon/wormadam/sandy_cloak/icon.png | Bin 423 -> 385 bytes graphics/pokemon/wormadam/trash_cloak/icon.png | Bin 406 -> 370 bytes 30 files changed, 0 insertions(+), 0 deletions(-) diff --git a/graphics/pokemon/arceus/icon.png b/graphics/pokemon/arceus/icon.png index 155bfc35bdb7bea870e2a37805ea174d55befe79..6141c35e8c926a862374753d37273d70b7660e5a 100644 GIT binary patch delta 349 zcmV-j0iynm1E&L!7#0Wv0000?P=%ZT0004VQb$4nuFf3kks&{SB}qgKlu>WP zFbISTEDsy_U-0N}Z)B(Y<+q;PO z07stg68r=pnCJdD=|@8@4KQ?+A4`|qbAOK=m0l|~0|qM*e&{*^`PDS_$8ljrY}I6X zZ05{EKLzk70C&}Y2(twI3=sBi?D*N>kC%@PV@l9-mx#IogT*wkU=-k--9p4+%Shpp zkdUGRttwX!00h~x23qyH5mZT92CGh#6XnpFgHA+H0-TRS_y>-_Kqd=JNQm~^2=nLw zz28sNZO%_l~ zIg-Ep?33+}v0p6GcXPZ2 zfGcleM~#aK7|lpv<$;K>Fg^%SU_0zd-RB9fVCY4N1(N+qW3L)*Y51g7k#qsr^?-jh zuM&9=Qp7D*8a8U#x3b`6D~|h1ruYcr>dbkWmhv?AZb@;JlIM{-OehqJoD1$wOcdfg zJLbzN62@6s%4e4_CP+^64|NShvl^rQM!k&*Sj>#j?OMLOB@M-ahC|*=U}u+W0tWz6 zx1Xzv{tf_pQ2nJaeR;yTj!qc+VvH~O!cgbQjW9`<_z%J~cfuSzKL%mEOKyJR#~0)_ VR7i>Kl)-KT zF$hF0IbGoug8%>94kpbOgI7KDQZ?kZGaihCUTgoa6m=^TYU^-$Z+OZyHij>K7x2>E zkX)BO9h!2K&hgCwf1Foo^dlG!64qciPMcsLXAlBT82Cz=Um$-xx;ezIBz*7{qVssy zM@Il6)B?`X#7=g9=*)1KUzx)w_Rxdn+1ch)US?GlAr^lq5+tmSX5Wa_-ytO+*>tgk zf`HtC1y`Wyutv#XePNkrr3mm_`X%QK)&GtR{A?O2b?;)YEc?AtnyY!U+x7~#tN*Sa z)t>^$jlMz50+6(_D?k!rR)8eL6adMHSpbp{69Li+#4G?l$%qL6sS$Glq(n>rNQIaM xAks2}B0#Duya2K%hyz3|VM7pcPX8`JJ^@~tAMfcw(W3wW002ovPDHLkV1k;=mDB(L delta 355 zcmV-p0i6D+1FZv)7zqRe0001qplF?uEPtw^d_O2eUD#fcWO8wyz+0}@CS62dr zT5kmog54P|g5Mg#3@9dkTP%PQJ)p0n@MyXu+@n5W!%v1558zop9~$k@e2|YrPq%*u ztt}5=bu zMp{>9DwxAi4xd>Q>3bR7CKE6{j#Y|c8SCH$c8B<{@7I8-43`;Dgb0kv8E0S=TS-C$ z#`E3ayR;-= zRtgtj#IFB?f&k3yHUz0Tklt4zv7oJT1}{~;z8_>x40>!3e)RwV002ovPDHLkV1l88 Bl%4

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

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