From 98133a9f7babad12d40b76bf3e1fa6db376fda62 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Fri, 6 Dec 2024 15:01:52 -0500 Subject: [PATCH 01/54] Add fix for possible crash when decompressing trainer back pics --- src/battle_gfx_sfx_util.c | 8 ++++++++ src/trainer_pokemon_sprites.c | 20 +++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 2deced13c0..37b2a023dd 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -710,9 +710,17 @@ void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId) void DecompressTrainerBackPic(u16 backPicId, u8 battlerId) { u8 position = GetBattlerPosition(battlerId); +#ifdef BUGFIX + CpuCopy32(gTrainerBackPicTable[backPicId].data, gMonSpritesGfxPtr->sprites.ptr[position], gTrainerBackPicTable[backPicId].size); +#else + // Trainer back pics aren't compressed! + // Attempting to decompress the uncompressed data can softlock or crash the game. + // This is ok in vanilla by chance, because the pixels in the trainer back sprites that correspond + // to the compressed data's header are all 0, so the decompression does nothing. DecompressPicFromTable_2(&gTrainerBackPicTable[backPicId], gMonSpritesGfxPtr->sprites.ptr[position], SPECIES_NONE); +#endif LoadCompressedPalette(gTrainerBackPicPaletteTable[backPicId].data, OBJ_PLTT_ID(battlerId), PLTT_SIZE_4BPP); } diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index f36060e8d1..909b86ab8c 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -57,10 +57,11 @@ bool16 ResetAllPicSprites(void) return FALSE; } -static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys) +static bool16 DecompressPic(u16 picId, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys) { if (!isTrainer) { + u16 species = picId; if (isFrontPic) { if (!ignoreDeoxys) @@ -78,10 +79,23 @@ static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 * } else { + u16 trainerPicId = picId; if (isFrontPic) - DecompressPicFromTable(&gTrainerFrontPicTable[species], dest, species); + { + DecompressPicFromTable(&gTrainerFrontPicTable[trainerPicId], dest, trainerPicId); + } else - DecompressPicFromTable(&gTrainerBackPicTable[species], dest, species); + { +#ifdef BUGFIX + CpuCopy32(gTrainerBackPicTable[trainerPicId].data, dest, gTrainerBackPicTable[trainerPicId].size); +#else + // Trainer back pics aren't compressed! + // Attempting to decompress the uncompressed data can softlock or crash the game. + // This is ok in vanilla by chance, because the pixels in the trainer back sprites that correspond + // to the compressed data's header are all 0, so the decompression does nothing. + DecompressPicFromTable(&gTrainerBackPicTable[trainerPicId], dest, trainerPicId); +#endif + } } return FALSE; } From 6cc878919d25bfac9c1b3ea4d5b4d2415576b392 Mon Sep 17 00:00:00 2001 From: Josh <32826900+ShinyDragonHunter@users.noreply.github.com> Date: Sat, 9 Aug 2025 20:57:59 +0100 Subject: [PATCH 02/54] Identify unused functions in siirtc.c, m4a.c & rtc.c "SiiRtcSetAlarm" in siirtc.c, the "FormatHex" functions in rtc.c and "UnusedDummyFunc", m4aSongNumStartOrContinue", m4aSongNumContinue", "MusicPlayerJumpTableCopy" in m4a.c are all unused in vanilla so they've been changed to use the "UNUSED" attribute. --- include/rtc.h | 5 ----- include/siirtc.h | 1 - src/m4a.c | 8 ++++---- src/rtc.c | 10 +++++----- src/siirtc.c | 2 +- 5 files changed, 10 insertions(+), 16 deletions(-) diff --git a/include/rtc.h b/include/rtc.h index 7a3d3d524b..6059688285 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -33,11 +33,6 @@ void RtcGetStatus(struct SiiRtcInfo *rtc); void RtcGetRawInfo(struct SiiRtcInfo *rtc); u16 RtcCheckInfo(struct SiiRtcInfo *rtc); void RtcReset(void); -void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second); -void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second); -void FormatHexRtcTime(u8 *dest); -void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day); -void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day); void RtcCalcTimeDifference(struct SiiRtcInfo *rtc, struct Time *result, struct Time *t); void RtcCalcLocalTime(void); void RtcInitLocalTimeOffset(s32 hour, s32 minute); diff --git a/include/siirtc.h b/include/siirtc.h index ad13fc62f3..92e646c32f 100644 --- a/include/siirtc.h +++ b/include/siirtc.h @@ -54,6 +54,5 @@ bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc); bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc); bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc); bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc); -bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc); #endif // GUARD_RTC_H diff --git a/src/m4a.c b/src/m4a.c index 2ad2261d08..33f20455f3 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -41,7 +41,7 @@ u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust) return umul3232H32(wav->freq, val1 + umul3232H32(val2 - val1, fineAdjustShifted)); } -void UnusedDummyFunc(void) +static void UNUSED UnusedDummyFunc(void) { } @@ -135,7 +135,7 @@ void m4aSongNumStartOrChange(u16 n) } } -void m4aSongNumStartOrContinue(u16 n) +static void UNUSED m4aSongNumStartOrContinue(u16 n) { const struct MusicPlayer *mplayTable = gMPlayTable; const struct Song *songTable = gSongTable; @@ -161,7 +161,7 @@ void m4aSongNumStop(u16 n) m4aMPlayStop(mplay->info); } -void m4aSongNumContinue(u16 n) +static void UNUSED m4aSongNumContinue(u16 n) { const struct MusicPlayer *mplayTable = gMPlayTable; const struct Song *songTable = gSongTable; @@ -325,7 +325,7 @@ void MPlayExtender(struct CgbChannel *cgbChans) soundInfo->ident = ident; } -void MusicPlayerJumpTableCopy(void) +static void UNUSED MusicPlayerJumpTableCopy(void) { asm("swi 0x2A"); } diff --git a/src/rtc.c b/src/rtc.c index 08d5ec4c98..54c176dbaf 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -215,7 +215,7 @@ void RtcReset(void) RtcRestoreInterrupts(); } -void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second) +static void UNUSED FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second) { dest = ConvertIntToDecimalStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2); *dest++ = CHAR_COLON; @@ -225,7 +225,7 @@ void FormatDecimalTime(u8 *dest, s32 hour, s32 minute, s32 second) *dest = EOS; } -void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second) +static void UNUSED FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second) { dest = ConvertIntToHexStringN(dest, hour, STR_CONV_MODE_LEADING_ZEROS, 2); *dest++ = CHAR_COLON; @@ -235,12 +235,12 @@ void FormatHexTime(u8 *dest, s32 hour, s32 minute, s32 second) *dest = EOS; } -void FormatHexRtcTime(u8 *dest) +static void UNUSED FormatHexRtcTime(u8 *dest) { FormatHexTime(dest, sRtc.hour, sRtc.minute, sRtc.second); } -void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day) +static void UNUSED FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day) { dest = ConvertIntToDecimalStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4); *dest++ = CHAR_HYPHEN; @@ -250,7 +250,7 @@ void FormatDecimalDate(u8 *dest, s32 year, s32 month, s32 day) *dest = EOS; } -void FormatHexDate(u8 *dest, s32 year, s32 month, s32 day) +static void UNUSED FormatHexDate(u8 *dest, s32 year, s32 month, s32 day) { dest = ConvertIntToHexStringN(dest, year, STR_CONV_MODE_LEADING_ZEROS, 4); *dest++ = CHAR_HYPHEN; diff --git a/src/siirtc.c b/src/siirtc.c index 0e598f7172..3557685850 100644 --- a/src/siirtc.c +++ b/src/siirtc.c @@ -344,7 +344,7 @@ bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc) return TRUE; } -bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc) +static bool8 UNUSED SiiRtcSetAlarm(struct SiiRtcInfo *rtc) { u8 i; u8 alarmData[2]; From d6714add6f146d263a71cb664970efe7ad894393 Mon Sep 17 00:00:00 2001 From: NT_x86 Date: Sun, 31 Aug 2025 20:36:09 +0300 Subject: [PATCH 03/54] Change rangeX and rangeY to u8 in ObjectEvent struct --- include/global.fieldmap.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 1207bd80ea..cea8d8c13e 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -229,8 +229,8 @@ struct ObjectEvent u16 movementDirection:4; struct __attribute__((packed)) { - u16 rangeX:4; - u16 rangeY:4; + u8 rangeX:4; + u8 rangeY:4; } range; /*0x1A*/ u8 fieldEffectSpriteId; /*0x1B*/ u8 warpArrowSpriteId; From 769e128cc9d1991d966c16536c07993d090eba70 Mon Sep 17 00:00:00 2001 From: NT_x86 Date: Mon, 1 Sep 2025 13:52:46 +0300 Subject: [PATCH 04/54] fix sScrollableMultichoice_ListMenuItem alloc size --- src/field_specials.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_specials.c b/src/field_specials.c index b92efa14ed..002e4fb811 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2555,7 +2555,7 @@ static void Task_ShowScrollableMultichoice(u8 taskId) sScrollableMultichoice_ItemSpriteId = MAX_SPRITES; FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0); ShowBattleFrontierTutorWindow(task->tScrollMultiId, 0); - sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * 8); + sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * sizeof(struct ListMenuItem)); sFrontierExchangeCorner_NeverRead = 0; InitScrollableMultichoice(); From b6742bac1cbd32cf2efacf933274e31f73f3d0dd Mon Sep 17 00:00:00 2001 From: Jamie Foster Date: Mon, 1 Sep 2025 15:18:53 +0200 Subject: [PATCH 05/54] Name pokemon summary screen remaining unnamed symbols --- src/pokemon_summary_screen.c | 250 +++++++++++++++++++---------------- 1 file changed, 139 insertions(+), 111 deletions(-) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index a5886fd6a9..16d9901220 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -228,12 +228,12 @@ static bool8 CanReplaceMove(void); static void ShowCantForgetHMsWindow(u8); static void Task_HandleInputCantForgetHMsMoves(u8); static void DrawPagination(void); -static void HandlePowerAccTilemap(u16, s16); -static void Task_ShowPowerAccWindow(u8); -static void HandleAppealJamTilemap(u16, s16, u16); -static void Task_ShowAppealJamWindow(u8); -static void HandleStatusTilemap(u16, s16); -static void Task_ShowStatusWindow(u8); +static void PositionPowerAccSlidingWindow(u16, s16); +static void Task_SlidePowerAccWindow(u8); +static void PositionAppealJamSlidingWindow(u16, s16, u16); +static void Task_SlideAppealJamWindow(u8); +static void PositionStatusSlidingWindow(u16, s16); +static void Task_SlideStatusWindow(u8); static void TilemapFiveMovesDisplay(u16 *, u16, bool8); static void DrawPokerusCuredSymbol(struct Pokemon *); static void DrawExperienceProgressBar(struct Pokemon *); @@ -356,32 +356,52 @@ static const struct BgTemplate sBgTemplates[] = }, }; -struct TilemapCtrl +struct SlidingWindow { const u16 *gfx; - u16 field_4; - u8 field_6; - u8 field_7; - u8 field_8; - u8 field_9; + u16 defaultTile; + u8 width; + u8 height; + u8 left; + u8 top; }; static const u16 sStatusTilemap[] = INCBIN_U16("graphics/summary_screen/status_tilemap.bin"); -static const struct TilemapCtrl sStatusTilemapCtrl1 = +static const struct SlidingWindow sStatusSlidingWindow1 = { - sStatusTilemap, 1, 10, 2, 0, 18 + .gfx = sStatusTilemap, + .defaultTile = 1, + .width = 10, + .height = 2, + .left = 0, + .top = 18 }; -static const struct TilemapCtrl sStatusTilemapCtrl2 = +static const struct SlidingWindow sStatusSlidingWindow2 = { - sStatusTilemap, 1, 10, 2, 0, 50 + .gfx = sStatusTilemap, + .defaultTile = 1, + .width = 10, + .height = 2, + .left = 0, + .top = 50 }; -static const struct TilemapCtrl sBattleMoveTilemapCtrl = +static const struct SlidingWindow sPowerAccSlidingWindow = { - gSummaryScreen_MoveEffect_Battle_Tilemap, 0, 10, 7, 0, 45 + .gfx = gSummaryScreen_MoveEffect_Battle_Tilemap, + .defaultTile = 0, + .width = 10, + .height = 7, + .left = 0, + .top = 45 }; -static const struct TilemapCtrl sContestMoveTilemapCtrl = +static const struct SlidingWindow sAppealJamSlidingWindow = { - gSummaryScreen_MoveEffect_Contest_Tilemap, 0, 10, 7, 0, 45 + .gfx = gSummaryScreen_MoveEffect_Contest_Tilemap, + .defaultTile = 0, + .width = 10, + .height = 7, + .left = 0, + .top = 45 }; static const s8 sMultiBattleOrder[] = {0, 2, 3, 1, 4, 5}; static const struct WindowTemplate sSummaryTemplate[] = @@ -1455,8 +1475,8 @@ static void SetDefaultTilemaps(void) { if (sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES && sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES) { - HandlePowerAccTilemap(0, 0xFF); - HandleAppealJamTilemap(0, 0xFF, 0); + PositionPowerAccSlidingWindow(0, 0xFF); + PositionAppealJamSlidingWindow(0, 0xFF, 0); } else { @@ -1471,7 +1491,7 @@ static void SetDefaultTilemaps(void) } if (sMonSummaryScreen->summary.ailment == AILMENT_NONE) - HandleStatusTilemap(0, 0xFF); + PositionStatusSlidingWindow(0, 0xFF); else if (sMonSummaryScreen->currPageIndex != PSS_PAGE_BATTLE_MOVES && sMonSummaryScreen->currPageIndex != PSS_PAGE_CONTEST_MOVES) PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); @@ -1596,7 +1616,7 @@ static void ChangeSummaryPokemon(u8 taskId, s8 delta) SetSpriteInvisibility(SPRITE_ARR_ID_STATUS, TRUE); ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); ScheduleBgCopyTilemapToVram(0); - HandleStatusTilemap(0, 2); + PositionStatusSlidingWindow(0, 2); } sMonSummaryScreen->curMonIndex = monId; gTasks[taskId].data[0] = 0; @@ -1637,7 +1657,7 @@ static void Task_ChangeSummaryMon(u8 taskId) break; case 7: if (sMonSummaryScreen->summary.ailment != AILMENT_NONE) - HandleStatusTilemap(10, -2); + PositionStatusSlidingWindow(10, -2); DrawPokerusCuredSymbol(&sMonSummaryScreen->currentMon); data[1] = 0; break; @@ -1663,7 +1683,7 @@ static void Task_ChangeSummaryMon(u8 taskId) gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_MON]].data[2] = 0; break; default: - if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_ShowStatusWindow)) + if (!MenuHelpers_ShouldWaitForLinkRecv() && !FuncIsActiveTask(Task_SlideStatusWindow)) { data[0] = 0; gTasks[taskId].func = Task_HandleInput; @@ -1869,8 +1889,8 @@ static void SwitchToMoveSelection(u8 taskId) ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES); if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible) ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); - HandlePowerAccTilemap(9, -3); - HandleAppealJamTilemap(9, -3, move); + PositionPowerAccSlidingWindow(9, -3); + PositionAppealJamSlidingWindow(9, -3, move); if (!sMonSummaryScreen->lockMovesFlag) { ClearWindowTilemap(PSS_LABEL_WINDOW_PROMPT_INFO); @@ -1976,8 +1996,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr) if (!gSprites[sMonSummaryScreen->spriteIds[SPRITE_ARR_ID_STATUS]].invisible) ClearWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(9, -3); - HandleAppealJamTilemap(9, -3, move); + PositionPowerAccSlidingWindow(9, -3); + PositionAppealJamSlidingWindow(9, -3, move); } if (*moveIndexPtr != MAX_MON_MOVES && newMoveIndex == MAX_MON_MOVES @@ -1986,8 +2006,8 @@ static void ChangeSelectedMove(s16 *taskData, s8 direction, u8 *moveIndexPtr) ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(0, 3); - HandleAppealJamTilemap(0, 3, 0); + PositionPowerAccSlidingWindow(0, 3); + PositionAppealJamSlidingWindow(0, 3, 0); } *moveIndexPtr = newMoveIndex; @@ -2011,8 +2031,8 @@ static void CloseMoveSelectMode(u8 taskId) { ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); - HandlePowerAccTilemap(0, 3); - HandleAppealJamTilemap(0, 3, 0); + PositionPowerAccSlidingWindow(0, 3); + PositionAppealJamSlidingWindow(0, 3, 0); } ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); @@ -2238,8 +2258,8 @@ static void ShowCantForgetHMsWindow(u8 taskId) ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); ClearWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(0, 3); - HandleAppealJamTilemap(0, 3, 0); + PositionPowerAccSlidingWindow(0, 3); + PositionAppealJamSlidingWindow(0, 3, 0); PrintHMMovesCantBeForgotten(); gTasks[taskId].func = Task_HandleInputCantForgetHMsMoves; } @@ -2249,7 +2269,7 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) { s16 *data = gTasks[taskId].data; u16 move; - if (FuncIsActiveTask(Task_ShowPowerAccWindow) != 1) + if (FuncIsActiveTask(Task_SlidePowerAccWindow) != 1) { if (JOY_NEW(DPAD_UP)) { @@ -2277,8 +2297,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]; gTasks[taskId].func = Task_HandleReplaceMoveInput; ChangePage(taskId, -1); - HandlePowerAccTilemap(9, -2); - HandleAppealJamTilemap(9, -2, move); + PositionPowerAccSlidingWindow(9, -2); + PositionAppealJamSlidingWindow(9, -2, move); } } else if (JOY_NEW(DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) @@ -2291,8 +2311,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]; gTasks[taskId].func = Task_HandleReplaceMoveInput; ChangePage(taskId, 1); - HandlePowerAccTilemap(9, -2); - HandleAppealJamTilemap(9, -2, move); + PositionPowerAccSlidingWindow(9, -2); + PositionAppealJamSlidingWindow(9, -2, move); } } else if (JOY_NEW(A_BUTTON | B_BUTTON)) @@ -2303,8 +2323,8 @@ static void Task_HandleInputCantForgetHMsMoves(u8 taskId) move = sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]; PrintMoveDetails(move); ScheduleBgCopyTilemapToVram(0); - HandlePowerAccTilemap(9, -3); - HandleAppealJamTilemap(9, -3, move); + PositionPowerAccSlidingWindow(9, -3); + PositionAppealJamSlidingWindow(9, -3, move); gTasks[taskId].func = Task_HandleReplaceMoveInput; } } @@ -2382,65 +2402,69 @@ static void DrawPagination(void) // Updates the pagination dots at the top of th Free(tilemap); } -static void ChangeTilemap(const struct TilemapCtrl *unkStruct, u16 *dest, u8 c, bool8 d) +static void CopyNColumnsToTilemap(const struct SlidingWindow *slidingWindow, u16 *tilemapDest, u8 visibleColumns, bool8 isOpeningToTheLeft) { u16 i; - u16 *alloced = Alloc(unkStruct->field_6 * 2 * unkStruct->field_7); - CpuFill16(unkStruct->field_4, alloced, unkStruct->field_6 * 2 * unkStruct->field_7); - if (unkStruct->field_6 != c) + u16 *alloced = Alloc(slidingWindow->width * 2 * slidingWindow->height); + CpuFill16(slidingWindow->defaultTile, alloced, slidingWindow->width * 2 * slidingWindow->height); + if (slidingWindow->width != visibleColumns) { - if (!d) + if (!isOpeningToTheLeft) { - for (i = 0; i < unkStruct->field_7; i++) - CpuCopy16(&unkStruct->gfx[c + unkStruct->field_6 * i], &alloced[unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2); + for (i = 0; i < slidingWindow->height; i++) + CpuCopy16(&slidingWindow->gfx[visibleColumns + slidingWindow->width * i], &alloced[slidingWindow->width * i], (slidingWindow->width - visibleColumns) * 2); } else { - for (i = 0; i < unkStruct->field_7; i++) - CpuCopy16(&unkStruct->gfx[unkStruct->field_6 * i], &alloced[c + unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2); + for (i = 0; i < slidingWindow->height; i++) + CpuCopy16(&slidingWindow->gfx[slidingWindow->width * i], &alloced[visibleColumns + slidingWindow->width * i], (slidingWindow->width - visibleColumns) * 2); } } - for (i = 0; i < unkStruct->field_7; i++) - CpuCopy16(&alloced[unkStruct->field_6 * i], &dest[(unkStruct->field_9 + i) * 32 + unkStruct->field_8], unkStruct->field_6 * 2); + for (i = 0; i < slidingWindow->height; i++) + CpuCopy16(&alloced[slidingWindow->width * i], &tilemapDest[(slidingWindow->top + i) * 32 + slidingWindow->left], slidingWindow->width * 2); Free(alloced); } -static void HandlePowerAccTilemap(u16 a, s16 b) +#define tScrollingSpeed data[0] +#define tVisibleColumns data[1] +#define tMove data[2] + +static void PositionPowerAccSlidingWindow(u16 visibleColumns, s16 speed) { - if (b > sBattleMoveTilemapCtrl.field_6) - b = sBattleMoveTilemapCtrl.field_6; - if (b == 0 || b == sBattleMoveTilemapCtrl.field_6) + if (speed > sPowerAccSlidingWindow.width) + speed = sPowerAccSlidingWindow.width; + if (speed == 0 || speed == sPowerAccSlidingWindow.width) { - ChangeTilemap(&sBattleMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], b, TRUE); + CopyNColumnsToTilemap(&sPowerAccSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], speed, TRUE); } else { - u8 taskId = FindTaskIdByFunc(Task_ShowPowerAccWindow); + u8 taskId = FindTaskIdByFunc(Task_SlidePowerAccWindow); if (taskId == TASK_NONE) - taskId = CreateTask(Task_ShowPowerAccWindow, 8); - gTasks[taskId].data[0] = b; - gTasks[taskId].data[1] = a; + taskId = CreateTask(Task_SlidePowerAccWindow, 8); + gTasks[taskId].tScrollingSpeed = speed; + gTasks[taskId].tVisibleColumns = visibleColumns; } } -static void Task_ShowPowerAccWindow(u8 taskId) +static void Task_SlidePowerAccWindow(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] += data[0]; - if (data[1] < 0) + tVisibleColumns += tScrollingSpeed; + if (tVisibleColumns < 0) { - data[1] = 0; + tVisibleColumns = 0; } - else if (data[1] > sBattleMoveTilemapCtrl.field_6) + else if (tVisibleColumns > sPowerAccSlidingWindow.width) { - data[1] = sBattleMoveTilemapCtrl.field_6; + tVisibleColumns = sPowerAccSlidingWindow.width; } - ChangeTilemap(&sBattleMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], data[1], TRUE); - if (data[1] <= 0 || data[1] >= sBattleMoveTilemapCtrl.field_6) + CopyNColumnsToTilemap(&sPowerAccSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], tVisibleColumns, TRUE); + if (tVisibleColumns <= 0 || tVisibleColumns >= sPowerAccSlidingWindow.width) { - if (data[0] < 0) + if (tScrollingSpeed < 0) { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_POWER_ACC); @@ -2458,46 +2482,46 @@ static void Task_ShowPowerAccWindow(u8 taskId) ScheduleBgCopyTilemapToVram(2); } -static void HandleAppealJamTilemap(u16 a, s16 b, u16 move) +static void PositionAppealJamSlidingWindow(u16 visibleColumns, s16 speed, u16 move) { - if (b > sContestMoveTilemapCtrl.field_6) - b = sContestMoveTilemapCtrl.field_6; + if (speed > sAppealJamSlidingWindow.width) + speed = sAppealJamSlidingWindow.width; - if (b == 0 || b == sContestMoveTilemapCtrl.field_6) + if (speed == 0 || speed == sAppealJamSlidingWindow.width) { - ChangeTilemap(&sContestMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], b, TRUE); + CopyNColumnsToTilemap(&sAppealJamSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], speed, TRUE); } else { - u8 taskId = FindTaskIdByFunc(Task_ShowAppealJamWindow); + u8 taskId = FindTaskIdByFunc(Task_SlideAppealJamWindow); if (taskId == TASK_NONE) - taskId = CreateTask(Task_ShowAppealJamWindow, 8); - gTasks[taskId].data[0] = b; - gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = move; + taskId = CreateTask(Task_SlideAppealJamWindow, 8); + gTasks[taskId].tScrollingSpeed = speed; + gTasks[taskId].tVisibleColumns = visibleColumns; + gTasks[taskId].tMove = move; } } -static void Task_ShowAppealJamWindow(u8 taskId) +static void Task_SlideAppealJamWindow(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] += data[0]; - if (data[1] < 0) + tVisibleColumns += tScrollingSpeed; + if (tVisibleColumns < 0) { - data[1] = 0; + tVisibleColumns = 0; } - else if (data[1] > sContestMoveTilemapCtrl.field_6) + else if (tVisibleColumns > sAppealJamSlidingWindow.width) { - data[1] = sContestMoveTilemapCtrl.field_6; + tVisibleColumns = sAppealJamSlidingWindow.width; } - ChangeTilemap(&sContestMoveTilemapCtrl, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], data[1], TRUE); - if (data[1] <= 0 || data[1] >= sContestMoveTilemapCtrl.field_6) + CopyNColumnsToTilemap(&sAppealJamSlidingWindow, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], tVisibleColumns, TRUE); + if (tVisibleColumns <= 0 || tVisibleColumns >= sAppealJamSlidingWindow.width) { - if (data[0] < 0) + if (tScrollingSpeed < 0) { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_CONTEST_MOVES && FuncIsActiveTask(PssScrollRight) == 0) PutWindowTilemap(PSS_LABEL_WINDOW_MOVES_APPEAL_JAM); - DrawContestMoveHearts(data[2]); + DrawContestMoveHearts(tMove); } else { @@ -2514,37 +2538,37 @@ static void Task_ShowAppealJamWindow(u8 taskId) ScheduleBgCopyTilemapToVram(2); } -static void HandleStatusTilemap(u16 a, s16 b) +static void PositionStatusSlidingWindow(u16 visibleColumns, s16 speed) { - if (b > sStatusTilemapCtrl1.field_6) - b = sStatusTilemapCtrl1.field_6; - if (b == 0 || b == sStatusTilemapCtrl1.field_6) + if (speed > sStatusSlidingWindow1.width) + speed = sStatusSlidingWindow1.width; + if (speed == 0 || speed == sStatusSlidingWindow1.width) { - ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], b, FALSE); - ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], b, FALSE); + CopyNColumnsToTilemap(&sStatusSlidingWindow1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], speed, FALSE); + CopyNColumnsToTilemap(&sStatusSlidingWindow2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], speed, FALSE); } else { - u8 taskId = CreateTask(Task_ShowStatusWindow, 8); - gTasks[taskId].data[0] = b; - gTasks[taskId].data[1] = a; + u8 taskId = CreateTask(Task_SlideStatusWindow, 8); + gTasks[taskId].tScrollingSpeed = speed; + gTasks[taskId].tVisibleColumns = visibleColumns; } } -static void Task_ShowStatusWindow(u8 taskId) +static void Task_SlideStatusWindow(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] += data[0]; - if (data[1] < 0) - data[1] = 0; - else if (data[1] > sStatusTilemapCtrl1.field_6) - data[1] = sStatusTilemapCtrl1.field_6; - ChangeTilemap(&sStatusTilemapCtrl1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE); - ChangeTilemap(&sStatusTilemapCtrl2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], FALSE); + tVisibleColumns += tScrollingSpeed; + if (tVisibleColumns < 0) + tVisibleColumns = 0; + else if (tVisibleColumns > sStatusSlidingWindow1.width) + tVisibleColumns = sStatusSlidingWindow1.width; + CopyNColumnsToTilemap(&sStatusSlidingWindow1, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], tVisibleColumns, FALSE); + CopyNColumnsToTilemap(&sStatusSlidingWindow2, sMonSummaryScreen->bgTilemapBuffers[PSS_PAGE_INFO][0], tVisibleColumns, FALSE); ScheduleBgCopyTilemapToVram(3); - if (data[1] <= 0 || data[1] >= sStatusTilemapCtrl1.field_6) + if (tVisibleColumns <= 0 || tVisibleColumns >= sStatusSlidingWindow1.width) { - if (data[0] < 0) + if (tScrollingSpeed < 0) { CreateSetStatusSprite(); PutWindowTilemap(PSS_LABEL_WINDOW_POKEMON_SKILLS_STATUS); @@ -2554,6 +2578,10 @@ static void Task_ShowStatusWindow(u8 taskId) } } +#undef tScrollingSpeed +#undef tVisibleColumns +#undef tMove + // Toggles the "Cancel" window that appears when selecting a move static void TilemapFiveMovesDisplay(u16 *dst, u16 palette, bool8 remove) { From c466dce9964c87ad5ce47842fb70522ac6fc92dc Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Thu, 6 Nov 2025 13:40:22 +0000 Subject: [PATCH 06/54] Fix FLAG_REGISTERED_WALLY --- include/constants/flags.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants/flags.h b/include/constants/flags.h index 7b5c5edb45..74b10cdfbc 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -445,7 +445,7 @@ #define FLAG_REGISTERED_TRENT (TRAINER_REGISTERED_FLAGS_START + REMATCH_TRENT) #define FLAG_REGISTERED_SAWYER (TRAINER_REGISTERED_FLAGS_START + REMATCH_SAWYER) #define FLAG_REGISTERED_KIRA_AND_DAN (TRAINER_REGISTERED_FLAGS_START + REMATCH_KIRA_AND_DAN) -#define FLAG_REGISTERED_WALLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALLY) +#define FLAG_REGISTERED_WALLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_WALLY_VR) #define FLAG_REGISTERED_ROXANNE (TRAINER_REGISTERED_FLAGS_START + REMATCH_ROXANNE) #define FLAG_REGISTERED_BRAWLY (TRAINER_REGISTERED_FLAGS_START + REMATCH_BRAWLY) #define FLAG_REGISTERED_WATTSON (TRAINER_REGISTERED_FLAGS_START + REMATCH_WATTSON) From 4297a5ea81e7b78ad996e674bc40fd36a094909f Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 2 Dec 2025 21:07:19 -0500 Subject: [PATCH 07/54] Clean up wav2agb's Makefile --- tools/wav2agb/Makefile | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/tools/wav2agb/Makefile b/tools/wav2agb/Makefile index a121730e95..a38f71758f 100644 --- a/tools/wav2agb/Makefile +++ b/tools/wav2agb/Makefile @@ -1,33 +1,23 @@ -GIT_VERSION := $(shell git describe --abbrev=7 --dirty --always --tags) +CXX ?= g++ + +CXXFLAGS := -Wall -Werror -std=c++17 -O2 + +SRCS := $(wildcard *.cpp) +HEADERS := $(wildcard *.h) -CXX = g++ -STRIP = strip -CXXFLAGS = -Wall -Wextra -Wconversion -std=c++17 -O2 -g -DGIT_VERSION=\"$(GIT_VERSION)\" EXE := ifeq ($(OS),Windows_NT) EXE := .exe endif BINARY = wav2agb$(EXE) -SRC_FILES = $(wildcard *.cpp) -OBJ_FILES = $(SRC_FILES:.cpp=.o) +.PHONY: all clean -LDFLAGS := - -ifneq (,$(RELEASE)) - LDFLAGS += -static - CXXFLAGS += -flto -endif - -.PHONY: clean clean all: $(BINARY) + @: + +$(BINARY): $(SRCS) $(HEADERS) + $(CXX) $(CXXFLAGS) $(SRCS) -o $@ $(LDFLAGS) clean: - rm -f $(OBJ_FILES) $(BINARY) - -$(BINARY): $(OBJ_FILES) - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ - if [ $(RELEASE)x != x ]; then strip -s $@; fi - -%.o: %.cpp - $(CXX) -c -o $@ $< $(CXXFLAGS) + $(RM) $(BINARY) From d8a6b72e23cc868b735b14ae2aab0fb283578bbe Mon Sep 17 00:00:00 2001 From: GriffinR Date: Wed, 3 Dec 2025 21:31:22 -0500 Subject: [PATCH 08/54] Display error for invalid hidden item flags --- asm/macros/map.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/asm/macros/map.inc b/asm/macros/map.inc index acbcd532dd..884ecba5f6 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -109,6 +109,9 @@ @ Defines a background hidden item event for map data .macro bg_hidden_item_event x:req, y:req, elevation:req, item:req, flag:req + .if \flag < FLAG_HIDDEN_ITEMS_START + .error "Hidden Item flag \flag is too small. Must be >= FLAG_HIDDEN_ITEMS_START." + .endif bg_event \x, \y, \elevation, BG_EVENT_HIDDEN_ITEM, \item, ((\flag) - FLAG_HIDDEN_ITEMS_START) .endm From eb1a6d311a8b559800d16ead835d929b1a878375 Mon Sep 17 00:00:00 2001 From: shachar700 Date: Thu, 4 Dec 2025 23:34:36 +0200 Subject: [PATCH 09/54] fixed pokenav glow issue --- src/pokenav_menu_handler_gfx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index ce17f33cfc..a86d0be080 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -1315,7 +1315,11 @@ static void SetupPokenavMenuScanlineEffects(void) SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_ALL); SetGpuRegBits(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); +#ifdef BUGFIX + SetGpuReg(REG_OFFSET_WIN0V, DISPLAY_HEIGHT); +#else SetGpuRegBits(REG_OFFSET_WIN0V, DISPLAY_HEIGHT); +#endif ScanlineEffect_Stop(); SetMenuOptionGlow(); ScanlineEffect_SetParams(sPokenavMainMenuScanlineEffectParams); From 02c44242f8be260fd1a581b30fbb2af247803d40 Mon Sep 17 00:00:00 2001 From: Mitsunee Date: Wed, 10 Dec 2025 04:22:08 +0100 Subject: [PATCH 10/54] Added bugfix for missing no weather case in Cmd_weather_get (#2203) --- include/constants/battle_ai.h | 1 + src/battle_ai_script_commands.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 5ade58d509..63c6a8342c 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -23,6 +23,7 @@ #define AI_EFFECTIVENESS_x0 0 // ai weather +#define AI_WEATHER_NONE UINT32_MAX // added as part of bugfix, see Cmd_weather_get in battle_ai_script_commands.c #define AI_WEATHER_SUN 0 #define AI_WEATHER_RAIN 1 #define AI_WEATHER_SANDSTORM 2 diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 6fd3cdad8e..c3658da89f 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1643,6 +1643,15 @@ static void Cmd_if_status_not_in_party(void) static void Cmd_get_weather(void) { + // BUG: due to the lack of an assignment in the case of there not being any + // weather set any previously set value could possibly be interpreted + // as a result of this function. + // Assigning AI_WEATHER_NONE here matches the fix implemented in future + // generations. + #ifdef BUGFIX + AI_THINKING_STRUCT->funcResult = AI_WEATHER_NONE; + #endif + if (gBattleWeather & B_WEATHER_RAIN) AI_THINKING_STRUCT->funcResult = AI_WEATHER_RAIN; if (gBattleWeather & B_WEATHER_SANDSTORM) From 5240ee1515bbcfc54112fb5f9968edc1aae92056 Mon Sep 17 00:00:00 2001 From: shachar700 <48739719+shachar700@users.noreply.github.com> Date: Wed, 10 Dec 2025 13:51:47 +0200 Subject: [PATCH 11/54] Added comment --- src/pokenav_menu_handler_gfx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index a86d0be080..a4cdf48980 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -1316,6 +1316,9 @@ static void SetupPokenavMenuScanlineEffects(void) SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_ALL); SetGpuRegBits(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ); #ifdef BUGFIX + // BUGFIX: Use full register write instead of |=. + // SetGpuRegBits left leftover window values from the Party screen, + // causing partial/missing glow highlights. SetGpuReg clears them fully. SetGpuReg(REG_OFFSET_WIN0V, DISPLAY_HEIGHT); #else SetGpuRegBits(REG_OFFSET_WIN0V, DISPLAY_HEIGHT); From 349da0484bd00835de6c6198c1da31d42ebca966 Mon Sep 17 00:00:00 2001 From: Josh <32826900+ShinyDragonHunter@users.noreply.github.com> Date: Sat, 27 Dec 2025 01:11:40 +0000 Subject: [PATCH 12/54] Document m4a xcmd_0C --- constants/m4a_constants.inc | 2 +- include/gba/m4a_internal.h | 8 ++++---- src/m4a.c | 18 +++++++++--------- src/m4a_tables.c | 7 ++++--- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/constants/m4a_constants.inc b/constants/m4a_constants.inc index 2599b6c4aa..73f98f31f7 100644 --- a/constants/m4a_constants.inc +++ b/constants/m4a_constants.inc @@ -181,7 +181,7 @@ struct_field o_MusicPlayerTrack_ToneData_sustain, 1 struct_field o_MusicPlayerTrack_ToneData_release, 1 struct_field o_MusicPlayerTrack_gap, 10 - struct_field o_MusicPlayerTrack_unk_3A, 2 + struct_field o_MusicPlayerTrack_timer, 2 struct_field o_MusicPlayerTrack_unk_3C, 4 struct_field o_MusicPlayerTrack_cmdPtr, 4 struct_field o_MusicPlayerTrack_patternStack, 12 diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h index 5c3a0872ce..90e5e421a8 100644 --- a/include/gba/m4a_internal.h +++ b/include/gba/m4a_internal.h @@ -257,8 +257,8 @@ struct PokemonCrySong u8 tieCmd; // 0x29 u8 tieKeyValue; // 0x2A u8 tieVelocityValue; // 0x2B - u8 unkCmd0C[2]; // 0x2C - u16 unkCmd0CParam; // 0x2E + u8 xwaitCmd[2]; // 0x2C + u16 length; // 0x2E u8 end[2]; // 0x30 }; @@ -306,7 +306,7 @@ struct MusicPlayerTrack struct SoundChannel *chan; struct ToneData tone; u8 gap[10]; - u16 unk_3A; + u16 timer; u32 unk_3C; u8 *cmdPtr; u8 *patternStack[3]; @@ -495,7 +495,7 @@ void ply_xiecv(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xiecl(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xleng(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xswee(struct MusicPlayerInfo *, struct MusicPlayerTrack *); -void ply_xcmd_0C(struct MusicPlayerInfo *, struct MusicPlayerTrack *); +void ply_xwait(struct MusicPlayerInfo *, struct MusicPlayerTrack *); void ply_xcmd_0D(struct MusicPlayerInfo *, struct MusicPlayerTrack *); #endif // GUARD_GBA_M4A_INTERNAL_H diff --git a/src/m4a.c b/src/m4a.c index 33f20455f3..1a2d541887 100644 --- a/src/m4a.c +++ b/src/m4a.c @@ -1612,26 +1612,26 @@ void ply_xswee(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track track->cmdPtr++; } -void ply_xcmd_0C(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) +void ply_xwait(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - u32 unk; + u32 len; #ifdef UBFIX - unk = 0; + len = 0; #endif - READ_XCMD_BYTE(unk, 0) // UB: uninitialized variable - READ_XCMD_BYTE(unk, 1) + READ_XCMD_BYTE(len, 0) // UB: uninitialized variable + READ_XCMD_BYTE(len, 1) - if (track->unk_3A < (u16)unk) + if (track->timer < (u16)len) { - track->unk_3A++; + track->timer++; track->cmdPtr -= 2; track->wait = 1; } else { - track->unk_3A = 0; + track->timer = 0; track->cmdPtr += 2; } } @@ -1719,7 +1719,7 @@ void SetPokemonCryPitch(s16 val) void SetPokemonCryLength(u16 val) { - gPokemonCrySong.unkCmd0CParam = val; + gPokemonCrySong.length = val; } void SetPokemonCryRelease(u8 val) diff --git a/src/m4a_tables.c b/src/m4a_tables.c index 5bc1075494..1f339b060f 100644 --- a/src/m4a_tables.c +++ b/src/m4a_tables.c @@ -251,6 +251,7 @@ const u8 gClockTable[] = #define xRELE 0x07 #define xIECV 0x08 #define xIECL 0x09 +#define xWAIT 0x0c #define EOT 0xce #define TIE 0xcf @@ -282,8 +283,8 @@ const struct PokemonCrySong gPokemonCrySongTemplate = .tieCmd = TIE, .tieKeyValue = 60, // default is Cn3 .tieVelocityValue = 127, - .unkCmd0C = {XCMD, 0x0C}, - .unkCmd0CParam = 60, + .xwaitCmd = {XCMD, xWAIT}, + .length = 60, // frames to wait .end = {EOT, FINE} }; @@ -301,6 +302,6 @@ const XcmdFunc gXcmdTable[] = ply_xiecl, ply_xleng, ply_xswee, - ply_xcmd_0C, + ply_xwait, ply_xcmd_0D, }; From daf63255a64ebc312799a9992f32f06f3be9b174 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Sat, 27 Dec 2025 15:06:33 +0100 Subject: [PATCH 13/54] Fix some typos --- src/overworld.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/overworld.c b/src/overworld.c index d1d3ddcd37..87a833ac74 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1040,7 +1040,7 @@ static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp) return FALSE; } -static bool16 NoMusicInSotopolisWithLegendaries(struct WarpData *warp) +static bool16 NoMusicInSootopolisWithLegendaries(struct WarpData *warp) { if (VarGet(VAR_SKY_PILLAR_STATE) != 1) return FALSE; @@ -1065,7 +1065,7 @@ static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp) return FALSE; } -static bool16 IsInflitratedSpaceCenter(struct WarpData *warp) +static bool16 IsInfiltratedSpaceCenter(struct WarpData *warp) { if (VarGet(VAR_MOSSDEEP_CITY_STATE) == 0) return FALSE; @@ -1081,11 +1081,11 @@ static bool16 IsInflitratedSpaceCenter(struct WarpData *warp) u16 GetLocationMusic(struct WarpData *warp) { - if (NoMusicInSotopolisWithLegendaries(warp) == TRUE) + if (NoMusicInSootopolisWithLegendaries(warp) == TRUE) return MUS_NONE; else if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE) return MUS_ABNORMAL_WEATHER; - else if (IsInflitratedSpaceCenter(warp) == TRUE) + else if (IsInfiltratedSpaceCenter(warp) == TRUE) return MUS_ENCOUNTER_MAGMA; else if (IsInfiltratedWeatherInstitute(warp) == TRUE) return MUS_MT_CHIMNEY; From 8d1f3ccd6a0251c56b7a66d9ed93bd3b6b2ca939 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 27 Dec 2025 10:33:04 -0600 Subject: [PATCH 14/54] Update .wav samples to use 'agbl' chunk to accomodate for vanilla's off-by-one behavior --- sound/direct_sound_samples/bicycle_bell.wav | Bin 6579 -> 6592 bytes .../classical_choir_voice_ahhs.wav | Bin 5913 -> 5926 bytes sound/direct_sound_samples/cries/abra.wav | Bin 11678 -> 11690 bytes sound/direct_sound_samples/cries/absol.wav | Bin 5274 -> 5286 bytes .../direct_sound_samples/cries/aerodactyl.wav | Bin 12160 -> 12172 bytes sound/direct_sound_samples/cries/aggron.wav | Bin 12795 -> 12808 bytes sound/direct_sound_samples/cries/aipom.wav | Bin 7076 -> 7088 bytes sound/direct_sound_samples/cries/alakazam.wav | Bin 15759 -> 15772 bytes sound/direct_sound_samples/cries/altaria.wav | Bin 5583 -> 5596 bytes sound/direct_sound_samples/cries/ampharos.wav | Bin 8260 -> 8272 bytes sound/direct_sound_samples/cries/anorith.wav | Bin 5880 -> 5892 bytes sound/direct_sound_samples/cries/arbok.wav | Bin 9667 -> 9680 bytes sound/direct_sound_samples/cries/arcanine.wav | Bin 8621 -> 8634 bytes sound/direct_sound_samples/cries/ariados.wav | Bin 6189 -> 6202 bytes sound/direct_sound_samples/cries/armaldo.wav | Bin 11398 -> 11410 bytes sound/direct_sound_samples/cries/aron.wav | Bin 4619 -> 4632 bytes sound/direct_sound_samples/cries/articuno.wav | Bin 11811 -> 11824 bytes .../direct_sound_samples/cries/azumarill.wav | Bin 8470 -> 8482 bytes sound/direct_sound_samples/cries/azurill.wav | Bin 5231 -> 5244 bytes sound/direct_sound_samples/cries/bagon.wav | Bin 3952 -> 3964 bytes sound/direct_sound_samples/cries/baltoy.wav | Bin 6282 -> 6294 bytes sound/direct_sound_samples/cries/banette.wav | Bin 6352 -> 6364 bytes sound/direct_sound_samples/cries/barboach.wav | Bin 4650 -> 4662 bytes sound/direct_sound_samples/cries/bayleef.wav | Bin 4433 -> 4446 bytes .../direct_sound_samples/cries/beautifly.wav | Bin 4147 -> 4160 bytes sound/direct_sound_samples/cries/beedrill.wav | Bin 9674 -> 9686 bytes sound/direct_sound_samples/cries/beldum.wav | Bin 4847 -> 4860 bytes .../direct_sound_samples/cries/bellossom.wav | Bin 7061 -> 7074 bytes .../direct_sound_samples/cries/bellsprout.wav | Bin 3811 -> 3824 bytes .../direct_sound_samples/cries/blastoise.wav | Bin 9641 -> 9654 bytes sound/direct_sound_samples/cries/blaziken.wav | Bin 15708 -> 15720 bytes sound/direct_sound_samples/cries/blissey.wav | Bin 8297 -> 8310 bytes sound/direct_sound_samples/cries/breloom.wav | Bin 6395 -> 6408 bytes .../direct_sound_samples/cries/bulbasaur.wav | Bin 8284 -> 8296 bytes .../direct_sound_samples/cries/butterfree.wav | Bin 5044 -> 5056 bytes sound/direct_sound_samples/cries/cacnea.wav | Bin 4507 -> 4520 bytes sound/direct_sound_samples/cries/cacturne.wav | Bin 11328 -> 11340 bytes sound/direct_sound_samples/cries/camerupt.wav | Bin 11545 -> 11558 bytes sound/direct_sound_samples/cries/carvanha.wav | Bin 5066 -> 5078 bytes sound/direct_sound_samples/cries/cascoon.wav | Bin 8144 -> 8156 bytes sound/direct_sound_samples/cries/castform.wav | Bin 6320 -> 6332 bytes sound/direct_sound_samples/cries/caterpie.wav | Bin 4210 -> 4222 bytes sound/direct_sound_samples/cries/celebi.wav | Bin 7248 -> 7260 bytes sound/direct_sound_samples/cries/chansey.wav | Bin 7409 -> 7422 bytes .../direct_sound_samples/cries/charizard.wav | Bin 9640 -> 9652 bytes .../direct_sound_samples/cries/charmander.wav | Bin 7234 -> 7246 bytes .../direct_sound_samples/cries/charmeleon.wav | Bin 7267 -> 7280 bytes .../direct_sound_samples/cries/chikorita.wav | Bin 2673 -> 2686 bytes sound/direct_sound_samples/cries/chimecho.wav | Bin 5058 -> 5070 bytes sound/direct_sound_samples/cries/chinchou.wav | Bin 6364 -> 6376 bytes sound/direct_sound_samples/cries/clamperl.wav | Bin 9160 -> 9172 bytes sound/direct_sound_samples/cries/claydol.wav | Bin 9687 -> 9700 bytes sound/direct_sound_samples/cries/clefable.wav | Bin 5313 -> 5326 bytes sound/direct_sound_samples/cries/clefairy.wav | Bin 4252 -> 4264 bytes sound/direct_sound_samples/cries/cleffa.wav | Bin 3010 -> 3022 bytes sound/direct_sound_samples/cries/cloyster.wav | Bin 10372 -> 10384 bytes .../direct_sound_samples/cries/combusken.wav | Bin 14378 -> 14390 bytes sound/direct_sound_samples/cries/corphish.wav | Bin 6029 -> 6042 bytes sound/direct_sound_samples/cries/corsola.wav | Bin 6458 -> 6470 bytes sound/direct_sound_samples/cries/cradily.wav | Bin 14561 -> 14574 bytes .../direct_sound_samples/cries/crawdaunt.wav | Bin 12335 -> 12348 bytes sound/direct_sound_samples/cries/crobat.wav | Bin 11580 -> 11592 bytes sound/direct_sound_samples/cries/croconaw.wav | Bin 10115 -> 10128 bytes sound/direct_sound_samples/cries/cubone.wav | Bin 7577 -> 7590 bytes .../direct_sound_samples/cries/cyndaquil.wav | Bin 3546 -> 3558 bytes sound/direct_sound_samples/cries/delcatty.wav | Bin 10536 -> 10548 bytes sound/direct_sound_samples/cries/delibird.wav | Bin 8112 -> 8124 bytes sound/direct_sound_samples/cries/deoxys.wav | Bin 10407 -> 10420 bytes sound/direct_sound_samples/cries/dewgong.wav | Bin 10564 -> 10576 bytes sound/direct_sound_samples/cries/diglett.wav | Bin 9716 -> 9728 bytes sound/direct_sound_samples/cries/ditto.wav | Bin 5584 -> 5596 bytes sound/direct_sound_samples/cries/dodrio.wav | Bin 9731 -> 9744 bytes sound/direct_sound_samples/cries/doduo.wav | Bin 9635 -> 9648 bytes sound/direct_sound_samples/cries/donphan.wav | Bin 8572 -> 8584 bytes .../direct_sound_samples/cries/dragonair.wav | Bin 8337 -> 8350 bytes .../direct_sound_samples/cries/dragonite.wav | Bin 9520 -> 9532 bytes sound/direct_sound_samples/cries/dratini.wav | Bin 5830 -> 5842 bytes sound/direct_sound_samples/cries/drowzee.wav | Bin 14512 -> 14524 bytes sound/direct_sound_samples/cries/dugtrio.wav | Bin 9705 -> 9718 bytes .../direct_sound_samples/cries/dunsparce.wav | Bin 7944 -> 7956 bytes sound/direct_sound_samples/cries/dusclops.wav | Bin 6876 -> 6888 bytes sound/direct_sound_samples/cries/duskull.wav | Bin 5328 -> 5340 bytes sound/direct_sound_samples/cries/dustox.wav | Bin 6356 -> 6368 bytes sound/direct_sound_samples/cries/eevee.wav | Bin 7122 -> 7134 bytes sound/direct_sound_samples/cries/ekans.wav | Bin 9644 -> 9656 bytes .../direct_sound_samples/cries/electabuzz.wav | Bin 15399 -> 15412 bytes .../direct_sound_samples/cries/electrike.wav | Bin 6204 -> 6216 bytes .../direct_sound_samples/cries/electrode.wav | Bin 12582 -> 12594 bytes sound/direct_sound_samples/cries/elekid.wav | Bin 5303 -> 5316 bytes sound/direct_sound_samples/cries/entei.wav | Bin 10216 -> 10228 bytes sound/direct_sound_samples/cries/espeon.wav | Bin 9847 -> 9860 bytes .../direct_sound_samples/cries/exeggcute.wav | Bin 9434 -> 9446 bytes .../direct_sound_samples/cries/exeggutor.wav | Bin 15898 -> 15910 bytes sound/direct_sound_samples/cries/exploud.wav | Bin 14105 -> 14118 bytes .../direct_sound_samples/cries/farfetchd.wav | Bin 3784 -> 3796 bytes sound/direct_sound_samples/cries/fearow.wav | Bin 8621 -> 8634 bytes sound/direct_sound_samples/cries/feebas.wav | Bin 3950 -> 3962 bytes .../direct_sound_samples/cries/feraligatr.wav | Bin 12730 -> 12742 bytes sound/direct_sound_samples/cries/flaaffy.wav | Bin 6872 -> 6884 bytes sound/direct_sound_samples/cries/flareon.wav | Bin 7766 -> 7778 bytes sound/direct_sound_samples/cries/flygon.wav | Bin 12993 -> 13006 bytes .../direct_sound_samples/cries/forretress.wav | Bin 10009 -> 10022 bytes sound/direct_sound_samples/cries/furret.wav | Bin 3187 -> 3200 bytes .../direct_sound_samples/cries/gardevoir.wav | Bin 12173 -> 12186 bytes sound/direct_sound_samples/cries/gastly.wav | Bin 11639 -> 11652 bytes sound/direct_sound_samples/cries/gengar.wav | Bin 7390 -> 7402 bytes sound/direct_sound_samples/cries/geodude.wav | Bin 11835 -> 11848 bytes .../direct_sound_samples/cries/girafarig.wav | Bin 7365 -> 7378 bytes sound/direct_sound_samples/cries/glalie.wav | Bin 10438 -> 10450 bytes sound/direct_sound_samples/cries/gligar.wav | Bin 6086 -> 6098 bytes sound/direct_sound_samples/cries/gloom.wav | Bin 6265 -> 6278 bytes sound/direct_sound_samples/cries/golbat.wav | Bin 9693 -> 9706 bytes sound/direct_sound_samples/cries/goldeen.wav | Bin 4955 -> 4968 bytes sound/direct_sound_samples/cries/golduck.wav | Bin 5664 -> 5676 bytes sound/direct_sound_samples/cries/golem.wav | Bin 7098 -> 7110 bytes sound/direct_sound_samples/cries/gorebyss.wav | Bin 11194 -> 11206 bytes sound/direct_sound_samples/cries/granbull.wav | Bin 11800 -> 11812 bytes sound/direct_sound_samples/cries/graveler.wav | Bin 13919 -> 13932 bytes sound/direct_sound_samples/cries/grimer.wav | Bin 5293 -> 5306 bytes sound/direct_sound_samples/cries/groudon.wav | Bin 18457 -> 18470 bytes sound/direct_sound_samples/cries/grovyle.wav | Bin 10216 -> 10228 bytes .../direct_sound_samples/cries/growlithe.wav | Bin 6714 -> 6726 bytes sound/direct_sound_samples/cries/grumpig.wav | Bin 6336 -> 6348 bytes sound/direct_sound_samples/cries/gulpin.wav | Bin 4046 -> 4058 bytes sound/direct_sound_samples/cries/gyarados.wav | Bin 10097 -> 10110 bytes sound/direct_sound_samples/cries/hariyama.wav | Bin 8366 -> 8378 bytes sound/direct_sound_samples/cries/haunter.wav | Bin 11732 -> 11744 bytes .../direct_sound_samples/cries/heracross.wav | Bin 9162 -> 9174 bytes .../direct_sound_samples/cries/hitmonchan.wav | Bin 8925 -> 8938 bytes .../direct_sound_samples/cries/hitmonlee.wav | Bin 9337 -> 9350 bytes .../direct_sound_samples/cries/hitmontop.wav | Bin 6954 -> 6966 bytes sound/direct_sound_samples/cries/ho_oh.wav | Bin 11279 -> 11292 bytes sound/direct_sound_samples/cries/hoothoot.wav | Bin 5476 -> 5488 bytes sound/direct_sound_samples/cries/hoppip.wav | Bin 4245 -> 4258 bytes sound/direct_sound_samples/cries/horsea.wav | Bin 4772 -> 4784 bytes sound/direct_sound_samples/cries/houndoom.wav | Bin 9838 -> 9850 bytes sound/direct_sound_samples/cries/houndour.wav | Bin 6351 -> 6364 bytes sound/direct_sound_samples/cries/huntail.wav | Bin 7963 -> 7976 bytes sound/direct_sound_samples/cries/hypno.wav | Bin 14468 -> 14480 bytes .../direct_sound_samples/cries/igglybuff.wav | Bin 3537 -> 3550 bytes sound/direct_sound_samples/cries/illumise.wav | Bin 8555 -> 8568 bytes sound/direct_sound_samples/cries/ivysaur.wav | Bin 8288 -> 8300 bytes .../direct_sound_samples/cries/jigglypuff.wav | Bin 2739 -> 2752 bytes sound/direct_sound_samples/cries/jirachi.wav | Bin 6777 -> 6790 bytes sound/direct_sound_samples/cries/jolteon.wav | Bin 7922 -> 7934 bytes sound/direct_sound_samples/cries/jumpluff.wav | Bin 8124 -> 8136 bytes sound/direct_sound_samples/cries/jynx.wav | Bin 23625 -> 23638 bytes sound/direct_sound_samples/cries/kabuto.wav | Bin 6188 -> 6200 bytes sound/direct_sound_samples/cries/kabutops.wav | Bin 6885 -> 6898 bytes sound/direct_sound_samples/cries/kadabra.wav | Bin 13427 -> 13440 bytes sound/direct_sound_samples/cries/kakuna.wav | Bin 9123 -> 9136 bytes .../direct_sound_samples/cries/kangaskhan.wav | Bin 9352 -> 9364 bytes sound/direct_sound_samples/cries/kecleon.wav | Bin 4221 -> 4234 bytes sound/direct_sound_samples/cries/kingdra.wav | Bin 6941 -> 6954 bytes sound/direct_sound_samples/cries/kingler.wav | Bin 12151 -> 12164 bytes sound/direct_sound_samples/cries/kirlia.wav | Bin 6119 -> 6132 bytes sound/direct_sound_samples/cries/koffing.wav | Bin 10172 -> 10184 bytes sound/direct_sound_samples/cries/krabby.wav | Bin 12131 -> 12144 bytes sound/direct_sound_samples/cries/kyogre.wav | Bin 17801 -> 17814 bytes sound/direct_sound_samples/cries/lairon.wav | Bin 10410 -> 10422 bytes sound/direct_sound_samples/cries/lanturn.wav | Bin 5301 -> 5314 bytes sound/direct_sound_samples/cries/lapras.wav | Bin 7426 -> 7438 bytes sound/direct_sound_samples/cries/larvitar.wav | Bin 6368 -> 6380 bytes sound/direct_sound_samples/cries/latias.wav | Bin 6116 -> 6128 bytes sound/direct_sound_samples/cries/latios.wav | Bin 10977 -> 10990 bytes sound/direct_sound_samples/cries/ledian.wav | Bin 4233 -> 4246 bytes sound/direct_sound_samples/cries/ledyba.wav | Bin 3525 -> 3538 bytes .../direct_sound_samples/cries/lickitung.wav | Bin 7589 -> 7602 bytes sound/direct_sound_samples/cries/lileep.wav | Bin 4857 -> 4870 bytes sound/direct_sound_samples/cries/linoone.wav | Bin 15266 -> 15278 bytes sound/direct_sound_samples/cries/lombre.wav | Bin 7301 -> 7314 bytes sound/direct_sound_samples/cries/lotad.wav | Bin 2250 -> 2262 bytes sound/direct_sound_samples/cries/loudred.wav | Bin 6601 -> 6614 bytes sound/direct_sound_samples/cries/ludicolo.wav | Bin 8416 -> 8428 bytes sound/direct_sound_samples/cries/lugia.wav | Bin 18918 -> 18930 bytes sound/direct_sound_samples/cries/lunatone.wav | Bin 11975 -> 11988 bytes sound/direct_sound_samples/cries/luvdisc.wav | Bin 2475 -> 2488 bytes sound/direct_sound_samples/cries/machamp.wav | Bin 8274 -> 8286 bytes sound/direct_sound_samples/cries/machoke.wav | Bin 6800 -> 6812 bytes sound/direct_sound_samples/cries/machop.wav | Bin 6714 -> 6726 bytes sound/direct_sound_samples/cries/magby.wav | Bin 7237 -> 7250 bytes sound/direct_sound_samples/cries/magcargo.wav | Bin 10504 -> 10516 bytes sound/direct_sound_samples/cries/magikarp.wav | Bin 9511 -> 9524 bytes sound/direct_sound_samples/cries/magmar.wav | Bin 7756 -> 7768 bytes .../direct_sound_samples/cries/magnemite.wav | Bin 9629 -> 9642 bytes sound/direct_sound_samples/cries/magneton.wav | Bin 11933 -> 11946 bytes sound/direct_sound_samples/cries/makuhita.wav | Bin 3722 -> 3734 bytes .../direct_sound_samples/cries/manectric.wav | Bin 10510 -> 10522 bytes sound/direct_sound_samples/cries/mankey.wav | Bin 8197 -> 8210 bytes sound/direct_sound_samples/cries/mantine.wav | Bin 7903 -> 7916 bytes sound/direct_sound_samples/cries/mareep.wav | Bin 3713 -> 3726 bytes sound/direct_sound_samples/cries/marill.wav | Bin 6557 -> 6570 bytes sound/direct_sound_samples/cries/marowak.wav | Bin 7234 -> 7246 bytes .../direct_sound_samples/cries/marshtomp.wav | Bin 8516 -> 8528 bytes .../direct_sound_samples/cries/masquerain.wav | Bin 9849 -> 9862 bytes sound/direct_sound_samples/cries/mawile.wav | Bin 5774 -> 5786 bytes sound/direct_sound_samples/cries/medicham.wav | Bin 8264 -> 8276 bytes sound/direct_sound_samples/cries/meditite.wav | Bin 4096 -> 4108 bytes sound/direct_sound_samples/cries/meganium.wav | Bin 8119 -> 8132 bytes sound/direct_sound_samples/cries/meowth.wav | Bin 4814 -> 4826 bytes .../direct_sound_samples/cries/metagross.wav | Bin 19663 -> 19676 bytes sound/direct_sound_samples/cries/metang.wav | Bin 9417 -> 9430 bytes sound/direct_sound_samples/cries/metapod.wav | Bin 11641 -> 11654 bytes sound/direct_sound_samples/cries/mew.wav | Bin 15165 -> 15178 bytes sound/direct_sound_samples/cries/mewtwo.wav | Bin 15162 -> 15174 bytes .../direct_sound_samples/cries/mightyena.wav | Bin 9766 -> 9778 bytes sound/direct_sound_samples/cries/milotic.wav | Bin 19560 -> 19572 bytes sound/direct_sound_samples/cries/miltank.wav | Bin 7442 -> 7454 bytes sound/direct_sound_samples/cries/minun.wav | Bin 8023 -> 8036 bytes .../direct_sound_samples/cries/misdreavus.wav | Bin 5835 -> 5848 bytes sound/direct_sound_samples/cries/moltres.wav | Bin 11815 -> 11828 bytes sound/direct_sound_samples/cries/mr_mime.wav | Bin 9465 -> 9478 bytes sound/direct_sound_samples/cries/mudkip.wav | Bin 3794 -> 3806 bytes sound/direct_sound_samples/cries/muk.wav | Bin 7393 -> 7406 bytes sound/direct_sound_samples/cries/murkrow.wav | Bin 8388 -> 8400 bytes sound/direct_sound_samples/cries/natu.wav | Bin 5313 -> 5326 bytes sound/direct_sound_samples/cries/nidoking.wav | Bin 12194 -> 12206 bytes .../direct_sound_samples/cries/nidoqueen.wav | Bin 8442 -> 8454 bytes .../direct_sound_samples/cries/nidoran_f.wav | Bin 4876 -> 4888 bytes .../direct_sound_samples/cries/nidoran_m.wav | Bin 5234 -> 5246 bytes sound/direct_sound_samples/cries/nidorina.wav | Bin 6412 -> 6424 bytes sound/direct_sound_samples/cries/nidorino.wav | Bin 6061 -> 6074 bytes sound/direct_sound_samples/cries/nincada.wav | Bin 3262 -> 3274 bytes .../direct_sound_samples/cries/ninetales.wav | Bin 12193 -> 12206 bytes sound/direct_sound_samples/cries/ninjask.wav | Bin 6102 -> 6114 bytes sound/direct_sound_samples/cries/noctowl.wav | Bin 10582 -> 10594 bytes sound/direct_sound_samples/cries/nosepass.wav | Bin 6714 -> 6726 bytes sound/direct_sound_samples/cries/numel.wav | Bin 4683 -> 4696 bytes sound/direct_sound_samples/cries/nuzleaf.wav | Bin 5731 -> 5744 bytes .../direct_sound_samples/cries/octillery.wav | Bin 13103 -> 13116 bytes sound/direct_sound_samples/cries/oddish.wav | Bin 7316 -> 7328 bytes sound/direct_sound_samples/cries/omanyte.wav | Bin 6691 -> 6704 bytes sound/direct_sound_samples/cries/omastar.wav | Bin 6685 -> 6698 bytes sound/direct_sound_samples/cries/onix.wav | Bin 12358 -> 12370 bytes sound/direct_sound_samples/cries/paras.wav | Bin 13942 -> 13954 bytes sound/direct_sound_samples/cries/parasect.wav | Bin 15159 -> 15172 bytes sound/direct_sound_samples/cries/pelipper.wav | Bin 5913 -> 5926 bytes sound/direct_sound_samples/cries/persian.wav | Bin 9430 -> 9442 bytes sound/direct_sound_samples/cries/phanpy.wav | Bin 5682 -> 5694 bytes sound/direct_sound_samples/cries/pichu.wav | Bin 3702 -> 3714 bytes sound/direct_sound_samples/cries/pidgeot.wav | Bin 8609 -> 8622 bytes .../direct_sound_samples/cries/pidgeotto.wav | Bin 7530 -> 7542 bytes sound/direct_sound_samples/cries/pidgey.wav | Bin 2003 -> 2016 bytes sound/direct_sound_samples/cries/pikachu.wav | Bin 8334 -> 8346 bytes .../direct_sound_samples/cries/piloswine.wav | Bin 6499 -> 6512 bytes sound/direct_sound_samples/cries/pineco.wav | Bin 6709 -> 6722 bytes sound/direct_sound_samples/cries/pinsir.wav | Bin 6205 -> 6218 bytes sound/direct_sound_samples/cries/plusle.wav | Bin 4523 -> 4536 bytes sound/direct_sound_samples/cries/politoed.wav | Bin 9132 -> 9144 bytes sound/direct_sound_samples/cries/poliwag.wav | Bin 5581 -> 5594 bytes .../direct_sound_samples/cries/poliwhirl.wav | Bin 3373 -> 3386 bytes .../direct_sound_samples/cries/poliwrath.wav | Bin 5600 -> 5612 bytes sound/direct_sound_samples/cries/ponyta.wav | Bin 7542 -> 7554 bytes .../direct_sound_samples/cries/poochyena.wav | Bin 4675 -> 4688 bytes sound/direct_sound_samples/cries/porygon.wav | Bin 10020 -> 10032 bytes sound/direct_sound_samples/cries/porygon2.wav | Bin 7873 -> 7886 bytes sound/direct_sound_samples/cries/primeape.wav | Bin 8104 -> 8116 bytes sound/direct_sound_samples/cries/psyduck.wav | Bin 6597 -> 6610 bytes sound/direct_sound_samples/cries/pupitar.wav | Bin 4253 -> 4266 bytes sound/direct_sound_samples/cries/quagsire.wav | Bin 6702 -> 6714 bytes sound/direct_sound_samples/cries/quilava.wav | Bin 5981 -> 5994 bytes sound/direct_sound_samples/cries/qwilfish.wav | Bin 5827 -> 5840 bytes sound/direct_sound_samples/cries/raichu.wav | Bin 11860 -> 11872 bytes sound/direct_sound_samples/cries/raikou.wav | Bin 8722 -> 8734 bytes sound/direct_sound_samples/cries/ralts.wav | Bin 5084 -> 5096 bytes sound/direct_sound_samples/cries/rapidash.wav | Bin 9310 -> 9322 bytes sound/direct_sound_samples/cries/raticate.wav | Bin 4789 -> 4802 bytes sound/direct_sound_samples/cries/rattata.wav | Bin 3974 -> 3986 bytes sound/direct_sound_samples/cries/rayquaza.wav | Bin 14550 -> 14562 bytes sound/direct_sound_samples/cries/regice.wav | Bin 15955 -> 15968 bytes sound/direct_sound_samples/cries/regirock.wav | Bin 15880 -> 15892 bytes .../direct_sound_samples/cries/registeel.wav | Bin 11495 -> 11508 bytes .../direct_sound_samples/cries/relicanth.wav | Bin 10090 -> 10102 bytes sound/direct_sound_samples/cries/remoraid.wav | Bin 5308 -> 5320 bytes sound/direct_sound_samples/cries/rhydon.wav | Bin 10205 -> 10218 bytes sound/direct_sound_samples/cries/rhyhorn.wav | Bin 9705 -> 9718 bytes sound/direct_sound_samples/cries/roselia.wav | Bin 5400 -> 5412 bytes sound/direct_sound_samples/cries/sableye.wav | Bin 5845 -> 5858 bytes .../direct_sound_samples/cries/salamence.wav | Bin 12532 -> 12544 bytes .../direct_sound_samples/cries/sandshrew.wav | Bin 4697 -> 4710 bytes .../direct_sound_samples/cries/sandslash.wav | Bin 6803 -> 6816 bytes sound/direct_sound_samples/cries/sceptile.wav | Bin 13030 -> 13042 bytes sound/direct_sound_samples/cries/scizor.wav | Bin 11480 -> 11492 bytes sound/direct_sound_samples/cries/scyther.wav | Bin 6695 -> 6708 bytes sound/direct_sound_samples/cries/seadra.wav | Bin 4246 -> 4258 bytes sound/direct_sound_samples/cries/seaking.wav | Bin 9673 -> 9686 bytes sound/direct_sound_samples/cries/sealeo.wav | Bin 5947 -> 5960 bytes sound/direct_sound_samples/cries/seedot.wav | Bin 4125 -> 4138 bytes sound/direct_sound_samples/cries/seel.wav | Bin 8973 -> 8986 bytes sound/direct_sound_samples/cries/sentret.wav | Bin 2127 -> 2140 bytes sound/direct_sound_samples/cries/seviper.wav | Bin 5838 -> 5850 bytes sound/direct_sound_samples/cries/sharpedo.wav | Bin 11507 -> 11520 bytes sound/direct_sound_samples/cries/shedinja.wav | Bin 3895 -> 3908 bytes sound/direct_sound_samples/cries/shelgon.wav | Bin 10010 -> 10022 bytes sound/direct_sound_samples/cries/shellder.wav | Bin 7736 -> 7748 bytes sound/direct_sound_samples/cries/shiftry.wav | Bin 9879 -> 9892 bytes .../direct_sound_samples/cries/shroomish.wav | Bin 4455 -> 4468 bytes sound/direct_sound_samples/cries/shuckle.wav | Bin 5129 -> 5142 bytes sound/direct_sound_samples/cries/shuppet.wav | Bin 4162 -> 4174 bytes sound/direct_sound_samples/cries/silcoon.wav | Bin 8093 -> 8106 bytes sound/direct_sound_samples/cries/skarmory.wav | Bin 12001 -> 12014 bytes sound/direct_sound_samples/cries/skiploom.wav | Bin 6535 -> 6548 bytes sound/direct_sound_samples/cries/skitty.wav | Bin 3579 -> 3592 bytes sound/direct_sound_samples/cries/slaking.wav | Bin 4988 -> 5000 bytes sound/direct_sound_samples/cries/slakoth.wav | Bin 4290 -> 4302 bytes sound/direct_sound_samples/cries/slowbro.wav | Bin 6738 -> 6750 bytes sound/direct_sound_samples/cries/slowking.wav | Bin 11926 -> 11938 bytes sound/direct_sound_samples/cries/slowpoke.wav | Bin 3742 -> 3754 bytes sound/direct_sound_samples/cries/slugma.wav | Bin 8555 -> 8568 bytes sound/direct_sound_samples/cries/smeargle.wav | Bin 5132 -> 5144 bytes sound/direct_sound_samples/cries/smoochum.wav | Bin 5879 -> 5892 bytes sound/direct_sound_samples/cries/sneasel.wav | Bin 4604 -> 4616 bytes sound/direct_sound_samples/cries/snorlax.wav | Bin 2667 -> 2680 bytes sound/direct_sound_samples/cries/snorunt.wav | Bin 8519 -> 8532 bytes sound/direct_sound_samples/cries/snubbull.wav | Bin 7239 -> 7252 bytes sound/direct_sound_samples/cries/solrock.wav | Bin 8098 -> 8110 bytes sound/direct_sound_samples/cries/spearow.wav | Bin 8824 -> 8836 bytes sound/direct_sound_samples/cries/spheal.wav | Bin 2899 -> 2912 bytes sound/direct_sound_samples/cries/spinarak.wav | Bin 6714 -> 6726 bytes sound/direct_sound_samples/cries/spinda.wav | Bin 6234 -> 6246 bytes sound/direct_sound_samples/cries/spoink.wav | Bin 3667 -> 3680 bytes sound/direct_sound_samples/cries/squirtle.wav | Bin 7240 -> 7252 bytes sound/direct_sound_samples/cries/stantler.wav | Bin 11226 -> 11238 bytes sound/direct_sound_samples/cries/starmie.wav | Bin 10421 -> 10434 bytes sound/direct_sound_samples/cries/staryu.wav | Bin 9953 -> 9966 bytes sound/direct_sound_samples/cries/steelix.wav | Bin 19007 -> 19020 bytes .../direct_sound_samples/cries/sudowoodo.wav | Bin 8103 -> 8116 bytes sound/direct_sound_samples/cries/suicune.wav | Bin 9145 -> 9158 bytes sound/direct_sound_samples/cries/sunflora.wav | Bin 7946 -> 7958 bytes sound/direct_sound_samples/cries/sunkern.wav | Bin 4075 -> 4088 bytes sound/direct_sound_samples/cries/surskit.wav | Bin 5277 -> 5290 bytes sound/direct_sound_samples/cries/swablu.wav | Bin 2842 -> 2854 bytes sound/direct_sound_samples/cries/swalot.wav | Bin 8694 -> 8706 bytes sound/direct_sound_samples/cries/swampert.wav | Bin 11239 -> 11252 bytes sound/direct_sound_samples/cries/swellow.wav | Bin 4542 -> 4554 bytes sound/direct_sound_samples/cries/swinub.wav | Bin 6347 -> 6360 bytes sound/direct_sound_samples/cries/taillow.wav | Bin 3043 -> 3056 bytes sound/direct_sound_samples/cries/tangela.wav | Bin 7569 -> 7582 bytes sound/direct_sound_samples/cries/tauros.wav | Bin 9168 -> 9180 bytes .../direct_sound_samples/cries/teddiursa.wav | Bin 8285 -> 8298 bytes .../direct_sound_samples/cries/tentacool.wav | Bin 7979 -> 7992 bytes .../direct_sound_samples/cries/tentacruel.wav | Bin 11476 -> 11488 bytes sound/direct_sound_samples/cries/togepi.wav | Bin 5479 -> 5492 bytes sound/direct_sound_samples/cries/togetic.wav | Bin 3545 -> 3558 bytes sound/direct_sound_samples/cries/torchic.wav | Bin 4859 -> 4872 bytes sound/direct_sound_samples/cries/torkoal.wav | Bin 4680 -> 4692 bytes sound/direct_sound_samples/cries/totodile.wav | Bin 9170 -> 9182 bytes sound/direct_sound_samples/cries/trapinch.wav | Bin 5098 -> 5110 bytes sound/direct_sound_samples/cries/treecko.wav | Bin 5854 -> 5866 bytes sound/direct_sound_samples/cries/tropius.wav | Bin 16337 -> 16350 bytes .../direct_sound_samples/cries/typhlosion.wav | Bin 18962 -> 18974 bytes .../direct_sound_samples/cries/tyranitar.wav | Bin 11674 -> 11686 bytes sound/direct_sound_samples/cries/tyrogue.wav | Bin 8091 -> 8104 bytes sound/direct_sound_samples/cries/umbreon.wav | Bin 7765 -> 7778 bytes sound/direct_sound_samples/cries/unown.wav | Bin 6594 -> 6606 bytes .../direct_sound_samples/cries/unused_265.wav | Bin 4695 -> 4708 bytes .../direct_sound_samples/cries/unused_268.wav | Bin 8847 -> 8860 bytes sound/direct_sound_samples/cries/ursaring.wav | Bin 14880 -> 14892 bytes sound/direct_sound_samples/cries/vaporeon.wav | Bin 11036 -> 11048 bytes sound/direct_sound_samples/cries/venomoth.wav | Bin 8021 -> 8034 bytes sound/direct_sound_samples/cries/venonat.wav | Bin 7765 -> 7778 bytes sound/direct_sound_samples/cries/venusaur.wav | Bin 9667 -> 9680 bytes sound/direct_sound_samples/cries/vibrava.wav | Bin 7021 -> 7034 bytes .../direct_sound_samples/cries/victreebel.wav | Bin 9649 -> 9662 bytes sound/direct_sound_samples/cries/vigoroth.wav | Bin 7187 -> 7200 bytes .../direct_sound_samples/cries/vileplume.wav | Bin 12778 -> 12790 bytes sound/direct_sound_samples/cries/volbeat.wav | Bin 5790 -> 5802 bytes sound/direct_sound_samples/cries/voltorb.wav | Bin 12364 -> 12376 bytes sound/direct_sound_samples/cries/vulpix.wav | Bin 11889 -> 11902 bytes sound/direct_sound_samples/cries/wailmer.wav | Bin 14152 -> 14164 bytes sound/direct_sound_samples/cries/wailord.wav | Bin 20947 -> 20960 bytes sound/direct_sound_samples/cries/walrein.wav | Bin 18085 -> 18098 bytes .../direct_sound_samples/cries/wartortle.wav | Bin 8633 -> 8646 bytes sound/direct_sound_samples/cries/weedle.wav | Bin 8142 -> 8154 bytes .../direct_sound_samples/cries/weepinbell.wav | Bin 7328 -> 7340 bytes sound/direct_sound_samples/cries/weezing.wav | Bin 10824 -> 10836 bytes sound/direct_sound_samples/cries/whiscash.wav | Bin 8497 -> 8510 bytes sound/direct_sound_samples/cries/whismur.wav | Bin 4110 -> 4122 bytes .../direct_sound_samples/cries/wigglytuff.wav | Bin 3430 -> 3442 bytes sound/direct_sound_samples/cries/wingull.wav | Bin 6150 -> 6162 bytes .../direct_sound_samples/cries/wobbuffet.wav | Bin 10294 -> 10306 bytes sound/direct_sound_samples/cries/wooper.wav | Bin 3729 -> 3742 bytes sound/direct_sound_samples/cries/wurmple.wav | Bin 4431 -> 4444 bytes sound/direct_sound_samples/cries/wynaut.wav | Bin 6951 -> 6964 bytes sound/direct_sound_samples/cries/xatu.wav | Bin 7411 -> 7424 bytes sound/direct_sound_samples/cries/yanma.wav | Bin 8524 -> 8536 bytes sound/direct_sound_samples/cries/zangoose.wav | Bin 4797 -> 4810 bytes sound/direct_sound_samples/cries/zapdos.wav | Bin 7743 -> 7756 bytes .../direct_sound_samples/cries/zigzagoon.wav | Bin 5805 -> 5818 bytes sound/direct_sound_samples/cries/zubat.wav | Bin 9707 -> 9720 bytes .../dance_drums_ride_bell.wav | Bin 30851 -> 30864 bytes .../drum_and_percussion_kick.wav | Bin 3947 -> 3960 bytes .../ethnic_flavours_atarigane.wav | Bin 5621 -> 5634 bytes .../ethnic_flavours_hyoushigi.wav | Bin 4986 -> 4998 bytes .../ethnic_flavours_kotsuzumi.wav | Bin 4422 -> 4434 bytes .../ethnic_flavours_ohtsuzumi.wav | Bin 6446 -> 6458 bytes .../heart_of_asia_gamelan.wav | Bin 17900 -> 17912 bytes sound/direct_sound_samples/phonemes/01.wav | Bin 1715 -> 1728 bytes sound/direct_sound_samples/phonemes/02.wav | Bin 1360 -> 1372 bytes sound/direct_sound_samples/phonemes/03.wav | Bin 2465 -> 2478 bytes sound/direct_sound_samples/phonemes/04.wav | Bin 2756 -> 2768 bytes sound/direct_sound_samples/phonemes/05.wav | Bin 907 -> 920 bytes sound/direct_sound_samples/phonemes/06.wav | Bin 3291 -> 3304 bytes sound/direct_sound_samples/phonemes/07.wav | Bin 1652 -> 1664 bytes sound/direct_sound_samples/phonemes/08.wav | Bin 1009 -> 1022 bytes sound/direct_sound_samples/phonemes/09.wav | Bin 3637 -> 3650 bytes sound/direct_sound_samples/phonemes/10.wav | Bin 2499 -> 2512 bytes sound/direct_sound_samples/phonemes/11.wav | Bin 1031 -> 1044 bytes sound/direct_sound_samples/phonemes/12.wav | Bin 2053 -> 2066 bytes sound/direct_sound_samples/phonemes/13.wav | Bin 3501 -> 3514 bytes sound/direct_sound_samples/phonemes/14.wav | Bin 688 -> 700 bytes sound/direct_sound_samples/phonemes/15.wav | Bin 3729 -> 3742 bytes sound/direct_sound_samples/phonemes/16.wav | Bin 2469 -> 2482 bytes sound/direct_sound_samples/phonemes/17.wav | Bin 958 -> 970 bytes sound/direct_sound_samples/phonemes/18.wav | Bin 1669 -> 1682 bytes sound/direct_sound_samples/phonemes/19.wav | Bin 3261 -> 3274 bytes sound/direct_sound_samples/phonemes/20.wav | Bin 1539 -> 1552 bytes sound/direct_sound_samples/phonemes/21.wav | Bin 2901 -> 2914 bytes sound/direct_sound_samples/phonemes/22.wav | Bin 1623 -> 1636 bytes sound/direct_sound_samples/phonemes/23.wav | Bin 609 -> 622 bytes sound/direct_sound_samples/phonemes/24.wav | Bin 2485 -> 2498 bytes sound/direct_sound_samples/phonemes/25.wav | Bin 4061 -> 4074 bytes sound/direct_sound_samples/phonemes/26.wav | Bin 1697 -> 1710 bytes sound/direct_sound_samples/phonemes/27.wav | Bin 2853 -> 2866 bytes sound/direct_sound_samples/phonemes/28.wav | Bin 3992 -> 4004 bytes sound/direct_sound_samples/phonemes/29.wav | Bin 1508 -> 1520 bytes sound/direct_sound_samples/phonemes/30.wav | Bin 3741 -> 3754 bytes sound/direct_sound_samples/phonemes/31.wav | Bin 3929 -> 3942 bytes sound/direct_sound_samples/phonemes/32.wav | Bin 2880 -> 2892 bytes sound/direct_sound_samples/phonemes/33.wav | Bin 3045 -> 3058 bytes sound/direct_sound_samples/phonemes/34.wav | Bin 2601 -> 2614 bytes sound/direct_sound_samples/phonemes/35.wav | Bin 1706 -> 1718 bytes sound/direct_sound_samples/phonemes/36.wav | Bin 2865 -> 2878 bytes sound/direct_sound_samples/phonemes/37.wav | Bin 1678 -> 1690 bytes sound/direct_sound_samples/phonemes/38.wav | Bin 1922 -> 1934 bytes sound/direct_sound_samples/phonemes/39.wav | Bin 2445 -> 2458 bytes sound/direct_sound_samples/phonemes/40.wav | Bin 2061 -> 2074 bytes sound/direct_sound_samples/phonemes/41.wav | Bin 1488 -> 1500 bytes sound/direct_sound_samples/phonemes/42.wav | Bin 3525 -> 3538 bytes sound/direct_sound_samples/phonemes/43.wav | Bin 1231 -> 1244 bytes sound/direct_sound_samples/phonemes/44.wav | Bin 1368 -> 1380 bytes sound/direct_sound_samples/phonemes/45.wav | Bin 2073 -> 2086 bytes sound/direct_sound_samples/phonemes/46.wav | Bin 3151 -> 3164 bytes sound/direct_sound_samples/phonemes/47.wav | Bin 994 -> 1006 bytes sound/direct_sound_samples/phonemes/48.wav | Bin 2061 -> 2074 bytes sound/direct_sound_samples/phonemes/49.wav | Bin 3253 -> 3266 bytes sound/direct_sound_samples/phonemes/50.wav | Bin 1336 -> 1348 bytes sound/direct_sound_samples/phonemes/51.wav | Bin 2817 -> 2830 bytes sound/direct_sound_samples/register_noise.wav | Bin 8116 -> 8128 bytes .../sc88pro_accordion.wav | Bin 5179 -> 5192 bytes .../sc88pro_accordion_duplicate.wav | Bin 5179 -> 5192 bytes .../direct_sound_samples/sc88pro_bubbles.wav | Bin 4196 -> 4208 bytes .../sc88pro_church_organ3_high.wav | Bin 6090 -> 6102 bytes .../sc88pro_church_organ3_low.wav | Bin 10673 -> 10686 bytes .../sc88pro_fingered_bass.wav | Bin 7354 -> 7366 bytes sound/direct_sound_samples/sc88pro_flute.wav | Bin 1999 -> 2012 bytes .../sc88pro_french_horn_60.wav | Bin 28672 -> 28684 bytes .../sc88pro_french_horn_72.wav | Bin 17902 -> 17914 bytes .../sc88pro_fretless_bass.wav | Bin 3125 -> 3138 bytes .../sc88pro_glockenspiel.wav | Bin 1807 -> 1820 bytes .../direct_sound_samples/sc88pro_harp.bad.wav | Bin 0 -> 2728 bytes sound/direct_sound_samples/sc88pro_harp.wav | Bin 2716 -> 2728 bytes .../sc88pro_jingle_bell.wav | Bin 6246 -> 6258 bytes .../sc88pro_mute_high_conga.wav | Bin 1388 -> 1400 bytes .../sc88pro_nylon_str_guitar.wav | Bin 8154 -> 8166 bytes .../sc88pro_open_low_conga.wav | Bin 1564 -> 1576 bytes .../sc88pro_orchestra_cymbal_crash.wav | Bin 3989 -> 4002 bytes .../sc88pro_orchestra_snare.wav | Bin 2249 -> 2262 bytes sound/direct_sound_samples/sc88pro_organ2.wav | Bin 2148 -> 2160 bytes .../sc88pro_piano1_48.wav | Bin 4041 -> 4054 bytes .../sc88pro_piano1_60.wav | Bin 5834 -> 5846 bytes .../sc88pro_piano1_72.wav | Bin 5574 -> 5586 bytes .../sc88pro_piano1_84.wav | Bin 3062 -> 3074 bytes .../sc88pro_pizzicato_strings.wav | Bin 1957 -> 1970 bytes .../direct_sound_samples/sc88pro_rnd_kick.wav | Bin 1267 -> 1280 bytes .../sc88pro_rnd_snare.wav | Bin 1862 -> 1874 bytes .../sc88pro_slap_bass.wav | Bin 4003 -> 4016 bytes .../sc88pro_square_wave.wav | Bin 7296 -> 7308 bytes .../sc88pro_string_ensemble_60.wav | Bin 13840 -> 13852 bytes .../sc88pro_string_ensemble_72.wav | Bin 9095 -> 9108 bytes .../sc88pro_string_ensemble_84.wav | Bin 14133 -> 14146 bytes .../sc88pro_synth_bass.wav | Bin 3294 -> 3306 bytes sound/direct_sound_samples/sc88pro_taiko.wav | Bin 5687 -> 5700 bytes .../sc88pro_tambourine.wav | Bin 2312 -> 2324 bytes .../direct_sound_samples/sc88pro_timpani.wav | Bin 5434 -> 5446 bytes .../sc88pro_timpani_with_snare.wav | Bin 5434 -> 5446 bytes .../sc88pro_tr909_hand_clap.wav | Bin 2276 -> 2288 bytes .../sc88pro_trumpet_60.wav | Bin 5050 -> 5062 bytes .../sc88pro_trumpet_72.wav | Bin 5499 -> 5512 bytes .../sc88pro_trumpet_84.wav | Bin 5257 -> 5270 bytes .../direct_sound_samples/sc88pro_tuba_39.wav | Bin 4357 -> 4370 bytes .../direct_sound_samples/sc88pro_tuba_51.wav | Bin 4293 -> 4306 bytes .../sc88pro_tubular_bell.wav | Bin 6620 -> 6632 bytes sound/direct_sound_samples/sc88pro_wind.wav | Bin 4782 -> 4794 bytes .../sc88pro_xylophone.wav | Bin 2719 -> 2732 bytes .../direct_sound_samples/sd90_ambient_tom.wav | Bin 8495 -> 8508 bytes .../sd90_classical_detuned_ep1_high.wav | Bin 5140 -> 5152 bytes .../sd90_classical_detuned_ep1_low.wav | Bin 9939 -> 9952 bytes .../sd90_classical_distortion_guitar_high.wav | Bin 12380 -> 12392 bytes .../sd90_classical_distortion_guitar_low.wav | Bin 11453 -> 11466 bytes .../sd90_classical_oboe.wav | Bin 5037 -> 5050 bytes .../sd90_classical_overdrive_guitar.wav | Bin 7897 -> 7910 bytes .../sd90_classical_shakuhachi.wav | Bin 15393 -> 15406 bytes .../sd90_classical_whistle.wav | Bin 2761 -> 2774 bytes sound/direct_sound_samples/sd90_cowbell.wav | Bin 2571 -> 2584 bytes .../sd90_enhanced_delay_shaku.wav | Bin 8555 -> 8568 bytes .../sd90_open_triangle.wav | Bin 3783 -> 3796 bytes .../direct_sound_samples/sd90_solo_snare.wav | Bin 6597 -> 6610 bytes .../sd90_special_scream_drive.wav | Bin 6308 -> 6320 bytes .../direct_sound_samples/steinway_b_piano.wav | Bin 4653 -> 4666 bytes .../trinity_30303_mega_bass.wav | Bin 8263 -> 8276 bytes .../trinity_big_boned.wav | Bin 13131 -> 13144 bytes .../trinity_cymbal_crash.wav | Bin 2382 -> 2394 bytes sound/direct_sound_samples/unknown_01.wav | Bin 5400 -> 5412 bytes sound/direct_sound_samples/unknown_02.wav | Bin 7260 -> 7272 bytes sound/direct_sound_samples/unknown_03.wav | Bin 5151 -> 5164 bytes sound/direct_sound_samples/unknown_04.wav | Bin 9965 -> 9978 bytes sound/direct_sound_samples/unknown_05.wav | Bin 4977 -> 4990 bytes sound/direct_sound_samples/unknown_06.wav | Bin 8565 -> 8578 bytes sound/direct_sound_samples/unknown_07.wav | Bin 8828 -> 8840 bytes sound/direct_sound_samples/unknown_08.wav | Bin 2103 -> 2116 bytes sound/direct_sound_samples/unknown_09.wav | Bin 8217 -> 8230 bytes sound/direct_sound_samples/unknown_10.wav | Bin 7081 -> 7094 bytes sound/direct_sound_samples/unknown_11.wav | Bin 2356 -> 2368 bytes sound/direct_sound_samples/unknown_12.wav | Bin 3196 -> 3208 bytes sound/direct_sound_samples/unknown_13.wav | Bin 3067 -> 3080 bytes sound/direct_sound_samples/unknown_14.wav | Bin 2824 -> 2836 bytes sound/direct_sound_samples/unknown_15.wav | Bin 2484 -> 2496 bytes sound/direct_sound_samples/unknown_16.wav | Bin 2739 -> 2752 bytes sound/direct_sound_samples/unknown_17.wav | Bin 3315 -> 3328 bytes sound/direct_sound_samples/unknown_18.wav | Bin 6923 -> 6936 bytes sound/direct_sound_samples/unknown_bell.wav | Bin 4096 -> 4108 bytes .../unknown_close_hihat.wav | Bin 1125 -> 1138 bytes .../unknown_female_voice.wav | Bin 5807 -> 5820 bytes .../unknown_koto_high.wav | Bin 6256 -> 6268 bytes .../direct_sound_samples/unknown_koto_low.wav | Bin 8866 -> 8878 bytes .../unknown_open_hihat.wav | Bin 3738 -> 3750 bytes sound/direct_sound_samples/unknown_snare.wav | Bin 1323 -> 1336 bytes .../unknown_synth_snare.wav | Bin 2679 -> 2692 bytes .../unused_guitar_separates_power_chord.wav | Bin 4991 -> 5004 bytes .../unused_heart_of_asia_indian_drum.wav | Bin 3796 -> 3808 bytes .../direct_sound_samples/unused_sc55_tom.wav | Bin 4266 -> 4278 bytes .../unused_sc88pro_unison_slap.wav | Bin 13925 -> 13938 bytes .../direct_sound_samples/unused_sd90_oboe.wav | Bin 2832 -> 2844 bytes .../unused_unknown_male_voice.wav | Bin 9489 -> 9502 bytes tools/wav2agb/converter.cpp | 10 +++++++--- tools/wav2agb/wav_file.cpp | 6 ++++++ tools/wav2agb/wav_file.h | 1 + 548 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 sound/direct_sound_samples/sc88pro_harp.bad.wav diff --git a/sound/direct_sound_samples/bicycle_bell.wav b/sound/direct_sound_samples/bicycle_bell.wav index 92f9634069d2a94c0166218a01efa4b889003d78..d07fcceecbafcfb59f8dfc4eb6b8d1f2be6db4d8 100644 GIT binary patch delta 31 mcmdmNe88AB$kWYj$3)g}?!@$@92N!!20uxLjnNU3j0^yq9|$!7 delta 29 lcmX?LyxEvF$kWYj^+eWij+DfbM1M&JhKYst8`ld+0sxbl3331c diff --git a/sound/direct_sound_samples/classical_choir_voice_ahhs.wav b/sound/direct_sound_samples/classical_choir_voice_ahhs.wav index 7e38d3a3f7b2fde15aaeb181a23ee5d472c97d22..51f5656cc4a372b7270a8f50591ab389b1d24767 100644 GIT binary patch delta 46 zcmbQKw@i;U$kWYDZX#>GNMd?Y4hsVV!yGXNhLpsT#JNCvVx#rM39K9U#ELO8001pC B4D0{^ delta 17 YcmZ3cH&c%_$kWYDa3X8|#)hS005VJk$^ZZW diff --git a/sound/direct_sound_samples/cries/abra.wav b/sound/direct_sound_samples/cries/abra.wav index 14aba2d7a52efa83e19a3136175d8f649bfcb35c..34d645d9d3e627dd5c64832088777cb6eb56fe58 100644 GIT binary patch delta 29 kcmbOiy(*eD$kWYj(L~m8?!@$@92N!!21{LrjnU4!0E~$UK>z>% delta 17 YcmZ1#JujLy$kWYj+C@~ diff --git a/sound/direct_sound_samples/cries/aerodactyl.wav b/sound/direct_sound_samples/cries/aerodactyl.wav index 95518884b9dd2a519a7644d0a644c9add6866127..23479e7448cb2a322d6bee6258a3aaebceaebc3d 100644 GIT binary patch delta 29 kcmZpO?}=v(@^o`+naCQ>otU1K!@|J8Ag#}^Fyc-ECT*v5?ch5$&i2XX)a diff --git a/sound/direct_sound_samples/cries/aipom.wav b/sound/direct_sound_samples/cries/aipom.wav index 4d7bc829cd735dbb27286ad459d05d45f689b003..2fe15f87562330e9b09ffceba758dc1fa76ebfd4 100644 GIT binary patch delta 29 kcmZ2tzQLR|$kWYj#YEO{?!@$@92N!!2776SjnSUc0ETe~^8f$< delta 17 YcmdmBzQmk0$kWYj&P3MmjTs)&05^;U^Z)<= diff --git a/sound/direct_sound_samples/cries/alakazam.wav b/sound/direct_sound_samples/cries/alakazam.wav index f397363d15350aac81aa59b815441562dc0da8ee..911472dece8692eb5e9fceb72f7f1e9a4dd99305 100644 GIT binary patch delta 31 mcmeCLo>R>l diff --git a/sound/direct_sound_samples/cries/altaria.wav b/sound/direct_sound_samples/cries/altaria.wav index ca35cbf5194df6cc1b9dde93f8919b81cfdf666b..08395d0d6461110d33e39224f562ff735dfb84ab 100644 GIT binary patch delta 31 mcmX@FeMg%$$kWa3%0$+1?!@$@92N!!hAdHrjnO5dj0^yyhX|k diff --git a/sound/direct_sound_samples/cries/ampharos.wav b/sound/direct_sound_samples/cries/ampharos.wav index 346b2aa48bfcacdd58246e55e096e074042498c5..da0bd761ca6ddb939e0b5c87c90d17dfea53f706 100644 GIT binary patch delta 29 kcmX@&aKV8!$kWZuV`Tzg` delta 17 YcmZqC`=QGkjTwQ806K*RHvj+t diff --git a/sound/direct_sound_samples/cries/ariados.wav b/sound/direct_sound_samples/cries/ariados.wav index f059bcfc9302049d6c1389cff8ac34be1ec0d8d2..168f97552ff107781e305a5529250abd1ed11f07 100644 GIT binary patch delta 31 mcmZ2$u*-lo$kWZuXd-JkcVc={4hsVV!wGSQjnS9H85sbRp$Lrt delta 17 YcmdmGu-1Sz$kWYDbs}r{#*B;N05w4d2LJ#7 diff --git a/sound/direct_sound_samples/cries/armaldo.wav b/sound/direct_sound_samples/cries/armaldo.wav index de11795664ab024504e257044a51ad5eb87d028c..aecebd18e970e465fb04df9a9d2d015bf6bc3593 100644 GIT binary patch delta 29 kcmZpRoD|6#ehlPQGK~aZcW3;vo0E8X~!vFvP delta 17 YcmbOf*%rwfehlPQGVVNMq#^?=#j0^yT2?xIb delta 17 YcmbQC(yhW8#*AGG05gvT*8l(j diff --git a/sound/direct_sound_samples/cries/azurill.wav b/sound/direct_sound_samples/cries/azurill.wav index 65fa56e65b80d73b788f81810a668f72b75b575e..b3eda262b7b8e77053fd7f1365fd4a48765493a9 100644 GIT binary patch delta 31 mcmaE_@kfI-$kWZOWFl)gcVc={4hsVV1D6QH#%K`{Mg{<#E(gH? delta 17 YcmeyP@m_;9$kWX&eIjf4#tdN*06iiF`~Uy| diff --git a/sound/direct_sound_samples/cries/bagon.wav b/sound/direct_sound_samples/cries/bagon.wav index af36a96eb860203a5841a387888a69ea6aea470f..2f36926eed2992ae166f021537c9bcfc005f0d4f 100644 GIT binary patch delta 29 kcmew$_eYL3$kWZOWFl)gcVc={4hsVV12;dz#%NJ~0E?3cr2qf` delta 17 Ycmew(_d$*|$kWX&V<^TWy diff --git a/sound/direct_sound_samples/cries/baltoy.wav b/sound/direct_sound_samples/cries/baltoy.wav index 395954b565d95e342c1b0db06d049803338e8837..59867a0ed5238a1648f4fca437f2a9b72bcf24e4 100644 GIT binary patch delta 29 kcmeA&oMy-xehlPQGK~;ibW3;{m0DN`_UjP6A delta 17 YcmbPc*k#BXh($ diff --git a/sound/direct_sound_samples/cries/barboach.wav b/sound/direct_sound_samples/cries/barboach.wav index 40539ce514ab56fb7121158d2d9f751c5ebc96d2..a955c76c2147df59cbb740ba800834f8d1230abd 100644 GIT binary patch delta 29 kcmZ3bvQ33G$kWYDZz5|rcVc={4hsVV!%;zojnU@?0e+_lR{#J2 delta 17 Ycmdm{vPy+D$kWYDX(DU*#*A}<05e1d+yDRo diff --git a/sound/direct_sound_samples/cries/bayleef.wav b/sound/direct_sound_samples/cries/bayleef.wav index 754e6e6e6e146b679e08b98b27c4882343657d64..6dbcaf918de16b16fe178df680259204b1468de2 100644 GIT binary patch delta 31 mcmcbpbWe#j$kWX&Y$9tocVc={4hsVV!y5sHjnUr(7#RSagb5b_ delta 17 YcmcbobWw>l$kWZub0TZ_#*D8506BgJbN~PV diff --git a/sound/direct_sound_samples/cries/beautifly.wav b/sound/direct_sound_samples/cries/beautifly.wav index f9c3f26a5b6ad338fb3e1d882c8c4ff03434ad20..248428abc54f0e1da2ecd0cbcc9808d98fb6c182 100644 GIT binary patch delta 31 mcmdn2a6o}I$kWZuVj^oecVc={4hsVV!#RG2jnOyw85sbP;|O~I delta 17 YcmX@0uvvjM$kWYDdm?N2#*FLy05nwv_W%F@ diff --git a/sound/direct_sound_samples/cries/beedrill.wav b/sound/direct_sound_samples/cries/beedrill.wav index 6ba426baea0941fcd5f2bfa09d50228835e92032..a3fa107ac176385a6207037cd583a9de1c7aaeeb 100644 GIT binary patch delta 29 kcmX@*ea)LS$kWa3+(g!J?!@$@92N!!hE!FCjnVn40GEvj?EnA( delta 17 YcmccSeaf3P$kWa3&_veojTw2W06;1Rz5oCK diff --git a/sound/direct_sound_samples/cries/beldum.wav b/sound/direct_sound_samples/cries/beldum.wav index 5d6514af4cf7737d060c50f369fa581cc3e3eac5..427bb24771db8370291c08920a5e333f28862ab4 100644 GIT binary patch delta 31 mcmaE_`bU*D$kWa3%S6_2?!@$@92N!!hAtt7jnPwt7#RSq>IpXh delta 17 YcmeyP`d*ba$kWa3`9#+6jTw`L071qE^Z)<= diff --git a/sound/direct_sound_samples/cries/bellossom.wav b/sound/direct_sound_samples/cries/bellossom.wav index 71680c16b2addbaff6bacfd79444be46018001f1..7d47d8a78f57925be4549f5d1b62fa3ddc8954f8 100644 GIT binary patch delta 31 mcmbPgzQ~+4$kWYj)0F#UerT_o{ delta 16 XcmaFiaL0i)$kWX&WFl+$!VCofHq-^% diff --git a/sound/direct_sound_samples/cries/butterfree.wav b/sound/direct_sound_samples/cries/butterfree.wav index 796a1afa9afb91a6839367779581e55934bba9e6..19e781569c59524cebdab86c632f46da936150eb 100644 GIT binary patch delta 29 kcmdm@en6cy$kWYj$3)g}?!@$@92N!!27h6OjnR?90Ej6F6951J delta 17 YcmX@0zD1oi$kWYj%|zDljTsTb060Vj3;+NC diff --git a/sound/direct_sound_samples/cries/cacnea.wav b/sound/direct_sound_samples/cries/cacnea.wav index b2786069b6cb550ab5c4572be97fb458e738f6f9..dcf4323c4b670d09c3bc11ccadee03c13bcedd91 100644 GIT binary patch delta 31 mcmbQOyh52Z$kWYj!9><@?!@$@92N!!1~Wm1jnNK*j0^ydKL?Ef delta 17 YcmZ3XJX@JH$kWYj@QaVCN_$kWZuWg=@hcVc={4hsVV!)TaUg;<$kWZuVj^q!#*8Q006h{0wg3PC diff --git a/sound/direct_sound_samples/cries/camerupt.wav b/sound/direct_sound_samples/cries/camerupt.wav index 95fdce35757c01f160c72e7e511169707c90bcf6..bef89f41d03ab21a28f39c59aafcd063389c8c06 100644 GIT binary patch delta 31 mcmbOkwJeG?$kWYDZX#pF diff --git a/sound/direct_sound_samples/cries/cascoon.wav b/sound/direct_sound_samples/cries/cascoon.wav index fff0be68157e973f763b780b395272008beeff62..3e3daf62604505faf5307ff8d2ed8e602e6da8db 100644 GIT binary patch delta 29 kcmca$f5)CR$kWa3%0$+1?!@$@92N!!hHQC;jnSp@0G8PZ=Kufz delta 17 Ycmca(f5DzL$kWa3#6;HcjTt5K06(|}xBvhE diff --git a/sound/direct_sound_samples/cries/castform.wav b/sound/direct_sound_samples/cries/castform.wav index 83748d45b8578c8f936357201922189d693612b4..8b50b35d98ba859d75c3f6612932e44589602105 100644 GIT binary patch delta 29 kcmdmBxW|w+$kWYj%S6_2?!@$@92N!!25$+5jnSbJ0ErX`9RL6T delta 17 YcmdmExWSM$$kWYj#YEQdjTs>l065JC6#xJL diff --git a/sound/direct_sound_samples/cries/caterpie.wav b/sound/direct_sound_samples/cries/caterpie.wav index ccdf1ba1ac083e412bd6d931ecd96d63c23ab4db..c5073644629a0945b7c48550c717a213abd4c086 100644 GIT binary patch delta 29 kcmeyQ@K1p?$kWZOY$9tocVc={4hsVV1FrzX#%OT?0F1B)wEzGB delta 17 YcmeyT@JWF+$kWX&Ya(m-#tbn506d!o^8f$< diff --git a/sound/direct_sound_samples/cries/celebi.wav b/sound/direct_sound_samples/cries/celebi.wav index e217a99e81adbb80723302158cc93de2f967c57c..c5a560e4b2d11bd660190bd2fbac1fd4643bb470 100644 GIT binary patch delta 29 kcmca$amRu+$kWX&WFl)gcVc={4hsVV!)s}VjnQAF0guB8Q2+n{ delta 17 Ycmca(alwK$$kWZuV>ZjTt_w06LZiHUIzs diff --git a/sound/direct_sound_samples/cries/charmander.wav b/sound/direct_sound_samples/cries/charmander.wav index 3d82aca2fa711f8945c6ca566e1a7acb2f594e64..09762f21034ec5777e46e63920b0adc655cc80ee 100644 GIT binary patch delta 29 kcmX?Pan6D@$kWZuZ6a$pcVc={4hsVV!(C~HjnU7g0gD|83jhEB delta 17 YcmX?Sama!-$kWZuY9ed+#*Amu06CThZU6uP diff --git a/sound/direct_sound_samples/cries/charmeleon.wav b/sound/direct_sound_samples/cries/charmeleon.wav index a491f0586ec819e44285a417dc51c0dadc21b401..a5289e2b01a737d6f60abb92b1dfa5a30c2fb7dc 100644 GIT binary patch delta 31 mcmaEC@xg*M$kWX&VSjnV1C0F2KFSpWb4 delta 17 YcmX@7en_1)$kWYj*F@IvjTvde06LHcL;wH) diff --git a/sound/direct_sound_samples/cries/chinchou.wav b/sound/direct_sound_samples/cries/chinchou.wav index 88229968284ecfb4dd4da5293f415bed44f28cd1..4fe6c6a7724731cc9098717e7a335c4a5db2fea3 100644 GIT binary patch delta 29 kcmca(_`;Ai$kWa3!9><@?!@$@92N!!hH?ppjnRz~0GF@``2YX_ delta 17 YcmaE1c*l@6$kWa3%0$-ijTsFR06+x>#Q*>R diff --git a/sound/direct_sound_samples/cries/clamperl.wav b/sound/direct_sound_samples/cries/clamperl.wav index 6615de8779261f61af735ddf092618b341a25ca7..5e80ebab66dbbe3f8a0ae256fa4e46307e9d6e92 100644 GIT binary patch delta 29 kcmX@%e#M<@?!@$@92N!!26F+1jnR$*0Djm9i2wiq delta 17 YcmZ3XI7g8+$kWYj%0$-ijTsIC05hEhod5s; diff --git a/sound/direct_sound_samples/cries/cleffa.wav b/sound/direct_sound_samples/cries/cleffa.wav index 53d18df4153c3394244d941659f560a68b60d3cc..946a75959ecdca438549c9491044f919d1180acc 100644 GIT binary patch delta 29 kcmX>keomY<$kWa3*hJQF?!@$@92N!!hFETfjnV1c0EssUDF6Tf delta 17 YcmX>nen^}($kWYj*F@IvjTvd&063@y8~^|S diff --git a/sound/direct_sound_samples/cries/cloyster.wav b/sound/direct_sound_samples/cries/cloyster.wav index 4fc766ae194c4631f2c76a54b0ac246ec92e0820..acd5f7fc302296d7a5f384df8c7b64c2c10f40f2 100644 GIT binary patch delta 29 kcmZn(oDj$wehlPQGL0*GlW3;9Q0D-6np#T5? delta 17 YcmbOb*b>MZc6WRwI_--$kWZuWFl+$#*7C#06eD#s{jB1 diff --git a/sound/direct_sound_samples/cries/croconaw.wav b/sound/direct_sound_samples/cries/croconaw.wav index deb2a700357af472782c1897c813a073e0730ad5..9fd775fc0c669f1bf7094efbed21fb73207659da 100644 GIT binary patch delta 31 mcmZqnpWx3LehlPQGK~9}vW3+}kBLe`CK?j)t delta 17 YcmbQ>-|WvCk06h{0h5!Hn diff --git a/sound/direct_sound_samples/cries/delcatty.wav b/sound/direct_sound_samples/cries/delcatty.wav index dce5e73b7ab259fce86d85f3b19dde72ab01bc52..7807052669c2f6293434a6eac023dd7d887e7896 100644 GIT binary patch delta 29 kcmZ1xv?Yi&$kWYDXCiAjcVc={4hsVV!(k1EjnQW{0Ekiu*8l(j delta 17 YcmdlIv?7Q#$kWYDVIphz#*8x>061#~M*si- diff --git a/sound/direct_sound_samples/cries/delibird.wav b/sound/direct_sound_samples/cries/delibird.wav index 7ccf645de649bef040d7eb3a6ae229eda8068814..f4b27e73265505104ec90d978a4c424b308c1c2e 100644 GIT binary patch delta 29 kcmdmBzsH_6$kWYj%S6_2?!@$@92N!!25)(WjnSd<0E{^ZM*si- delta 17 YcmdmEzrmh0$kWYj#YEQdjTs^G06KUEH~;_u diff --git a/sound/direct_sound_samples/cries/deoxys.wav b/sound/direct_sound_samples/cries/deoxys.wav index 7ed0f65cc1fc0c154ed6e985b732a94c2b486226..c5943318dbf899e52fb77a5c3b49c4a24d803d9d 100644 GIT binary patch delta 31 mcmZ1;xFwJ^$kWYj%|zC4?!@$@92N!!1}6=MjnO_Dj0^yt90*eY delta 17 YcmdlIxIBSbRmc}$kWZuVv1$kWZuW+H3&#*7yl06hZ+w*UYD diff --git a/sound/direct_sound_samples/cries/diglett.wav b/sound/direct_sound_samples/cries/diglett.wav index 8eecd3bedb337e1d773ff03eb06d878d800c1c08..ba098f64a65007c04252e26c6ec88253a1d3237f 100644 GIT binary patch delta 29 kcmez3-QdF-s{jB1 delta 17 YcmcbkeL)9k|*ehlPQGL0pkxW3-|o0E#~c&Hw-a delta 17 YcmeBh{^P_N4jnQTbj0^yg`UkZD delta 17 YcmbQ|IMIB?!@$@92N!!hD0%jjnUa+0FQhKe*gdg delta 17 YcmcbldrX%#$kWYj-$d5%jTu>D06XsnV*mgE diff --git a/sound/direct_sound_samples/cries/drowzee.wav b/sound/direct_sound_samples/cries/drowzee.wav index 41321096630ce26176cfe87234932cd40d80ecba..3294d5f83d727dbf3d8e086eaccf7f34f6dd2a56 100644 GIT binary patch delta 29 kcmdl`xTlac$kWYj%S6_2?!@$@92N!!25$?7jnSbN0GD(K-2eap delta 17 Ycmdl}xS^0W$kWYj#YEQdjTs>p06=X9wEzGB diff --git a/sound/direct_sound_samples/cries/dugtrio.wav b/sound/direct_sound_samples/cries/dugtrio.wav index d159a2fae0909a3b1b586babff9e1cfeb2cd41ee..59be4c5a7fca28395b5c0bb55a22aa3d1683de8e 100644 GIT binary patch delta 31 mcmaFq{mq*-$kWa3-9*-K?!@$@92N!!h89(ZjnRFoj0^y^9SMs7 delta 17 Ycmez7{nDE?$kWa3;Y8N(jTybF07X#;I{*Lx diff --git a/sound/direct_sound_samples/cries/dunsparce.wav b/sound/direct_sound_samples/cries/dunsparce.wav index 5154546d10011937d4cae0c2c90d04e5551633c2..b3bc21a0429aaff11e413f628ec225dd2e0e3f1e 100644 GIT binary patch delta 29 kcmeCMn_|ZrehlPQGVX+*;#^|+j0C_YA`v3p{ delta 17 YcmbPY*I~yRh($ diff --git a/sound/direct_sound_samples/cries/dusclops.wav b/sound/direct_sound_samples/cries/dusclops.wav index 81353887b95d99ac3cbeac032ed975f6711348fd..0ae486972e256d722370b3392cd0d68c4c895acb 100644 GIT binary patch delta 29 kcmca(`ofeo$kWa3!9><@?!@$@92N!!hH@!}jnR!#0GO5u1poj5 delta 17 YcmaE1ddHMC$kWa3%0$-ijTsG606>2R&j0`b diff --git a/sound/direct_sound_samples/cries/duskull.wav b/sound/direct_sound_samples/cries/duskull.wav index eba8fc3ff1bdf42f5b635ae57e4d7778ec6f33c3..7ef72a3975a57b2b2b6d90ce33a331324136854c 100644 GIT binary patch delta 29 kcmcbhc}J5q$kWa3%0$+1?!@$@92N!!hHMdrjnSnd0Fmejr2qf` delta 17 Ycmcbkc|nsk$kWa3#6;HcjTt2(06iH7fdBvi diff --git a/sound/direct_sound_samples/cries/dustox.wav b/sound/direct_sound_samples/cries/dustox.wav index 42f23c12896d815b613d0ea7bd5761b8144575c9..76475856260373307d3acf3c3369feb6966c3fde 100644 GIT binary patch delta 29 kcmca&_`r}g$kWa3#zfX|?!@$@92N!!hI|QzjnS170F?*`(EtDd delta 17 YcmaE0c*T%4$kWa3%tY4kjTsdZ06w(_r2qf` diff --git a/sound/direct_sound_samples/cries/eevee.wav b/sound/direct_sound_samples/cries/eevee.wav index e21ce1f0e7e518e57442533b893101ae33596c42..833528278b734dde7c4cabc8a87171c2612edf75 100644 GIT binary patch delta 29 kcmca)e$SjW$kWa3+C=#*9-206G5#X8-^I diff --git a/sound/direct_sound_samples/cries/elekid.wav b/sound/direct_sound_samples/cries/elekid.wav index 82a9a2f675baf6961c893ade1a156927b792e64c..24911138698b868ba619abd1d294a78b3264cb4c 100644 GIT binary patch delta 31 mcmdn4c|?;n$kWYj&qUU6?!@$@92N!!h9D7!jnOe8j0^ypAP6e} delta 17 YcmX@2xm}Yr$kWYj{Y2LAjTzA*067o_9smFU diff --git a/sound/direct_sound_samples/cries/entei.wav b/sound/direct_sound_samples/cries/entei.wav index cf7e9c0c2facc62a131e118047de7f19f13cffa6..cce2db4b037571387d7cf9f62450fa52921adcdf 100644 GIT binary patch delta 29 kcmaFi|HYp*$kWa3%|zC4?!@$@92N!!hGun!jnTd80HSFLj{pDw delta 17 Ycmez3|H7X&$kWa3!9>>ZjTt@a07Z}oKmY&$ diff --git a/sound/direct_sound_samples/cries/espeon.wav b/sound/direct_sound_samples/cries/espeon.wav index 20743268e11ebb66f2db688bc99a083e6b449b4e..8456a350d66ba2f49256a4d752a483765b869e27 100644 GIT binary patch delta 31 mcmezF)8fk-ehlPQGK}d~ZW3-GKBLe`Mum{!v delta 17 YcmZqi{qDmWhdqtKt$kWa3%tY33?!@$@92N!!hGag5jnTP$0E~_ZSpWb4 delta 17 Ycmca2dqS2q$kWa3z(m&YjTt$706JR+LjV8( diff --git a/sound/direct_sound_samples/cries/fearow.wav b/sound/direct_sound_samples/cries/fearow.wav index 6ef7eadee907dc173874742cd15167718c944c0d..d2ab288dd162b21b4b14d8b908a2623b2922f259 100644 GIT binary patch delta 31 mcmZ4Myvvz2$kWYj(?r&A?!@$@92N!!1`kDsjnP4hj0^yr-3Uhj delta 17 Ycmdnxyw;gD$kWYj=|tA>jTwQ806K*RHvj+t diff --git a/sound/direct_sound_samples/cries/feebas.wav b/sound/direct_sound_samples/cries/feebas.wav index a8f60a55f6b118fe5abfd64bf1ae17841d57d666..1e9037b7ec332d1d66f01365a5d5139401ef1cc4 100644 GIT binary patch delta 29 kcmaDS_e+j7$kWZOXd-JkcVc={4hsVV11CSj#%N)F0E+1cn*aa+ delta 17 Ycmew*_fC#A$kWX&Z6a&<#tb2T06Vq?-T(jq diff --git a/sound/direct_sound_samples/cries/feraligatr.wav b/sound/direct_sound_samples/cries/feraligatr.wav index d1da192f9055b412cd7fdf34e7d226e930ade5fd..f17eec474b3ceaabc9eb74ccf0491c68dd33fc65 100644 GIT binary patch delta 29 kcmdm$d@PwY$kWYj-$d4M?!@$@92N!!hEPL>jnVOj0GFW%yepYC$kWYj(?r(rjTv!<06=C2x&QzG diff --git a/sound/direct_sound_samples/cries/flaaffy.wav b/sound/direct_sound_samples/cries/flaaffy.wav index a0cf3df06241d47cb10abeb0d457c06ee2439074..9459c8e06dd52db2c4da0e61ab7bc9a804c2704b 100644 GIT binary patch delta 29 kcmca%`oxqq$kWa3&P3L5?!@$@92N!!hGHp(jnTDI0GC1t@c;k- delta 17 YcmaE2dc%}8$kWa3!bH~ajTtpk06*6TzW@LL diff --git a/sound/direct_sound_samples/cries/flareon.wav b/sound/direct_sound_samples/cries/flareon.wav index 6bd51168b3c814bc764cce8eae029a95039fa6a5..d138a75e033ada89427e9474cbeae60e50f6fad5 100644 GIT binary patch delta 29 kcmca+^T>uZ$kWX&Y9ebmcVc={4hsVV!$(<$jnThl0g|T)djJ3c delta 17 YcmaE4bIpb|$kWZuZz5~>#*AOG06ka+$N&HU diff --git a/sound/direct_sound_samples/cries/flygon.wav b/sound/direct_sound_samples/cries/flygon.wav index b6c5d90ba02986fa56d1eb6681cff7a1e86fef83..2d64627eee4f82c86554cab0799ca7c5ce3668c4 100644 GIT binary patch delta 31 mcmX?@dM=eU$kWa3*hJQF?!@$@92N!!h8QD;jnQdFj0^y*xCs#e delta 17 YcmX??dN7qW$kWYj=S0@ehlPQGfscn_W3&VhBLe`8P6s9c delta 17 YcmZpW{4Bv5{n05ft0WdHyG diff --git a/sound/direct_sound_samples/cries/gardevoir.wav b/sound/direct_sound_samples/cries/gardevoir.wav index bd3a99acc26e0e1ae3927c362f425c869ae529a5..a40ef12626b6d241e51ee79189bf889053baa456 100644 GIT binary patch delta 31 mcmeB;pB2v<wehlPQGK}eTjW3-GeBLe`QDF^@n delta 17 YcmZpP{vO2|Rvpa@0$kWZucp_`~#*F*A06fbEtpET3 diff --git a/sound/direct_sound_samples/cries/girafarig.wav b/sound/direct_sound_samples/cries/girafarig.wav index d78162a29fdb26612a3d0f00dc420fcf3ba85046..089b8bb0451b7c743dffbea24f5167953baaf2b2 100644 GIT binary patch delta 31 mcmX?VdC8JB$kWa3)I`>B?!@$@92N!!h6EXgjnP>$j0^yyN(i9< delta 17 Ycmca)dDN0M$kWYj??l${jTxCT06jzoegFUf diff --git a/sound/direct_sound_samples/cries/glalie.wav b/sound/direct_sound_samples/cries/glalie.wav index bf35bd147b85f8e513bcaa4aaf8c223f61f247df..6f81e7a2a4e922a8c57b22db829d7fc5c0d7a491 100644 GIT binary patch delta 29 kcmX>Wcqx!I$kWa3)I`>B?!@$@92N!!hC~g9jnUZ}0GE;o>i_@% delta 17 YcmcZB?!@$@92N!!hD33OjnUcS0FUnog#Z8m delta 17 Ycmcble@ve>$kWYj-$d5%jTu?u06Z)PXaE2J diff --git a/sound/direct_sound_samples/cries/gloom.wav b/sound/direct_sound_samples/cries/gloom.wav index abc408a0f76a0b055987e9b5f2cde496507c0cc3..ce3da97083be53126507cf8eb8f4ad54165a52bb 100644 GIT binary patch delta 31 mcmexq&}PUQehlPQGK}3RKW3-$EBLe`GdU2 delta 17 YcmaFmeb<{c$kWa3>O|J?jTw!q07F>^3jhEB diff --git a/sound/direct_sound_samples/cries/goldeen.wav b/sound/direct_sound_samples/cries/goldeen.wav index 342df710c97b0e300a1e1a98e0514ff895347e1e..ec3b48ad44cab5acc6f208cc47edd6c3d8d45bcd 100644 GIT binary patch delta 30 lcmcbu_Ck#{$kWX&VIpfdcVc={4hsVV!#5#@h0(%{3;>m>2u1(^ delta 17 YcmaE%c3X`#$kWX&cp_`~#*F_$06UxprT_o{ diff --git a/sound/direct_sound_samples/cries/golduck.wav b/sound/direct_sound_samples/cries/golduck.wav index a9bf91b2da7fb18fe5459e67d181caee4b7748dc..bc6cc95af9ee5b811204429a790572c55ded6cca 100644 GIT binary patch delta 29 kcmZ3WvqpzC$kWYDWg=@hcVc={4hsVV!){TAjnPL%0ev9|Jpcdz delta 17 YcmZ3Zvp|P6$kWYDVj^q!#*8DP05X&X$N&HU diff --git a/sound/direct_sound_samples/cries/golem.wav b/sound/direct_sound_samples/cries/golem.wav index 17ed6128e4a277a930b764eff6adc24f59c96d3a..9a26adcc945f34397f004a4bba604a8f764ee370 100644 GIT binary patch delta 29 kcmdmGe$1RT$kWYj-$d4M?!@$@92N!!hEQpSjnVPa0FA#0VE_OC delta 17 YcmX?RzRR37$kWYj(?r(rjTv#$06QoKOaK4? diff --git a/sound/direct_sound_samples/cries/gorebyss.wav b/sound/direct_sound_samples/cries/gorebyss.wav index 3d375f6dcf22d88587637a17cbcc31dc865be73b..cd14f26dd5c57eb49b2510d493d73b094b2667a9 100644 GIT binary patch delta 29 kcmdlLek`0d$kWYj-$d4M?!@$@92N!!hEQ#WjnVPi0F>_t!2kdN delta 17 YcmX>WzAKzH$kWYj(?r(rjTv#;06zEzoB#j- diff --git a/sound/direct_sound_samples/cries/granbull.wav b/sound/direct_sound_samples/cries/granbull.wav index 959793b7240340ed4ea1da165d498a892dedd3f8..faffbc56294ae74e05d510a9e7082c24f95d5712 100644 GIT binary patch delta 29 kcmbOcvm}N!$kWYDW+H1icVc={4hsVV!)9HEjnR8`0fj*br2qf` delta 17 YcmZ1yGb4sI$kWYDU?OYy#*96>05<#vAOHXW diff --git a/sound/direct_sound_samples/cries/graveler.wav b/sound/direct_sound_samples/cries/graveler.wav index 6b8591406f5cb6f0c6caeace56c54714646c788d..e5a2e9d19ef1538eff046729dc18cd4a071335c2 100644 GIT binary patch delta 31 mcmcbg^CpKi$kWX&Wg=@hcVc={4hsVV!!J{YjnOP-j0^y=6bU>4 delta 17 YcmaEpb3cbQ$kWX&d?IW3#tddN079GwW&i*H diff --git a/sound/direct_sound_samples/cries/grimer.wav b/sound/direct_sound_samples/cries/grimer.wav index 092dfeed61e0e6578f1e5c96ac312bbcc8061f34..8ae15f40637e78dd295b3133171cd9dbb80ab691 100644 GIT binary patch delta 31 mcmZ3hxl5BZ$kWYj(?r&A?!@$@92N!!1`iR2jnP3Oj0^ylY6tlM delta 17 Ycmdm`xmJ@k$kWYj=|tA>jTwO=05@y}_5c6? diff --git a/sound/direct_sound_samples/cries/groudon.wav b/sound/direct_sound_samples/cries/groudon.wav index 680d0ec0474bdf8d89e6411df4619a8a11547203..0571205792655730ea535373cddba27e5425ac75 100644 GIT binary patch delta 33 pcmbO^fpOUcM%ExtH#fP7tl`{==}9>(3=9lg+!;1T?{jBl005`T2}=L~ delta 19 bcmZ2BfpO*pM%ExtH#fnFtl=9o_PPTAK_3RG diff --git a/sound/direct_sound_samples/cries/grovyle.wav b/sound/direct_sound_samples/cries/grovyle.wav index 7e2f1acd0fa702b7f1292bdebb56c211a247e25d..6ae949e00a8c9f342a515bb77ffb6b7851831bf1 100644 GIT binary patch delta 29 kcmaFi|HYp*$kWa3%|zC4?!@$@92N!!hGun!jnTd80HSFLj{pDw delta 17 Ycmez3|H7X&$kWa3!9>>ZjTt@a07Z}oKmY&$ diff --git a/sound/direct_sound_samples/cries/growlithe.wav b/sound/direct_sound_samples/cries/growlithe.wav index 3f72ea6f976a4c2b116389c53151fd57b2525c43..96ea21385a9f83a52a1a0cd628e1a6e5dd520b92 100644 GIT binary patch delta 29 kcmdmGa?FG^$kWZuZX#ne@mV<$kWa3(nQv9?!@$@92N!!hD?5jjnT#Y0FM6%eEn?$kWa3*hJRwjTuG!06UZhU;qFB diff --git a/sound/direct_sound_samples/cries/gyarados.wav b/sound/direct_sound_samples/cries/gyarados.wav index 6a4124085eac35d3fd9a4caa6eed28680ae9721b..b76327da2679feed9fd603e39a4b2eaf4d519fd1 100644 GIT binary patch delta 31 mcmez9_s@?t$kWZOY$9tocVc={4hsVV1CKhx#%M8hMg{<$kWYj(?r&A?!@$@92N!!22TZsjnTmh0E_|%LjV8( delta 17 YcmdnxxXzI^$kWYj*+kaxjTu1-06Jj?H2?qr diff --git a/sound/direct_sound_samples/cries/haunter.wav b/sound/direct_sound_samples/cries/haunter.wav index e22b1cfc137eea6605fb91fc99492c0ebee13d45..999a0d02d1c8d8113f0845208a126d381c760c46 100644 GIT binary patch delta 29 kcmcZ-{UDk($kWa3#zfX|?!@$@92N!!hJ0OyjnS350G@XVPXGV_ delta 17 YcmaD5eI=ST$kWa3%tY4kjTsfX07JG14gdfE diff --git a/sound/direct_sound_samples/cries/heracross.wav b/sound/direct_sound_samples/cries/heracross.wav index ed68648ba8d379de53a5dfac60c8ca5608bed2d6..14824990853f71b83ec2c20da2d15ee7f596a06d 100644 GIT binary patch delta 29 kcmX@*e$AaV$kWa3+(g!J?!@$@92N!!hE!#SjnVna0G6i+;Q#;t delta 17 YcmccSe#)IS$kWa3&_veojTw2$06(w>v;Y7A diff --git a/sound/direct_sound_samples/cries/hitmonchan.wav b/sound/direct_sound_samples/cries/hitmonchan.wav index 806d206d35807cbed941ba77ad7e39e33d79c2df..130169e6e12fe7cf8f40bf51f819f8440ab86004 100644 GIT binary patch delta 31 mcmccX`pT6x$kWa3(L~m8?!@$@92N!!h6*KyjnPd?j0^y;ED1dT delta 17 YcmaFmde@aT$kWa3>O|J?jTwzf079Y$`~Uy| diff --git a/sound/direct_sound_samples/cries/hitmonlee.wav b/sound/direct_sound_samples/cries/hitmonlee.wav index e40d852b998b4e2884129c42e087552cd04c4199..9ec63520a97a1b6115d477708c54cdf147e2e656 100644 GIT binary patch delta 31 mcmezA(dNk-ehlPQGK}3aNW3-$KBLe`Ma0k=? delta 17 YcmZqk{OQ3O06HcG^#A|> diff --git a/sound/direct_sound_samples/cries/hitmontop.wav b/sound/direct_sound_samples/cries/hitmontop.wav index 652222dc6c5d0cf8e8febe463b7ddb5de93daf80..fa26c699b8843f1df4843492edf75b22a5bc5362 100644 GIT binary patch delta 29 kcmZ2ww#|$+$kWYDZz5|rcVc={4hsVV!%-=QjnU_&0D`gzjQ{`u delta 17 YcmdmHw#tk($kWYDX(DU*#*A}P05xd_2><{9 diff --git a/sound/direct_sound_samples/cries/ho_oh.wav b/sound/direct_sound_samples/cries/ho_oh.wav index acf8812532310b83b9c1a134a12117041ddb7422..e098f9806b5f9a09a085f177008b0ca27c2484ec 100644 GIT binary patch delta 31 mcmeB=m=nPoehlPQGVU;$+#^^2Dj0^yhYY1-u delta 17 YcmbOe(I3GYx(^b delta 17 Ycmez6^UjAg$kWX&Z6a&<#tb1f06{SZQ2+n{ diff --git a/sound/direct_sound_samples/cries/houndour.wav b/sound/direct_sound_samples/cries/houndour.wav index 51310524a880164a87737c25d0313f825ff38ad2..ef683e68f6a92087d499b16d82f586065b008674 100644 GIT binary patch delta 31 mcmX?ac*l@6$kWa3%0$+1?!@$@92N!!hAat&jnO3%j0^y!1PHqT delta 17 Ycmca(c;1jT$kWa3_(az5jTyxf06p{uk^lez diff --git a/sound/direct_sound_samples/cries/huntail.wav b/sound/direct_sound_samples/cries/huntail.wav index b2e3f99853a7e3c8f8ca9a4add8f6e1097a4c645..9c4e7af02163e603bd4bd702c43a2c5e37f52ef9 100644 GIT binary patch delta 31 mcmbPjx5AD!$kWYDVIpfdcVc={4hsVV!!|jFjnN0>7#RSNYzSQd delta 17 YcmZ2sH`|Ui$kWYDcp_`~#*F=P05kXn;s5{u diff --git a/sound/direct_sound_samples/cries/hypno.wav b/sound/direct_sound_samples/cries/hypno.wav index 4369110c2cc6fbb8921681bf13070ef61852dd9c..3b1e2dab6e43ce9c2bbee37322e5d13a6d9f4df5 100644 GIT binary patch delta 29 kcmZoEoKVObehlPQGLEeI4W3;9P0EpNK0RR91 delta 17 YcmbPG*iy(EYex&QzG delta 17 YcmaFk@W6pJ$kWX&Vj^q!#taq(06ljF`v3p{ diff --git a/sound/direct_sound_samples/cries/jigglypuff.wav b/sound/direct_sound_samples/cries/jigglypuff.wav index d3e925fe940b8b49dadf543cd8665bede935b009..4b8d4ccc8fbd76f6edaaf3662361d930751848bb 100644 GIT binary patch delta 31 mcmdlidO(yl$kWYj$3)g}?!@$@92N!!20t!_jnNTYj0^yit_Rxy delta 17 YcmX>gx>=Mp$kWYj^+eY2jTzxw05%2%+yDRo diff --git a/sound/direct_sound_samples/cries/jirachi.wav b/sound/direct_sound_samples/cries/jirachi.wav index 43850cbaa01ec4432153de3fe59942d6ee0781ef..f548e50bf7ca9a73510cb2d9d2a8a8fb3ec36b1c 100644 GIT binary patch delta 31 mcmexq(q_sUehlPQGK}3pSW3-$UBLe`HdIy*Q delta 17 YcmZoO{b|A)_jnUKP0HLr6ivR!s delta 17 Ycmexo`^lCy$kWa3)kN0tjTzJA07VZ6I{*Lx diff --git a/sound/direct_sound_samples/cries/jumpluff.wav b/sound/direct_sound_samples/cries/jumpluff.wav index cce951b1f72dc7614217767b7abc8305c641be9c..d58b0b11faa55d165240bb1f1c191c9737b413d2 100644 GIT binary patch delta 29 kcmdmEf5M(M$kWa3z(m$??!@$@92N!!hH!a?jnRqn0FX5Zg8%>k delta 17 YcmX?MzsH_6$kWYj%S6`jjTs5@06cI8XaE2J diff --git a/sound/direct_sound_samples/cries/jynx.wav b/sound/direct_sound_samples/cries/jynx.wav index faacb1e95770e058990580e8c6424135c8edd501..bb833749e411409940d917eaad0e7d1fd108795d 100644 GIT binary patch delta 33 pcmX@PgYnu9M%ExtH#fhDtl`{==}9>(3=9lUq8TehlPQGfzO0tW3+?`BLe`SCI}V) delta 17 YcmZq3{G7oWehlPQGL0N@iW3;Xc0D&+Eod5s; delta 17 YcmbQ@+2P3=b%7 diff --git a/sound/direct_sound_samples/cries/kecleon.wav b/sound/direct_sound_samples/cries/kecleon.wav index 96ab74ff2b180be7b7d06aff7529e7038b1cbf1d..5d16ee144b4f41bc4c58ab62d34c232e627ca54a 100644 GIT binary patch delta 31 mcmeyX(51*4ehlPQGK|+9GW3-Y0BLe`E00(dY delta 17 YcmeBD{HwqkehlPQGK}errW3-GuBLe`RCkPAx delta 17 YcmZpP{~pI0EUfq_BAm0@GFo+~2*0HosxZ2$lO delta 19 acmbQ%&Dhz^$QtD7=GHioHGE@+t}6gQs0LjC diff --git a/sound/direct_sound_samples/cries/lairon.wav b/sound/direct_sound_samples/cries/lairon.wav index 574ffac745648486df8e1529c38ed983055b7a49..1d82d065458527c8a62a543598f315a1c80c882a 100644 GIT binary patch delta 29 kcmZ1#xGj)1$kWYj-9*-K?!@$@92N!!23HM+jnV!Z0FFioUjP6A delta 17 YcmdlMxGIn}$kWYj(L~npjTwF#06U=uO#lD@ diff --git a/sound/direct_sound_samples/cries/lanturn.wav b/sound/direct_sound_samples/cries/lanturn.wav index 6d8b21dd99e3a0480076d1d974e5ca9c7c446caa..3b68f58ad937fce2529c1d443d981c6998dd669d 100644 GIT binary patch delta 31 mcmdn0c}SBr$kWYj*F@HE?!@$@92N!!h5!+UjnPpej0^yoVhAAs delta 17 YcmX@4xmA-j$kWYj?L^k_jTw<5064q`761SM diff --git a/sound/direct_sound_samples/cries/lapras.wav b/sound/direct_sound_samples/cries/lapras.wav index d79819a971e89be444a9f4db8da84f22d3810a70..2c0714995f5e6dd35be32621332c99d22c8ed886 100644 GIT binary patch delta 30 lcmZp&>a$`C@^o`!lby&G#+{g+l*7Wnz%W;aVPo`i8321`2k!s? delta 18 ZcmeCPYO-Pr@^o|iB{PvNY-7eU82~%&29N*% diff --git a/sound/direct_sound_samples/cries/larvitar.wav b/sound/direct_sound_samples/cries/larvitar.wav index e0e22cd6f5a9ce23edac4b16ce2a9daef4e50550..6ef5d456634fddfd9f08e0da774109806db14041 100644 GIT binary patch delta 29 kcmaE0_{NYm$kWa3$wbz0?!@$@92N!!hH43hjnSehlPQGK}CRJW3-+CBLe`35(g~+ delta 17 YcmbQH*r~`GqeMy=%$kWa3)I`>B?!@$@92N!!h6G-QjnP@Wj0^yq*$77f delta 17 Ycmca4eN>t?$kWYj??l${jTxD|06DP+GXMYp diff --git a/sound/direct_sound_samples/cries/lickitung.wav b/sound/direct_sound_samples/cries/lickitung.wav index 33a0ab5ff32edba3966fb19d78ed48f679a9bc92..89808fd3dced3c593c0bd2fca5f76f20183ff343 100644 GIT binary patch delta 31 mcmZ2#y~&z2$kWYj)kM~C?!@$@92N!!1_xP&jnQ7Rj0^ym=?Dh^ delta 17 YcmdmFz0{gD$kWYj?nKt`jTxS@060Mg0{{R3 diff --git a/sound/direct_sound_samples/cries/lileep.wav b/sound/direct_sound_samples/cries/lileep.wav index f890086d3735f17d0b9628ee95cec2c85872311a..5fd0ba803f272858165f255db44ff6c7e8fb682d 100644 GIT binary patch delta 31 mcmeyV+NQ=DDzr@~ delta 17 YcmZ2izNnlv$kWYj)ehlPQGK|zLLW3-kGBLe`7iU(l; delta 17 YcmbPa*=orelcukNs$kWa3+(g!J?!@$@92N!!hExuQjnVlW0E&hPKL7v# delta 17 Ycmca6cuJ5p$kWa3&_veojTw0y069ShEdT%j diff --git a/sound/direct_sound_samples/cries/loudred.wav b/sound/direct_sound_samples/cries/loudred.wav index ff8b2c8104d6647a0ae8056400ffaefba36b93e1..06495bf49ccf1900d0f66d436cdad677dfc3c1a6 100644 GIT binary patch delta 31 mcmX?Ue9f3O$kWa3+(g!J?!@$@92N!!h7?JLjnR3Mj0^yyNeH6= delta 17 Ycmca+eA1XT$kWa3;6&E&jTyO;06jGZe*gdg diff --git a/sound/direct_sound_samples/cries/ludicolo.wav b/sound/direct_sound_samples/cries/ludicolo.wav index 420ac54595133b51db9a00f3ebd031a5e05f1297..fa300674f95908c9f68a80c67b2dd53b0bd6b98e 100644 GIT binary patch delta 29 kcmaFh_{Nbn$kWa3$wbz0?!@$@92N!!hH3?djnSednJ}N$kWa3%tY33?!@$@92N!!h9o_PjnO%Jj0^y*_6ZjN delta 17 YcmcZ-dpwpk$kWYj|3udCjTzZ`072pg-~a#s diff --git a/sound/direct_sound_samples/cries/luvdisc.wav b/sound/direct_sound_samples/cries/luvdisc.wav index da1c84b80e5fb6cfc49461fa18806ae2dbf0b84d..c4261d76eae9fd5c45a517cd34f7a2fd5e29b532 100644 GIT binary patch delta 31 mcmZ22yhE5Z$kWYj!$j6_?!@$@92N!!1~*QIjnM&|j0^yfHwUc% delta 17 YcmdlXyjqww$kWYj@kG|}jT!!&05o|8w*UYD diff --git a/sound/direct_sound_samples/cries/machamp.wav b/sound/direct_sound_samples/cries/machamp.wav index b7e091dc724b6c1cb05b8bbcc2dba62514a6048d..9535dcbab7e8d1369b9f441b6288dd1602e5a269 100644 GIT binary patch delta 29 kcmccQaL<7?$kWX&Y$9tocVc={4hsVV!&`ZVjnUub0g^cha{vGU delta 17 YcmccTaLIu+$kWZuYa(m-#*A(eX$kWYj%0$+1?!@$@92N!!25l*ZjnSr30DoEsi2wiq delta 17 YcmbPZI>D4R$kWZOVehlPQGVX+3o#^|*g0DZCuHvj+t delta 17 YcmbOd)DgrQ delta 17 YcmdnuwcLv}$kWYDej;o5#*EV{05@I+FaQ7m diff --git a/sound/direct_sound_samples/cries/magmar.wav b/sound/direct_sound_samples/cries/magmar.wav index 902c15bf2e103f05a08e5f28774ce7dbd65c4261..6a3621c3ca13652359633f652349e84bd44d7b46 100644 GIT binary patch delta 29 kcmX?ObHj!;$kWX&U?OWccVc={4hsVV!*f}NjnN-v0gqJ)NdN!< delta 17 Ycmca%bH;`>$kWZuWg=_%#*7cL06Vk>pa1{> diff --git a/sound/direct_sound_samples/cries/magnemite.wav b/sound/direct_sound_samples/cries/magnemite.wav index 4fdc93f2960f74474634c3f4cf03ac8aadebb378..7dd1d550b97ee23c7d95529cd58029de40a0aee4 100644 GIT binary patch delta 31 mcmbR1y~>+4$kWYj(L~m8?!@$@92N!!1`Ab&jnPi3j0^yn=?D)1 delta 17 YcmZ4GJ=dEx$kWYj>O|J?jTw%r065tO3jhEB diff --git a/sound/direct_sound_samples/cries/magneton.wav b/sound/direct_sound_samples/cries/magneton.wav index d69c276443cdd538417d0ba0653a9cecf2bebb1b..12513343d80803c1b3de287199ee8499db194c1d 100644 GIT binary patch delta 31 mcmbOmyDFA7$kWYj(L~m8?!@$@92N!!1`9ogjnPhej0^ysUO|J?jTw%506P8#H~;_u diff --git a/sound/direct_sound_samples/cries/makuhita.wav b/sound/direct_sound_samples/cries/makuhita.wav index 79b055ef98f589ac6410b70b6c7d369465928569..6df74f2c11516a5cb34bd9cc86aab82a79948b5f 100644 GIT binary patch delta 29 kcmeB@ohHi~ehlPQGL6whTW3)aW0C)HYBLDyZ delta 17 YcmbOx+a=2y3d05C5FO8@`> diff --git a/sound/direct_sound_samples/cries/manectric.wav b/sound/direct_sound_samples/cries/manectric.wav index 939fc1609312c45d8a46cd16717962c914b4a8b3..db806c46af13a43c2373233365c30017d93e6c8e 100644 GIT binary patch delta 29 kcmeARnia$vehlPQGVWkGc#^}u&0DrIuRR910 delta 17 YcmbOg)EC4W3~!^Y@U@{9}sj%)}P delta 18 ZcmbQ_(CWYzN@&G+y2Co1B diff --git a/sound/direct_sound_samples/cries/mantine.wav b/sound/direct_sound_samples/cries/mantine.wav index 919242e8fe1290a9651b8ebf7d7614974f30ce00..bc6f17e5e43528b2232a77da2894314811b44098 100644 GIT binary patch delta 31 mcmca_`^J_v$kWa3$wbz0?!@$@92N!!hAKIRjnOS~j0^y+?g=jd delta 17 YcmaE3d*7Bd$kWa3`b5_7jTy~y073!=@Bjb+ diff --git a/sound/direct_sound_samples/cries/mareep.wav b/sound/direct_sound_samples/cries/mareep.wav index 386925f5d5c8bb63d6c5d29e0cc273ec963331bd..b0a523d7d75b224a5eb4f5f473124c279c741626 100644 GIT binary patch delta 31 mcmZpa?UQ8<@^o`+o5&i@otU1K!@|J8Aj8M7FO|J?jTw%T05$yu&j0`b diff --git a/sound/direct_sound_samples/cries/marowak.wav b/sound/direct_sound_samples/cries/marowak.wav index 7bddb4b347d9ed8fd33569ea4465bdfdd0a8fce0..6701514d219b84672b3ae36ce42a5ac1556c2805 100644 GIT binary patch delta 29 kcmX?Pan6D@$kWZuZ6a$pcVc={4hsVV!(C~HjnU7g0gD|83jhEB delta 17 YcmX?Sama!-$kWZuY9ed+#*Amu06CThZU6uP diff --git a/sound/direct_sound_samples/cries/marshtomp.wav b/sound/direct_sound_samples/cries/marshtomp.wav index 0caa959e2906aeeb0ed6a219072803acb8646b9e..ed906f7d1a7cb1d1d890e4733962f3e8ec9adaa2 100644 GIT binary patch delta 29 kcmX@&bis)=$kWZuVehlPQGK}3yVW3-$aBLe`NZU^81 delta 17 YcmZqk{prIRk diff --git a/sound/direct_sound_samples/cries/medicham.wav b/sound/direct_sound_samples/cries/medicham.wav index be3668b173f6aad1e6742401f501cb4d773d94e1..e0853bfa7774f2dbed4d441c1674ff16664cc54c 100644 GIT binary patch delta 29 kcmX@%aK(W&$kWZuXCiAjcVc={4hsVV!((}djnQxA0gmShK>z>% delta 17 YcmccOaKeE#$kWZuVIphz#*8=e06T^Tng9R* diff --git a/sound/direct_sound_samples/cries/meditite.wav b/sound/direct_sound_samples/cries/meditite.wav index 23db4f297f2b6d4d03e21b8152ed480acfdf1925..08675830b536a9743ca4d2a6eaa74788fb61b4b9 100644 GIT binary patch delta 30 lcmZor=uuz`@^o`!5tzsp#+{g+l*7Wnz%ZMiVPo`CegJc)2Z{gy delta 18 ZcmeBCXi#7a@^o|i!9S5LY-7d}egHS#208!$ diff --git a/sound/direct_sound_samples/cries/meganium.wav b/sound/direct_sound_samples/cries/meganium.wav index 8f7920e937846eff4e9dc88638026890f6a0db55..2aaf870343c1135b7eb4604b36149b00a80c7548 100644 GIT binary patch delta 31 mcmdmPf5e_O$kWYj&qUU6?!@$@92N!!h9G%{jnOgkj0^yul?ZJB delta 17 YcmX?NzulfS$kWYj{Y2LAjTzDM06VV+RR910 diff --git a/sound/direct_sound_samples/cries/meowth.wav b/sound/direct_sound_samples/cries/meowth.wav index bebca1c27ee5e69ed60aecadaf3e8d8271b9fb08..a3b97ff953ab113b35f7b109badc882f32a26c81 100644 GIT binary patch delta 29 kcmX@7dP|ix$kWa3(nQv9?!@$@92N!!hD;%bjnTzI0FYP+j{pDw delta 17 YcmcbmdQO!!$kWa3*hJRwjTuEk06a?uZvX%Q diff --git a/sound/direct_sound_samples/cries/metagross.wav b/sound/direct_sound_samples/cries/metagross.wav index 5112b3afa8ae813478cf1456494764635b3bb6de..35aa032c409a419a4966897e4f6e5b02dba2fb87 100644 GIT binary patch delta 33 pcmX>M%ExtH@7PjS;M&#)01*o7#J9`d>A%Hm-sL;006^M3H1N~ delta 19 bcmcaJlkxmaM%ExtH@D*xS;IGG6#D=GPRj?F diff --git a/sound/direct_sound_samples/cries/metang.wav b/sound/direct_sound_samples/cries/metang.wav index 700759d20747239b89a2d2632c9c250a03deca43..d9203a3301a5ce7da8db68d88887f962721613b8 100644 GIT binary patch delta 31 mcmX@ehlPQGK}45fW3-$uBLe`Q=LiY_ delta 17 YcmZpR{u#v@Px# diff --git a/sound/direct_sound_samples/cries/mightyena.wav b/sound/direct_sound_samples/cries/mightyena.wav index 0149976e2b2b8f00598df5e6053d67f7ad143640..4c818b12b7010456dadbdefc6d7b01650a32e20f 100644 GIT binary patch delta 29 kcmZ4Hv&n}w$kWYDYa(kncVc={4hsVV!$DPsjnSu70ftWqy8r+H delta 17 Ycmdnwv&@Gz$kWYDZX#>=#*9;{05@O;FaQ7m diff --git a/sound/direct_sound_samples/cries/milotic.wav b/sound/direct_sound_samples/cries/milotic.wav index 20db44692fe49f2477ebcb461b6f801a482052db..016657130f18d331aa5e24486fd2dc3c9ce2b7de 100644 GIT binary patch delta 31 mcmaDcgYnA@M%ExtH@BRLtl`{==}9>(3=9m+J`5Y9d3^w>7YOYD delta 19 acmew|gYm@-M%ExtH@Ad|tl=9oczgg&{08{| diff --git a/sound/direct_sound_samples/cries/miltank.wav b/sound/direct_sound_samples/cries/miltank.wav index 5f51f525bb50cee1621bd1b918abaaf721588909..949fd2812bc92ca492994270cc9945bd1352b9d4 100644 GIT binary patch delta 29 kcmbPaHP4DQ$kWYDY$9tocVc={4hsVV!&(`JjnUg>0DGVaApigX delta 17 YcmbPdHOY!K$kWY@Ya(m-#*A$;05S6gvj6}9 diff --git a/sound/direct_sound_samples/cries/minun.wav b/sound/direct_sound_samples/cries/minun.wav index 9e9a62f7e8c9c80a1c8b4898b2c03bf16a3047ab..80d608c67301845af0081ba6b202bca7cde97c23 100644 GIT binary patch delta 31 mcmca^_r#7h$kWX&W+H1icVc={4hsVV!zVe0jnRMP7#RSjunCC( delta 17 YcmaE2cioOP$kWZue$@$kWa3@I=<|jT!l306fwLcmMzZ diff --git a/sound/direct_sound_samples/cries/moltres.wav b/sound/direct_sound_samples/cries/moltres.wav index 7173a8cad4c7dbb2b3ad5f433ad9098887ca31b8..c9c65b334d3e2332a7f9d033dd1b27c738086757 100644 GIT binary patch delta 31 mcmZ1;vn7T#$kWYDXCiAjcVc={4hsVV!y#RUjnQXx85sbaQ3&$@ delta 17 YcmdlIvpj}1$kWYDej;o5#*EXt06BvOT>t<8 diff --git a/sound/direct_sound_samples/cries/mr_mime.wav b/sound/direct_sound_samples/cries/mr_mime.wav index 23cf310532fb962d7450e833dd6316efe2afa39b..a8121159bc8702b57c57df8cb64acf7263ad4b05 100644 GIT binary patch delta 31 mcmezA+2+L>rjnSD30FzJ%u>b%7 delta 17 YcmccMc*K!4$kWYj&qUVnjTspV06qN%jQ{`u diff --git a/sound/direct_sound_samples/cries/natu.wav b/sound/direct_sound_samples/cries/natu.wav index 4a2c853178490f09926def7075a749a440d84caa..3cf1fc15babd96e394497e8115c48808b8c929ec 100644 GIT binary patch delta 31 mcmX@8c}|lx$kWa3*hJQF?!@$@92N!!h8PisjnQc$j0^ys)(Bky delta 17 YcmX@7c~Fxz$kWYj=S0@9N$kWYj*+kZG?!@$@92N!!23viGjnVG<0FJ{5VE_OC delta 17 YcmZ1%zbKwH$kWYj)ehlPQGVYv{)#^{Yg0Cgk>#{d8T delta 17 YcmbQC)}zK6V!Z delta 17 YcmeyT@kxU<$kWX&Ya(m-#tbnL06mWe2LJ#7 diff --git a/sound/direct_sound_samples/cries/nidorina.wav b/sound/direct_sound_samples/cries/nidorina.wav index a46c4167013e3a42729d8342e5775c8ac5d605dd..a2e1aa9d6383bcba3b1a7f35dc3f58ef829cce79 100644 GIT binary patch delta 29 kcmeA%nqkBmehlPQGVYvju#^{X_0C(00>i_@% delta 17 YcmbPX)MLaNjTwRB05~HC1poj5 diff --git a/sound/direct_sound_samples/cries/nincada.wav b/sound/direct_sound_samples/cries/nincada.wav index dd5feb818d26ae21909ad1f8cf86dfe3e74b14e3..ec9b888583a51983b682b75e169dc988abbaffd0 100644 GIT binary patch delta 29 kcmdldc}kKs$kWa3&_vd7?!@$@92N!!hDaWUjnTlxlfWc$kWYj+eFszjTuQi060Ac5dZ)H diff --git a/sound/direct_sound_samples/cries/ninetales.wav b/sound/direct_sound_samples/cries/ninetales.wav index f84b8743641f29465fcff6e745eb3fc85da5ff8d..0e5939ed20b6bd53496e70e3959773ca48c02938 100644 GIT binary patch delta 31 mcmZ1&zb>9N$kWYj*+kZG?!@$@92N!!1{-~bjnQuUj0^yuTL@nO delta 17 YcmZ1%zc8LP$kWYj=0w);jTx@`06XIbO#lD@ diff --git a/sound/direct_sound_samples/cries/ninjask.wav b/sound/direct_sound_samples/cries/ninjask.wav index b61f4d37f5b77db5e5c1f82d0a6292a93ba9fe09..20b496bc3254a5632f7962b0d6f08a8c7adc0572 100644 GIT binary patch delta 29 kcmcbn|45%T$kWa3)^eBim$kWX&Y9ebmcVc={4hsVV!$%E#*AMY06+Hz{{R30 diff --git a/sound/direct_sound_samples/cries/nosepass.wav b/sound/direct_sound_samples/cries/nosepass.wav index 1e15fb10d39bb01ecad059f730074b0077b13e78..996cfbe7d74945abe879dafb919b7c8b32a4637a 100644 GIT binary patch delta 29 kcmdmGa?FG^$kWZuZX#$kWZuWFl)gcVc={4hsVV!zm+%jnP+(7#RSe#0fb7 delta 17 Ycmdm!wmywD$kWYDeIjf4#*E8G06YW+mH+?% diff --git a/sound/direct_sound_samples/cries/oddish.wav b/sound/direct_sound_samples/cries/oddish.wav index de6855d369b39267d3a1a90a0dc5ea6deb0d071e..bffae4bcf5826ea993f4e2d4521e359f998dbd9a 100644 GIT binary patch delta 29 kcmbPYxxkV&$kWYj#zfX|?!@$@92N!!27MWZjnS4e0D+VTsQ>@~ delta 17 YcmZ2rImMDS$kWZOXCiC(#taJ?05vHExc~qF diff --git a/sound/direct_sound_samples/cries/omanyte.wav b/sound/direct_sound_samples/cries/omanyte.wav index 3db237ac3f95342f61d422074e3c3970a8d8362b..46e47b0a2f8ba522cf99cdbc58c41df2be40eaad 100644 GIT binary patch delta 31 mcmZ2%vcZHk$kWYDVPx# diff --git a/sound/direct_sound_samples/cries/omastar.wav b/sound/direct_sound_samples/cries/omastar.wav index 69a4ea868f494ed1a21bb5f24245f27189fbd4a4..021355da9ebcc8741dc89cee29b235b202028bcc 100644 GIT binary patch delta 31 mcmbPhvdV-t$kWYDX(DSlcVc={4hsVV!wyM?jnRiB85sbMuLwy1 delta 17 YcmZ2wGS`GP$kWYDbRui`#*BlK05cl}(EtDd diff --git a/sound/direct_sound_samples/cries/onix.wav b/sound/direct_sound_samples/cries/onix.wav index 57da6014103afd9b1484331614aef22d9c47a9ad..f0dd1f45e07d5343ea28ac71086bc148da2a3226 100644 GIT binary patch delta 29 kcmX?>a4CT`$kWZuYa(kncVc={4hsVV!$W=#*A0`06zi-;s5{u diff --git a/sound/direct_sound_samples/cries/paras.wav b/sound/direct_sound_samples/cries/paras.wav index ba4a051c9fbb2ea87c05aba5a51ef7823049b590..27101a52f10f9df2de631987934cd036aa191616 100644 GIT binary patch delta 29 kcmeyC)0E2^ehlPQGLC}n0W3;px0Fkf=E&u=k delta 17 YcmZq5{g%TTPx# diff --git a/sound/direct_sound_samples/cries/phanpy.wav b/sound/direct_sound_samples/cries/phanpy.wav index 4de13cafe1c74682d7d542496b2f77e08634a22a..dcd6793429d82ab5e398d61f1f2a33a878c5f3db 100644 GIT binary patch delta 29 kcmdm_vrmUL$kWZuY$9tocVc={4hsVV!&y;=jnUUd0fQR|mjD0& delta 17 Ycmdm|vq^_F$kWYDYa(m-#*AyC05ymP5C8xG diff --git a/sound/direct_sound_samples/cries/pichu.wav b/sound/direct_sound_samples/cries/pichu.wav index d325103719a79895815a6ceb354a3692cafce220..cfbbb6adb60978b4394e082f801c2ec28a7073c5 100644 GIT binary patch delta 29 kcmew+(ehlPQGL6DDOW3)6M0Drg#J^%m! delta 17 YcmZpY{U*a2^($kWa3^hDP1jTz#@=$kWZuY9ebmcVc={4hsVV!v#r(jnTIx85sbVmk7ZC delta 17 YcmX?Pvekq&$kWYDcOq-}#*CYi05=N;F#rGn diff --git a/sound/direct_sound_samples/cries/pinsir.wav b/sound/direct_sound_samples/cries/pinsir.wav index 3d3dcc79290711aa30543747538b9693b296ab4c..76ac8fa157ea9331378f98ff14e4ee4fdcc29d17 100644 GIT binary patch delta 31 mcmdmMaLRx+$kWZuX(DSlcVc={4hsVV!wqqUjnR+985sbXkqF%Y delta 17 YcmX?Qu-AY!$kWZubRui`#*ByJ05{ delta 17 YcmdntzQ&z3$kWYj$wb!hjTr&T06N45JOBUy diff --git a/sound/direct_sound_samples/cries/poliwag.wav b/sound/direct_sound_samples/cries/poliwag.wav index d35c8f4d8f63259b8ed59abf94e014e1d2de74eb..64fe686c9367ad16d0df20f62c2952fa6e231e77 100644 GIT binary patch delta 31 mcmX@BeM_4)$kWa3(nQv9?!@$@92N!!h73`LjnPG-j0^yx$q1hS delta 17 YcmcbmeO8+_$kWa3=tS1=jTwca06ggidjJ3c diff --git a/sound/direct_sound_samples/cries/poliwhirl.wav b/sound/direct_sound_samples/cries/poliwhirl.wav index 0c59fbed64ffc9ad1d4001ea228ada65c39fe67e..924bb457cddde30d74a1804d50305adf1eb82706 100644 GIT binary patch delta 31 mcmZ20wM&XM$kWZuXd-JkcVc={4hsVV!wDXSjnS8Q7#RSLEC@>g delta 17 YcmdlbwN{EX$kWYDbs}r{#*B+R05YNl&;S4c diff --git a/sound/direct_sound_samples/cries/poliwrath.wav b/sound/direct_sound_samples/cries/poliwrath.wav index c32bd448591afc6b57fb98177bd6d796890ea931..93afcf2b651fa6274296802e646c14e390b7841a 100644 GIT binary patch delta 29 kcmaE${YINL$kWa3$wbz0?!@$@92N!!hH6oUjnS>50GF!>`v3p{ delta 17 YcmaE({Xm;F$kWa3#zfZejTtSX06+Ey#sB~S diff --git a/sound/direct_sound_samples/cries/ponyta.wav b/sound/direct_sound_samples/cries/ponyta.wav index 911954226d75907d75fa090ba0727dba97276b20..bfa5b06ef3d64d072ac25a48899c248ef02d814d 100644 GIT binary patch delta 29 kcmexn)nv^YehlPQGK~R=qW3;p^0ETr3m;e9( delta 17 YcmZp&{$|A*R diff --git a/sound/direct_sound_samples/cries/poochyena.wav b/sound/direct_sound_samples/cries/poochyena.wav index 16cabc29c6ecf5dabcce3ecf6ac675c3a2cb6373..8d46225c5f58c953819d6f07a992421ffff2180c 100644 GIT binary patch delta 31 mcmX@CazTYP$kWZuVz>% diff --git a/sound/direct_sound_samples/cries/porygon.wav b/sound/direct_sound_samples/cries/porygon.wav index 11dd528dda513214bcd128b54e308ccb0b3dbfad..48c43c2db7f94786aadfc6f5f64905d812e7124d 100644 GIT binary patch delta 29 kcmZ4Dx51A!$kWYDVOV delta 17 YcmdmDzrvn1$kWYj!9>>ZjTt`j068cI7ytkO diff --git a/sound/direct_sound_samples/cries/psyduck.wav b/sound/direct_sound_samples/cries/psyduck.wav index bdc0d673e3ac66b2e3ebee38502865b4feff923d..7b1a76da7a96c1a4982ea9ee4ffbad90ffcda5a2 100644 GIT binary patch delta 31 mcmX?Ve94$K$kWa3)I`>B?!@$@92N!!h6G85jnP?>j0^yw%?OVG delta 17 Ycmca)eAJjV$kWYj??l${jTxDe06dKbZvX%Q diff --git a/sound/direct_sound_samples/cries/pupitar.wav b/sound/direct_sound_samples/cries/pupitar.wav index 5e797d420fdc33bdcfdd579d320ed5ab07ced985..7768967293836e75d6130052af4a7bc83e40421e 100644 GIT binary patch delta 31 mcmbQMxJr>V$kWYj(L~m8?!@$@92N!!1`7d(jnPg5j0^ydeg}~N delta 17 YcmZ3bI9HK1$kWYj>O|J?jTw#t05jMHq5uE@ diff --git a/sound/direct_sound_samples/cries/quagsire.wav b/sound/direct_sound_samples/cries/quagsire.wav index e4a8c0aad372808ec76ed9a4b66813a3a19913d0..116c1bdf472293275ce247efa59cdfa780cea367 100644 GIT binary patch delta 29 kcmZ2yvde@u$kWZuXd-JkcVc={4hsVV!%0bojnS7S0fUnWn*aa+ delta 17 YcmdmGvd)Ax$kWYDZ6a&<#*9mn05#MG6aWAK diff --git a/sound/direct_sound_samples/cries/quilava.wav b/sound/direct_sound_samples/cries/quilava.wav index ef0bd7381fc1665bdc8bb4c01baf71659aa40290..5b44632ececb11bd80ca0dc9264f8e5e5be3ca91 100644 GIT binary patch delta 31 mcmcbs_ezg7$kWX&X(DSlcVc={4hsVV!w)frjnPcvj0^yv^$2(X delta 17 YcmaE*cUO-!$kWX&bRui`#tcSr06OIb!vFvP diff --git a/sound/direct_sound_samples/cries/qwilfish.wav b/sound/direct_sound_samples/cries/qwilfish.wav index 0b11276dec602487d4316c371d10542abc7088e9..1f857d2c2614d8a16b92984556611508c6427301 100644 GIT binary patch delta 31 mcmX@CdqI~q$kWa3#6;F`?!@$@92N!!hBz^XjnNrmj0^yuk_dAE delta 17 Ycmcbhdsvq>$kWYj_e9q4jTz};06T&PSO5S3 diff --git a/sound/direct_sound_samples/cries/raichu.wav b/sound/direct_sound_samples/cries/raichu.wav index 4e5dbaeb40870eaab1fa7ef06fa41ad5dc59118b..7b93bb5a3db7f8fc5b34d0f0cb19d17d3866c18d 100644 GIT binary patch delta 29 kcmcZ-^B{&b$kWX&Vj^oecVc={4hsVV!+TwZjnO}K0huic(EtDd delta 17 YcmaD5b0vl~$kWZuXCiC(#*81j06^3S5C8xG diff --git a/sound/direct_sound_samples/cries/raikou.wav b/sound/direct_sound_samples/cries/raikou.wav index fefeb1e3a50665fcfc476fbb6991a424b58f4740..35757a0ac85ed4bc8008fcaf9e44e4282f7cb34b 100644 GIT binary patch delta 29 kcmbQ_GS7uI$kWYDY$9tocVc={4hsVV!&*g#jnUf`0e#;HKL7v# delta 17 YcmbQ|GRcKC$kWY@Ya(m-#*A%>05c>7%m4rY diff --git a/sound/direct_sound_samples/cries/ralts.wav b/sound/direct_sound_samples/cries/ralts.wav index 4327c13a12408cba493a2b23aeb1079f224a3a04..37948dc494c2fd5bd088c6cd2339d1e8a2c417c7 100644 GIT binary patch delta 29 kcmcbk{z9EK$kWa3!9><@?!@$@92N!!hH_zsjnR$50F`kF+W-In delta 17 YcmaE%en*`($kWa3%0$-ijTsHX06x?PtN;K2 diff --git a/sound/direct_sound_samples/cries/rapidash.wav b/sound/direct_sound_samples/cries/rapidash.wav index 14ce75be75009b17e20f12ccc5df8da7295899bb..953acc45046a392731882c3a076373546eaedf09 100644 GIT binary patch delta 29 kcmccT@ydfW$kWX&X(DSlcVc={4hsVV!%t;~jnT|10G0v>$N&HU delta 17 YcmaFmanFM_$kWX&Y$9v;#tbGE06rH62LJ#7 diff --git a/sound/direct_sound_samples/cries/raticate.wav b/sound/direct_sound_samples/cries/raticate.wav index 545ebfcf1212a81cd68348ab9c26b323c1239373..bbef0c0af9507efa759c3fbe0d75f6e1f0e63cf3 100644 GIT binary patch delta 31 mcmdn0dPtQu$kWYj*F@HE?!@$@92N!!h5#XkjnPp;j0^ynWC#@i delta 17 YcmX@4x>c1m$kWYj?L^k_jTwehlPQGL6M(fW3)Cu0CyJ$6#xJL delta 17 YcmbOv-zLu*0HhKLn*aa+ delta 17 YcmaDLhKYp|8#}Js0syN)3q=3` diff --git a/sound/direct_sound_samples/cries/regirock.wav b/sound/direct_sound_samples/cries/regirock.wav index 0df3c1a720a788f8ddc1c801ae54d1c2b06850dd..271b91f31ddd04ad83162760eae0dcf63126b7b7 100644 GIT binary patch delta 29 kcmeCEnNq_VehlPQGVX-a4#^|-S0EZz6wEzGB delta 17 YcmbPI(^113RsaA1 diff --git a/sound/direct_sound_samples/cries/relicanth.wav b/sound/direct_sound_samples/cries/relicanth.wav index 1a8c04473c313fe6e922f561f200133fb8b3a976..8561780d64efb74e6a0361f476e316c93c74bfcc 100644 GIT binary patch delta 29 kcmaFm_sx$r$kWX&Zz5|rcVc={4hsVV1FJg2#%O+Z0F+$_7XSbN delta 17 Ycmez7_sWko$kWX&X(DU*#tc4n06@kDMgRZ+ diff --git a/sound/direct_sound_samples/cries/remoraid.wav b/sound/direct_sound_samples/cries/remoraid.wav index 0465e033f13f7432fd8506eb451a2bf87ba33ff8..ebab789ad3cb7b39598376cf2f26630ffa1d6b90 100644 GIT binary patch delta 29 kcmdm^c|wyl$kWa3z(m$??!@$@92N!!hHw#vjnRoB0Ez>% delta 17 YcmX@1xkr;V$kWYj%S6`jjTs3d06EbHF#rGn diff --git a/sound/direct_sound_samples/cries/rhydon.wav b/sound/direct_sound_samples/cries/rhydon.wav index e4f024f3126b95da945b9ac4a60e432a09bda51a..2c3907c91ec3ead8fc296c3628bcc4bc227829de 100644 GIT binary patch delta 31 mcmccX|H_{=$kWa3(L~m8?!@$@92N!!h6;6tjnPf&j0^y=rwLmC delta 17 YcmaFmf7hQi$kWa3>O|J?jTw#V07KIU6#xJL diff --git a/sound/direct_sound_samples/cries/rhyhorn.wav b/sound/direct_sound_samples/cries/rhyhorn.wav index 10c6841f436bf3826042f5f32530aec2fc44bc90..85837599159ba0f1201ed9b57994466512bd3e32 100644 GIT binary patch delta 31 mcmaFq{mq*-$kWa3-9*-K?!@$@92N!!h89(ZjnRFoj0^y^9SMs7 delta 17 Ycmez7{nDE?$kWa3;Y8N(jTybF07X#;I{*Lx diff --git a/sound/direct_sound_samples/cries/roselia.wav b/sound/direct_sound_samples/cries/roselia.wav index cd01f19f685e37ff527d434aa205b61ad4c6150c..f9c67fae1fc16f698fa0bf9d01735852f2c4fa24 100644 GIT binary patch delta 29 kcmbQCwM2_G$kWYDW+H1icVc={4hsVV!)6hNjnR8W0D1-p4*&oF delta 17 YcmZ3YHA9Ov$kWYDU?OYy#*95805JyzqW}N^ diff --git a/sound/direct_sound_samples/cries/sableye.wav b/sound/direct_sound_samples/cries/sableye.wav index 9f32fbdd60d3f634efe822a233c2d77f4972b82b..a1458cadc84460e3a3c9f598d711453e2bd823b6 100644 GIT binary patch delta 31 mcmcbr`$(5H$kWa3)_pb^jTx0<06umGpa1{> diff --git a/sound/direct_sound_samples/cries/salamence.wav b/sound/direct_sound_samples/cries/salamence.wav index 1c426adfad51f52ee527bf0fc7c9849241d98126..135d90ecdca54f6d1d3e490ed8dbd1a568b4e7f2 100644 GIT binary patch delta 29 kcmey8*pS2;t<8 delta 17 YcmaD7c_WfF$kWa3!bH~ajTtpM07M}N82|tP diff --git a/sound/direct_sound_samples/cries/scyther.wav b/sound/direct_sound_samples/cries/scyther.wav index 5b6ba415a17f34c51ad0dbfab1f667e680758f2f..021a6e01704e0bcc1f0a90c29edfc4daab4db3f1 100644 GIT binary patch delta 31 mcmZ2(vc-fo$kWYDXCiAjcVc={4hsVV!y!qAjnQW$85sbQWe9r! delta 17 YcmdmDvfP9<$kWYDej;o5#*EXF05rb^`2YX_ diff --git a/sound/direct_sound_samples/cries/seadra.wav b/sound/direct_sound_samples/cries/seadra.wav index c68a68a19607121cd90e250f12328b1828e46f66..84c6ad7c76426586c62c6e2ff1e70e160c00a522 100644 GIT binary patch delta 29 kcmbQHxJZ#T$kWYj)#tbU~05YKkg#Z8m diff --git a/sound/direct_sound_samples/cries/seaking.wav b/sound/direct_sound_samples/cries/seaking.wav index 6f2533e9463dcba68ce56e49906518e741c0d0f1..0534a12eda6dbe76750444dc35bebff1f9c386b4 100644 GIT binary patch delta 31 mcmX@ehlPQGVTBUI#^_B-j0^ycHV7{O delta 17 YcmbQ`*6YR^va7TbO$kWX&WFl)gcVc={4hsVV!z*@%jnQA&85sbWPYBll delta 17 Ycmca3a9)5l$kWZueIjf4#*EMG05=5&KL7v# diff --git a/sound/direct_sound_samples/cries/seviper.wav b/sound/direct_sound_samples/cries/seviper.wav index b467378f4ce2209ddef2539c59e35e8f0825f520..73529d9c1c7d3ae88fff894e1562994956194b67 100644 GIT binary patch delta 29 kcmX@7drOx!$kWa3(nQv9?!@$@92N!!hDk diff --git a/sound/direct_sound_samples/cries/sharpedo.wav b/sound/direct_sound_samples/cries/sharpedo.wav index 26c52b43c3e93de8450c178d3d9f4ae291d44c43..7f773d4fbb50b2e1d2dd89c2305dfc9bc80ce19c 100644 GIT binary patch delta 31 mcmewy*$~AViw_T1k$kWYDe2_y7O^ diff --git a/sound/direct_sound_samples/cries/shroomish.wav b/sound/direct_sound_samples/cries/shroomish.wav index 07658c8801094309df1d564de6546f9317ee3a45..05fa696706e1a1ba50f9d140a719680ef8c9d8e5 100644 GIT binary patch delta 31 mcmaE^^hJp^$kWX&XCiAjcVc={4hsVV1Ct=b#%LZvMg{; delta 17 YcmeyO^jwKG$kWX&ej;o5#td#j06QB6%>V!Z diff --git a/sound/direct_sound_samples/cries/shuckle.wav b/sound/direct_sound_samples/cries/shuckle.wav index bb196dbfe94aec25b8378d3a645c46af680543be..afc303e4d832d93c6557c4779b589c08b5c6d926 100644 GIT binary patch delta 31 mcmeCwn5MxRehlPQGVTmxq#^`mzj0^yTNe96I delta 17 YcmbQH(W${2j0^yk?+5Du delta 17 YcmZ2wKi8f$$kWYj>O|J?jTw&e05@v|?EnA( diff --git a/sound/direct_sound_samples/cries/skarmory.wav b/sound/direct_sound_samples/cries/skarmory.wav index 29249730232a424062fa586081f138ded2a05598..7062c9813dbe762cd39cc342e9e0e2551724e762 100644 GIT binary patch delta 31 mcmaDD`!1F>$kWa3*+kZG?!@$@92N!!h8jJFjnQp-j0^y_oC%o# delta 17 YcmaDC`!JR@$kWa3=0w);jTxehlPQGK}nKfW3-MWBLe`6%LiEi delta 17 YcmbPY+-}So`7O;B diff --git a/sound/direct_sound_samples/cries/slaking.wav b/sound/direct_sound_samples/cries/slaking.wav index ef34d94d690bacd0ddc9ac12e1a7502353a08c13..44681126d418ad76d9714ffef403c56492b1a7d1 100644 GIT binary patch delta 29 kcmeyP)}hWCehlPQGL0p(&W3-|$0E6`hdH?_b delta 17 YcmeBB|D(nl0E>1AM*si- delta 17 YcmX@7cu0{o$kWYj*F@IvjTvbI06EzPH2?qr diff --git a/sound/direct_sound_samples/cries/slowbro.wav b/sound/direct_sound_samples/cries/slowbro.wav index fe03ab4cdd8c6ce42796225719d9657e7d405c0d..c46e751f51798a7b43480c127a6b44b62c584e25 100644 GIT binary patch delta 29 kcmca)a?gY{$kWX&Y$9tocVc={4hsVV!&^y)jnUsF0gs0XPXGV_ delta 17 Ycmca-a>;}>$kWZuYa(m-#*A;006V+}qyPW_ diff --git a/sound/direct_sound_samples/cries/slowking.wav b/sound/direct_sound_samples/cries/slowking.wav index f802796282ad0b9a734dbcfbe5dad455e0a86297..a32fea33df7e37325684c9cc22a76ee878b8dcfb 100644 GIT binary patch delta 29 kcmbOhyC{}5$kWYj)OV delta 17 YcmZ1!J1v$q$kWZOZz5~>#tbVx06E778vpehlPQGVYx8F#^{a00CkrK%>V!Z delta 17 YcmbQC(WAi{x9x@~ diff --git a/sound/direct_sound_samples/cries/sneasel.wav b/sound/direct_sound_samples/cries/sneasel.wav index da76aefb71f3745ffe89dfd5977b249bd718f820..dc960be0dcac1c38a899f0141b9b8cbb3cab7009 100644 GIT binary patch delta 30 lcmeyP+@Zo2Dh+y7$kWX&c_M50#teQg06G{2x&QzG diff --git a/sound/direct_sound_samples/cries/snorunt.wav b/sound/direct_sound_samples/cries/snorunt.wav index b4ecc4537fb12322039b4f9ed0d5ec4425ce54c8..586c1311689ac2ae8dc09cbb638d784cdcf29a21 100644 GIT binary patch delta 31 mcmX@^bj67^$kWZuXCiAjcVc={4hsVV!y^TTjnQuu7#RSez6nJD delta 17 YcmccOblizG$kWZuej;o5#*Ehr06VG%oB#j- diff --git a/sound/direct_sound_samples/cries/snubbull.wav b/sound/direct_sound_samples/cries/snubbull.wav index 37cacda8f77a452cb9984f2cf233b891e9c3b5a1..626da01c144c7b9b00924d9d673c63482ed5f19b 100644 GIT binary patch delta 31 mcmX?Zam9i)$kWZuXCiAjcVc={4hsVV!y{>ijnQwU85sbdLkTAU delta 17 Ycmca&aomD6$kWZuej;o5#*Ej}06KXFg8%>k diff --git a/sound/direct_sound_samples/cries/solrock.wav b/sound/direct_sound_samples/cries/solrock.wav index 12f766af714aba8ad883e0b165bcf06d0ff13ac3..d99dcbd2b4086e6cd4ca23c779d0cf301295170c 100644 GIT binary patch delta 29 kcmZ2vzs{aD$kWYj*+kZG?!@$@92N!!23vWCjnVG%0Ed$Z0RR91 delta 17 YcmZ2yzsR07$kWYj)ehlPQGL0E}lW3;Ri0Eu1)zyJUM delta 17 YcmZp1{o%qIYjnVbm0H2QuVE_OC delta 17 YcmaDBek+_c$kWa3(nQwqjTv>?07N(k8~^|S diff --git a/sound/direct_sound_samples/cries/starmie.wav b/sound/direct_sound_samples/cries/starmie.wav index e3ace4fcf2ffe87ec665b8cd94589ba232eacc41..40edec6b9ec574ecd2951f5b3cf5fb987a292f3f 100644 GIT binary patch delta 31 mcmdlQcqouH$kWYj*F@HE?!@$@92N!!h5!wQjnPpWj0^yyP6(L* delta 17 YcmX>UxHXV9$kWYj?L^k_jTw;|06l;PdH?_b diff --git a/sound/direct_sound_samples/cries/staryu.wav b/sound/direct_sound_samples/cries/staryu.wav index c726206f43b022ab43e62acdea8ecd0a78b1a2ec..611c0571bafa1d44c8282591a3adcbde5f54cab6 100644 GIT binary patch delta 31 mcmaFp`_7j&$kWa3*+kZG?!@$@92N!!h8i`7jnQptj0^y>qzP#N delta 17 YcmaFo`_Pv)$kWa3=0w);jTx(3=9mnJQ+4dKk;N_006gO3KakV delta 19 bcmX>zg>nBBM%ExtH#hT%tl=9o9(w`+NK*$( diff --git a/sound/direct_sound_samples/cries/sudowoodo.wav b/sound/direct_sound_samples/cries/sudowoodo.wav index 48661df94ed9387ff7738998305e285cdf228b1f..97bb1d51a295eca8feac1fa737bde24084f408b7 100644 GIT binary patch delta 31 mcmZ2(zr~(4$kWYj%|zC4?!@$@92N!!1}AxjjnO{xj0^yor3f7W delta 17 YcmdmDzucZR$kWYj{zTUBjTzqZ067l^6#xJL diff --git a/sound/direct_sound_samples/cries/suicune.wav b/sound/direct_sound_samples/cries/suicune.wav index f675d8fdc4ba32e8b16363493dd832ab08bf4a36..90218ad0135994bed7ea77e4e42d9e2b983079a4 100644 GIT binary patch delta 31 mcmdn#e$1UU$kWYj-$d4M?!@$@92N!!h7e_jjnQ$+j0^yxPY90y delta 17 YcmX@+zSEsG$kWYj<3!f*jTy1Z06g~waR2}S diff --git a/sound/direct_sound_samples/cries/sunflora.wav b/sound/direct_sound_samples/cries/sunflora.wav index 613422881cc6389ea322949a2ed06356288868b2..ccad9c8c36cd2e0550f9fe487bddce399b3b93ce 100644 GIT binary patch delta 29 kcmeCOn`XxvehlPQGVW}L$#_08O0D0aB1poj5 delta 17 YcmbPc*JZ~VO|J?jTw$205r@6wg3PC diff --git a/sound/direct_sound_samples/cries/swablu.wav b/sound/direct_sound_samples/cries/swablu.wav index f24d34930742f1392cd8964a08dd8401f452c000..0fafb27d0d7cb44b1fdd94372afa093f9aab4bbe 100644 GIT binary patch delta 29 kcmbOwwoHsQ$kWYDZX#n+a diff --git a/sound/direct_sound_samples/cries/swalot.wav b/sound/direct_sound_samples/cries/swalot.wav index cfed97934289827cb63b7588a6e4925b9f791f5a..56e0b170b1a81534b810d22b6c50b23468581def 100644 GIT binary patch delta 29 kcmez7+~mR<=#*A5t06qQ&+W-In diff --git a/sound/direct_sound_samples/cries/swampert.wav b/sound/direct_sound_samples/cries/swampert.wav index a06f15992faa7f2ecb75996fb2d6e4ee8b78fec2..eab813edb744ba70ff7d434a39e696a9d06a0f2e 100644 GIT binary patch delta 31 mcmaDJ{w16>$kWa3%|zC4?!@$@92N!!h9+%>jnO^Yj0^y`SqY^8 delta 17 Ycmewo{ydyD$kWa3{zTUBjTznA07h#EQ2+n{ diff --git a/sound/direct_sound_samples/cries/swellow.wav b/sound/direct_sound_samples/cries/swellow.wav index 637ff465403fdf6e01ff13db160e1e8e8f2c96aa..118eb684c3abe8a7bbfcc8683bff14a00137938d 100644 GIT binary patch delta 29 kcmdm|d`g)$$kWa3&_vd7?!@$@92N!!hDbq%jnT=10E(3eIRF3v delta 17 YcmX@5yib`m$kWYj+eFszjTuRT06A_3DgXcg diff --git a/sound/direct_sound_samples/cries/swinub.wav b/sound/direct_sound_samples/cries/swinub.wav index 93eafa458d9323e772ee77bbd14a87965fc61c7e..e84ba9454aeb2e40c3d6066895c82a85081c6e8e 100644 GIT binary patch delta 31 mcmX?Yc*Br2$kWa3!bH|^?!@$@92N!!hBOI=jnM@Xj0^yyhzO?u delta 17 Ycmca%c-oLP$kWa3@I=<|jT!k806k0wf&c&j diff --git a/sound/direct_sound_samples/cries/taillow.wav b/sound/direct_sound_samples/cries/taillow.wav index 9f1bb25f487baf67901c6055dd6caa734f885d3d..7d4135c76a90f0b4b72e32baa30733a663a971b0 100644 GIT binary patch delta 31 mcmaDX{z05I$kWa3#YEO{?!@$@92N!!hB|JBjnN(4j0^y!{Rq(j delta 17 Ycmew${#cwf$kWa3_C(h3jT!CS06rrIp#T5? diff --git a/sound/direct_sound_samples/cries/tangela.wav b/sound/direct_sound_samples/cries/tangela.wav index 023a0362f953f5310db4e120a28974041f6fd8d9..991b787ff4ad31f937a6f114f7dcf2a574df4acc 100644 GIT binary patch delta 31 mcmbPeJ07H2P2><{9 diff --git a/sound/direct_sound_samples/cries/togepi.wav b/sound/direct_sound_samples/cries/togepi.wav index e13355c55414be75432cbd0b17bcc7cf27b99e79..ac6bbf9ff8bc8888dd04221c7761628cd127a699 100644 GIT binary patch delta 31 mcmaE^^+k&{$kWX&XCiAjcVc={4hsVV1CuDj#%LZ$kWa3;zZW)jTyDP06h5yg8%>k diff --git a/sound/direct_sound_samples/cries/torchic.wav b/sound/direct_sound_samples/cries/torchic.wav index 39a2522b3282b24c1be8d077ddc47e0e46f8c788..5dd5c56bedaa4568a8a0bd0272f674714a10ec2c 100644 GIT binary patch delta 32 ncmeyZ+M&i4o0r<{9 delta 17 YcmccTe#xCR$kWa3)I`?sjTvRi06_o-)Bpeg diff --git a/sound/direct_sound_samples/cries/trapinch.wav b/sound/direct_sound_samples/cries/trapinch.wav index 5cad4ad23e9003f0f613224657973a958adfc568..abb851c1b709c3d859022b34b2dfb09504056369 100644 GIT binary patch delta 29 kcmaE*{!N`V$kWa3-9*-K?!@$@92N!!hE`#QjnVzW0GbyGApigX delta 17 YcmeyS{z{!S$kWa3(L~npjTwEy06`!It<8 diff --git a/sound/direct_sound_samples/cries/typhlosion.wav b/sound/direct_sound_samples/cries/typhlosion.wav index f1759989d720418d75a69457bc6a1de1fa032884..cd525d5610fd1fd17b8c6559687f419227783b39 100644 GIT binary patch delta 31 ncmbOl{#M%ExtH#f0~tl`{==}9>(3=9lwJsCDeZ}$WMla2{7 delta 19 bcmbO?g>ljpM%ExtH#e?{tl=9ows`^oKvxEq diff --git a/sound/direct_sound_samples/cries/tyranitar.wav b/sound/direct_sound_samples/cries/tyranitar.wav index 5bec5f7279e08c0c652f3b1a9891a97b8691e676..f2b76821067e77bb95fa0a609fb1339750389017 100644 GIT binary patch delta 29 kcmbOgy)2qF$kWYj-bB`L?!@$@92N!!22)*zjnVeH0E;yUEdT%j delta 17 YcmZ1$Ju8|u$kWYj(nQwqjTv^j06H=TCIA2c diff --git a/sound/direct_sound_samples/cries/tyrogue.wav b/sound/direct_sound_samples/cries/tyrogue.wav index 46d032063da7bf0381602027e43f89cbed5fdb4e..4905a85661a4f939427c3b162cd121242d046fec 100644 GIT binary patch delta 31 mcmbPjzrvn1$kWYj!9><@?!@$@92N!!1~YkvjnNMBj0^ykF$duQ delta 17 YcmZ2sKii%)$kWYj@uZ$kWX&Y9ebmcVc={4hsVV!v|T0jnThk85sbja|w9> delta 17 YcmaE4bJd15$kWZucOq-}#*Ck`06jkj#Q*>R diff --git a/sound/direct_sound_samples/cries/unown.wav b/sound/direct_sound_samples/cries/unown.wav index 1956ecef7575a2b77c90f7caf94a8a0dfe1c92de..befaaedd00efd201c4b9f4720626a2f251e54e9d 100644 GIT binary patch delta 29 kcmX?Pe9o9P$kWa3*hJQF?!@$@92N!!hFD34jnV0n0FQwPeE=D$kWYDVj^q!#*8DD06QoKd;kCd diff --git a/sound/direct_sound_samples/cries/vaporeon.wav b/sound/direct_sound_samples/cries/vaporeon.wav index 8ec30948512d58d8e57484fa58dd6e76937db7e3..861bc93cbe0a3e2cb3450a9f5174f110888749a0 100644 GIT binary patch delta 29 kcmbOewjzu*$kWYDVIpfdcVc={4hsVV!*(r(jnN0S0EIjVrvLx| delta 17 YcmZ1xHYbcV$kWYDWFl+$#*71605uZ$kWX&Y9ebmcVc={4hsVV!v|T0jnThk85sbja|w9> delta 17 YcmaE4bJd15$kWZucOq-}#*Ck`06jkj#Q*>R diff --git a/sound/direct_sound_samples/cries/venusaur.wav b/sound/direct_sound_samples/cries/venusaur.wav index fdd299ae277176734ddce4b6a55bf672941cfd20..4273ac8471a4a6c62cb4bbf61bad4b663cc50837 100644 GIT binary patch delta 31 mcmX@?eZiYG$kWa3#6;F`?!@$@92N!!hB#G*jnNsZj0^y$0|?Ck delta 17 YcmccMeb}2d$kWYj_e9q4jTz~x06!H5qW}N^ diff --git a/sound/direct_sound_samples/cries/vibrava.wav b/sound/direct_sound_samples/cries/vibrava.wav index 5370104875448ca496bc401d0a9ca2a86c741759..9f4b2b362510630ab5ea20b951a4c961c5d6c70a 100644 GIT binary patch delta 31 mcmaEB_REYl$kWZOXd-JkcVc={4hsVV1BW!j#%LjFMg{<%=?CEe delta 17 Ycmexm_STFw$kWX&bs}r{#tcDe06uvJ7XSbN diff --git a/sound/direct_sound_samples/cries/victreebel.wav b/sound/direct_sound_samples/cries/victreebel.wav index 19f11202f95ecbfb964de4ee01ae1d86ad7ae77c..cea271b30baa186fc70e12207147192f227f284b 100644 GIT binary patch delta 31 mcmdn!z0aF9$kWYj+eFrI?!@$@92N!!1|L<1jnQGMj0^yvRS0tc delta 17 Ycmdnzz0sRB$kWYj$kWa3(L~npjTwE007ym$dH?_b diff --git a/sound/direct_sound_samples/cries/volbeat.wav b/sound/direct_sound_samples/cries/volbeat.wav index ae6375b95f9ac60b97bfff96d7f1151fe701b8b5..d29a8ddbe1e812f150c9ca23377f924388c210fc 100644 GIT binary patch delta 29 kcmbQIyGoZe$kWYj(L~m8?!@$@92N!!21_x9jnU3x0D?3Jw*UYD delta 30 mcmZ3bJ5QH2$kWYj+CP*6@uPo^Aj|*9Ou6 diff --git a/sound/direct_sound_samples/cries/wartortle.wav b/sound/direct_sound_samples/cries/wartortle.wav index 950f87d74b2e64854955777c7784ab370cd28c32..040292e128414b58407ec5b8a70bb85fef880f89 100644 GIT binary patch delta 31 mcmdn#e9W0O$kWYj-$d4M?!@$@92N!!h7d)DjnQ$6j0^ywQ3!(o delta 17 YcmX@+ywjOA$kWYj<3!f*jTy0u06cvLX8-^I diff --git a/sound/direct_sound_samples/cries/weedle.wav b/sound/direct_sound_samples/cries/weedle.wav index 6a209fede1231b912d7de06f4617b99bc77a5de7..2c891cd309c948181b9a874f971bafc1d9ae6b82 100644 GIT binary patch delta 29 kcmX?Sf6JaV$kWa3(nQv9?!@$@92N!!hD>>ejnT#O0G2NZ-2eap delta 17 Ycmca*f6ksY$kWa3*hJRwjTuGq06$~~umAu6 diff --git a/sound/direct_sound_samples/cries/weepinbell.wav b/sound/direct_sound_samples/cries/weepinbell.wav index 48f7225cf581f2e6359eec67c503a8e71b310748..206bd24e45aa308971641a1687b573909c4db1b9 100644 GIT binary patch delta 29 kcmZ2rxyF(;$kWYj$wbz0?!@$@92N!!25T9HjnS?$0ELhT58=>Px# diff --git a/sound/direct_sound_samples/cries/weezing.wav b/sound/direct_sound_samples/cries/weezing.wav index b5a7b189d038460cbff1d99ed46a9044e638487b..ee605859556130681d69bfa291f7fb38c9c92a41 100644 GIT binary patch delta 29 kcmX>RawUW{$kWZuXCiAjcVc={4hsVV!(&Z`jnQv40h473eE7#RSWlnB=V delta 17 Ycmdnzw9$z*$kWYDb0TZ_#*C{905}c?L;wH) diff --git a/sound/direct_sound_samples/cries/whismur.wav b/sound/direct_sound_samples/cries/whismur.wav index af3e3e0e31cd096a2c1fd90554dc64dc4d3a3381..3470acc99fdf1d16a558bba5cb83a0f6e96c40ae 100644 GIT binary patch delta 29 kcmeBEn5DoPehlPQGVI@Dq#^}xb0CaT+zW@LL delta 17 YcmbQG(5Ju}=#tbfA06FXhv;Y7A diff --git a/sound/direct_sound_samples/cries/wingull.wav b/sound/direct_sound_samples/cries/wingull.wav index 4e158409add4c1dab597bd98a89997170746700e..b7802959351145a392a87439642888246ef074b3 100644 GIT binary patch delta 30 lcmZoOm}I~fUuq}W!$kWYDZz5~>#*AC)06KaGdH?_b diff --git a/sound/direct_sound_samples/cries/wooper.wav b/sound/direct_sound_samples/cries/wooper.wav index 83c7e589df12a7aa9e24086ce693560119259d62..280845b2b80c58620dd5461a3ee4e4f2549eb8fa 100644 GIT binary patch delta 31 mcmbOzJ5QE1$kWYj+CuDo$kWYj>qOS@jTwnT06CHdEC2ui diff --git a/sound/direct_sound_samples/cries/zapdos.wav b/sound/direct_sound_samples/cries/zapdos.wav index 58415b934444104a1e271e28758377e586e11449..f8168a603ccdb9d3e873470fbb6d40c90ef605d4 100644 GIT binary patch delta 31 mcmdmQbH;`>$kWZuWg=@hcVc={4hsVV!!22cjnPkJ85sbbNeK%8 delta 17 YcmX?Ov)_g_$kWZud?IW3#*D|Z06C)uZ2$lO diff --git a/sound/direct_sound_samples/cries/zigzagoon.wav b/sound/direct_sound_samples/cries/zigzagoon.wav index ac0b68edcde05ba64683fc1c8a60d4e38ffbe006..fca81cf0f31c1b243eaf81b2005f3e40ff8e494f 100644 GIT binary patch delta 31 mcmZ3hyGxff$kWYj(?r&A?!@$@92N!!1`jcYjnP43j0^ymXb1%W delta 17 Ycmdm`yH=Mq$kWYj=|tA>jTwPr05|3a00000 diff --git a/sound/direct_sound_samples/cries/zubat.wav b/sound/direct_sound_samples/cries/zubat.wav index dc0756a06de0c9a0840ceab25912560903ecf6ea..58c0c16e58c3a6a73519b944eecf1292bd96abc7 100644 GIT binary patch delta 31 mcmaFu{ll9z$kWa3!$j6_?!@$@92N!!hBj4(jnNZS85sbz+XLWh4vfQKPU$PwZIF# diff --git a/sound/direct_sound_samples/drum_and_percussion_kick.wav b/sound/direct_sound_samples/drum_and_percussion_kick.wav index 49ba617f0c1410dd8346deef31f4c34f07a53076..4b6969b6eb4ed2b75413527d6e99d93e3d9388bf 100644 GIT binary patch delta 31 mcmaDY_d|{~$kWZOU?OWccVc={4hsVV0~ehlPQGK~$JwW3;?50E0^hZ~y=R delta 17 YcmZou|E0zn=#*9}205_ioM*si- diff --git a/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav b/sound/direct_sound_samples/ethnic_flavours_ohtsuzumi.wav index c12ae6de34e03f23da9ecb63ad4597c214fe74ed..e7f08c81000a93bdf4f20974c54523fc891b5229 100644 GIT binary patch delta 29 kcmZ2yw9AM!$kWZuXd-JkcVc={4hsVV!$}E-jnS7S0D~Y1l>h($ delta 17 YcmdmGw9be%$kWYDZ6a&<#*9l605z8e4*&oF diff --git a/sound/direct_sound_samples/heart_of_asia_gamelan.wav b/sound/direct_sound_samples/heart_of_asia_gamelan.wav index a6258c97d415e6e10579208b47f51280f9ecbd23..48513e4b799e5c779ad43bb851f488a8a327811a 100644 GIT binary patch delta 46 zcmaFU&G@66ku}KE&F#ZP)_jq~^rRdX1_p+FR|bZZ#FE4UAU(0sdg27uje87S0dCa~ ABme*a delta 19 acmey-&G@F9ku}KE&F#rV*8GhP6|MkMj0gY# diff --git a/sound/direct_sound_samples/phonemes/01.wav b/sound/direct_sound_samples/phonemes/01.wav index d7f43544f519a221bc0174cdcccb483bfe9c7998..ebc90ac2f75ada47efe1815a3d5f7442b6adcbc8 100644 GIT binary patch delta 31 mcmdnYdw`cU$kWYj$3)g}?!@$@92N!!20u22jnNToj0^ygvIoNe delta 17 YcmX@WyP20Y$kWYj^+eY2jTzx=05uW?$N&HU diff --git a/sound/direct_sound_samples/phonemes/02.wav b/sound/direct_sound_samples/phonemes/02.wav index 6b9e4134c8591da5981b6d7a87f5c17a06ed9e2d..4c6bdbff7e7b27f0eeeb2e067b2de14b5c09cc72 100644 GIT binary patch delta 29 kcmcb>b%%>J$kWX&WFl)mcVc={4hsVV!(|qRjm39a0ETu5#{d8T delta 17 Ycmcb^b%BdD$kWZuV diff --git a/sound/direct_sound_samples/phonemes/03.wav b/sound/direct_sound_samples/phonemes/03.wav index a080496adbeddbfc0baa706e52d7179d831262b3..d2e993437647b8c6daba66634471dca2cf342a20 100644 GIT binary patch delta 31 mcmZ1|yiS-k$kWYj*+kZG?!@$@92N!!1{+R>jnQtLj0^ybfd_j4 delta 17 YcmZ1{yik}m$kWYj=0w);jTx?-05a7Dj{pDw diff --git a/sound/direct_sound_samples/phonemes/04.wav b/sound/direct_sound_samples/phonemes/04.wav index 0525f8f5d3db4c51062b6252bea6ee96f08f5f88..ecba93ebf93746d2d0d792f80f9e1f0e4317a9d0 100644 GIT binary patch delta 29 kcmX>idO?&m$kWa3#6;F`?!@$@92N!!hIlT9jnSE00Euo0EdT%j delta 17 Ycmca0dPI~p$kWYj&qUVnjTsqS064z}9{>OV diff --git a/sound/direct_sound_samples/phonemes/05.wav b/sound/direct_sound_samples/phonemes/05.wav index 5df5562768b9428ae01a208bf1bc22a94603b29f..d7726826a6f55c67fa6d508d89af1f1262d4ea97 100644 GIT binary patch delta 31 mcmeBXpTW)=<@?!@$@92N!!hB6+8jnNG}j0^yygb1$y delta 17 YcmaDMd0Ub-$kWa3@ehlPQGfuD_GW3(h20DE=^1ONa4 delta 17 YcmZqR{ldc<Bb delta 17 YcmX>kvsH#Q$kWYDcOq-}#*CZ105mTJ^#A|> diff --git a/sound/direct_sound_samples/phonemes/10.wav b/sound/direct_sound_samples/phonemes/10.wav index da9fa6727c9ddf04c75024081945addae2e3ebc7..e931a7d9df31c86bb5f3c3c57419e7f1658547c9 100644 GIT binary patch delta 31 mcmX>sd_kBs$kWa3#6;F`?!@$@92N!!hB!`!jnNsLj0^yo9|$D? delta 17 Ycmca0d{~$@$kWYj_e9q4jTz~j061v|7XSbN diff --git a/sound/direct_sound_samples/phonemes/11.wav b/sound/direct_sound_samples/phonemes/11.wav index 5cd1904b4245da48b1b9f76d73e67e85c91bcc19..949865e64ae3ec27cf6db56075161bccc30f4dad 100644 GIT binary patch delta 32 ncmZqYn8Lvp%m6k|1}6Xj diff --git a/sound/direct_sound_samples/phonemes/12.wav b/sound/direct_sound_samples/phonemes/12.wav index da638d82b0422e195a4f31bd487b2fbbb9a08bd4..573867ca9287b988e8bbf148b086e228b17bbf8a 100644 GIT binary patch delta 32 ncmZn_m?Xd!+dN>;N{21|I+b diff --git a/sound/direct_sound_samples/phonemes/13.wav b/sound/direct_sound_samples/phonemes/13.wav index 2eb58a5f3ffb6375a98b666c1f0b36caaf322b97..a4629fa1d64e556a4af4f00daad11537d59bb129 100644 GIT binary patch delta 31 mcmZ20y-S)k$kWYj(?r&A?!@$@92N!!1`l3_jnP58j0^yh@dwWU delta 17 Ycmdlby;hnv$kWYj=|tA>jTwQw05!n{(*OVf diff --git a/sound/direct_sound_samples/phonemes/14.wav b/sound/direct_sound_samples/phonemes/14.wav index fef0bb0ded7c61120750706ae328d6e68a213021..d6ae4c4bcede79c8d17f790f0802c002a7e22c46 100644 GIT binary patch delta 29 kcmdnMx`&lD$kWYj%S6_E?!@$@92N!!24g0Mjm5T10Dw9NnE(I) delta 17 YcmdnPx`CB7$kWYj#YEQpjSV(T05l&3zW@LL diff --git a/sound/direct_sound_samples/phonemes/15.wav b/sound/direct_sound_samples/phonemes/15.wav index 1dbe8cbfa3de6a0000494e0135b80b70f4c02c58..80ac82c0ef561a195c8a01d9feeaf46751bdc360 100644 GIT binary patch delta 31 mcmbOzJ5QE1$kWYj+CehlPQGL4l27W3(0Rh04;_E5C8xG diff --git a/sound/direct_sound_samples/phonemes/19.wav b/sound/direct_sound_samples/phonemes/19.wav index ff905abe22d591ade5bfad6992d77376efbf5c3f..5f846bea008848495f87639726abb5ebbe049e22 100644 GIT binary patch delta 31 mcmdlhc}kKs$kWa3&_vd7?!@$@92N!!h6o;pjnPRwj0^ynVh9-k delta 17 YcmX>lxmS`k$kWYj>qOS@jTwnN05~KD4gdfE diff --git a/sound/direct_sound_samples/phonemes/20.wav b/sound/direct_sound_samples/phonemes/20.wav index 595702e084797d0396af02f8efd6f3c0255a7666..e79694f650b2871c37123b6d16aa8b9c5edf0ff5 100644 GIT binary patch delta 32 ncmZqXnZUyqr$kWX&W+H1icVc={4hsVV!zWgTjnRKt85sbYNeJ@* delta 17 YcmaFDbDf7Z$kWZuekyj7Sr$kWYj?L^k_jTw=g05%;3-v9sr diff --git a/sound/direct_sound_samples/phonemes/25.wav b/sound/direct_sound_samples/phonemes/25.wav index 135bb246dd98b1dda846383250d9aae263b376e0..429f608fb86bc49d6b4b8f0844ab8725ea01db58 100644 GIT binary patch delta 31 mcmcaB|4N=U$kWa3(L~m8?!@$@92N!!h6;X$jnPf~j0^y!zX;0! delta 17 YcmaDQe^;J0$kWa3>O|J?jTw#n06rTAod5s; diff --git a/sound/direct_sound_samples/phonemes/26.wav b/sound/direct_sound_samples/phonemes/26.wav index e466df4d86c7a89b273c89a1f58cb7c0608630d9..032ab3fd368f74ad1aa4f38c18ff8606bdb2944c 100644 GIT binary patch delta 31 mcmZ3;yN;JN$kWYj*+kZS?!@$@92N!!1{F4jjm3Iwj0^yb3aN$kWYDYa(kncVc={4hsVV!vQXajnSvL7#RSHHV790 delta 17 Ycmdlawp5HY$kWYDb|P!|#*C9(05I4ErT_o{ diff --git a/sound/direct_sound_samples/phonemes/28.wav b/sound/direct_sound_samples/phonemes/28.wav index fe9dde8e35202e087c103a76e75f888d2d41780f..4050d3511310bf539fa72c88721b80560d5f3b84 100644 GIT binary patch delta 29 kcmbOszeJuj$kWYj&P3L5?!@$@92N!!24jAPjnTIJ0DTb$ZvX%Q delta 17 YcmZ1?KSQ21$kWYj!bH~ajTtul05Z4*hyVZp diff --git a/sound/direct_sound_samples/phonemes/29.wav b/sound/direct_sound_samples/phonemes/29.wav index d05658c97edb5ff717b29cc0a0122bc6d6b2cedc..ae48eac22bfd74aabb0523fc0685aa0fd8f07222 100644 GIT binary patch delta 29 kcmaFD{ehb`$kWa3#YEP8?!@$@92N!!hICejjm3qm0Fu`TuK)l5 delta 17 Ycmeys{e+t}$kWa3&P3MyjSU5?06ks?o&W#< diff --git a/sound/direct_sound_samples/phonemes/30.wav b/sound/direct_sound_samples/phonemes/30.wav index aaf163ae979545a3c62b1d524d9a355d77b65f3d..fd76403a08edd1eb0afcf13cc312e793eb43221b 100644 GIT binary patch delta 31 mcmbO$yGoWd$kWYj(L~m8?!@$@92N!!1`9rhjnPhgj0^ycfCq&D delta 17 YcmZ1_J6D!9$kWYj>O|J?jTw%705e_%m;e9( diff --git a/sound/direct_sound_samples/phonemes/31.wav b/sound/direct_sound_samples/phonemes/31.wav index 64b2c7f6db1ebd39490ca112b5e645f31622c247..b43bba09a9e0a7fe91c8b38594ac014171366310 100644 GIT binary patch delta 31 mcmca9_e_p8$kWX&ZX#gc1Daf$kWZuWg=@ncVc={4hsVV!(lFljm2lV0E5^Fn*aa+ delta 17 YcmX>jc0i0Z$kWZuVj^q)#)dOo05!!1DF6Tf diff --git a/sound/direct_sound_samples/phonemes/33.wav b/sound/direct_sound_samples/phonemes/33.wav index f96a5e49fd4bfd9e9f7959d22a363788ec5c213a..0a88ce09d99539fa3656febe63685ce56853f9a9 100644 GIT binary patch delta 31 mcmaDV{z;rQ$kWa3)kM~C?!@$@92N!!h6ZkijnQ4)j0^y#y9nC= delta 17 Ycmew){#2Yb$kWa3?nKt`jTxQX06upHsQ>@~ diff --git a/sound/direct_sound_samples/phonemes/34.wav b/sound/direct_sound_samples/phonemes/34.wav index 1439810d44faa24f222d1ec964a3bf9c95895038..145cf68e89b8cf926fb0ab35c2ba5aa6937aa5d4 100644 GIT binary patch delta 31 mcmZ1}vQ30F$kWYDZz5|rcVc={4hsVV!x2t~jnU^g85sbJGYBOB delta 17 YcmdlcvQmUK$kWYDaUyH@#*DL^05L-au>b%7 diff --git a/sound/direct_sound_samples/phonemes/35.wav b/sound/direct_sound_samples/phonemes/35.wav index aa6599bcc8dd8c727fe9c1a73ee9670916259be5..9c65433459450dd07bfbd055dea34205e9a615a6 100644 GIT binary patch delta 29 kcmZ3*yN#DM$kWYj-9*-W?!@$@92N!!23A?AOHXW diff --git a/sound/direct_sound_samples/phonemes/39.wav b/sound/direct_sound_samples/phonemes/39.wav index da335b269055122c2c8df93499c70472615c9f32..89d0abc6fad44195652089f2d7ce1b9846dc9e39 100644 GIT binary patch delta 31 mcmeAbo+Zp0Mg{Co056RNKL7v# diff --git a/sound/direct_sound_samples/phonemes/40.wav b/sound/direct_sound_samples/phonemes/40.wav index 14944784a4d0c614f38796f431d32bb647210a0c..d6f65e91218bfc31c041aa513f642f80400d9a02 100644 GIT binary patch delta 31 mcmeAbm?gj(ehlPQGVFf$G#^_D#j0^yO(FctH delta 17 YcmbOw&?~?ieTSPh$kWa3%0$+D?!@$@92N!!hG15Pjm5F70E{yTO8@`> delta 17 Ycmcb^eSw=b$kWa3#6;HojSVrZ06G>1P5=M^ diff --git a/sound/direct_sound_samples/phonemes/42.wav b/sound/direct_sound_samples/phonemes/42.wav index a990969146c5e7e9e0d39762c9d8c4f2866db9bf..a97bbadcb5615344d931d5028812eca78c023e89 100644 GIT binary patch delta 31 mcmX>qeMy=%$kWa3)I`>B?!@$@92N!!h6G-QjnP@Wj0^yq*$77f delta 17 Ycmca4eN>t?$kWYj??l${jTxD|06DP+GXMYp diff --git a/sound/direct_sound_samples/phonemes/43.wav b/sound/direct_sound_samples/phonemes/43.wav index ab4a046743d3255afe04b672b60015c11315a009..8b7392277e20daf0a57b43c1e449c048ea7f4809 100644 GIT binary patch delta 31 mcmX@ld54oV$kWa3%0$+1?!@$@92N!!hAb9_jnO46j0^yq7zjfE delta 17 Ycmcb^d7hIs$kWa3_(az5jTyx(068!QE&u=k diff --git a/sound/direct_sound_samples/phonemes/44.wav b/sound/direct_sound_samples/phonemes/44.wav index efca4e3f9732517a28525a23b03b5c0f2851338a..4b412698b91b2be62a33654346cb75725f3b62e1 100644 GIT binary patch delta 29 kcmcb?^@NKx$kWX&W+H1ocVc={4hsVV!)+FZjm1w{0Er$5?*IS* delta 17 YcmaFDb%TpF$kWX&U?OY&#)c;>060emYXATM diff --git a/sound/direct_sound_samples/phonemes/45.wav b/sound/direct_sound_samples/phonemes/45.wav index 0369d3c2a1fa05539b6262c2947bc827b69e3ce2..0e2bfb567447c18ae68d5db18055ea76ca1e34c3 100644 GIT binary patch delta 31 mcmbO!uuOn8$kWYDZX#vaYuqR$kWX&WFl)gcVc={4hsVV!z*rvjnQAY85sbYO9<}( delta 17 Ycmca3abAKo$kWZueIjf4#*EM005|ytQvd(} diff --git a/sound/direct_sound_samples/phonemes/47.wav b/sound/direct_sound_samples/phonemes/47.wav index a55f03a1535c416919114120124ad6d39dca5ee6..45668adda622fb3c84be034e81f146a6cca71158 100644 GIT binary patch delta 29 kcmaFF{*IkB$kWa3*+kZS?!@$@92N!!hE!&Tjm7!Q0Fg%snE(I) delta 17 YcmaFI{)nA5$kWa3)ehlPQGVFf$G#^_D#j0^yO(FctH delta 17 YcmbOw&?~?ikxmA)i$kWYj?L^k_jTwi_@% diff --git a/sound/direct_sound_samples/phonemes/51.wav b/sound/direct_sound_samples/phonemes/51.wav index bd1a514180a75bc3f3322815ab5b66d6988112f6..9c734aaba8654456200139ec58906244e367f18b 100644 GIT binary patch delta 32 ncmZn^>l0%O@^o`!THLjV8( diff --git a/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav b/sound/direct_sound_samples/sc88pro_accordion_duplicate.wav index f19a98d27766d9a7a279a3acfdfe5248abc65541..1b28fa0e6ce4564bd4ef2b14f05505d3ff7b13c5 100644 GIT binary patch delta 46 zcmdn3aYBPN$kWZuVIph3NMd?Y4hsVV!#-gKhLpsT#Qi{eVx!%}39K9U*9bE*002RN B4WTHLjV8( diff --git a/sound/direct_sound_samples/sc88pro_bubbles.wav b/sound/direct_sound_samples/sc88pro_bubbles.wav index d6e61596d59e47ebeb6d46bae2423fa3067dffd0..17d3eaa64fb54d7c7f755d02c96f781201757f95 100644 GIT binary patch delta 29 kcmaE&@Iiq!$kWX&V&G@dHku}KE&F$Gl*8GhPRjvS1<_HJ? diff --git a/sound/direct_sound_samples/sc88pro_fretless_bass.wav b/sound/direct_sound_samples/sc88pro_fretless_bass.wav index f639d5ccf28078212c41f7ac0a2ebe278510deb0..e7c59f564eae062ece7494a134d1c29fbad69809 100644 GIT binary patch delta 32 ncmdlgaY%wS$kWZuY9ebsPhxsf4hsVV!wzl+hK(f$xfvM%m^=t> delta 17 YcmX>ku~mXK$kWYDcOq;4#)gC305nAg0{{R3 diff --git a/sound/direct_sound_samples/sc88pro_glockenspiel.wav b/sound/direct_sound_samples/sc88pro_glockenspiel.wav index 4c9cbae1494247e0a5a34104119495eec2cb27f5..d24e64efe99a6f3aef92c0bfd7f3634ed25a3fe3 100644 GIT binary patch delta 31 mcmeC@o5RN%ehlPQGVGzN&Oh9Wi%G|&v8o1AkfiX!KnLjjecnXt37 zb7A??vgF6`qxclvim5BN0CVTT61RiMZf!2Boe)VziuQ@!2WBF_Wt)#LgpD#37Cl<|YQs;APjG>Rq&Oc_GoFnVd=t65`OiI%+k6()W%yHVyJs zlxYTjwW>ILzP}>bL3_lno8eoZ_6I|4G2(t@#tAoeeHNUo#_vB8EtfC!>M}g;kKVGA zyg6xqslgYm`PXX}gw?cEA_r=SMhmk^^s?DAO!=c4$E!56 zAExtB<+;06n(Pnz7K%Om^vZ!IdK-o)qL}4GiB=la+Yjp!p3$A$6^m`^ksoETi1g$E z&-ds9)5G%Kiz^?NA99amGl!dBNdu|;WXBVgJf?lEPhhp}yWO%_O32P^X}rO{BZZd+}pRLE^ST_!1ZTx@s|i7A!pG7Q(PRBedNmBkmk z!>-dV7$r)7Do?PxO|=nIUEGAz4SN4>*=+jdSH@VT$L#ilM)@9*+$XUq`^b0OxJjaL zCkspVk?eGmw^!G`WSL+d7p;0gd7%xaJM`nbS+{IQE{u`vkU8u|o!px%$$h-A;6Jd# zcIx(0=}uJ%{y=nVLFL7bKi%5w9~Zrk+jd zt!?-{(XaV$#M)4%wdMJFujo_(GCQC+X41`Cl3ToV4R6smz%uFKBK(tOfL9wLjflvm7xjd30iZINRH@ z%)Ey_sKjrg_?YCVSvz5s%N)m&?W7(yAxclGzM@$u@#)3dK&G={nAITXz7gMru_4qi zJ88QDu|*40ilt`FxJ9aPCMrvs-A*bYBck@Dngq?PhXtQbq7P=kz09hYb*T|cBsbpD z)V!6tSI8Z)(wwBpNiFt9s`e!6D~j2SN9u4v)oE>gydeP3p0|=Vxqw`d z3^}Pr0qITD2?1FQ=p}&cZfJ(+!<2x;M$bs4fSf%erO(LixC~Qje5og7-lvrqgJ>U0 zo{-if5~h4YmKPL5PHPbp0#i1A2kH3=nYKS8>93|FneA9utk(ZOBup7Xf1C1%d|s@= z5i8H3WKw&YvazD*&9D^sZLz(l#e$Y!7W*J9mL_4bRyj;rS(5Z|u~IEeNsu%Fi@lW^ zLzzAZv+RPFGC+>E6bV{BC;=&GDIm?Vqn1!FXes?lORW^N9Be6S(Lo*8^809hx)qQK z+Yz}qA|oa#XxStv8tmi0MGS&{1SICZ0WEVN3@kPcNPDa}gO;cDm_>H&Nz{avN9CYV zs`IDY&?V8w!3%ex>;UQk>AaTNqWDBWHj_4m(itxUa(nc`jW^jKNN_B80RhK$1^e}K zZVj|7c!4_FPyP@CF9^uEMXquus(=)PxswXQK+DH13Bo+J3|kWHcWk*SY{?!kftSDw zLd))CO|b8%7`g*tGi@*i(ZgY6V<_8S)AX{9x`h*yA8i6c%A&ae#d7mT&Much;7%x(9#zw3MCD3VAeX3qC2l}8 z{&a(2xOJx-)JO~=6hekuwDK;6Vdr+C?nNdA?CsDbQwG~9^pc>JM zVP()Vzv>jcDzPC1xyEtxHttl)tg-x<+A)(R3b|xYK+D{AP>bs&$Cb1EW>5=h;l!hD zxJRwJMVC?nxi+A9Zr;J~Xp4W5{T07 zmSbn#yh9~5$8sZzqbKc*MJ~4|3IcN2h#3%-7w$0(PYkL79ioFNq02?T;JlXH!EK3z z^zNWG1>7T`gr_DgNN>4Ih*C)JD&*2l0B%b{dKW!9iQ$;u^t>yixB362x9a!P`@b`y B8VCRY literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/sc88pro_harp.wav b/sound/direct_sound_samples/sc88pro_harp.wav index bdb176720cc372d428d2938cece41c1f2193ed98..3a137c593d2c10341733124b883b6d0b49aec537 100644 GIT binary patch delta 29 kcmbOux=4?!@$@92N!!26--qjm4T=0DUe8WdHyG delta 17 YcmZ1>I!BZ>$kWYj%0$-ujSU)H05ZP?mjD0& diff --git a/sound/direct_sound_samples/sc88pro_jingle_bell.wav b/sound/direct_sound_samples/sc88pro_jingle_bell.wav index 1eb6b1de1aefceff67e98fc1370ec3f162f2df02..8342322428804889df516a7a3277cacf40cbdb18 100644 GIT binary patch delta 29 kcmaE6@X3HR$kWX&Ya(kncVc={4hsVV1EU1P#%OK{0E|orsQ>@~ delta 17 Ycmexl@XUZU$kWX&ZX#>=#tbeA06dEY>i_@% diff --git a/sound/direct_sound_samples/sc88pro_mute_high_conga.wav b/sound/direct_sound_samples/sc88pro_mute_high_conga.wav index c009d7265c38bc63966e0fc4c550777e9f1fb13f..afa56506a1256840b3e26001e74beba59a44029c 100644 GIT binary patch delta 29 kcmaFE^@EEw$kWZOU?OWccVc={4hsVV13N3j#%MuS0ENK^RR910 delta 17 Ycmeyt^@fWz$kWX&Wg=_%#tZ>g0672!qyPW_ diff --git a/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav b/sound/direct_sound_samples/sc88pro_nylon_str_guitar.wav index 7538f508ad979beeebad62d4badc9b76b8a6d6d7..e40e641802712e14b37810a4f8d36b42a8024c90 100644 GIT binary patch delta 29 kcmca*|ID5>$kWa3-bB`X?!@$@92N!!hFE!qjm7Em0Gl%j82|tP delta 17 YcmaE6f6JaV$kWa3(nQw$jSXq?072{q_y7O^ diff --git a/sound/direct_sound_samples/sc88pro_open_low_conga.wav b/sound/direct_sound_samples/sc88pro_open_low_conga.wav index 34a1e3f32a9b0544e64467ca11ef8246c29cc001..030797c0d6a778f8b9c8efb39a740b7476a808c2 100644 GIT binary patch delta 29 kcmbQkvx0{;$kWYDVIpfdcVc={4hsVV!**7NjnM~L0d$=Q$p8QV delta 17 YcmZ3%Glz#Y$kWYDWFl+$#*72304^K_XaE2J diff --git a/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav b/sound/direct_sound_samples/sc88pro_orchestra_cymbal_crash.wav index c3f89f9c7860c3c537e065a2bbb5343fc96a3865..58d90c404fd1890d75e2c2492e77aed9fe441b69 100644 GIT binary patch delta 31 mcmbO#zet`n$kWYj)h($ diff --git a/sound/direct_sound_samples/sc88pro_orchestra_snare.wav b/sound/direct_sound_samples/sc88pro_orchestra_snare.wav index 96b10bb05fbb8aa5fc9ef295a1f9c219c4e317a0..43bb9ed9b87ae52870dc88b8416e1c4ddf773729 100644 GIT binary patch delta 31 mcmX>pcukNs$kWa3+(g!J?!@$@92N!!h7=BljnR1=j0^yp+6X-W delta 17 Ycmca6cv6rx$kWa3;6&E&jTyNd068cIDgXcg diff --git a/sound/direct_sound_samples/sc88pro_organ2.wav b/sound/direct_sound_samples/sc88pro_organ2.wav index bf6f2ba52033e8a1150275d61c61a67364410c33..437ee2d03cf4dc70b1369430cebc7f31ab8b5bf5 100644 GIT binary patch delta 29 kcmaDN@Iinz$kWX&Vpe@&h>$kWa3+(g!Vp2YN|92N!!1|NO~hK(hm{EQ3$rc4NE delta 17 Ycmca6e^Q<`$kWa3;6&E^jSZpv06Sv_WdHyG diff --git a/sound/direct_sound_samples/sc88pro_piano1_60.wav b/sound/direct_sound_samples/sc88pro_piano1_60.wav index 7199386c7b4069a395fffb5de7fbb1f5d0caebf9..29cb5a88015033f4ce16f5a047c0b99889536c52 100644 GIT binary patch delta 29 kcmX@5drg-$$kWa3+(g!V?!@$@92N!!2469Tjm6<&0Fl@TlK=n! delta 17 YcmcbndrFrz$kWa3&_ve!jSXR906ixLivR!s diff --git a/sound/direct_sound_samples/sc88pro_piano1_72.wav b/sound/direct_sound_samples/sc88pro_piano1_72.wav index 603006eb6ff4c178ea44900703717767a183267e..396f09452528b509cba19d33147605739b7ae10d 100644 GIT binary patch delta 29 kcmX@6eMy@&$kWa3)I`>N?!@$@92N!!22W9jjm5#D0FV&~c>n+a delta 17 YcmcbleN3A*$kWYj-$d5@jSWGf06anlb^rhX diff --git a/sound/direct_sound_samples/sc88pro_piano1_84.wav b/sound/direct_sound_samples/sc88pro_piano1_84.wav index 0d76370756a4967ab58bc4e7521fd132ca9a38c8..1956f95dad1bdefa6f4d9e275bc6bcf4f5ec720e 100644 GIT binary patch delta 29 kcmew+-Xy^q`#)c+t069=#*9~N05v@Z6#xJL diff --git a/sound/direct_sound_samples/sc88pro_slap_bass.wav b/sound/direct_sound_samples/sc88pro_slap_bass.wav index 41d747259e3863c64d76ea0e6af8b8fcf71d1cf1..48836951650d689a2c455f13c6e70557bd733ece 100644 GIT binary patch delta 32 ncmZ21zd@cg$kWYj#YEP8p2YN|92N!!1~q;LhK(iq{EQ3$mzoEv delta 17 YcmdlWzgV6%$kWYj_C(hFjSc$z05vBC%>V!Z diff --git a/sound/direct_sound_samples/sc88pro_square_wave.wav b/sound/direct_sound_samples/sc88pro_square_wave.wav index 020dae03a4921161218087222545f7b9efd10da0..5689c13f4e98815f28d51909ad660848883333f8 100644 GIT binary patch delta 29 kcmZp$?6G7G@^o`+naG;YotU1K!@|J8z%0YCv6xo|0DJfcMF0Q* delta 17 YcmeCNY_Mbv@^o{nn8=#Hv4KYh05Wj}fdBvi diff --git a/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav b/sound/direct_sound_samples/sc88pro_string_ensemble_60.wav index 26e9db076c3ca8df1ddb5d228835ddf550e77b6a..1e43b2e5e2476d28c930b60fb94f2ccfed91b9c5 100644 GIT binary patch delta 29 kcmbP`Gbe{N$kWYDWFl)mcVc={4hsVV!(>y2jm2|K0f#vVtpET3 delta 17 YcmbP}Ga-jH$kWY@VehlPQGflHZTW3h-bBLe`C$p@7H delta 17 YcmbQ@-tNvC6J7$kWYDcOq;4#)gAt06v5U+5i9m diff --git a/sound/direct_sound_samples/sc88pro_synth_bass.wav b/sound/direct_sound_samples/sc88pro_synth_bass.wav index 5aa61ab8caa8612f8f5e39e67b0afa1b3e1a1465..98f6a4ef20f96c163252627336ac69840c21c358 100644 GIT binary patch delta 30 lcmca7`AU*C$kWa3(L~mKp2YN|92N!!hD06)hK(gzJOG<82)qCQ delta 17 YcmaDQc~6ox$kWa3+C@~ diff --git a/sound/direct_sound_samples/sc88pro_taiko.wav b/sound/direct_sound_samples/sc88pro_taiko.wav index af01253368bda5603a1dd0ca42b50f9c655d6e4b..433ab727ee68de9ab05532f941912fb468586913 100644 GIT binary patch delta 31 mcmdn4b3}(V$kWZuW+H1icVc={4hsVV!zEFMjnQ{R85sbUSqQTL delta 29 lcmX@2vt5TZ$kWYDeehlPQGVKE28#^|*i0B=$UcK`qY delta 17 YcmbOt)FH$g2)Y0O delta 17 YcmX@6wM&aN$kWZuXd-L=#)e}e05>ZJLjV8( diff --git a/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav b/sound/direct_sound_samples/sc88pro_timpani_with_snare.wav index 8ab1862d021c6b7df197481e527ec2a750163a68..1c1560ed2858fdc5f8b6af488623fd69ea4f9da8 100644 GIT binary patch delta 30 lcmdm`bxeyj$kWZuZX#2)Y0O delta 17 YcmX@6wM&aN$kWZuXd-L=#)e}e05>ZJLjV8( diff --git a/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav b/sound/direct_sound_samples/sc88pro_tr909_hand_clap.wav index 2e07040cb40996a68221089062e8ada8523acede..9dba2ac9d649340b08f8a9c6ba8098976854e139 100644 GIT binary patch delta 29 kcmaDN_(700$kWa3#YEO{?!@$@92N!!hI$T$jnSPP0Fx*P!2kdN delta 17 Ycmew$_(YI3$kWa3&P3MmjTs#r06m2Ul>h($ diff --git a/sound/direct_sound_samples/sc88pro_trumpet_60.wav b/sound/direct_sound_samples/sc88pro_trumpet_60.wav index 0c857d971d43e4b1a40701b7b17f5ce6f3d0d9af..0675873a1452a94959fa7da2364cd3d45387c87b 100644 GIT binary patch delta 29 kcmdm`eoUP;$kWYj-$d4Y?!@$@92N!!23uiehlPQG;hzY@#$papMg{<#y$FK< delta 17 YcmeCs{;kCtehlPQGfk%X4W3iYBBLe`676(ND delta 17 YcmbQH*{R7IegFUf diff --git a/sound/direct_sound_samples/sc88pro_tuba_39.wav b/sound/direct_sound_samples/sc88pro_tuba_39.wav index c3b78eea55d4eec55cca7533c5ebde91ab85ef6d..619ebf6e3af019e2608124a1a167af156f3dcced 100644 GIT binary patch delta 33 ocmZownxw=QNp2YN|92N!!1`h!ShK(hG0*nj*r9=o? delta 17 YcmcblcvO)!$kWYj??l%8jSYbU06O>vS^xk5 diff --git a/sound/direct_sound_samples/sc88pro_tubular_bell.wav b/sound/direct_sound_samples/sc88pro_tubular_bell.wav index 8c892236b96b8536de910a2ed8869c641bb647e5..eed5b32b2b9c75329bc9d40e6b03ff2780c5fa57 100644 GIT binary patch delta 29 kcmca({KA+u$kWa3!9>=4?!@$@92N!!hImPajm4Rg0GTTY{{R30 delta 17 YcmaE1e8-qI$kWa3%0$-ujSU%+06@|P;s5{u diff --git a/sound/direct_sound_samples/sc88pro_wind.wav b/sound/direct_sound_samples/sc88pro_wind.wav index 3856a4af1f466bf7819c1ca21b1b088e12118d3a..1b3c78c42d3a068bd5d3b267bb296ae682718aac 100644 GIT binary patch delta 29 kcmZ3dx=WQc$kWYj(?r&M?!@$@92N!!216l+jm6eN0EWN^?*IS* delta 17 Ycmdm`x=xif$kWYj*+ka-jSW^p05_Wk2LJ#7 diff --git a/sound/direct_sound_samples/sc88pro_xylophone.wav b/sound/direct_sound_samples/sc88pro_xylophone.wav index a08296baa150c79560bdbfcfdf31eb4976124671..59aec0711c3f435ae13487e385df070fd1e3a981 100644 GIT binary patch delta 31 mcmbO)x<-^W$kWYj$wbzC?!@$@92N!!1|=?rjm0`#j0^ycN(XlU delta 17 YcmZ1@I$xAE$kWYj`b5_JjSbpd05eVnqyPW_ diff --git a/sound/direct_sound_samples/sd90_ambient_tom.wav b/sound/direct_sound_samples/sd90_ambient_tom.wav index 6f390959fc058262ca519177eb7cbecd8c49dc7d..f524a7c882a96084d16fd32c1bba9d9bada6ca8a 100644 GIT binary patch delta 31 mcmZ4Qw8x1x$kWZuWFl)gcVc={4hsVV!zl%ZjnP*W7#RSV)(Fi2 delta 17 YcmdnvwBCs|$kWYDeIjf4#*E7f05`e@JOBUy diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav b/sound/direct_sound_samples/sd90_classical_detuned_ep1_high.wav index 3c96f1cbca5ab6b36fd306ef27a15ec0723d7253..2940e14a58dd596e91aa7227611a7903d416edda 100644 GIT binary patch delta 29 kcmbQDu|R`0$kWYDVj^okcVc={4hsVV!*pSWjl~Ov0eMFU^#A|> delta 17 YcmZ3WF-3zl$kWY@XCiC<#)bvL05GxzrT_o{ diff --git a/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav b/sound/direct_sound_samples/sd90_classical_detuned_ep1_low.wav index 39e25a89ce0fbaee60319066f5a0b9aef64e6838..f1f8dac7980ffd84e2a661461282d3e6d75306be 100644 GIT binary patch delta 31 mcmccY`@okq$kWa3#zfY9?!@$@92N!!hA=gTjl~ISj0^y-dI=){ delta 17 YcmaFhd)b#Y$kWa3^hDPDjScZ?078NX00000 diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav b/sound/direct_sound_samples/sd90_classical_distortion_guitar_high.wav index 097d91f734fd8039cdeb318c39ecaf52bc9ad036..23ab4ff4574d46658c0ee25d74bd17e44e9bd50b 100644 GIT binary patch delta 44 zcmcbU@FIaV$kWX&VIph3NMd?Y4hsVV!+m`QhLpsT#0NlnVx!%}39K9U&(#M2P?`@d delta 17 YcmaEna3_H^$kWX&WFl++#)cRA07EVZQUCw| diff --git a/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav b/sound/direct_sound_samples/sd90_classical_distortion_guitar_low.wav index d281d77572ae320f2a01c8d68bb6685058d8db62..475a15e82c0f37a9f987cb0e5b968b88ff272317 100644 GIT binary patch delta 45 zcmdlRc`A}M$kWa3&_vdJk;L?*92N!!1_vDmhLpsTL`NV!vC(GY1lEOnbr=}{Mwtyw delta 17 YcmX>Vxi^wE$kWYj>qOT4jSZeU06<{9 diff --git a/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav b/sound/direct_sound_samples/sd90_classical_overdrive_guitar.wav index 7380be1e1b36148298d2b686aa34ece7e7b38444..231c987087385f96c7da190ef11cae5f67657e5b 100644 GIT binary patch delta 31 mcmca<`^=U#$kWa3-bB`X?!@$@92N!!h8Q`9jm2qlj0^y*ya^Ei delta 17 YcmaE6d()OR$kWa3;zZW`jSZ=C06~@p@Bjb+ diff --git a/sound/direct_sound_samples/sd90_classical_shakuhachi.wav b/sound/direct_sound_samples/sd90_classical_shakuhachi.wav index 587cee2cb7e3db72d196ae35add2f7f1d420a326..62609c87b0aa6289edd0ede8a334add2bad01703 100644 GIT binary patch delta 46 zcmZ2jv95wO$kWYDZ6a&FNMd?Y4hsVV!xC!-hLpsT#HB!bVq?_A39K7$yIC_b002`y B4n6pdQFry$kWa3+(g!V?!@$@92N!!1|Keljm2SHj0^yr;0Q?o delta 17 Ycmca6dQy}%$kWa3;6&E^jSZn(06H=TOaK4? diff --git a/sound/direct_sound_samples/sd90_cowbell.wav b/sound/direct_sound_samples/sd90_cowbell.wav index 9c35bf6541043ffd4b3bdd8f5e88dc01dc1869ec..7e5bd335417d93f8d553a53db4349b5cb2610301 100644 GIT binary patch delta 31 mcmeAcnIXa&ehlPQGVHqdG#^?>4j0^yP5eJU| delta 17 YcmbOs(k;RojYVx!H(39K9Uu2W!S003-% B4<7&k delta 17 Ycmez2^xBCv$kWX&c_M56#)j_-074=ML;wH) diff --git a/sound/direct_sound_samples/sd90_open_triangle.wav b/sound/direct_sound_samples/sd90_open_triangle.wav index 92df2b30741f79f468d85e8b99adfecf002f7506..415054e23c48b8c2c5b39e72ae68ddb7012a1893 100644 GIT binary patch delta 31 mcmX>udqtKt$kWa3%tY33?!@$@92N!!h9o|QjnO%Lj0^ys76?}W delta 17 Ycmca2dt8<^$kWYj|3udCjTzZ|06IbjKmY&$ diff --git a/sound/direct_sound_samples/sd90_solo_snare.wav b/sound/direct_sound_samples/sd90_solo_snare.wav index ad5d87284451db8657407ba60fc1a38f247cdac9..7ff2c98e49ccb6fca6e87fac7af348632f167523 100644 GIT binary patch delta 31 mcmX?Ve94$K$kWa3)I`>B?!@$@92N!!h6G85jnP?>j0^yw%?OVG delta 29 lcmca)eAJjV$kWYj??l#cj+Dfb#6(F3hKYqv8#l>I0sxuq3C{ok diff --git a/sound/direct_sound_samples/sd90_special_scream_drive.wav b/sound/direct_sound_samples/sd90_special_scream_drive.wav index 8b4b563ac75d3d60f7be6bea022e995132119ef5..3f974062693f812d438afd52a90f73fcdfce38c0 100644 GIT binary patch delta 29 kcmZ2txWSM$$kWYj#YEP8?!@$@92N!!26YLBjm3r%0EQq3;Q#;t delta 17 YcmdmBxWte($kWYj&P3MyjSU7805@d?{Qv*} diff --git a/sound/direct_sound_samples/steinway_b_piano.wav b/sound/direct_sound_samples/steinway_b_piano.wav index 5a4d94b0a8976e3d16bb2a81f6464732389be043..ef5a4849c3737ffc9ef7dca7fc314d236e49b715 100644 GIT binary patch delta 46 zcmZ3hvP*?E$kWZuXd-LANMd?Y4hsVV!v;YHhLpsT#En3DVx#rM39K9U6bdpj001^q B4M6|^ delta 17 Ycmdm`vQ~vP$kWYDbs}s2#)h4O05oF;0RR91 diff --git a/sound/direct_sound_samples/trinity_30303_mega_bass.wav b/sound/direct_sound_samples/trinity_30303_mega_bass.wav index 6ad677b7d849824ef1ec1704f4c5287bd22c242e..6a6e249a475591d46a6c223d47da127dce2c1321 100644 GIT binary patch delta 31 mcmX@^aK(W&$kWZuXCiApcVc={4hsVV!zp=&jm1~w85sbgM+rXw delta 17 YcmccOaNL14$kWZuej;oB#)ixC06YB#uK)l5 diff --git a/sound/direct_sound_samples/trinity_big_boned.wav b/sound/direct_sound_samples/trinity_big_boned.wav index 7f42b9fcd985f60eed300051b50003b1725e79d4..5967713d6540011c4a5f5860c9e90a82f127ec19 100644 GIT binary patch delta 32 ncmX?|b|Z~7$kWX&U?OWiPhxsf4hsVV!#N`chK(iHjTjjKwAu;A delta 17 YcmcbSb~=qU$kWZuc_M56#)j)g06{DV9smFU diff --git a/sound/direct_sound_samples/trinity_cymbal_crash.wav b/sound/direct_sound_samples/trinity_cymbal_crash.wav index c3e52d3e2901e975a3a219188cec4a6cf0d9fcf0..36337b641c240ee15489121e386e08e71be4fcb2 100644 GIT binary patch delta 29 kcmX>nbW4ae$kWX&Xd-JqcVc={4hsVV!$l5;jm5V)0Ed_e)c^nh delta 17 Ycmca5bWVsh$kWZuZ6a&_#)exQ05_KgR{#J2 diff --git a/sound/direct_sound_samples/unknown_01.wav b/sound/direct_sound_samples/unknown_01.wav index 75d05e7f4d1dd07da9b28add5b385fccd7a716c7..4e069d0bfd7eb8a331555d3f34a219092c6733bb 100644 GIT binary patch delta 29 kcmbQCwM2_G$kWYDW+H1icVc={4hsVV!)6hNjnR8W0D1-p4*&oF delta 17 YcmZ3YHA9Ov$kWYDU?OYy#*95805JyzqW}N^ diff --git a/sound/direct_sound_samples/unknown_02.wav b/sound/direct_sound_samples/unknown_02.wav index 1a25b1fe18a99ffecc2a0b33f73aba35cb014970..7c87e021b4a620c769dcb2f9d37e20919a703df9 100644 GIT binary patch delta 29 kcmca(@xp>N$kWX&VIpfjcVc={4hsVV!+mLnjm0me0hGrHjQ{`u delta 17 YcmaE1amRu+$kWX&WFl++#)cQt06uC4?f?J) diff --git a/sound/direct_sound_samples/unknown_03.wav b/sound/direct_sound_samples/unknown_03.wav index 1a64c4b25de0f448361877493e48bb522b96b027..922f43db1b55972afeaaf7e8ec603885bcd7360a 100644 GIT binary patch delta 31 mcmbQQu||V6$kWYDWg=@ncVc={4hsVV!y;jZjm2w(85sbLdk8N8 delta 17 YcmZ3ZF<*l<$kWYDd?IW9#)j3x05XvU(*OVf diff --git a/sound/direct_sound_samples/unknown_04.wav b/sound/direct_sound_samples/unknown_04.wav index a278be2758cb0a4e3c51292e4349f1aa0d6fce49..d2d216aa9d69c5c03461af1806667e7e8d0e7f23 100644 GIT binary patch delta 31 mcmaFs`^%R#$kWa3(?r&M?!@$@92N!!h5|K)jm1@Jj0^y{APJ=a delta 17 Ycmez6`_`8=$kWa3=|tB2jSZD*07k|KXaE2J diff --git a/sound/direct_sound_samples/unknown_05.wav b/sound/direct_sound_samples/unknown_05.wav index dd5eee1d2c37474930eabb840d64340ed47a1614..c344cc5c6f158754dc357b1bcda7370ba1b00b9d 100644 GIT binary patch delta 31 mcmeyU_D_v9$kWZOY$9tucVc={4hsVV!xtfjjm7_j7#RSoY6-&t delta 17 YcmeyT_EC*B$kWX&b0Ta0#)iK_06)kF761SM diff --git a/sound/direct_sound_samples/unknown_06.wav b/sound/direct_sound_samples/unknown_06.wav index 396eb3e72148fd8c848cabd45a0a04c9eb6ddbaf..01ac24db5f5c3e525d268c56c0559a0afedf9b17 100644 GIT binary patch delta 31 mcmezB)a1+>ehlPQG;fDgl#$qN#Mg{<(cL=Qj delta 17 YcmZp2{_4aUehlPQG;lCoo#$rw-0Ftx_(*OVf delta 17 YcmeBh{o}$Kiuw8&P$kWYDegv_*(D$kWYDXCiC<#)bnN05eks?*IS* diff --git a/sound/direct_sound_samples/unknown_12.wav b/sound/direct_sound_samples/unknown_12.wav index 146db2c348a491d1ef5f2a1f4b27e64c2be7bc10..39d75f2de49747c75295da336f60ead615e05424 100644 GIT binary patch delta 29 kcmew((ILqiehlPQG;XgOS#$rw$0Ep5EPXGV_ delta 17 YcmeB>{3F2{{d05xj`pa1{> diff --git a/sound/direct_sound_samples/unknown_13.wav b/sound/direct_sound_samples/unknown_13.wav index 1618ea28b51cfcc5265bc5d18224e80b974ba86c..79fe36dc1be0078c96dd83040eb3a72e7e3d1c9f 100644 GIT binary patch delta 32 ncmew@-XXyj_$|&BehlPQGp__|gWARij0C7MEg8%>k delta 17 YcmbOt)*;3kgyhWHb$kWYj%|zDxjSUW*05)<3@&Et; diff --git a/sound/direct_sound_samples/unknown_16.wav b/sound/direct_sound_samples/unknown_16.wav index 72cf7dcc952bfade1f98ddce1cc80b1f5714dad6..a13c322bfeaa942af3b492112ce2cd22b124cc2d 100644 GIT binary patch delta 31 mcmdlidO(yl$kWYj$3)hA?!@$@92N!!1~V>(jl~XJj0^yjwg=k) delta 17 YcmX>gx>=Mp$kWYj^+eYEjSco(05+Bd^Z)<= diff --git a/sound/direct_sound_samples/unknown_17.wav b/sound/direct_sound_samples/unknown_17.wav index 5a277f7d44bfb39217d1d4c6b620b25bc6ac59ed..639dd8fcc8a6251b71c417e8aa248158d03029f1 100644 GIT binary patch delta 31 mcmew?*&xLlq$kWX&Ya(kncVc={4hsViurO?l=3-%F005DQ2QL5s delta 17 Ycmeyw@sxu#$kWX&b|P!|#tcpt05`4$ga7~l diff --git a/sound/direct_sound_samples/unknown_female_voice.wav b/sound/direct_sound_samples/unknown_female_voice.wav index 44e73b3395e585a50301a5e0ff605953892f7e07..75ebea6183828d9a279a0f463fea7ab0a02c5b85 100644 GIT binary patch delta 31 mcmZ3lyGNHb$kWYj%S6_E?!@$@92N!!1|u diff --git a/sound/direct_sound_samples/unknown_synth_snare.wav b/sound/direct_sound_samples/unknown_synth_snare.wav index 774194423df0cf303c2d4617b1cf73c7eb1ca5b4..1ec62fb57617ab506356865da8fcd812d9b7e164 100644 GIT binary patch delta 31 mcmew^(jv+lehlPQG;TI>v#$pyOMg{{Vu{9k diff --git a/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav b/sound/direct_sound_samples/unused_guitar_separates_power_chord.wav index c75373087bac616d30afd7f229692c6b60771a98..4dae4f0f7aabb1f28dbb25637d0e12420b5985c9 100644 GIT binary patch delta 48 zcmeyb)}ziEh($ delta 17 YcmaDLdqtKt$kWa3%tY4kjTseu06bF$a{vGU diff --git a/sound/direct_sound_samples/unused_sc55_tom.wav b/sound/direct_sound_samples/unused_sc55_tom.wav index b4c225827fd1bd9a7cc9b94b806efbb978b8565a..944e1031f52d70ea48399c0a2efbe61c834dba57 100644 GIT binary patch delta 29 kcmZ3bxJ{8Y$kWYj-9*-W?!@$@92N!!23-M$jm72y0EC7I&j0`b delta 17 Ycmdm{xJr>V$kWYj(L~n#jSXf305*9A?EnA( diff --git a/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav b/sound/direct_sound_samples/unused_sc88pro_unison_slap.wav index 690cbc9183ba660ba0ee7282f15e5161a71bca2d..e9f48d6ff74573550e5815b991d719a0cdf08a05 100644 GIT binary patch delta 31 mcmaEw^C^cl$kWX&Ya(ktcVc={4hsVV!wXY}jm4i#85sb$QwmuC delta 17 YcmeyA^E8Jw$kWX&b|P#3#)glk07fSVl>h($ diff --git a/sound/direct_sound_samples/unused_sd90_oboe.wav b/sound/direct_sound_samples/unused_sd90_oboe.wav index e7609ed53dd25fa74368bc4097d232185cfb3415..6ffcb4e00313ed1b51ac6f4672dbe13ebbae0a51 100644 GIT binary patch delta 44 zcmbOrHb;y#$kWYDWFl+6NMd?Y4hsVV!(=W7hLpsT#3?{}Vx#rM39K9Ugm3`>1N01E delta 17 YcmbOuHbIOv$kWY@V(pitch * 1024.0); } + uint32_t loop_end = wf.loopEnd; + if (wf.agbLoopEnd != 0) { + loop_end = wf.agbLoopEnd; + } + if (ot == out_type::binary) { // Binary output mode std::vector bin_data; @@ -414,8 +419,7 @@ void convert(const std::string& wav_file_str, const std::string& out_file_str, bin_write_u32_le(bin_data, wf.loopStart); // Bytes 12-15: loop end - // wf.loopEnd is the exclusive end position; binary format expects (end - 1) - bin_write_u32_le(bin_data, wf.loopEnd > 0 ? wf.loopEnd - 1 : 0); + bin_write_u32_le(bin_data, loop_end); // Write sample data if (ct == cmp_type::none) @@ -447,7 +451,7 @@ void convert(const std::string& wav_file_str, const std::string& out_file_str, agb_out(fout, " .byte 0x%X, 0x0, 0x0, 0x%X\n", fmt, wf.loopEnabled ? 0x40 : 0x0); agb_out(fout, " .word 0x%08X @ Mid-C ~%f\n", pitch_value, pitch); - agb_out(fout, " .word %u, %u\n", wf.loopStart, wf.loopEnd); + agb_out(fout, " .word %u, %u\n", wf.loopStart, loop_end); if (ct == cmp_type::none) convert_uncompressed(wf, fout); diff --git a/tools/wav2agb/wav_file.cpp b/tools/wav2agb/wav_file.cpp index 4b242c5c00..4d21b72eb4 100644 --- a/tools/wav2agb/wav_file.cpp +++ b/tools/wav2agb/wav_file.cpp @@ -169,6 +169,12 @@ wav_file::wav_file(const std::string& path) : loadBuffer(loadChunkSize) if (chunkLen >= 4) { this->agbPitch = arr_u32(agbpChunk, 0); } + } else if (chunkId == "agbl") { + // Custom chunk: exact loop end override (handles off-by-one from original game) + std::vector agblChunk = read_arr(ifs, chunkLen); + if (chunkLen >= 4) { + this->agbLoopEnd = arr_u32(agblChunk, 0); + } } else { //fprintf(stderr, "WARNING: ignoring unknown chunk type: <%s>\n", chunkId.c_str()); ifs.seekg(chunkLen, ifs.cur); diff --git a/tools/wav2agb/wav_file.h b/tools/wav2agb/wav_file.h index b88da4eeb6..c529a0b88a 100644 --- a/tools/wav2agb/wav_file.h +++ b/tools/wav2agb/wav_file.h @@ -35,4 +35,5 @@ public: uint8_t midiKey = 60; uint32_t sampleRate; uint32_t agbPitch = 0; // optional: exact GBA pitch value from 'agbp' chunk (0 = not present) + uint32_t agbLoopEnd = 0; // optional: exact loop end from 'agbl' chunk (0 = not present) }; From 163c8a43211bb846306e886d58449c71ef3145cb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 28 Dec 2025 08:50:34 -0600 Subject: [PATCH 15/54] Add --set-agbl option to wav2agb --- tools/wav2agb/README.md | 30 ++++++++- tools/wav2agb/wav2agb.cpp | 36 ++++++++++- tools/wav2agb/wav_file.cpp | 129 ++++++++++++++++++++++++++++++------- tools/wav2agb/wav_file.h | 12 ++++ 4 files changed, 180 insertions(+), 27 deletions(-) diff --git a/tools/wav2agb/README.md b/tools/wav2agb/README.md index 86f2660231..3b8b32e9b8 100644 --- a/tools/wav2agb/README.md +++ b/tools/wav2agb/README.md @@ -6,9 +6,12 @@ This copy has been slightly modified from [ipatix's original implementation](htt 2. Support reading an override "pitch" value from a custom `agbp` RIFF chunk. - This is needed to properly match some samples, due to float-point rounding errors when attempting to infer the pitch/sample rate from the .wav file's sample rate. - If the custom `agbp` chunk isn't present, it will simply use the .wav's sample rate to calculate this "pitch" value. -3. Optionally omits trailing padding from compressed output. +3. Support reading an override "loop end" value from a custom `agbl` RIFF chunk. + - This is needed to properly match vanilla samples, due their their inherent off-by-one error (the last sample is mistakenly ignored). + - This `agbl` chunk can be added to existing .wav files with the `--set-agbl` option (described below). +4. Optionally omits trailing padding from compressed output. -Usage: +Usage: ``` Usage: wav2agb [options] [] @@ -24,6 +27,29 @@ Options: --tune | override tuning (float) --key | override midi key (int) --rate | override base samplerate (int) +--set-agbl | adds the custom agbl chunk to the given input .wav file ``` Flag -c enables compression (only supported by Pokemon Games) + +## Adding agbl Chunk to WAV Files + +The `--set-agbl` option allows you to add or update the custom `agbl` chunk in a WAV file. When this option is used, `wav2agb` will output a WAV file with the agbl chunk added, rather than converting to `.s` or `.bin` format. + +The loop-end value can be specified as either: +- **Positive value**: Used as an absolute sample position +- **Negative value**: Treated as an offset from the end of the file + +This is useful for correcting the off-by-one loop-end error in vanilla samples. The typical fix is `--set-agbl -1`, which sets the loop-end to `(total_samples - 1)`. + +Example: +```bash +# Set agbl to (total_samples - 1), the most common case for fixing the off-by-one error +wav2agb --set-agbl -1 input.wav + +# Set agbl chunk to specific sample position 12345 +wav2agb --set-agbl 12345 input.wav output.wav + +# If no output file is specified, the input file is modified in place +wav2agb --set-agbl -1 input.wav +``` diff --git a/tools/wav2agb/wav2agb.cpp b/tools/wav2agb/wav2agb.cpp index be018abad6..2d4a84517e 100644 --- a/tools/wav2agb/wav2agb.cpp +++ b/tools/wav2agb/wav2agb.cpp @@ -7,6 +7,7 @@ #include #include "converter.h" +#include "wav_file.h" static void usage() { fprintf(stderr, "wav2agb\n"); @@ -25,6 +26,7 @@ static void usage() { fprintf(stderr, "--tune | override tuning (float)\n"); fprintf(stderr, "--key | override midi key (int)\n"); fprintf(stderr, "--rate | override base samplerate (int)\n"); + fprintf(stderr, "--set-agbl | adds the custom agbl chunk to the given input .wav file\n"); exit(1); } @@ -106,6 +108,8 @@ static bool arg_input_file_read = false; static bool arg_output_file_read = false; static std::string arg_input_file; static std::string arg_output_file; +static bool arg_set_agbl = false; +static int32_t arg_agbl_value = 0; int main(int argc, char *argv[]) { try { @@ -163,6 +167,11 @@ int main(int argc, char *argv[]) { die("--rate: missing parameter"); uint32_t rate = static_cast(std::stoul(argv[i], nullptr, 10)); set_wav_rate(rate); + } else if (st == "--set-agbl") { + if (++i >= argc) + die("--set-agbl: missing parameter"); + arg_agbl_value = std::stoi(argv[i], nullptr, 10); + arg_set_agbl = true; } else { if (st == "--") { if (++i >= argc) @@ -191,7 +200,9 @@ int main(int argc, char *argv[]) { if (!arg_output_file_read) { // create output file name if none is provided - if (arg_output_type == out_type::binary) { + if (arg_set_agbl) { + arg_output_file = arg_input_file; + } else if (arg_output_type == out_type::binary) { arg_output_file = filename_without_ext(arg_input_file) + ".bin"; } else { arg_output_file = filename_without_ext(arg_input_file) + ".s"; @@ -204,6 +215,29 @@ int main(int argc, char *argv[]) { fix_str(arg_sym); } + if (arg_set_agbl) { + // Parse the WAV file once to get both chunks and metadata + wav_file wav(arg_input_file); + + // Calculate actual loop-end value + uint32_t loop_end_value; + if (arg_agbl_value < 0) { + // Negative value: offset from end of samples + int64_t calculated = static_cast(wav.numSamples) + arg_agbl_value; + if (calculated < 0) { + die("--set-agbl: negative offset %d exceeds total samples %u\n", + arg_agbl_value, wav.numSamples); + } + loop_end_value = static_cast(calculated); + } else { + // Positive value: use directly + loop_end_value = static_cast(arg_agbl_value); + } + + write_wav_with_agbl_chunk(arg_output_file, wav.chunks, loop_end_value); + return 0; + } + convert(arg_input_file, arg_output_file, arg_sym, arg_compress, arg_output_type); return 0; } catch (const std::exception& e) { diff --git a/tools/wav2agb/wav_file.cpp b/tools/wav2agb/wav_file.cpp index 4d21b72eb4..79cfed5d79 100644 --- a/tools/wav2agb/wav_file.cpp +++ b/tools/wav2agb/wav_file.cpp @@ -4,6 +4,7 @@ #include #include #include +#include static uint32_t read_u32(std::ifstream& ifs) { @@ -13,6 +14,16 @@ static uint32_t read_u32(std::ifstream& ifs) return retval; } +static void write_u32(std::ofstream& ofs, uint32_t value) +{ + uint8_t bytes[4]; + bytes[0] = value & 0xFF; + bytes[1] = (value >> 8) & 0xFF; + bytes[2] = (value >> 16) & 0xFF; + bytes[3] = (value >> 24) & 0xFF; + ofs.write(reinterpret_cast(bytes), sizeof(bytes)); +} + //static uint16_t read_u16(std::ifstream& ifs) //{ // uint8_t lenBytes[2]; @@ -105,16 +116,21 @@ wav_file::wav_file(const std::string& path) : loadBuffer(loadChunkSize) if (curPos + std::streampos(8) + std::streampos(chunkLen) > len) throw std::runtime_error("ERROR: chunk goes beyond end of file: offset=" + std::to_string(curPos)); + std::vector chunkData = read_arr(ifs, chunkLen); + WavChunk chunk; + chunk.id = chunkId; + chunk.data = chunkData; + this->chunks.push_back(chunk); + if (chunkId == "fmt ") { fmtChunkFound = true; - std::vector fmtChunk = read_arr(ifs, chunkLen); - uint16_t fmtTag = arr_u16(fmtChunk, 0); - uint16_t numChannels = arr_u16(fmtChunk, 2); + uint16_t fmtTag = arr_u16(chunkData, 0); + uint16_t numChannels = arr_u16(chunkData, 2); if (numChannels != 1) throw std::runtime_error("ERROR: input file is NOT mono"); - this->sampleRate = arr_u32(fmtChunk, 4); - uint16_t block_align = arr_u16(fmtChunk, 12); - uint16_t bits_per_sample = arr_u16(fmtChunk, 14); + this->sampleRate = arr_u32(chunkData, 4); + uint16_t block_align = arr_u16(chunkData, 12); + uint16_t bits_per_sample = arr_u16(chunkData, 14); if (fmtTag == 1) { // integer if (block_align == 1 && bits_per_sample == 8) @@ -140,44 +156,41 @@ wav_file::wav_file(const std::string& path) : loadBuffer(loadChunkSize) } } else if (chunkId == "data") { dataChunkFound = true; - dataChunkPos = ifs.tellg(); + // For data chunk, we need to track position in the file for later reading + // The data was already read into chunkData and saved to chunks vector + // But we need to calculate the position for the readData function + // Since we already read the data, we're now past it in the file + dataChunkPos = curPos + std::streampos(8); // Skip chunk ID and size dataChunkEndPos = dataChunkPos + std::streampos(chunkLen); - ifs.seekg(chunkLen, ifs.cur); } else if (chunkId == "smpl") { - std::vector smplChunk = read_arr(ifs, chunkLen); - uint32_t midiUnityNote = arr_u32(smplChunk, 12); + uint32_t midiUnityNote = arr_u32(chunkData, 12); this->midiKey = static_cast(std::min(midiUnityNote, 127u)); - uint32_t midiPitchFraction = arr_u32(smplChunk, 16); + uint32_t midiPitchFraction = arr_u32(chunkData, 16); // the values below convert the uint32_t range to 0.0 to 100.0 range this->tuning = static_cast(midiPitchFraction) / (4294967296.0 * 100.0); - uint32_t numLoops = arr_u32(smplChunk, 28); + uint32_t numLoops = arr_u32(chunkData, 28); if (numLoops > 1) throw std::runtime_error("ERROR: too many loops in smpl chunk"); if (numLoops == 1) { - uint32_t loopType = arr_u32(smplChunk, 36 + 4); + uint32_t loopType = arr_u32(chunkData, 36 + 4); if (loopType != 0) throw std::runtime_error("ERROR: loop type not supported: " + std::to_string(loopType)); - this->loopStart = arr_u32(smplChunk, 36 + 8); + this->loopStart = arr_u32(chunkData, 36 + 8); // sampler chunks tell the last sample to be played (so including rather than excluding), thus +1 - this->loopEnd = arr_u32(smplChunk, 36 + 12) + 1; + this->loopEnd = arr_u32(chunkData, 36 + 12) + 1; this->loopEnabled = true; } } else if (chunkId == "agbp") { // Custom chunk: exact GBA pitch value (sample_rate * 1024) // This allows perfect round-trip conversion without period-based precision loss - std::vector agbpChunk = read_arr(ifs, chunkLen); if (chunkLen >= 4) { - this->agbPitch = arr_u32(agbpChunk, 0); + this->agbPitch = arr_u32(chunkData, 0); } } else if (chunkId == "agbl") { // Custom chunk: exact loop end override (handles off-by-one from original game) - std::vector agblChunk = read_arr(ifs, chunkLen); if (chunkLen >= 4) { - this->agbLoopEnd = arr_u32(agblChunk, 0); + this->agbLoopEnd = arr_u32(chunkData, 0); } - } else { - //fprintf(stderr, "WARNING: ignoring unknown chunk type: <%s>\n", chunkId.c_str()); - ifs.seekg(chunkLen, ifs.cur); } /* https://en.wikipedia.org/wiki/Resource_Interchange_File_Format#Explanation @@ -191,8 +204,8 @@ wav_file::wav_file(const std::string& path) : loadBuffer(loadChunkSize) if (!dataChunkFound) throw std::runtime_error("ERROR: data chunk not found"); - uint32_t numSamples = static_cast(dataChunkEndPos - dataChunkPos) / fmt_size(); - this->loopEnd = std::min(this->loopEnd, numSamples); + this->numSamples = static_cast(dataChunkEndPos - dataChunkPos) / fmt_size(); + this->loopEnd = std::min(this->loopEnd, this->numSamples); } wav_file::~wav_file() @@ -291,3 +304,71 @@ load_sample: location++; } } + +// In the future, if wav2agb gains the ability to construct .wav files from .bin files, +// this function should be rolled into that flow. +void write_wav_with_agbl_chunk(const std::string& output_path, + std::vector& chunks, + uint32_t loop_end_value) +{ + bool has_agbl = false; + for (auto& chunk : chunks) { + if (chunk.id == "agbl") { + has_agbl = true; + chunk.data.resize(4); + chunk.data[0] = loop_end_value & 0xFF; + chunk.data[1] = (loop_end_value >> 8) & 0xFF; + chunk.data[2] = (loop_end_value >> 16) & 0xFF; + chunk.data[3] = (loop_end_value >> 24) & 0xFF; + break; + } + } + + if (!has_agbl) { + WavChunk agbl_chunk; + agbl_chunk.id = "agbl"; + agbl_chunk.data.resize(4); + agbl_chunk.data[0] = loop_end_value & 0xFF; + agbl_chunk.data[1] = (loop_end_value >> 8) & 0xFF; + agbl_chunk.data[2] = (loop_end_value >> 16) & 0xFF; + agbl_chunk.data[3] = (loop_end_value >> 24) & 0xFF; + for (size_t i = 0; i < chunks.size(); i++) { + if (chunks[i].id == "data") { + chunks.insert(chunks.begin() + i, agbl_chunk); + break; + } + } + } + + // Calculate total RIFF size + uint32_t total_chunk_size = 0; + for (const auto& chunk : chunks) { + total_chunk_size += 8 + chunk.data.size(); + if (chunk.data.size() % 2 == 1) { + total_chunk_size += 1; + } + } + uint32_t riff_size = 4 + total_chunk_size; + + std::ofstream ofs(output_path, std::ios::binary); + if (!ofs.good()) + throw std::runtime_error("Failed to open output file: " + output_path); + + ofs.write("RIFF", 4); + write_u32(ofs, riff_size); + ofs.write("WAVE", 4); + + for (const auto& chunk : chunks) { + ofs.write(chunk.id.c_str(), 4); + write_u32(ofs, chunk.data.size()); + if (!chunk.data.empty()) { + ofs.write(reinterpret_cast(chunk.data.data()), chunk.data.size()); + } + + if (chunk.data.size() % 2 == 1) { + ofs.put(0); + } + } + + ofs.close(); +} diff --git a/tools/wav2agb/wav_file.h b/tools/wav2agb/wav_file.h index c529a0b88a..cea278970d 100644 --- a/tools/wav2agb/wav_file.h +++ b/tools/wav2agb/wav_file.h @@ -8,6 +8,16 @@ #define WAV_INVALID_VAL 0xFFFFFFFFu +// Structure for WAV chunk utilities +struct WavChunk { + std::string id; + std::vector data; +}; + +void write_wav_with_agbl_chunk(const std::string& output_path, + std::vector& chunks, + uint32_t loop_end_value); + class wav_file { public: wav_file(const std::string& path); @@ -34,6 +44,8 @@ public: double tuning = 0.0; // cents uint8_t midiKey = 60; uint32_t sampleRate; + uint32_t numSamples = 0; // total number of samples in the file uint32_t agbPitch = 0; // optional: exact GBA pitch value from 'agbp' chunk (0 = not present) uint32_t agbLoopEnd = 0; // optional: exact loop end from 'agbl' chunk (0 = not present) + std::vector chunks; // raw chunks from the WAV file (for re-writing with modifications) }; From 9045b9b58216c3cd7fa837630c86bf505fab3de6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 29 Dec 2025 07:41:43 -0600 Subject: [PATCH 16/54] Remove mistakenly-added test file --- sound/direct_sound_samples/sc88pro_harp.bad.wav | Bin 2728 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sound/direct_sound_samples/sc88pro_harp.bad.wav diff --git a/sound/direct_sound_samples/sc88pro_harp.bad.wav b/sound/direct_sound_samples/sc88pro_harp.bad.wav deleted file mode 100644 index 3a137c593d2c10341733124b883b6d0b49aec537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 zcmZ{l*N!6j6~-B9FDy%z_6@x6uzN&Oh9Wi%G|&v8o1AkfiX!KnLjjecnXt37 zb7A??vgF6`qxclvim5BN0CVTT61RiMZf!2Boe)VziuQ@!2WBF_Wt)#LgpD#37Cl<|YQs;APjG>Rq&Oc_GoFnVd=t65`OiI%+k6()W%yHVyJs zlxYTjwW>ILzP}>bL3_lno8eoZ_6I|4G2(t@#tAoeeHNUo#_vB8EtfC!>M}g;kKVGA zyg6xqslgYm`PXX}gw?cEA_r=SMhmk^^s?DAO!=c4$E!56 zAExtB<+;06n(Pnz7K%Om^vZ!IdK-o)qL}4GiB=la+Yjp!p3$A$6^m`^ksoETi1g$E z&-ds9)5G%Kiz^?NA99amGl!dBNdu|;WXBVgJf?lEPhhp}yWO%_O32P^X}rO{BZZd+}pRLE^ST_!1ZTx@s|i7A!pG7Q(PRBedNmBkmk z!>-dV7$r)7Do?PxO|=nIUEGAz4SN4>*=+jdSH@VT$L#ilM)@9*+$XUq`^b0OxJjaL zCkspVk?eGmw^!G`WSL+d7p;0gd7%xaJM`nbS+{IQE{u`vkU8u|o!px%$$h-A;6Jd# zcIx(0=}uJ%{y=nVLFL7bKi%5w9~Zrk+jd zt!?-{(XaV$#M)4%wdMJFujo_(GCQC+X41`Cl3ToV4R6smz%uFKBK(tOfL9wLjflvm7xjd30iZINRH@ z%)Ey_sKjrg_?YCVSvz5s%N)m&?W7(yAxclGzM@$u@#)3dK&G={nAITXz7gMru_4qi zJ88QDu|*40ilt`FxJ9aPCMrvs-A*bYBck@Dngq?PhXtQbq7P=kz09hYb*T|cBsbpD z)V!6tSI8Z)(wwBpNiFt9s`e!6D~j2SN9u4v)oE>gydeP3p0|=Vxqw`d z3^}Pr0qITD2?1FQ=p}&cZfJ(+!<2x;M$bs4fSf%erO(LixC~Qje5og7-lvrqgJ>U0 zo{-if5~h4YmKPL5PHPbp0#i1A2kH3=nYKS8>93|FneA9utk(ZOBup7Xf1C1%d|s@= z5i8H3WKw&YvazD*&9D^sZLz(l#e$Y!7W*J9mL_4bRyj;rS(5Z|u~IEeNsu%Fi@lW^ zLzzAZv+RPFGC+>E6bV{BC;=&GDIm?Vqn1!FXes?lORW^N9Be6S(Lo*8^809hx)qQK z+Yz}qA|oa#XxStv8tmi0MGS&{1SICZ0WEVN3@kPcNPDa}gO;cDm_>H&Nz{avN9CYV zs`IDY&?V8w!3%ex>;UQk>AaTNqWDBWHj_4m(itxUa(nc`jW^jKNN_B80RhK$1^e}K zZVj|7c!4_FPyP@CF9^uEMXquus(=)PxswXQK+DH13Bo+J3|kWHcWk*SY{?!kftSDw zLd))CO|b8%7`g*tGi@*i(ZgY6V<_8S)AX{9x`h*yA8i6c%A&ae#d7mT&Much;7%x(9#zw3MCD3VAeX3qC2l}8 z{&a(2xOJx-)JO~=6hekuwDK;6Vdr+C?nNdA?CsDbQwG~9^pc>JM zVP()Vzv>jcDzPC1xyEtxHttl)tg-x<+A)(R3b|xYK+D{AP>bs&$Cb1EW>5=h;l!hD zxJRwJMVC?nxi+A9Zr;J~Xp4W5{T07 zmSbn#yh9~5$8sZzqbKc*MJ~4|3IcN2h#3%-7w$0(PYkL79ioFNq02?T;JlXH!EK3z z^zNWG1>7T`gr_DgNN>4Ih*C)JD&*2l0B%b{dKW!9iQ$;u^t>yixB362x9a!P`@b`y B8VCRY From 71609a404dc065d583a74371ef1821985a5e27db Mon Sep 17 00:00:00 2001 From: GGbond Date: Wed, 31 Dec 2025 00:47:33 +0800 Subject: [PATCH 17/54] Add tests for abilities that affect weather (#8709) --- src/battle_util.c | 5 +- test/battle/ability/delta_stream.c | 44 ++++- test/battle/ability/desolate_land.c | 89 +++++++-- test/battle/ability/drizzle.c | 81 ++++++++ test/battle/ability/orichalcum_pulse.c | 111 ++++++++++- test/battle/ability/primordial_sea.c | 89 +++++++-- test/battle/ability/sand_spit.c | 75 ++++++- test/battle/ability/sand_stream.c | 81 +++++++- test/battle/ability/snow_warning.c | 132 +++++++++++-- test/battle/weather/strong_winds.c | 260 +++++++++++++++++++++++-- 10 files changed, 911 insertions(+), 56 deletions(-) diff --git a/src/battle_util.c b/src/battle_util.c index 46347b7028..7209ae17c8 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7834,8 +7834,9 @@ static inline u32 CalcAttackStat(struct DamageContext *ctx) } break; case ABILITY_ORICHALCUM_PULSE: - if ((ctx->weather & B_WEATHER_SUN) && HasWeatherEffect() && IsBattleMovePhysical(move)) - modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333)); + if ((ctx->weather & B_WEATHER_SUN) && HasWeatherEffect() && IsBattleMovePhysical(move) + && ctx->holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) + modifier = uq4_12_multiply(modifier, UQ_4_12(1.3333)); break; case ABILITY_HADRON_ENGINE: if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && IsBattleMoveSpecial(move)) diff --git a/test/battle/ability/delta_stream.c b/test/battle/ability/delta_stream.c index a2202d64c0..0ea7429ff4 100644 --- a/test/battle/ability/delta_stream.c +++ b/test/battle/ability/delta_stream.c @@ -5,5 +5,45 @@ //TO_DO_BATTLE_TEST("Delta Stream doesn't activate if is sent-out in a rotated-out position (Rotation)") //TO_DO_BATTLE_TEST("Delta Stream doesn't activate if is rotated-in (Rotation)") -TO_DO_BATTLE_TEST("Delta Stream doesn't activate if there's already strong winds") -TO_DO_BATTLE_TEST("Strong winds continue as long as there's a Pokémon with Delta Stream on the field") // Doesn't need to be the original mon +DOUBLE_BATTLE_TEST("Delta Stream doesn't activate if there's already strong winds") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(playerLeft, 2); } + } SCENE { + ABILITY_POPUP(opponentLeft, ABILITY_DELTA_STREAM); + MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!"); + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Rayquaza"); + NONE_OF { + ABILITY_POPUP(playerLeft, ABILITY_DELTA_STREAM); + MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!"); + } + } +} + +DOUBLE_BATTLE_TEST("Strong winds continue as long as there's a Pokémon with Delta Stream on the field") +{ + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); HP(1); } + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); SEND_OUT(playerLeft, 2); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponentLeft); + HP_BAR(playerLeft, hp: 0); + MESSAGE("Rayquaza fainted!"); + SEND_IN_MESSAGE("Wobbuffet"); + NOT MESSAGE("The mysterious strong winds have dissipated!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS); + } +} diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index d9f1e3924a..3d19f4490d 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -99,14 +99,81 @@ SINGLE_BATTLE_TEST("Desolate Land is removed immediately if user faints") } } -TO_DO_BATTLE_TEST("Desolate Land makes Sunny Day fail") -TO_DO_BATTLE_TEST("Desolate Land makes Rain Dance fail") -TO_DO_BATTLE_TEST("Desolate Land makes Sandstorm fail") -TO_DO_BATTLE_TEST("Desolate Land makes Hail fail") -TO_DO_BATTLE_TEST("Desolate Land makes Snowscape fail") // Extrapolation -TO_DO_BATTLE_TEST("Desolate Land makes Drought fail to activate") -TO_DO_BATTLE_TEST("Desolate Land makes Drizzle fail to activate") -TO_DO_BATTLE_TEST("Desolate Land makes Sand Stream fail to activate") -TO_DO_BATTLE_TEST("Desolate Land makes Snow Warning fail to activate") -TO_DO_BATTLE_TEST("Desolate Land can be replaced by Delta Stream") -TO_DO_BATTLE_TEST("Desolate Land can be replaced by Primordial Sea") +SINGLE_BATTLE_TEST("Desolate Land blocks weather-setting moves") +{ + u16 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SUNNY_DAY) == EFFECT_SUNNY_DAY); + ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE); + ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM); + ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL); + ASSUME(GetMoveEffect(MOVE_SNOWSCAPE) == EFFECT_SNOWSCAPE); + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL); + } +} + +SINGLE_BATTLE_TEST("Desolate Land prevents other weather abilities") +{ + u16 ability, species; + PARAMETRIZE { ability = ABILITY_DROUGHT; species = SPECIES_NINETALES; } + PARAMETRIZE { ability = ABILITY_DRIZZLE; species = SPECIES_POLITOED; } + PARAMETRIZE { ability = ABILITY_SAND_STREAM; species = SPECIES_HIPPOWDON; } + PARAMETRIZE { ability = ABILITY_SNOW_WARNING; species = SPECIES_ABOMASNOW; } + + GIVEN { + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ability); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL); + } +} + +SINGLE_BATTLE_TEST("Desolate Land can be replaced by Delta Stream") +{ + GIVEN { + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DELTA_STREAM); + MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS); + } +} + +SINGLE_BATTLE_TEST("Desolate Land can be replaced by Primordial Sea") +{ + GIVEN { + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_PRIMORDIAL_SEA); + MESSAGE("A heavy rain began to fall!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL); + } +} diff --git a/test/battle/ability/drizzle.c b/test/battle/ability/drizzle.c index fd56704830..8e6f7876c9 100644 --- a/test/battle/ability/drizzle.c +++ b/test/battle/ability/drizzle.c @@ -22,3 +22,84 @@ SINGLE_BATTLE_TEST("Drizzle summons rain", s16 damage) EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.5), results[0].damage); } } + +SINGLE_BATTLE_TEST("Drizzle sets up rain for 5 turns (Gen6+)") +{ + GIVEN { + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRIZZLE); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("The rain stopped."); + } +} + +SINGLE_BATTLE_TEST("Drizzle sets up rain for 8 turns with Damp Rock (Gen6+)") +{ + GIVEN { + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); Item(ITEM_DAMP_ROCK); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRIZZLE); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("The rain stopped."); + } +} + +SINGLE_BATTLE_TEST("Drizzle sets up permanent rain (Gen3-5)") +{ + GIVEN { + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3); + PLAYER(SPECIES_POLITOED) { Moves(MOVE_CELEBRATE); Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_DRIZZLE); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + MESSAGE("Rain continues to fall."); + NOT MESSAGE("The rain stopped."); + } +} diff --git a/test/battle/ability/orichalcum_pulse.c b/test/battle/ability/orichalcum_pulse.c index 295e0db23c..62509ce0c6 100644 --- a/test/battle/ability/orichalcum_pulse.c +++ b/test/battle/ability/orichalcum_pulse.c @@ -1,5 +1,112 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Orichalcum Pulse sets up sun for 5 turns"); -TO_DO_BATTLE_TEST("Orichalcum Pulse boosts the Pokémon's Attack by 33% in sun, even if it's holding an Utility Umbrella"); +SINGLE_BATTLE_TEST("Orichalcum Pulse sets up sun for 5 turns") +{ + GIVEN { + PLAYER(SPECIES_KORAIDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_ORICHALCUM_PULSE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight faded."); + } +} + +SINGLE_BATTLE_TEST("Orichalcum Pulse sets up sun for 8 turns with Heat Rock") +{ + GIVEN { + PLAYER(SPECIES_KORAIDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_ORICHALCUM_PULSE); Item(ITEM_HEAT_ROCK); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight is strong."); + MESSAGE("The sunlight faded."); + } +} + +SINGLE_BATTLE_TEST("Orichalcum Pulse boosts physical moves by 33% in sun", s16 damage) +{ + u16 setupMove; + PARAMETRIZE { setupMove = MOVE_CELEBRATE; } + PARAMETRIZE { setupMove = MOVE_RAIN_DANCE; } + + GIVEN { + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_KORAIDON) { Ability(ABILITY_ORICHALCUM_PULSE); Moves(MOVE_SCRATCH); Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_RAIN_DANCE, MOVE_CELEBRATE); Speed(10); } + } WHEN { + TURN { MOVE(opponent, setupMove); MOVE(player, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.3333), results[0].damage); + } +} + +SINGLE_BATTLE_TEST("Orichalcum Pulse boost applies even if the target holds Utility Umbrella", s16 damage) +{ + u16 targetItem; + PARAMETRIZE { targetItem = ITEM_NONE; } + PARAMETRIZE { targetItem = ITEM_UTILITY_UMBRELLA; } + + GIVEN { + ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA); + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_KORAIDON) { Ability(ABILITY_ORICHALCUM_PULSE); Moves(MOVE_SCRATCH); Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Speed(10); Item(targetItem); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_EQ(results[0].damage, results[1].damage); + } +} + +SINGLE_BATTLE_TEST("Orichalcum Pulse does not boost physical moves if holder has Utility Umbrella", s16 damage) +{ + u16 holdItem; + PARAMETRIZE { holdItem = ITEM_NONE; } + PARAMETRIZE { holdItem = ITEM_UTILITY_UMBRELLA; } + + GIVEN { + ASSUME(gItemsInfo[ITEM_UTILITY_UMBRELLA].holdEffect == HOLD_EFFECT_UTILITY_UMBRELLA); + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_KORAIDON) { Ability(ABILITY_ORICHALCUM_PULSE); Moves(MOVE_SCRATCH); Speed(5); Item(holdItem); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Speed(10); } + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ORICHALCUM_PULSE); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT_MUL_EQ(results[1].damage, Q_4_12(1.3333), results[0].damage); + } +} diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index f24219f263..a34eb97b5c 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -65,14 +65,81 @@ SINGLE_BATTLE_TEST("Primordial Sea does not block a move if Pokémon is asleep a } } -TO_DO_BATTLE_TEST("Primordial Sea makes Sunny Day fail") -TO_DO_BATTLE_TEST("Primordial Sea makes Rain Dance fail") -TO_DO_BATTLE_TEST("Primordial Sea makes Sandstorm fail") -TO_DO_BATTLE_TEST("Primordial Sea makes Hail fail") -TO_DO_BATTLE_TEST("Primordial Sea makes Snowscape fail") // Extrapolation -TO_DO_BATTLE_TEST("Primordial Sea makes Drought fail to activate") -TO_DO_BATTLE_TEST("Primordial Sea makes Drizzle fail to activate") -TO_DO_BATTLE_TEST("Primordial Sea makes Sand Stream fail to activate") -TO_DO_BATTLE_TEST("Primordial Sea makes Snow Warning fail to activate") -TO_DO_BATTLE_TEST("Primordial Sea can be replaced by Delta Stream") -TO_DO_BATTLE_TEST("Primordial Sea can be replaced by Desolate Land") +SINGLE_BATTLE_TEST("Primordial Sea blocks weather-setting moves") +{ + u16 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SUNNY_DAY) == EFFECT_SUNNY_DAY); + ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE); + ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM); + ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL); + ASSUME(GetMoveEffect(MOVE_SNOWSCAPE) == EFFECT_SNOWSCAPE); + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL); + } +} + +SINGLE_BATTLE_TEST("Primordial Sea prevents other weather abilities") +{ + u16 ability, species; + PARAMETRIZE { ability = ABILITY_DROUGHT; species = SPECIES_NINETALES; } + PARAMETRIZE { ability = ABILITY_DRIZZLE; species = SPECIES_POLITOED; } + PARAMETRIZE { ability = ABILITY_SAND_STREAM; species = SPECIES_HIPPOWDON; } + PARAMETRIZE { ability = ABILITY_SNOW_WARNING; species = SPECIES_ABOMASNOW; } + + GIVEN { + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ability); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL); + } +} + +SINGLE_BATTLE_TEST("Primordial Sea can be replaced by Delta Stream") +{ + GIVEN { + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DELTA_STREAM); + MESSAGE("Mysterious strong winds are protecting Flying-type Pokémon!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS); + } +} + +SINGLE_BATTLE_TEST("Primordial Sea can be replaced by Desolate Land") +{ + GIVEN { + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DESOLATE_LAND); + MESSAGE("The sunlight turned extremely harsh!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL); + } +} diff --git a/test/battle/ability/sand_spit.c b/test/battle/ability/sand_spit.c index c2128f65de..cb97179443 100644 --- a/test/battle/ability/sand_spit.c +++ b/test/battle/ability/sand_spit.c @@ -1,4 +1,77 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Sand Spit (Ability) test titles") +SINGLE_BATTLE_TEST("Sand Spit sets up sandstorm for 5 turns when hit") +{ + GIVEN { + PLAYER(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_SPIT); } + OPPONENT(SPECIES_LANDORUS) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("The opposing Landorus used Tackle!"); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_SAND_SPIT); + MESSAGE("A sandstorm kicked up!"); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm subsided."); + } +} + +SINGLE_BATTLE_TEST("Sand Spit sets up sandstorm for 8 turns when hit with Smooth Rock") +{ + GIVEN { + PLAYER(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_SPIT); Item(ITEM_SMOOTH_ROCK); } + OPPONENT(SPECIES_LANDORUS) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("The opposing Landorus used Tackle!"); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_SAND_SPIT); + MESSAGE("A sandstorm kicked up!"); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm subsided."); + } +} + +SINGLE_BATTLE_TEST("Sand Spit triggers even if the user is knocked out by the hit") +{ + GIVEN { + PLAYER(SPECIES_SANDSLASH) { Ability(ABILITY_SAND_SPIT); HP(1); Speed(1); } + PLAYER(SPECIES_LANDORUS) { Moves(MOVE_CELEBRATE); Speed(5); } + OPPONENT(SPECIES_LANDORUS) { Moves(MOVE_TACKLE, MOVE_CELEBRATE); Speed(10); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("The opposing Landorus used Tackle!"); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_SAND_SPIT); + MESSAGE("A sandstorm kicked up!"); + MESSAGE("The sandstorm is raging."); + MESSAGE("The opposing Landorus used Celebrate!"); + MESSAGE("Landorus used Celebrate!"); + MESSAGE("The sandstorm is raging."); + } +} diff --git a/test/battle/ability/sand_stream.c b/test/battle/ability/sand_stream.c index 6cd1b06eb4..a1b9464c2a 100644 --- a/test/battle/ability/sand_stream.c +++ b/test/battle/ability/sand_stream.c @@ -1,4 +1,83 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Sand Stream (Ability) test titles") +SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 5 turns (Gen6+)") +{ + GIVEN { + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); } + OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SAND_STREAM); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm subsided."); + } +} + +SINGLE_BATTLE_TEST("Sand Stream sets up sandstorm for 8 turns with Smooth Rock (Gen6+)") +{ + GIVEN { + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); Item(ITEM_SMOOTH_ROCK); } + OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SAND_STREAM); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm subsided."); + } +} + +SINGLE_BATTLE_TEST("Sand Stream sets up permanent sandstorm (Gen3-5)") +{ + GIVEN { + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_3); + PLAYER(SPECIES_HIPPOWDON) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SAND_STREAM); } + OPPONENT(SPECIES_SANDSLASH) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SAND_STREAM); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + MESSAGE("The sandstorm is raging."); + NOT MESSAGE("The sandstorm subsided."); + } +} diff --git a/test/battle/ability/snow_warning.c b/test/battle/ability/snow_warning.c index bffee14e49..bfb27c5f49 100644 --- a/test/battle/ability/snow_warning.c +++ b/test/battle/ability/snow_warning.c @@ -1,30 +1,138 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Snow Warning summons hail (Gen4-8)") +SINGLE_BATTLE_TEST("Snow Warning sets up hail for 5 turns (Gen6-8)") { GIVEN { WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8); - PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); } - OPPONENT(SPECIES_WOBBUFFET); + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {} + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("It started to hail!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HAIL_CONTINUES); + ABILITY_POPUP(player, ABILITY_SNOW_WARNING); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail stopped."); } } -SINGLE_BATTLE_TEST("Snow Warning summons snow (Gen9+)") +SINGLE_BATTLE_TEST("Snow Warning sets up hail for 8 turns with Icy Rock (Gen6-8)") +{ + GIVEN { + WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8); + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); + PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); Item(ITEM_ICY_ROCK); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SNOW_WARNING); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail stopped."); + } +} + +SINGLE_BATTLE_TEST("Snow Warning sets up permanent hail (Gen4-5)") +{ + GIVEN { + WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_8); + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_5); + PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SNOW_WARNING); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + MESSAGE("The hail is crashing down."); + NOT MESSAGE("The hail stopped."); + } +} + +SINGLE_BATTLE_TEST("Snow Warning sets up snow for 5 turns (Gen9+)") { GIVEN { WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9); - PLAYER(SPECIES_ABOMASNOW) { Ability(ABILITY_SNOW_WARNING); } - OPPONENT(SPECIES_WOBBUFFET); + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_9); + PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {} + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } } SCENE { - MESSAGE("It started to snow!"); - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES); + ABILITY_POPUP(player, ABILITY_SNOW_WARNING); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("The snow stopped."); + } +} + +SINGLE_BATTLE_TEST("Snow Warning sets up snow for 8 turns with Icy Rock (Gen9+)") +{ + GIVEN { + WITH_CONFIG(CONFIG_SNOW_WARNING, GEN_9); + WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_9); + PLAYER(SPECIES_ABOMASNOW) { Moves(MOVE_CELEBRATE); Ability(ABILITY_SNOW_WARNING); Item(ITEM_ICY_ROCK); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SNOW_WARNING); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("Snow continues to fall."); + MESSAGE("The snow stopped."); } } diff --git a/test/battle/weather/strong_winds.c b/test/battle/weather/strong_winds.c index 26b0a51d0d..f319a7a229 100644 --- a/test/battle/weather/strong_winds.c +++ b/test/battle/weather/strong_winds.c @@ -1,17 +1,249 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers") // Electric, Ice, Rock -TO_DO_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers - Inverse Battle") // Bug, Fighting, Grass -TO_DO_BATTLE_TEST("Strong winds don't affect Stealth Rock's damage") -TO_DO_BATTLE_TEST("Strong winds makes Sunny Day fail") -TO_DO_BATTLE_TEST("Strong winds makes Rain Dance fail") -TO_DO_BATTLE_TEST("Strong winds makes Sandstorm fail") -TO_DO_BATTLE_TEST("Strong winds makes Hail fail") -TO_DO_BATTLE_TEST("Strong winds makes Snowscape fail") // Extrapolation -TO_DO_BATTLE_TEST("Strong winds makes Drought fail to activate") -TO_DO_BATTLE_TEST("Strong winds makes Drizzle fail to activate") -TO_DO_BATTLE_TEST("Strong winds makes Sand Stream fail to activate") -TO_DO_BATTLE_TEST("Strong winds makes Snow Warning fail to activate") -TO_DO_BATTLE_TEST("Strong winds can be replaced by Desolate Land") -TO_DO_BATTLE_TEST("Strong winds can be replaced by Primordial Sea") +DOUBLE_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers") // Electric, Ice, Rock +{ + u16 move; + bool32 targetPlayer; + + PARAMETRIZE { move = MOVE_THUNDER_SHOCK; targetPlayer = TRUE; } + PARAMETRIZE { move = MOVE_ICE_BEAM; targetPlayer = TRUE; } + PARAMETRIZE { move = MOVE_ROCK_THROW; targetPlayer = TRUE; } + PARAMETRIZE { move = MOVE_THUNDER_SHOCK; targetPlayer = FALSE; } + PARAMETRIZE { move = MOVE_ICE_BEAM; targetPlayer = FALSE; } + PARAMETRIZE { move = MOVE_ROCK_THROW; targetPlayer = FALSE; } + + GIVEN { + ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); + ASSUME(GetMoveType(MOVE_ICE_BEAM) == TYPE_ICE); + ASSUME(GetMoveType(MOVE_ROCK_THROW) == TYPE_ROCK); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING); + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + PLAYER(SPECIES_PIDGEY); + OPPONENT(SPECIES_PIDGEY); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (targetPlayer) + TURN { MOVE(opponentLeft, move, target: playerRight); } + else + TURN { MOVE(playerRight, move, target: opponentLeft); } + } SCENE { + if (targetPlayer) { + if (move == MOVE_THUNDER_SHOCK) + MESSAGE("The opposing Pidgey used Thunder Shock!"); + else if (move == MOVE_ICE_BEAM) + MESSAGE("The opposing Pidgey used Ice Beam!"); + else + MESSAGE("The opposing Pidgey used Rock Throw!"); + MESSAGE("The mysterious strong winds weakened the attack!"); + ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft); + } else { + if (move == MOVE_THUNDER_SHOCK) + MESSAGE("Pidgey used Thunder Shock!"); + else if (move == MOVE_ICE_BEAM) + MESSAGE("Pidgey used Ice Beam!"); + else + MESSAGE("Pidgey used Rock Throw!"); + MESSAGE("The mysterious strong winds weakened the attack!"); + ANIMATION(ANIM_TYPE_MOVE, move, playerRight); + } + } +} + +DOUBLE_BATTLE_TEST("Strong winds remove Flying-type weaknesses of all battlers - Inverse Battle", s16 damagePlayer, s16 damageOpponent) // Bug, Fighting, Grass +{ + u16 move; + bool32 strongWinds; + + PARAMETRIZE { move = MOVE_BUG_BITE; strongWinds = FALSE; } + PARAMETRIZE { move = MOVE_BUG_BITE; strongWinds = TRUE; } + PARAMETRIZE { move = MOVE_KARATE_CHOP; strongWinds = FALSE; } + PARAMETRIZE { move = MOVE_KARATE_CHOP; strongWinds = TRUE; } + PARAMETRIZE { move = MOVE_VINE_WHIP; strongWinds = FALSE; } + PARAMETRIZE { move = MOVE_VINE_WHIP; strongWinds = TRUE; } + + GIVEN { + FLAG_SET(B_FLAG_INVERSE_BATTLE); + ASSUME(GetMoveType(MOVE_BUG_BITE) == TYPE_BUG); + ASSUME(GetMoveType(MOVE_KARATE_CHOP) == TYPE_FIGHTING); + ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_TORNADUS, 0) == TYPE_FLYING); + ASSUME(GetSpeciesType(SPECIES_TORNADUS, 1) == TYPE_FLYING); + if (strongWinds) + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + else + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_TORNADUS); + OPPONENT(SPECIES_TORNADUS); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, move, target: playerRight); + MOVE(playerRight, move, target: opponentLeft); + } + } SCENE { + HP_BAR(playerRight, captureDamage: &results[i].damagePlayer); + HP_BAR(opponentLeft, captureDamage: &results[i].damageOpponent); + } FINALLY { + EXPECT_GT(results[0].damagePlayer, results[1].damagePlayer); + EXPECT_GT(results[0].damageOpponent, results[1].damageOpponent); + EXPECT_GT(results[2].damagePlayer, results[3].damagePlayer); + EXPECT_GT(results[2].damageOpponent, results[3].damageOpponent); + EXPECT_GT(results[4].damagePlayer, results[5].damagePlayer); + EXPECT_GT(results[4].damageOpponent, results[5].damageOpponent); + } +} + +SINGLE_BATTLE_TEST("Strong winds prevent Weakness Policy from activating on Flying-type weaknesses") +{ + GIVEN { + ASSUME(GetItemHoldEffect(ITEM_WEAKNESS_POLICY) == HOLD_EFFECT_WEAKNESS_POLICY); + ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING); + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); Moves(MOVE_THUNDER_SHOCK); } + OPPONENT(SPECIES_PIDGEY) { Item(ITEM_WEAKNESS_POLICY); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDER_SHOCK); } + } SCENE { + MESSAGE("Rayquaza used Thunder Shock!"); + MESSAGE("The mysterious strong winds weakened the attack!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_SHOCK, player); + HP_BAR(opponent); + NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + } +} + +SINGLE_BATTLE_TEST("Anticipation still triggers with Strong Winds active") +{ + GIVEN { + ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING); + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); Moves(MOVE_THUNDER_SHOCK, MOVE_CELEBRATE); } + OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_ANTICIPATION); Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ANTICIPATION); + MESSAGE("Rayquaza used Celebrate!"); + MESSAGE("The opposing Pidgey used Celebrate!"); + } +} + +SINGLE_BATTLE_TEST("Anticipation still triggers with Strong Winds active in Inverse Battle") +{ + GIVEN { + FLAG_SET(B_FLAG_INVERSE_BATTLE); + ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS); + ASSUME(GetSpeciesType(SPECIES_TORNADUS, 0) == TYPE_FLYING); + ASSUME(GetSpeciesType(SPECIES_TORNADUS, 1) == TYPE_FLYING); + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); Moves(MOVE_VINE_WHIP, MOVE_CELEBRATE); } + OPPONENT(SPECIES_TORNADUS) { Ability(ABILITY_ANTICIPATION); Moves(MOVE_CELEBRATE); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_ANTICIPATION); + MESSAGE("Rayquaza used Celebrate!"); + MESSAGE("The opposing Tornadus used Celebrate!"); + } +} + +SINGLE_BATTLE_TEST("Strong winds don't affect Stealth Rock's damage") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_STEALTH_ROCK) == EFFECT_STEALTH_ROCK); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 0) == TYPE_NORMAL); + ASSUME(GetSpeciesType(SPECIES_PIDGEY, 1) == TYPE_FLYING); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_PIDGEY); + OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + } WHEN { + TURN { MOVE(opponent, MOVE_STEALTH_ROCK); } + TURN { SWITCH(player, 1); } + } SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); + HP_BAR(player, damage: maxHP / 4); + } +} + +SINGLE_BATTLE_TEST("Strong winds block weather-setting moves") +{ + u16 move; + PARAMETRIZE { move = MOVE_SUNNY_DAY; } + PARAMETRIZE { move = MOVE_RAIN_DANCE; } + PARAMETRIZE { move = MOVE_SANDSTORM; } + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SUNNY_DAY) == EFFECT_SUNNY_DAY); + ASSUME(GetMoveEffect(MOVE_RAIN_DANCE) == EFFECT_RAIN_DANCE); + ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM); + ASSUME(GetMoveEffect(MOVE_HAIL) == EFFECT_HAIL); + ASSUME(GetMoveEffect(MOVE_SNOWSCAPE) == EFFECT_SNOWSCAPE); + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, move, opponent); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS); + } +} + +SINGLE_BATTLE_TEST("Strong winds prevent other weather abilities") +{ + u16 ability, species; + PARAMETRIZE { ability = ABILITY_DROUGHT; species = SPECIES_NINETALES; } + PARAMETRIZE { ability = ABILITY_DRIZZLE; species = SPECIES_POLITOED; } + PARAMETRIZE { ability = ABILITY_SAND_STREAM; species = SPECIES_HIPPOWDON; } + PARAMETRIZE { ability = ABILITY_SNOW_WARNING; species = SPECIES_ABOMASNOW; } + + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ability); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_STRONG_WINDS); + } +} + +SINGLE_BATTLE_TEST("Strong winds can be replaced by Desolate Land") +{ + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_DESOLATE_LAND); + MESSAGE("The sunlight turned extremely harsh!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_SUN_PRIMAL); + } +} + +SINGLE_BATTLE_TEST("Strong winds can be replaced by Primordial Sea") +{ + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Ability(ABILITY_DELTA_STREAM); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + } WHEN { + TURN { SWITCH(opponent, 1); } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_PRIMORDIAL_SEA); + MESSAGE("A heavy rain began to fall!"); + } THEN { + EXPECT(gBattleWeather & B_WEATHER_RAIN_PRIMAL); + } +} From 13b7dc4401074ba15c592e1196e4e83e86388883 Mon Sep 17 00:00:00 2001 From: Martin Griffin Date: Tue, 30 Dec 2025 19:39:09 +0000 Subject: [PATCH 18/54] Document UpdateLegendaryMarkingColor (#2221) --- src/title_screen.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/title_screen.c b/src/title_screen.c index 1d605d1fc0..829361bcb8 100644 --- a/src/title_screen.c +++ b/src/title_screen.c @@ -858,10 +858,10 @@ static void UpdateLegendaryMarkingColor(u8 frameNum) { if ((frameNum % 4) == 0) // Change color every 4th frame { - s32 intensity = Cos(frameNum, 128) + 128; - s32 r = 31 - ((intensity * 32 - intensity) / 256); - s32 g = 31 - (intensity * 22 / 256); - s32 b = 12; + s32 intensity = Cos(frameNum, Q_8_8(0.5)) + Q_8_8(0.5); + u32 r = 31 - Q_8_8_TO_INT(intensity * 31); + u32 g = 31 - Q_8_8_TO_INT(intensity * 22); + u32 b = 12; u16 color = RGB(r, g, b); LoadPalette(&color, BG_PLTT_ID(14) + 15, sizeof(color)); From c0d4f0e45f9f4708fa5f5c371cb6adf132d38ba4 Mon Sep 17 00:00:00 2001 From: hedara90 <90hedara@gmail.com> Date: Wed, 31 Dec 2025 01:13:23 +0100 Subject: [PATCH 19/54] Use release instead of LTO in CI (#8706) Co-authored-by: Hedara --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da1a943e83..bb069cf6c0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,11 +31,11 @@ jobs: env: COMPARE: 0 run: make -j${nproc} -O all - - - name: LTO + + - name: Release run: | make tidy - make -j${nproc} LTO=1 + make -j${nproc} release # make tidy to purge previous build - name: Test From cd0834237bbfbebb502e01a8072d54cd248c088a Mon Sep 17 00:00:00 2001 From: Kildemal <206095739+izrofid@users.noreply.github.com> Date: Wed, 31 Dec 2025 20:07:16 +0530 Subject: [PATCH 20/54] Add some missing tests for heatproof, thick fat and grudge (#8705) --- test/battle/ability/heatproof.c | 50 +++++- test/battle/ability/thick_fat.c | 37 ++++- test/battle/move_effect/grudge.c | 264 +++++++++++++++++++++++++++++-- 3 files changed, 340 insertions(+), 11 deletions(-) diff --git a/test/battle/ability/heatproof.c b/test/battle/ability/heatproof.c index 7f1d772bb7..154569fd2a 100644 --- a/test/battle/ability/heatproof.c +++ b/test/battle/ability/heatproof.c @@ -1,4 +1,52 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Heatproof (Ability) test titles") +ASSUMPTIONS +{ + ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); + ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY); +} + +SINGLE_BATTLE_TEST("Heatproof halves damage from fire type moves") +{ + s16 damage[2]; + GIVEN { + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); } + } + WHEN { + TURN { MOVE(player, MOVE_EMBER); } + TURN { MOVE(player, MOVE_WORRY_SEED); } + TURN { MOVE(player, MOVE_EMBER); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, player); + HP_BAR(opponent, captureDamage: &damage[1]); + EXPECT_MUL_EQ(damage[0], Q_4_12(2), damage[1]); + } +} + +SINGLE_BATTLE_TEST("Heatproof halves the damage done by burn from 1/8th to 1/16th (Gen1-6) or 1/16th to 1/32nd (Gen 7+)") +{ + u32 config, burnRate; + + PARAMETRIZE { config = GEN_7; burnRate = 32; } + PARAMETRIZE { config = GEN_6; burnRate = 16; } + + GIVEN { + WITH_CONFIG(CONFIG_BURN_DAMAGE, config); + PLAYER (SPECIES_BRONZONG) { Ability(ABILITY_HEATPROOF); Status1(STATUS1_BURN); } + OPPONENT (SPECIES_WOBBUFFET); + } + WHEN { + TURN {} + } + SCENE { + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + HP_BAR(player, damage: maxHP / burnRate); + } +} + diff --git a/test/battle/ability/thick_fat.c b/test/battle/ability/thick_fat.c index bcc4c9487c..ce13d12982 100644 --- a/test/battle/ability/thick_fat.c +++ b/test/battle/ability/thick_fat.c @@ -1,4 +1,39 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("TODO: Write Thick Fat (Ability) test titles") +ASSUMPTIONS +{ + ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); + ASSUME(GetMoveType(MOVE_POWDER_SNOW) == TYPE_ICE); + ASSUME(GetMoveEffect(MOVE_WORRY_SEED) == EFFECT_OVERWRITE_ABILITY); +} + +SINGLE_BATTLE_TEST("Thick Fat halves damage from fire and ice type moves", s16 damage[2]) +{ + u16 move; + + PARAMETRIZE { move = MOVE_POWDER_SNOW; } + PARAMETRIZE { move = MOVE_EMBER; } + + GIVEN { + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_SNORLAX) { Ability(ABILITY_THICK_FAT); } + } + WHEN { + TURN { MOVE(player, move); } + TURN { MOVE(player, MOVE_WORRY_SEED); } + TURN { MOVE(player, move); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WORRY_SEED, player); + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage[1]); + } + FINALLY { + EXPECT_MUL_EQ(results[0].damage[0], Q_4_12(2), results[0].damage[1]); + EXPECT_MUL_EQ(results[1].damage[0], Q_4_12(2), results[1].damage[1]); + } +} + diff --git a/test/battle/move_effect/grudge.c b/test/battle/move_effect/grudge.c index 2b74a3b05a..9d381ad833 100644 --- a/test/battle/move_effect/grudge.c +++ b/test/battle/move_effect/grudge.c @@ -50,12 +50,258 @@ SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move") } } -TO_DO_BATTLE_TEST("Grudge depletes all PP from a Max Move's base move") -TO_DO_BATTLE_TEST("Grudge does not activate for Struggle") -TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Move"); -TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Sleep"); -TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Paralysis"); -TO_DO_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Flinching"); -TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Sandstorm"); -TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Leech Seed"); -TO_DO_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Future Sight"); +SINGLE_BATTLE_TEST("Grudge depletes all PP from a Max Move's base move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); Item(ITEM_LAGGING_TAIL); } + } WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); } + } SCENE { + MESSAGE("Wobbuffet used Grudge!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + MESSAGE("The opposing Wobbuffet used Max Strike!"); + MESSAGE("Wobbuffet fainted!"); + MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!"); + } THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_EQ(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge does not activate for Struggle") +{ + GIVEN { + PLAYER (SPECIES_WOBBUFFET) { HP(1); } + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_STRUGGLE, MOVE_POUND, MOVE_SURF); }; + } + WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_STRUGGLE); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRUGGLE, opponent); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Struggle lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Move") +{ + GIVEN { + PLAYER (SPECIES_WOBBUFFET) { HP(1); } + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }; + } + WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Sleep") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(gMovesInfo[SanitizeMoveId(MOVE_SPORE)].argument.nonVolatileStatus == MOVE_EFFECT_SLEEP); + PLAYER (SPECIES_WOBBUFFET) { HP(1);} + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_VITAL_THROW, MOVE_SPORE, MOVE_SURF); } + } + WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SPORE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_VITAL_THROW); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + MESSAGE("Wobbuffet fell asleep!"); + STATUS_ICON(player, sleep: TRUE); + MESSAGE("Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_VITAL_THROW, opponent); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Paralysis") +{ + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + GIVEN { + ASSUME(GetMoveEffect(MOVE_STUN_SPORE) == EFFECT_NON_VOLATILE_STATUS); + ASSUME(gMovesInfo[SanitizeMoveId(MOVE_STUN_SPORE)].argument.nonVolatileStatus == MOVE_EFFECT_PARALYSIS); + ASSUME(GetMovePriority(MOVE_VITAL_THROW) == -1); + PLAYER (SPECIES_WOBBUFFET) { HP(1);} + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_VITAL_THROW, MOVE_STUN_SPORE, MOVE_SURF); };\ + } + WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_STUN_SPORE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_VITAL_THROW); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, opponent); + MESSAGE("Wobbuffet is paralyzed, so it may be unable to move!"); + STATUS_ICON(player, paralysis: TRUE); + MESSAGE("Wobbuffet couldn't move because it's paralyzed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_VITAL_THROW, opponent); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect disappears if the user takes a new turn - Flinching") +{ + PASSES_RANDOMLY(10, 100, RNG_HOLD_EFFECT_FLINCH); + GIVEN { + ASSUME(GetMoveEffect(MOVE_FALSE_SWIPE) == EFFECT_FALSE_SWIPE); + PLAYER (SPECIES_WOBBUFFET) { HP(1); } + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_FALSE_SWIPE, MOVE_SURF); Item(ITEM_KINGS_ROCK); } + } + WHEN { + TURN { SWITCH(opponent, 1); MOVE(player, MOVE_GRUDGE); } + TURN { MOVE(opponent, MOVE_FALSE_SWIPE); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); SEND_OUT(player, 1); } + } + SCENE { + SEND_IN_MESSAGE("Wobbuffet"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FALSE_SWIPE, opponent); + MESSAGE("Wobbuffet flinched and couldn't move!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Scratch lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Sandstorm") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_SANDSTORM) == EFFECT_SANDSTORM); + PLAYER (SPECIES_WOBBUFFET) { HP(1); } + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_SANDSTORM, MOVE_SURF); } + } + WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_SANDSTORM); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SANDSTORM, opponent); + MESSAGE("The sandstorm is raging."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); + MESSAGE("Wobbuffet is buffeted by the sandstorm!"); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Sandstorm lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Leech Seed") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED); + PLAYER (SPECIES_WOBBUFFET) { HP(1); } + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_LEECH_SEED, MOVE_SURF); } + } + WHEN { + TURN { MOVE(player, MOVE_GRUDGE); MOVE(opponent, MOVE_LEECH_SEED); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, opponent); + MESSAGE("Wobbuffet was seeded!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, player); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Leech Seed lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + +SINGLE_BATTLE_TEST("Grudge's effect doesn't trigger on indirect damage - Future Sight") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); + PLAYER (SPECIES_WOBBUFFET) { HP(1); } + PLAYER (SPECIES_WOBBUFFET); + OPPONENT (SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_FUTURE_SIGHT, MOVE_SURF); } + } + WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_FUTURE_SIGHT); } + TURN {} + TURN { MOVE(player, MOVE_GRUDGE); SEND_OUT(player, 1); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponent); + MESSAGE("The opposing Wobbuffet foresaw an attack!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRUDGE, player); + MESSAGE("Wobbuffet took the Future Sight attack!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FUTURE_SIGHT_HIT); + MESSAGE("Wobbuffet fainted!"); + NOT MESSAGE("The opposing Wobbuffet's Future Sight lost all its PP due to the grudge!"); + } + THEN { + EXPECT_GT(opponent->pp[0], 0); + EXPECT_GT(opponent->pp[1], 0); + EXPECT_GT(opponent->pp[2], 0); + EXPECT_GT(opponent->pp[3], 0); + } +} + From b82c8f166e7cce3a4a0662faa7c60c858a62254d Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 1 Jan 2026 13:32:07 +0100 Subject: [PATCH 21/54] add mrdollsteak as a contributor for data (#8733) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 55ff294842..c01e94a8fc 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -505,6 +505,15 @@ "contributions": [ "data" ] + }, + { + "login": "mrdollsteak", + "name": "mrdollsteak", + "avatar_url": "https://avatars.githubusercontent.com/u/5975698?v=4", + "profile": "https://github.com/mrdollsteak", + "contributions": [ + "data" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index dfec2d747c..98edf01b00 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -83,6 +83,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Eva
Eva

🎨 amiosi
amiosi

🔣 + mrdollsteak
mrdollsteak

🔣 From 4da0cf72e6b98da5bfb4947c82263088291ba777 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Thu, 1 Jan 2026 20:08:43 +0000 Subject: [PATCH 22/54] Adds tests for Beak Blast not burning when the target is protected (#8713) --- src/battle_script_commands.c | 5 +-- test/battle/move_effect/beak_blast.c | 65 ++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index be1189cfa9..2b3afcd5d7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -9708,7 +9708,6 @@ static void Cmd_setprotectlike(void) { CMD_ARGS(); - bool32 protectFails = TRUE; bool32 notLastTurn = TRUE; u32 protectMethod = GetMoveProtectMethod(gCurrentMove); @@ -9738,10 +9737,8 @@ static void Cmd_setprotectlike(void) } gDisableStructs[gBattlerAttacker].protectUses++; - protectFails = FALSE; } - - if (protectFails) + else // Protect failed { gDisableStructs[gBattlerAttacker].protectUses = 0; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_PROTECT_FAILED; diff --git a/test/battle/move_effect/beak_blast.c b/test/battle/move_effect/beak_blast.c index 6e94a908e5..a837bda712 100644 --- a/test/battle/move_effect/beak_blast.c +++ b/test/battle/move_effect/beak_blast.c @@ -141,6 +141,71 @@ SINGLE_BATTLE_TEST("Beak Blast doesn't burn after being used") } } +DOUBLE_BATTLE_TEST("Beak Blast doesn't burn if the target is protected") +{ + u32 move; + + PARAMETRIZE { move = MOVE_SPIKY_SHIELD; } + PARAMETRIZE { move = MOVE_BANEFUL_BUNKER; } + PARAMETRIZE { move = MOVE_BURNING_BULWARK; } + PARAMETRIZE { move = MOVE_SILK_TRAP; } + + GIVEN { + ASSUME(GetMoveEffect(move) == EFFECT_PROTECT); + ASSUME(GetMoveEffect(MOVE_INSTRUCT) == EFFECT_INSTRUCT); + ASSUME(GetMovePriority(MOVE_BEAK_BLAST) > GetMovePriority(MOVE_TRICK_ROOM)); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WYNAUT) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(10); } + } WHEN { + TURN { MOVE(opponentLeft, move); } + TURN { MOVE(opponentRight, MOVE_INSTRUCT, target: opponentLeft, WITH_RNG(RNG_PROTECT_FAIL, 0)); + MOVE(opponentLeft, MOVE_BEAK_BLAST, target: playerLeft); + MOVE(playerRight, MOVE_TRICK_ROOM); + MOVE(playerLeft, MOVE_POUND, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, move, opponentLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, playerLeft); + if (move == MOVE_SPIKY_SHIELD) { + HP_BAR(playerLeft); + } else if (move == MOVE_BANEFUL_BUNKER) { + STATUS_ICON(playerLeft, STATUS1_POISON); + } else if (move == MOVE_BURNING_BULWARK) { + STATUS_ICON(playerLeft, STATUS1_BURN); + } else if (move == MOVE_SILK_TRAP) { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + } + NOT STATUS_ICON(playerLeft, STATUS1_BURN); + } +} + +DOUBLE_BATTLE_TEST("Beak Blast doesn't burn if the target is protected by Quick Guard") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_QUICK_GUARD) == EFFECT_PROTECT); + ASSUME(GetMoveProtectMethod(MOVE_QUICK_GUARD) == PROTECT_QUICK_GUARD); + ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) > 0); + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + PLAYER(SPECIES_WYNAUT) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WYNAUT) { Speed(10); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_BEAK_BLAST, target: playerLeft); + MOVE(opponentRight, MOVE_QUICK_GUARD); + MOVE(playerLeft, MOVE_QUICK_ATTACK, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_BEAK_BLAST_SETUP, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_GUARD, opponentRight); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerLeft); + STATUS_ICON(playerLeft, STATUS1_BURN); + } + } +} + TO_DO_BATTLE_TEST("Beak Blast's charging message is shown regardless if it would've missed"); TO_DO_BATTLE_TEST("Beak Blast fails if it's forced by Encore after choosing a different move"); TO_DO_BATTLE_TEST("Bulletproof is immune to Beak Blast but not to the burn it causes"); From 9e1a593d3541ae55abb8cb44f0bcfb2ce9f075c1 Mon Sep 17 00:00:00 2001 From: FosterProgramming Date: Fri, 2 Jan 2026 09:38:55 +0100 Subject: [PATCH 23/54] Refactor dexnav to not use overworld task (#8602) --- include/dexnav.h | 7 +- src/dexnav.c | 223 ++++++++++++++++++------------------- src/field_control_avatar.c | 4 +- src/script.c | 3 + 4 files changed, 119 insertions(+), 118 deletions(-) diff --git a/include/dexnav.h b/include/dexnav.h index b1956349b3..82350f665a 100644 --- a/include/dexnav.h +++ b/include/dexnav.h @@ -69,14 +69,15 @@ enum EncounterType #define DEXNAV_MASK_SPECIES 0x3FFF // First 14 bits #define DEXNAV_MASK_ENVIRONMENT 0xC000 // Last two bit -void EndDexNavSearch(u8 taskId); +void EndDexNavSearch(void); void Task_OpenDexNavFromStartMenu(u8 taskId); -bool8 TryStartDexNavSearch(void); +bool32 TryStartDexNavSearch(void); void TryIncrementSpeciesSearchLevel(void); void ResetDexNavSearch(void); -bool8 TryFindHiddenPokemon(void); +bool32 TryFindHiddenPokemon(void); u32 CalculateDexNavShinyRolls(void); void IncrementDexNavChain(void); +bool32 OnStep_DexNavSearch(void); extern u16 gDexNavSpecies; diff --git a/src/dexnav.c b/src/dexnav.c index 3244d07a6f..adec596891 100644 --- a/src/dexnav.c +++ b/src/dexnav.c @@ -107,6 +107,7 @@ struct DexNavSearch u8 starSpriteIds[3]; u8 ownedIconSpriteId; u8 exclamationSpriteId; + u32 startingTime; u8 hiddenSearch:1; u8 isHiddenMon:1; u8 unk:6; @@ -155,11 +156,10 @@ static u8 DexNavPickTile(enum EncounterType environment, u8 xSize, u8 ySize, boo static void DexNavProximityUpdate(void); static void DexNavDrawIcons(void); static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel); -static void Task_DexNavSearch(u8 taskId); -static void EndDexNavSearchSetupScript(const u8 *script, u8 taskId); // HIDDEN MONS static void DexNavDrawHiddenIcons(void); static void DrawHiddenSearchWindow(u8 width); +static void RevealHiddenMon(void); //// Const Data // gui image data @@ -818,16 +818,8 @@ static u8 GetSearchLevel(u16 species) return searchLevel; } -#define tProximity data[0] -#define tFrameCount data[1] -#define tSpecies data[2] -#define tEnvironment data[3] -#define tRevealed data[4] - -static void Task_SetUpDexNavSearch(u8 taskId) +static void SetUpDexNavSearch(void) { - struct Task *task = &gTasks[taskId]; - u16 species = sDexNavSearchDataPtr->species; u8 searchLevel = GetSearchLevel(species); @@ -859,34 +851,29 @@ static void Task_SetUpDexNavSearch(u8 taskId) DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, searchLevel); } - FlagSet(DN_FLAG_SEARCHING); gPlayerAvatar.creeping = TRUE; //initialize as true in case mon appears beside you - task->tProximity = gSprites[gPlayerAvatar.spriteId].x; - task->tFrameCount = 0; - task->func = Task_DexNavSearch; + sDexNavSearchDataPtr->proximity = gSprites[gPlayerAvatar.spriteId].x; + sDexNavSearchDataPtr->startingTime = gMain.vblankCounter1; IncrementGameStat(GAME_STAT_DEXNAV_SCANNED); } -static void DexNavSearchBail(u8 taskId, const u8 *script) +static void DexNavSearchBail(const u8 *script) { TRY_FREE_AND_SET_NULL(sDexNavSearchDataPtr); + FlagClear(DN_FLAG_SEARCHING); FreeMonIconPalettes(); ScriptContext_SetupScript(script); - DestroyTask(taskId); } -static void Task_InitDexNavSearch(u8 taskId) +static bool8 InitDexNavSearch(u32 species, u32 environment) { - struct Task *task = &gTasks[taskId]; - u16 species = task->tSpecies; - u8 environment = task->tEnvironment; - sDexNavSearchDataPtr = AllocZeroed(sizeof(struct DexNavSearch)); if (sDexNavSearchDataPtr == NULL) { - DexNavSearchBail(taskId, EventScript_NotFoundNearby); - return; + DexNavSearchBail(EventScript_NotFoundNearby); + return TRUE; } + FlagSet(DN_FLAG_SEARCHING); // assign non-objects to struct sDexNavSearchDataPtr->species = species; @@ -896,19 +883,19 @@ static void Task_InitDexNavSearch(u8 taskId) if (GetFlashLevel() > 0) { - DexNavSearchBail(taskId, EventScript_TooDark); - return; + DexNavSearchBail(EventScript_TooDark); + return TRUE; } if (sDexNavSearchDataPtr->monLevel == MON_LEVEL_NONEXISTENT || !TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 12, 12, FALSE)) { - DexNavSearchBail(taskId, EventScript_NotFoundNearby); - return; + DexNavSearchBail(EventScript_NotFoundNearby); + return TRUE; } sDexNavSearchDataPtr->hiddenSearch = FALSE; - task->tRevealed = TRUE; //search window revealed - task->func = Task_SetUpDexNavSearch; + SetUpDexNavSearch(); + return FALSE; } static void DexNavDrawPotentialStars(u8 potential, u8 *dst) @@ -977,36 +964,50 @@ static void DexNavDrawIcons(void) ///////////////////// //// SEARCH TASK //// ///////////////////// -bool8 TryStartDexNavSearch(void) +static void RevealHiddenSearch(void) +{ + PlaySE(SE_DEX_SEARCH); + ClearStdWindowAndFrameToTransparent(sDexNavSearchDataPtr->windowId, FALSE); + CopyWindowToVram(sDexNavSearchDataPtr->windowId, 3); + RemoveWindow(sDexNavSearchDataPtr->windowId); + DestroySprite(&gSprites[sDexNavSearchDataPtr->iconSpriteId]); + sDexNavSearchDataPtr->hiddenSearch = FALSE; //now its a regular dexnav search + RevealHiddenMon(); +} + +bool32 TryStartDexNavSearch(void) { - u8 taskId; u16 val = VarGet(DN_VAR_SPECIES); + if (FlagGet(DN_FLAG_SEARCHING) && sDexNavSearchDataPtr->hiddenSearch) + { + RevealHiddenSearch(); + return FALSE; + } + if (FlagGet(DN_FLAG_SEARCHING) || (val & DEXNAV_MASK_SPECIES) == SPECIES_NONE) return FALSE; HideMapNamePopUpWindow(); ChangeBgY_ScreenOff(0, 0, 0); - taskId = CreateTask(Task_InitDexNavSearch, 0); - gTasks[taskId].tSpecies = val & DEXNAV_MASK_SPECIES; - gTasks[taskId].tEnvironment = val >> 14; PlaySE(SE_DEX_SEARCH); - return FALSE; //we dont actually want to enable the script context + return InitDexNavSearch(val & DEXNAV_MASK_SPECIES, val >> 14); } -void EndDexNavSearch(u8 taskId) +void EndDexNavSearch(void) { - FlagClear(DN_FLAG_SEARCHING); - DestroyTask(taskId); + if (!FlagGet(DN_FLAG_SEARCHING)) + return; RemoveDexNavWindowAndGfx(); FieldEffectStop(&gSprites[sDexNavSearchDataPtr->fldEffSpriteId], sDexNavSearchDataPtr->fldEffId); - Free(sDexNavSearchDataPtr); + FREE_AND_SET_NULL(sDexNavSearchDataPtr); + FlagClear(DN_FLAG_SEARCHING); } -static void EndDexNavSearchSetupScript(const u8 *script, u8 taskId) +static void EndDexNavSearchSetupScript(const u8 *script) { gSaveBlock3Ptr->dexNavChain = 0; //reset chain - EndDexNavSearch(taskId); + EndDexNavSearch(); ScriptContext_SetupScript(script); } @@ -1020,9 +1021,8 @@ static u8 GetMovementProximityBySearchLevel(void) return 4; } -static void Task_RevealHiddenMon(u8 taskId) +static void RevealHiddenMon(void) { - struct Task *task = &gTasks[taskId]; u16 species = sDexNavSearchDataPtr->species; // remove owned icon if it exists @@ -1059,53 +1059,68 @@ static void Task_RevealHiddenMon(u8 taskId) DrawDexNavSearchMonIcon(species, &sDexNavSearchDataPtr->iconSpriteId, GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)); } + sDexNavSearchDataPtr->startingTime = gMain.vblankCounter1; DexNavUpdateDirectionArrow(); - task->func = Task_DexNavSearch; - task->tFrameCount = 0; //restart search clock } -static void Task_DexNavSearch(u8 taskId) +bool32 OnStep_DexNavSearch(void) { - struct Task *task = &gTasks[taskId]; + if (!FlagGet(DN_FLAG_SEARCHING)) + return FALSE; + + u32 frameCount = gMain.vblankCounter1 - sDexNavSearchDataPtr->startingTime; + DexNavProximityUpdate(); + if (!sDexNavSearchDataPtr->hiddenSearch) //update search window info only if revealed mon + DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, sDexNavSearchDataPtr->searchLevel); if (sDexNavSearchDataPtr->proximity > MAX_PROXIMITY) { // out of range - if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed) - EndDexNavSearch(taskId); + if (sDexNavSearchDataPtr->hiddenSearch) + { + EndDexNavSearch(); + return FALSE; + } else - EndDexNavSearchSetupScript(EventScript_LostSignal, taskId); - return; + { + EndDexNavSearchSetupScript(EventScript_LostSignal); + return TRUE; + } } - if (sDexNavSearchDataPtr->proximity <= CREEPING_PROXIMITY && !gPlayerAvatar.creeping && task->tFrameCount > 60) + if (sDexNavSearchDataPtr->proximity <= CREEPING_PROXIMITY && !gPlayerAvatar.creeping && frameCount > 60) { //should be creeping but player walks normally - if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed) - EndDexNavSearch(taskId); + if (sDexNavSearchDataPtr->hiddenSearch) + { + EndDexNavSearch(); + return FALSE; + } else - EndDexNavSearchSetupScript(EventScript_MovedTooFast, taskId); - return; + { + EndDexNavSearchSetupScript(EventScript_MovedTooFast); + return TRUE; + } } if (sDexNavSearchDataPtr->proximity <= SNEAKING_PROXIMITY && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH | PLAYER_AVATAR_FLAG_BIKE)) { // running/biking too close //always do event script, even if player hasn't revealed a hidden mon. It's assumed they would be creeping towards it - EndDexNavSearchSetupScript(EventScript_MovedTooFast, taskId); - return; + EndDexNavSearchSetupScript(EventScript_MovedTooFast); + return TRUE; } - if (ArePlayerFieldControlsLocked() == TRUE) - { // check if script just executed - EndDexNavSearch(taskId); - return; - } - - if (gTasks[taskId].tFrameCount > DEXNAV_TIMEOUT * 60) + if (frameCount > DEXNAV_TIMEOUT * 60) { // player took too long - if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed) - EndDexNavSearch(taskId); + if (sDexNavSearchDataPtr->hiddenSearch) + { + EndDexNavSearch(); + return FALSE; + } else - EndDexNavSearchSetupScript(EventScript_PokemonGotAway, taskId); - return; + { + EndDexNavSearchSetupScript(EventScript_PokemonGotAway); + return TRUE; + } + return FALSE; } if (sDexNavSearchDataPtr->proximity < 1) @@ -1114,54 +1129,34 @@ static void Task_DexNavSearch(u8 taskId) CreateDexNavWildMon(sDexNavSearchDataPtr->species, sDexNavSearchDataPtr->potential, sDexNavSearchDataPtr->monLevel, sDexNavSearchDataPtr->abilityNum, sDexNavSearchDataPtr->heldItem, sDexNavSearchDataPtr->moves); - FlagClear(DN_FLAG_SEARCHING); ScriptContext_SetupScript(EventScript_StartDexNavBattle); - Free(sDexNavSearchDataPtr); - DestroyTask(taskId); - return; + FREE_AND_SET_NULL(sDexNavSearchDataPtr); + FlagClear(DN_FLAG_SEARCHING); + return TRUE; } - if (sDexNavSearchDataPtr->hiddenSearch && !task->tRevealed && - (JOY_NEW(R_BUTTON) || (sDexNavSearchDataPtr->proximity < CREEPING_PROXIMITY))) + if (sDexNavSearchDataPtr->hiddenSearch && sDexNavSearchDataPtr->proximity < CREEPING_PROXIMITY) { - PlaySE(SE_DEX_SEARCH); - ClearStdWindowAndFrameToTransparent(sDexNavSearchDataPtr->windowId, FALSE); - CopyWindowToVram(sDexNavSearchDataPtr->windowId, 3); - RemoveWindow(sDexNavSearchDataPtr->windowId); - DestroySprite(&gSprites[sDexNavSearchDataPtr->iconSpriteId]); - task->tRevealed = TRUE; //regular dexnav search - //sDexNavSearchDataPtr->hiddenSearch = FALSE; //now its a regular dexnav search - task->func = Task_RevealHiddenMon; - return; + RevealHiddenSearch(); + return FALSE; } //Caves and water the pokemon moves around if ((sDexNavSearchDataPtr->environment == ENCOUNTER_TYPE_WATER || GetCurrentMapType() == MAP_TYPE_UNDERGROUND) && sDexNavSearchDataPtr->proximity < GetMovementProximityBySearchLevel() && sDexNavSearchDataPtr->movementCount < 2 - && task->tRevealed) + && !sDexNavSearchDataPtr->hiddenSearch) { FieldEffectStop(&gSprites[sDexNavSearchDataPtr->fldEffSpriteId], sDexNavSearchDataPtr->fldEffId); if (!TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 10, 10, TRUE)) { - EndDexNavSearchSetupScript(EventScript_PokemonGotAway, taskId); - return; + EndDexNavSearchSetupScript(EventScript_PokemonGotAway); + return TRUE; } sDexNavSearchDataPtr->movementCount++; } - - DexNavProximityUpdate(); - if (task->tProximity != sDexNavSearchDataPtr->proximity) - { - //player has moved - if (task->tRevealed) //update search window info only if hidden mon has been revealed (always true for search mode) - DexNavUpdateSearchWindow(sDexNavSearchDataPtr->proximity, sDexNavSearchDataPtr->searchLevel); - - task->tProximity = sDexNavSearchDataPtr->proximity; - } - - task->tFrameCount++; + return FALSE; } static void DexNavUpdateSearchWindow(u8 proximity, u8 searchLevel) @@ -1864,14 +1859,10 @@ static void DexNavGuiFreeResources(void) static void CB1_InitDexNavSearch(void) { - u8 taskId; - if (!gPaletteFade.active && !ArePlayerFieldControlsLocked() && gMain.callback2 == CB2_Overworld) { SetMainCallback1(CB1_Overworld); - taskId = CreateTask(Task_InitDexNavSearch, 0); - gTasks[taskId].tSpecies = gSpecialVar_0x8000; - gTasks[taskId].tEnvironment = gSpecialVar_0x8001; + InitDexNavSearch(gSpecialVar_0x8000, gSpecialVar_0x8001); } } @@ -2232,6 +2223,9 @@ static void CreateTypeIconSprites(void) } } +#define tSpecies data[2] +#define tEnvironment data[3] + static bool8 DexNav_DoGfxSetup(void) { u8 taskId; @@ -2508,7 +2502,7 @@ static void Task_DexNavMain(u8 taskId) ///////////////////////// //// HIDDEN POKEMON ///// ///////////////////////// -bool8 TryFindHiddenPokemon(void) +bool32 TryFindHiddenPokemon(void) { u16 *stepPtr = GetVarPointer(DN_VAR_STEP_COUNTER); @@ -2531,7 +2525,6 @@ bool8 TryFindHiddenPokemon(void) u8 index; u16 species; enum EncounterType environment; - u8 taskId; enum TimeOfDay timeOfDay = GetTimeOfDayForEncounters(headerId, WILD_AREA_HIDDEN); const struct WildPokemonInfo *hiddenMonsInfo = gWildMonHeaders[headerId].encounterTypes[timeOfDay].hiddenMonsInfo; @@ -2596,7 +2589,7 @@ bool8 TryFindHiddenPokemon(void) return FALSE; sDexNavSearchDataPtr = AllocZeroed(sizeof(struct DexNavSearch)); - + FlagSet(DN_FLAG_SEARCHING); // init search data sDexNavSearchDataPtr->isHiddenMon = isHiddenMon; sDexNavSearchDataPtr->species = species; @@ -2605,13 +2598,18 @@ bool8 TryFindHiddenPokemon(void) sDexNavSearchDataPtr->monLevel = DexNavTryGenerateMonLevel(species, environment); if (sDexNavSearchDataPtr->monLevel == MON_LEVEL_NONEXISTENT) { - Free(sDexNavSearchDataPtr); + FREE_AND_SET_NULL(sDexNavSearchDataPtr); + FlagClear(DN_FLAG_SEARCHING); return FALSE; } // find tile for hidden mon and start effect if possible if (!TryStartHiddenMonFieldEffect(sDexNavSearchDataPtr->environment, 8, 8, TRUE)) + { + FREE_AND_SET_NULL(sDexNavSearchDataPtr); + FlagClear(DN_FLAG_SEARCHING); return FALSE; + } // exclamation mark over player gFieldEffectArguments[0] = gSaveBlock1Ptr->pos.x; @@ -2622,10 +2620,7 @@ bool8 TryFindHiddenPokemon(void) FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON); PlayCry_Script(species, 0); - taskId = CreateTask(Task_SetUpDexNavSearch, 0); - gTasks[taskId].tSpecies = sDexNavSearchDataPtr->species; - gTasks[taskId].tEnvironment = sDexNavSearchDataPtr->environment; - gTasks[taskId].tRevealed = FALSE; + SetUpDexNavSearch(); HideMapNamePopUpWindow(); ChangeBgY_ScreenOff(0, 0, 0); return FALSE; // we dont actually want to enable the script context or the game will freeze @@ -2699,7 +2694,7 @@ void ResetDexNavSearch(void) gSaveBlock3Ptr->dexNavChain = 0; //reset dex nav chaining on new map VarSet(DN_VAR_STEP_COUNTER, 0); //reset hidden pokemon step counter if (FlagGet(DN_FLAG_SEARCHING)) - EndDexNavSearch(FindTaskIdByFunc(Task_DexNavSearch)); //moving to new map ends dexnav search + EndDexNavSearch(); //moving to new map ends dexnav search } void IncrementDexNavChain(void) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index f35c349fc6..d3272d33ae 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -119,7 +119,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) input->pressedAButton = TRUE; if (newKeys & B_BUTTON) input->pressedBButton = TRUE; - if (newKeys & R_BUTTON && !FlagGet(DN_FLAG_SEARCHING)) + if (newKeys & R_BUTTON) input->pressedRButton = TRUE; } @@ -618,6 +618,8 @@ static bool8 TryStartStepBasedScript(struct MapPosition *position, u16 metatileB return TRUE; if (UpdateRepelCounter() == TRUE) return TRUE; + if (OnStep_DexNavSearch()) + return TRUE; return FALSE; } diff --git a/src/script.c b/src/script.c index 3a0c7c7afd..03fe4bb919 100644 --- a/src/script.c +++ b/src/script.c @@ -10,6 +10,8 @@ #include "constants/map_scripts.h" #include "field_message_box.h" +#include "dexnav.h" + #define RAM_SCRIPT_MAGIC 51 enum { @@ -199,6 +201,7 @@ u32 ScriptPeekWord(struct ScriptContext *ctx) void LockPlayerFieldControls(void) { sLockFieldControls = TRUE; + EndDexNavSearch(); } void UnlockPlayerFieldControls(void) From 64d40d3c1464011d8642d280b622f3e7fa27c5d3 Mon Sep 17 00:00:00 2001 From: Hedara Date: Fri, 2 Jan 2026 10:41:18 +0100 Subject: [PATCH 24/54] Expansion 1.14.2 release --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 3 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 3 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 3 +- README.md | 2 +- docs/SUMMARY.md | 1 + docs/changelogs/1.14.x/1.14.2.md | 209 ++++++++++++++++++ include/constants/expansion.h | 4 +- 7 files changed, 219 insertions(+), 6 deletions(-) create mode 100644 docs/changelogs/1.14.x/1.14.2.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 2f25421ea0..a8e9c9326a 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -43,9 +43,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.14.1 (Latest release) + - 1.14.2 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.14.1 - 1.14.0 - 1.13.4 - 1.13.3 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index b0ee167021..e6762925b4 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -43,9 +43,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.14.1 (Latest release) + - 1.14.2 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.14.1 - 1.14.0 - 1.13.4 - 1.13.3 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 4dcb2b3093..8fa4e94564 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -43,9 +43,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using? options: - - 1.14.1 (Latest release) + - 1.14.2 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.14.1 - 1.14.0 - 1.13.4 - 1.13.3 diff --git a/README.md b/README.md index 8094c29e85..c74b22fa29 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you use **`pokeemerald-expansion`**, please credit **RHH (Rom Hacking Hideout)**. Optionally, include the version number for clarity. ``` -Based off RHH's pokeemerald-expansion 1.14.1 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.14.2 https://github.com/rh-hideout/pokeemerald-expansion/ ``` Please consider [crediting all contributors](CREDITS.md) involved in the project! diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index e5835ea07b..ebf3e7727b 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -44,6 +44,7 @@ - [Vs. Seeker](tutorials/vs_seeker.md) - [Changelog](./CHANGELOG.md) - [1.14.x]() + - [Version 1.14.2](changelogs/1.14.x/1.14.2.md) - [Version 1.14.1](changelogs/1.14.x/1.14.1.md) - [Version 1.14.0](changelogs/1.14.x/1.14.0.md) - [1.13.x]() diff --git a/docs/changelogs/1.14.x/1.14.2.md b/docs/changelogs/1.14.x/1.14.2.md new file mode 100644 index 0000000000..e4807b88cd --- /dev/null +++ b/docs/changelogs/1.14.x/1.14.2.md @@ -0,0 +1,209 @@ +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.14.2 +`. +``` + +## 🌋 *REFACTORS* 🌋 +📜 = Uses a migration script. +* Renamed Config Test system to more general names by @AsparagusEduardo in [#7283](https://github.com/rh-hideout/pokeemerald-expansion/pull/7283) + +## 🧬 General 🧬 +### Changed +* Fix docs not compiling by @hedara90 in [#8407](https://github.com/rh-hideout/pokeemerald-expansion/pull/8407) +* Update mdbook to v0.5.1 by @rayrobdod in [#8437](https://github.com/rh-hideout/pokeemerald-expansion/pull/8437) +* Add a ci step that checks that documentation md files are mentioned in `docs/SUMMARY.md` by @rayrobdod in [#8439](https://github.com/rh-hideout/pokeemerald-expansion/pull/8439) +* Fix `GEN_6_ORAS` definition by @AsparagusEduardo in [#8537](https://github.com/rh-hideout/pokeemerald-expansion/pull/8537) +* Add different Poke Balls to more Trainers by @amiosi in [#8467](https://github.com/rh-hideout/pokeemerald-expansion/pull/8467) +* Remove another unused deoxys function by @FosterProgramming in [#8576](https://github.com/rh-hideout/pokeemerald-expansion/pull/8576) +* Gorilla Tactics and Test typos fix by @bassforte123 in [#8653](https://github.com/rh-hideout/pokeemerald-expansion/pull/8653) +* Use release instead of LTO in CI by @hedara90 in [#8706](https://github.com/rh-hideout/pokeemerald-expansion/pull/8706) + +### Fixed +* Fix merge error that broke some hgss palette by @FosterProgramming in [#8411](https://github.com/rh-hideout/pokeemerald-expansion/pull/8411) +* Make TRUE and 1 behave the same in config/species_enabled.h by @hedara90 in [#8421](https://github.com/rh-hideout/pokeemerald-expansion/pull/8421) +* Do not add padding to end of smol file when smol is natually word-sized by @rayrobdod in [#8522](https://github.com/rh-hideout/pokeemerald-expansion/pull/8522) +* Align gSpecialVars by @Stevebel in [#8541](https://github.com/rh-hideout/pokeemerald-expansion/pull/8541) +* Fix Safari and Wally backsprites when reshowing battle screen by @AsparagusEduardo in [#8561](https://github.com/rh-hideout/pokeemerald-expansion/pull/8561) +* Fix party pool oob by @hedara90 in [#8581](https://github.com/rh-hideout/pokeemerald-expansion/pull/8581) +* Fix progbits flags for iwram asm functions by @DizzyEggg in [#8627](https://github.com/rh-hideout/pokeemerald-expansion/pull/8627) + +## 🗺️ Overworld 🗺️ +### Fixed +* Fix bug with enterCode default value by @FosterProgramming in [#8438](https://github.com/rh-hideout/pokeemerald-expansion/pull/8438) +* Free the allocated buffer before the second decompression call (hopefully helps) by @FosterProgramming in [#8301](https://github.com/rh-hideout/pokeemerald-expansion/pull/8301) +* Fix truck fade being cancelled by @FosterProgramming in [#8617](https://github.com/rh-hideout/pokeemerald-expansion/pull/8617) +* Refactor dexnav to not use overworld task by @FosterProgramming in [#8602](https://github.com/rh-hideout/pokeemerald-expansion/pull/8602) + +## 🐉 Pokémon 🐉 +### Changed +* GBA Asset Fixes by @amiosi in [#8382](https://github.com/rh-hideout/pokeemerald-expansion/pull/8382) +* Fix Flabébé and Floette overworld sprites by @estellarc in [#8511](https://github.com/rh-hideout/pokeemerald-expansion/pull/8511) +* Fix Naclstack and Garganacl shadows by @kittenchilly in [#8698](https://github.com/rh-hideout/pokeemerald-expansion/pull/8698) + +### Fixed +* Fix Summary screen lag with move relearner when there's a lot of TMs by @PCG06 in [#8503](https://github.com/rh-hideout/pokeemerald-expansion/pull/8503) +* Small fix that prevented TM relearner if `P_ENABLE_ALL_TM_MOVES` was `TRUE` by @PCG06 in [#8525](https://github.com/rh-hideout/pokeemerald-expansion/pull/8525) +* Re-colored Gliscor's anim_front.png by @DaniRainbow in [#8341](https://github.com/rh-hideout/pokeemerald-expansion/pull/8341) +* Allow Floette Eternal to mega evolve by @PhallenTree in [#8558](https://github.com/rh-hideout/pokeemerald-expansion/pull/8558) +* Redraw Gurdurr's overworld sprite by @artsquirrelb in [#8625](https://github.com/rh-hideout/pokeemerald-expansion/pull/8625) +* Expansion OW sprites fix by @artsquirrelb in [#8633](https://github.com/rh-hideout/pokeemerald-expansion/pull/8633) +* Fix the game not building with OW_POKEMON_OBJECT_EVENTS disabled by @kittenchilly in [#8654](https://github.com/rh-hideout/pokeemerald-expansion/pull/8654) +* Fix the sprite visualizer not showing asymmetrical follower sprites by @kittenchilly in [#8643](https://github.com/rh-hideout/pokeemerald-expansion/pull/8643) +* Fixes Kingambit evolution conditions by @PhallenTree in [#8689](https://github.com/rh-hideout/pokeemerald-expansion/pull/8689) + +## ⚔️ Battle General ⚔️ +### Changed +* Generational Move Changes by @amiosi in [#8405](https://github.com/rh-hideout/pokeemerald-expansion/pull/8405) +* Fix Lunar Dance not checking PP by @AsparagusEduardo in [#8364](https://github.com/rh-hideout/pokeemerald-expansion/pull/8364) + - Added `EFFECT_LUNAR_DANCE`, which is the same as `EFFECT_HEALING_WISH` but also heals PP. +* Fixes Instruct's message by @PhallenTree in [#8543](https://github.com/rh-hideout/pokeemerald-expansion/pull/8543) +* Adds tests for Beak Blast not burning when the target is protected by @PhallenTree in [#8713](https://github.com/rh-hideout/pokeemerald-expansion/pull/8713) + +### Fixed +* Multiple bugfixes (mostly Dancer/called moves) by @PhallenTree in [#8401](https://github.com/rh-hideout/pokeemerald-expansion/pull/8401) +* Fix Costar not copying partner's critical hit boosts by @moostoet in [#8386](https://github.com/rh-hideout/pokeemerald-expansion/pull/8386) +* Fix transform tint applying to every from change on reload by @FosterProgramming in [#8417](https://github.com/rh-hideout/pokeemerald-expansion/pull/8417) +* Fix illusion not breaking properly when behind substitute by @FosterProgramming in [#8423](https://github.com/rh-hideout/pokeemerald-expansion/pull/8423) +* Fix substitute/defog interactions by @FosterProgramming in [#8418](https://github.com/rh-hideout/pokeemerald-expansion/pull/8418) +* Fixes Wind Power/Electromorphosis potentially boosting 2 electric attacks by @PhallenTree in [#8431](https://github.com/rh-hideout/pokeemerald-expansion/pull/8431) +* Add missing breakable flags by @AlexOn1ine in [#8454](https://github.com/rh-hideout/pokeemerald-expansion/pull/8454) +* Adds missing cases for Revenge and Assurance doubling power by @AlexOn1ine in [#8453](https://github.com/rh-hideout/pokeemerald-expansion/pull/8453) +* Fix potential issue when destiny knot fail after proccing from cute charm by @FosterProgramming in [#8459](https://github.com/rh-hideout/pokeemerald-expansion/pull/8459) +* Fix bug when changing forms multiple times by @FosterProgramming in [#8458](https://github.com/rh-hideout/pokeemerald-expansion/pull/8458) +* Fix gimmick icon not appearing correctly in 1v2 by @FosterProgramming in [#8474](https://github.com/rh-hideout/pokeemerald-expansion/pull/8474) +* Give dead mons priority over eggs when assigning battlers by @FosterProgramming in [#8473](https://github.com/rh-hideout/pokeemerald-expansion/pull/8473) +* Environment Fixes by @amiosi in [#8471](https://github.com/rh-hideout/pokeemerald-expansion/pull/8471) +* Fixes Disguise + Counter/Mirror Coat/Metal Burst + Disguise tests by @PhallenTree in [#8495](https://github.com/rh-hideout/pokeemerald-expansion/pull/8495) +* Fix battler side status check in CalcCritChanceStage by @AlexOn1ine in [#8524](https://github.com/rh-hideout/pokeemerald-expansion/pull/8524) +* Fix AI handling of Trick/Bestow and add comprehensive tests by @Cle-bit in [#8516](https://github.com/rh-hideout/pokeemerald-expansion/pull/8516) +* Fix incorrect "last to move" check for Analytic, Snatch, and Magic Coat by @moostoet in [#8536](https://github.com/rh-hideout/pokeemerald-expansion/pull/8536) +* Fix species gfx change in link battles by @AsparagusEduardo in [#8552](https://github.com/rh-hideout/pokeemerald-expansion/pull/8552) +* Fixes Water Sport/Mud Sport when B_SPORT_TURNS < GEN_6 by @PhallenTree in [#8613](https://github.com/rh-hideout/pokeemerald-expansion/pull/8613) +* fix poisons absorbing toxic spikes when fainting from other hazards by @spindrift64 in [#8644](https://github.com/rh-hideout/pokeemerald-expansion/pull/8644) +* Fix incorrectly applied change in atkcanceler by @AlexOn1ine in [#8641](https://github.com/rh-hideout/pokeemerald-expansion/pull/8641) +* Fix transform shininess in link battles by @AlexOn1ine in [#8554](https://github.com/rh-hideout/pokeemerald-expansion/pull/8554) +* Fix Mimic trying to access MOVE_UNAVAILABLE in an incredibly small amount of possible scenarios by @hedara90 in [#8685](https://github.com/rh-hideout/pokeemerald-expansion/pull/8685) +* Fix stat access for stats other than Attack in BS_GetStatValue by @hedara90 in [#8684](https://github.com/rh-hideout/pokeemerald-expansion/pull/8684) +* Add tests for abilities that affect weather by @Cle-bit in [#8709](https://github.com/rh-hideout/pokeemerald-expansion/pull/8709) + +## 🤹 Moves 🤹 +### Fixed +* Fixes incorrect battler used in STRINGID_USEDINSTRUCTEDMOVE by @grintoul1 in [#8704](https://github.com/rh-hideout/pokeemerald-expansion/pull/8704) + +## 🎭 Abilities 🎭 +### Fixed +* Fix some bugs related to abilities by @Cle-bit in [#8695](https://github.com/rh-hideout/pokeemerald-expansion/pull/8695) + +## 🤖 Battle AI 🤖 +### Added +* Respect beneficial status in healing moves and add tests by @Cle-bit in [#8478](https://github.com/rh-hideout/pokeemerald-expansion/pull/8478) + +### Fixed +* fix (setup): ignore self-speed drop when checking speed control on KO threshold change by @ghostyboyy97 in [#8409](https://github.com/rh-hideout/pokeemerald-expansion/pull/8409) + - AI now correctly sees that moves like Hammer Arm are self-targeted speed drops on the player when evaluating speed control in setup scenarios. +* fix (hazards): ghosty used rapid spin! ghosty blew the semicolon away! by @ghostyboyy97 in [#8433](https://github.com/rh-hideout/pokeemerald-expansion/pull/8433) + - The AI will now correctly see if the player can prevent hazards on moves with a secondary Stealth Rock effect. +* Fix incorrect Spikes reference in switch AI by @Pawkkie in [#8510](https://github.com/rh-hideout/pokeemerald-expansion/pull/8510) +* Fix AI handling of Trick/Bestow and add comprehensive tests by @Cle-bit in [#8516](https://github.com/rh-hideout/pokeemerald-expansion/pull/8516) +* Fix: AI should not use Helping Hand on a partner with ABILITY_GOOD_AS_GOLD by @Cle-bit in [#8560](https://github.com/rh-hideout/pokeemerald-expansion/pull/8560) +* Fixing crash from Last Resort with Normalium Z in certain damage thresholds by @surskitty in [#8583](https://github.com/rh-hideout/pokeemerald-expansion/pull/8583) +* fix (scoring): AI_IsMoveEffectInPlus - AI should not see secondary effect of Sheer Force boosted moves as beneficial by @ghostyboyy97 in [#8579](https://github.com/rh-hideout/pokeemerald-expansion/pull/8579) + - The AI is now aware if its positive move effects are removed by Sheer Force when evaluating both guaranteed and secondary effects. +* Fix type check in Magnet Rise AI by @grintoul1 in [#8609](https://github.com/rh-hideout/pokeemerald-expansion/pull/8609) +* Fix Commander Dondozo Switching by @Pawkkie in [#8624](https://github.com/rh-hideout/pokeemerald-expansion/pull/8624) +* Prevent AI seeing Pollen Puff damage on its ally by @grintoul1 in [#8693](https://github.com/rh-hideout/pokeemerald-expansion/pull/8693) + +## 🧹 Other Cleanup 🧹 +* Include FEATURES.md in documentation by @AsparagusEduardo in [#8464](https://github.com/rh-hideout/pokeemerald-expansion/pull/8464) +* Fix Lunar Dance not checking PP by @AsparagusEduardo in [#8364](https://github.com/rh-hideout/pokeemerald-expansion/pull/8364) + - Added `EFFECT_LUNAR_DANCE`, which is the same as `EFFECT_HEALING_WISH` but also heals PP. +* Fixes Instruct's message by @PhallenTree in [#8543](https://github.com/rh-hideout/pokeemerald-expansion/pull/8543) +* Fix `GEN_6_ORAS` definition by @AsparagusEduardo in [#8537](https://github.com/rh-hideout/pokeemerald-expansion/pull/8537) +* Automatically fix TM numbers over 100 in Bag menu by @AsparagusEduardo in [#8531](https://github.com/rh-hideout/pokeemerald-expansion/pull/8531) +* Add different Poke Balls to more Trainers by @amiosi in [#8467](https://github.com/rh-hideout/pokeemerald-expansion/pull/8467) +* Remove another unused deoxys function by @FosterProgramming in [#8576](https://github.com/rh-hideout/pokeemerald-expansion/pull/8576) +* Update maintainer list by @pkmnsnfrn in [#8638](https://github.com/rh-hideout/pokeemerald-expansion/pull/8638) + +## 🧪 Test Runner 🧪 +### Changed +* Renamed Config Test system to more general names by @AsparagusEduardo in [#7283](https://github.com/rh-hideout/pokeemerald-expansion/pull/7283) +* Create missing hold effect test files by @AsparagusEduardo in [#8397](https://github.com/rh-hideout/pokeemerald-expansion/pull/8397) +* `WITH_CONFIG` Refactor by @AsparagusEduardo in [#7584](https://github.com/rh-hideout/pokeemerald-expansion/pull/7584) + - Changed the way configs into the testing system to occupy less memory and make it easier to add more. + - Fixes inconsistency in enum names. + - Starts reserving the memory necessary to allow testing for all configs. +* Add test for lum berry multi status by @FosterProgramming in [#8430](https://github.com/rh-hideout/pokeemerald-expansion/pull/8430) +* Added missing Move Effect TODO tests - Volume G by @AsparagusEduardo in [#8428](https://github.com/rh-hideout/pokeemerald-expansion/pull/8428) +* Fixed KNOWN_FAILING Dire Claw test by @AsparagusEduardo in [#8442](https://github.com/rh-hideout/pokeemerald-expansion/pull/8442) +* Finished Defog tests by @AsparagusEduardo in [#8424](https://github.com/rh-hideout/pokeemerald-expansion/pull/8424) +* Fix move anim tests sometimes leaking tasks by @hedara90 in [#8493](https://github.com/rh-hideout/pokeemerald-expansion/pull/8493) +* Added tests for stat-changing moves by @AsparagusEduardo in [#8278](https://github.com/rh-hideout/pokeemerald-expansion/pull/8278) +* Expanded `B_EXP_CATCH` test by @AsparagusEduardo in [#8527](https://github.com/rh-hideout/pokeemerald-expansion/pull/8527) +* Fixed `AI_GetSwitchinWeather` not considering `CONFIG_SNOW_WARNING` by @AsparagusEduardo in [#8533](https://github.com/rh-hideout/pokeemerald-expansion/pull/8533) +* Expanded `B_SANDSTORM_SPDEF_BOOST` test by @AsparagusEduardo in [#8532](https://github.com/rh-hideout/pokeemerald-expansion/pull/8532) +* `B_SYMBIOSIS_GEMS` tests by @AsparagusEduardo in [#8534](https://github.com/rh-hideout/pokeemerald-expansion/pull/8534) +* Added Ability TODO tests - Volume D by @AsparagusEduardo in [#8538](https://github.com/rh-hideout/pokeemerald-expansion/pull/8538) +* Finished Wish tests by @AsparagusEduardo in [#8530](https://github.com/rh-hideout/pokeemerald-expansion/pull/8530) +* Add SUB_HIT check to tests by @hedara90 in [#8413](https://github.com/rh-hideout/pokeemerald-expansion/pull/8413) +* Added Light Ball tests by @AsparagusEduardo in [#8526](https://github.com/rh-hideout/pokeemerald-expansion/pull/8526) +* Add debug print to show what move failed in Sheer Force tests by @hedara90 in [#8523](https://github.com/rh-hideout/pokeemerald-expansion/pull/8523) +* `B_STURDY` config test by @AsparagusEduardo in [#8565](https://github.com/rh-hideout/pokeemerald-expansion/pull/8565) +* `B_KLUTZ_FLING_INTERACTION` config test by @AsparagusEduardo in [#8568](https://github.com/rh-hideout/pokeemerald-expansion/pull/8568) +* `B_IRON_BALL` config test by @AsparagusEduardo in [#8569](https://github.com/rh-hideout/pokeemerald-expansion/pull/8569) +* `B_SYNCHRONIZE_TOXIC` config test by @AsparagusEduardo in [#8572](https://github.com/rh-hideout/pokeemerald-expansion/pull/8572) +* `B_BURN_DAMAGE` config tests by @AsparagusEduardo in [#8574](https://github.com/rh-hideout/pokeemerald-expansion/pull/8574) +* `B_REDIRECT_ABILITY_IMMUNITY` config tests by @AsparagusEduardo in [#8571](https://github.com/rh-hideout/pokeemerald-expansion/pull/8571) +* `B_UPDATED_CONVERSION_2` config tests by @AsparagusEduardo in [#8573](https://github.com/rh-hideout/pokeemerald-expansion/pull/8573) +* `B_TAILWIND_TURNS` config tests by @AsparagusEduardo in [#8592](https://github.com/rh-hideout/pokeemerald-expansion/pull/8592) +* `B_BINDING_TURNS` config tests by @AsparagusEduardo in [#8595](https://github.com/rh-hideout/pokeemerald-expansion/pull/8595) +* `B_SPORT_DMG_REDUCTION` config tests by @AsparagusEduardo in [#8593](https://github.com/rh-hideout/pokeemerald-expansion/pull/8593) +* Add tests for Intrepid Sword and Dauntless Shield at max stages by @FosterProgramming in [#8610](https://github.com/rh-hideout/pokeemerald-expansion/pull/8610) +* Add some missing tests for heatproof, thick fat and grudge by @izrofid in [#8705](https://github.com/rh-hideout/pokeemerald-expansion/pull/8705) +* Adds tests for Beak Blast not burning when the target is protected by @PhallenTree in [#8713](https://github.com/rh-hideout/pokeemerald-expansion/pull/8713) + +### Fixed +* Fix random function in testing trying to run trials when rng tag is 0/RNG_NONE by @FosterProgramming in [#8460](https://github.com/rh-hideout/pokeemerald-expansion/pull/8460) +* Fix AI handling of Trick/Bestow and add comprehensive tests by @Cle-bit in [#8516](https://github.com/rh-hideout/pokeemerald-expansion/pull/8516) +* Corrects test system Forced Ability handing for multi battles by @grintoul1 in [#8611](https://github.com/rh-hideout/pokeemerald-expansion/pull/8611) +* Fix Status1 icon not being registered for recorded partner in tests by @AsparagusEduardo in [#8520](https://github.com/rh-hideout/pokeemerald-expansion/pull/8520) +* Prevent AI seeing Pollen Puff damage on its ally by @grintoul1 in [#8693](https://github.com/rh-hideout/pokeemerald-expansion/pull/8693) +* Fix some bugs related to abilities by @Cle-bit in [#8695](https://github.com/rh-hideout/pokeemerald-expansion/pull/8695) +* Add tests for abilities that affect weather by @Cle-bit in [#8709](https://github.com/rh-hideout/pokeemerald-expansion/pull/8709) + +## 📚 Documentation 📚 +* Fix docs not compiling by @hedara90 in [#8407](https://github.com/rh-hideout/pokeemerald-expansion/pull/8407) +* Add a ci step that checks that documentation md files are mentioned in `docs/SUMMARY.md` by @rayrobdod in [#8439](https://github.com/rh-hideout/pokeemerald-expansion/pull/8439) +* Include FEATURES.md in documentation by @AsparagusEduardo in [#8464](https://github.com/rh-hideout/pokeemerald-expansion/pull/8464) +* Document magic number in `createspriteontargets` by @AsparagusEduardo in [#8551](https://github.com/rh-hideout/pokeemerald-expansion/pull/8551) +* fix CONTRIBUTING.md by @u8-Salem in [#8577](https://github.com/rh-hideout/pokeemerald-expansion/pull/8577) +* Update maintainer list by @pkmnsnfrn in [#8638](https://github.com/rh-hideout/pokeemerald-expansion/pull/8638) + +## 📦 Branch Synchronisation 📦 +### pret +* 1st of January, 2026 in [#8737](https://github.com/rh-hideout/pokeemerald-expansion/pull/8737) + * Document UpdateLegendaryMarkingColor by @mrgriffin in [pret#2221](https://github.com/pret/pokeemerald/pull/2221) + * Fix some typos by @Jaizu in [pret#2219](https://github.com/pret/pokeemerald/pull/2219) + * Document m4a xcmd_0C by @ShinyDragonHunter in [pret#2218](https://github.com/pret/pokeemerald/pull/2218) + * Fixed pokenav glow issue by @shachar700 in [pret#2215](https://github.com/pret/pokeemerald/pull/2215) + * Added bugfix for missing no weather case in Cmd_weather_get by @Mitsunee in [pret#2203](https://github.com/pret/pokeemerald/pull/2203) + * Label unused functions in siirtc.c, m4a.c & rtc.c with the "UNUSED" attribute by @ShinyDragonHunter in [pret#2171](https://github.com/pret/pokeemerald/pull/2171) + * Add fix for possible crash when decompressing trainer back pics by @GriffinRichards in [pret#2074](https://github.com/pret/pokeemerald/pull/2074) + * Change rangeX and rangeY to u8 in ObjectEvent struct by @NTx86 in [pret#2176](https://github.com/pret/pokeemerald/pull/2176) + * Fix sScrollableMultichoice_ListMenuItem allocation size magic number by @NTx86 in [pret#2177](https://github.com/pret/pokeemerald/pull/2177) + * Name pokemon summary screen remaining unnamed symbols by @FosterProgramming in [pret#2178](https://github.com/pret/pokeemerald/pull/2178) + * Fix FLAG_REGISTERED_WALLY by @mrgriffin in [pret#2201](https://github.com/pret/pokeemerald/pull/2201) + * Display error for invalid hidden item flags by @GriffinRichards in [pret#2214](https://github.com/pret/pokeemerald/pull/2214) + +## New Contributors +* @Stevebel made their first contribution in [#8541](https://github.com/rh-hideout/pokeemerald-expansion/pull/8541) +* @DaniRainbow made their first contribution in [#8341](https://github.com/rh-hideout/pokeemerald-expansion/pull/8341) +* @artsquirrelb made their first contribution in [#8625](https://github.com/rh-hideout/pokeemerald-expansion/pull/8625) +* @izrofid made their first contribution in [#8705](https://github.com/rh-hideout/pokeemerald-expansion/pull/8705) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.14.1...expansion/1.14.2 + + + + diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 36a4d7c89c..77dfa96bd6 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -1,13 +1,13 @@ #ifndef GUARD_CONSTANTS_EXPANSION_H #define GUARD_CONSTANTS_EXPANSION_H -// Last version: 1.14.1 +// Last version: 1.14.2 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 14 #define EXPANSION_VERSION_PATCH 2 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE FALSE +#define EXPANSION_TAGGED_RELEASE TRUE #endif From c09339cc46b8defa6019f21b49b8e526468c222f Mon Sep 17 00:00:00 2001 From: Hedara Date: Fri, 2 Jan 2026 10:45:08 +0100 Subject: [PATCH 25/54] Start of 1.14.3 cycle --- include/constants/expansion.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/constants/expansion.h b/include/constants/expansion.h index 77dfa96bd6..b280aefacc 100644 --- a/include/constants/expansion.h +++ b/include/constants/expansion.h @@ -4,10 +4,10 @@ // Last version: 1.14.2 #define EXPANSION_VERSION_MAJOR 1 #define EXPANSION_VERSION_MINOR 14 -#define EXPANSION_VERSION_PATCH 2 +#define EXPANSION_VERSION_PATCH 3 // FALSE if this this version of Expansion is not a tagged commit, i.e. // it contains unreleased changes. -#define EXPANSION_TAGGED_RELEASE TRUE +#define EXPANSION_TAGGED_RELEASE FALSE #endif From c73da406e1129cf4b279146f76dc542068b32632 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:36:54 +0100 Subject: [PATCH 26/54] add ghoulslash as a contributor for design (#8749) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 3 ++- CREDITS.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c01e94a8fc..1a456738d3 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -57,7 +57,8 @@ "profile": "https://github.com/ghoulslash", "contributions": [ "maintenance", - "code" + "code", + "design" ] }, { diff --git a/CREDITS.md b/CREDITS.md index 98edf01b00..c76e19d169 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -22,7 +22,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Alex
Alex

🚧 💻 Bassoonian
Bassoonian

🚧 💻 DizzyEggg
DizzyEggg

🚧 💻 - ghoulslash
ghoulslash

🚧 💻 + ghoulslash
ghoulslash

🚧 💻 🎨 hedara90
hedara90

🚧 💻 Martin Griffin
Martin Griffin

🚧 💻 From ab49528fadf61a58a9c589952eb837c6446cc2dd Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:38:47 +0100 Subject: [PATCH 27/54] add TheXaman as a contributor for code (#8750) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 1a456738d3..87bd4d4030 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -515,6 +515,15 @@ "contributions": [ "data" ] + }, + { + "login": "TheXaman", + "name": "TheXaman", + "avatar_url": "https://avatars.githubusercontent.com/u/48356183?v=4", + "profile": "https://github.com/TheXaman", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index c76e19d169..612bd31e3e 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -84,6 +84,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Eva
Eva

🎨 amiosi
amiosi

🔣 mrdollsteak
mrdollsteak

🔣 + TheXaman
TheXaman

💻 From 3a1c5c8f0a15d194d18d5215872178d83b0f0cd6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:40:16 +0100 Subject: [PATCH 28/54] add Pyredrid as a contributor for code (#8751) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 3 ++- CREDITS.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 87bd4d4030..5664d755a6 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -376,7 +376,8 @@ "profile": "https://github.com/Pyredrid", "contributions": [ "userTesting", - "maintenance" + "maintenance", + "code" ] }, { diff --git a/CREDITS.md b/CREDITS.md index 612bd31e3e..bbd4eaa345 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -64,7 +64,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Enrico Drago
Enrico Drago

📖 📓 - Pyredrid
Pyredrid

📓 🚧 + Pyredrid
Pyredrid

📓 🚧 💻 mv
mv

💻 🎨 Avara
Avara

🔣 Doesnty
Doesnty

🎨 From 85e2ed385d15a219069d47c66f5d1875cf52b7f6 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:46:09 +0100 Subject: [PATCH 29/54] add ZnogyroP as a contributor for design (#8752) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 5664d755a6..7aa8bb1b11 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -525,6 +525,15 @@ "contributions": [ "code" ] + }, + { + "login": "ZnogyroP", + "name": "ZnogyroP", + "avatar_url": "https://avatars.githubusercontent.com/u/20970593?v=4", + "profile": "https://github.com/ZnogyroP", + "contributions": [ + "design" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index bbd4eaa345..a2a83609c5 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -85,6 +85,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d amiosi
amiosi

🔣 mrdollsteak
mrdollsteak

🔣 TheXaman
TheXaman

💻 + ZnogyroP
ZnogyroP

🎨 From 297ec72580b3c728c994b39543719248ed7d172e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:49:56 +0100 Subject: [PATCH 30/54] add luckytyphlosion as a contributor for code (#8753) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 7aa8bb1b11..36c3666603 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -534,6 +534,15 @@ "contributions": [ "design" ] + }, + { + "login": "luckytyphlosion", + "name": "luckytyphlosion", + "avatar_url": "https://avatars.githubusercontent.com/u/10688458?v=4", + "profile": "https://github.com/luckytyphlosion", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index a2a83609c5..233551bcf6 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -86,6 +86,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d mrdollsteak
mrdollsteak

🔣 TheXaman
TheXaman

💻 ZnogyroP
ZnogyroP

🎨 + luckytyphlosion
luckytyphlosion

💻 From 25634189d1e785f409087a958dd91a65a94d7a19 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:51:22 +0100 Subject: [PATCH 31/54] add ShinyDragonHunter as a contributor for code (#8754) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 36c3666603..360968ec21 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -543,6 +543,15 @@ "contributions": [ "code" ] + }, + { + "login": "ShinyDragonHunter", + "name": "Josh", + "avatar_url": "https://avatars.githubusercontent.com/u/32826900?v=4", + "profile": "https://github.com/ShinyDragonHunter", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index 233551bcf6..4b808e2f1b 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -87,6 +87,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d TheXaman
TheXaman

💻 ZnogyroP
ZnogyroP

🎨 luckytyphlosion
luckytyphlosion

💻 + Josh
Josh

💻 From 09273e7b44aa3503b0fe19783e6c4cd5f37750d2 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 15:54:03 +0100 Subject: [PATCH 32/54] add Gamer2020 as a contributor for code (#8755) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 3 +++ 2 files changed, 12 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 360968ec21..12df149027 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -552,6 +552,15 @@ "contributions": [ "code" ] + }, + { + "login": "Gamer2020", + "name": "Gamer2020", + "avatar_url": "https://avatars.githubusercontent.com/u/6243575?v=4", + "profile": "https://github.com/Gamer2020", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index 4b808e2f1b..ccef84a4f8 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -89,6 +89,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d luckytyphlosion
luckytyphlosion

💻 Josh
Josh

💻 + + Gamer2020
Gamer2020

💻 + From d214d178f305c303002f64132aeee2cf44eafb5f Mon Sep 17 00:00:00 2001 From: FosterProgramming Date: Fri, 2 Jan 2026 15:57:09 +0100 Subject: [PATCH 33/54] Add check to warn of a non-working config setup (#8686) --- include/event_object_movement.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 4ec46709e3..b322c37f46 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -3,6 +3,10 @@ #include "constants/event_object_movement.h" +#if OW_BATTLE_ONLY_FORMS && !OW_POKEMON_OBJECT_EVENTS +#error "OW_POKEMON_OBJECT_EVENTS needs to be TRUE in order for OW_BATTLE_ONLY_FORMS to work." +#endif + #if OW_POKEMON_OBJECT_EVENTS == FALSE && OW_FOLLOWERS_ENABLED == TRUE #error "OW_POKEMON_OBJECT_EVENTS needs to be TRUE in order for OW_FOLLOWERS_ENABLED to work." #endif From e82ed111ba248af861438eded1788ccefbfe3379 Mon Sep 17 00:00:00 2001 From: grintoul <166724814+grintoul1@users.noreply.github.com> Date: Fri, 2 Jan 2026 17:01:43 +0000 Subject: [PATCH 34/54] Misc style and whitespace cleanup (#8681) --- asm/macros/event.inc | 10 +- data/field_effect_scripts.s | 2 +- include/battle.h | 2 +- src/battle_controller_opponent.c | 4 +- src/battle_main.c | 30 ++-- src/battle_script_commands.c | 2 +- src/battle_transition.c | 6 +- src/debug.c | 2 +- src/decompress_asm.s | 10 +- src/follower_npc.c | 14 +- src/mirage_tower.c | 2 +- src/oras_dowse.c | 2 +- src/pokemon_animation.c | 2 +- src/pokemon_summary_screen.c | 2 +- src/trainer_see.c | 2 +- test/battle/ability/aftermath.c | 16 +-- test/battle/ability/anticipation.c | 26 ++-- test/battle/ability/aroma_veil.c | 2 +- test/battle/ability/bad_dreams.c | 36 ++--- test/battle/ability/ball_fetch.c | 7 +- test/battle/ability/battle_bond.c | 26 ++-- test/battle/ability/beads_of_ruin.c | 4 +- test/battle/ability/clear_body.c | 14 +- test/battle/ability/color_change.c | 14 +- test/battle/ability/commander.c | 8 +- test/battle/ability/competitive.c | 2 +- test/battle/ability/contrary.c | 6 +- test/battle/ability/corrosion.c | 2 +- test/battle/ability/cud_chew.c | 4 +- test/battle/ability/dauntless_shield.c | 2 +- test/battle/ability/defeatist.c | 4 +- test/battle/ability/defiant.c | 4 +- test/battle/ability/desolate_land.c | 14 +- test/battle/ability/disguise.c | 2 +- test/battle/ability/electromorphosis.c | 6 +- test/battle/ability/embody_aspect.c | 2 +- test/battle/ability/emergency_exit.c | 36 ++--- test/battle/ability/frisk.c | 20 +-- test/battle/ability/gale_wings.c | 10 +- test/battle/ability/grim_neigh.c | 4 +- test/battle/ability/healer.c | 2 +- test/battle/ability/hospitality.c | 6 +- test/battle/ability/hunger_switch.c | 4 +- test/battle/ability/illusion.c | 14 +- test/battle/ability/innards_out.c | 2 +- test/battle/ability/inner_focus.c | 18 +-- test/battle/ability/intimidate.c | 2 +- test/battle/ability/intrepid_sword.c | 16 +-- test/battle/ability/magic_guard.c | 6 +- test/battle/ability/mimicry.c | 2 +- test/battle/ability/minds_eye.c | 6 +- test/battle/ability/mirror_armor.c | 14 +- test/battle/ability/moody.c | 6 +- test/battle/ability/moxie.c | 4 +- test/battle/ability/mummy.c | 2 +- test/battle/ability/mycelium_might.c | 4 +- test/battle/ability/neutralizing_gas.c | 8 +- test/battle/ability/normalize.c | 6 +- test/battle/ability/opportunist.c | 6 +- test/battle/ability/overcoat.c | 4 +- test/battle/ability/own_tempo.c | 24 ++-- test/battle/ability/poison_heal.c | 4 +- test/battle/ability/poison_puppeteer.c | 2 +- test/battle/ability/poison_touch.c | 2 +- test/battle/ability/prankster.c | 6 +- test/battle/ability/primordial_sea.c | 14 +- test/battle/ability/protosynthesis.c | 8 +- test/battle/ability/purifying_salt.c | 2 +- test/battle/ability/quark_drive.c | 8 +- test/battle/ability/rattled.c | 14 +- test/battle/ability/rivalry.c | 4 +- test/battle/ability/scrappy.c | 18 +-- test/battle/ability/sheer_force.c | 62 ++++---- test/battle/ability/shields_down.c | 2 +- test/battle/ability/stamina.c | 16 +-- test/battle/ability/stench.c | 2 +- test/battle/ability/super_luck.c | 2 +- test/battle/ability/supersweet_syrup.c | 2 +- test/battle/ability/supreme_overlord.c | 4 +- test/battle/ability/sword_of_ruin.c | 4 +- test/battle/ability/tablets_of_ruin.c | 4 +- test/battle/ability/tangling_hair.c | 4 +- test/battle/ability/tera_shell.c | 2 +- test/battle/ability/tera_shift.c | 4 +- test/battle/ability/teraform_zero.c | 18 +-- test/battle/ability/toxic_debris.c | 4 +- test/battle/ability/trace.c | 10 +- test/battle/ability/unburden.c | 8 +- test/battle/ability/unnerve.c | 4 +- test/battle/ability/vessel_of_ruin.c | 4 +- test/battle/ability/wind_power.c | 40 +++--- test/battle/ability/zero_to_hero.c | 4 +- test/battle/ai/ai.c | 24 ++-- test/battle/ai/ai_calc_best_move_score.c | 16 +-- test/battle/ai/ai_check_viability.c | 2 +- test/battle/ai/ai_doubles.c | 61 ++++---- test/battle/ai/ai_flag_attacks_partner.c | 17 +-- test/battle/ai/ai_flag_predict_ability.c | 2 +- test/battle/ai/ai_flag_sequence_switching.c | 2 +- test/battle/ai/ai_multi.c | 36 ++--- test/battle/ai/ai_smart_tera.c | 2 +- test/battle/ai/ai_switching.c | 132 +++++++++--------- test/battle/ai/ai_trytofaint.c | 11 +- test/battle/ai/can_use_all_moves.c | 24 ++-- test/battle/badge_boost.c | 38 ++--- test/battle/battle_message.c | 4 +- test/battle/crit_chance.c | 2 +- test/battle/end_turn_effects.c | 4 +- test/battle/form_change/mega_evolution.c | 6 +- test/battle/form_change/primal_reversion.c | 28 ++-- test/battle/form_change/ultra_burst.c | 4 +- test/battle/gimmick/dynamax.c | 56 ++++---- test/battle/hold_effect/ability_shield.c | 2 +- test/battle/hold_effect/air_balloon.c | 16 +-- test/battle/hold_effect/berserk_gene.c | 6 +- test/battle/hold_effect/booster_energy.c | 46 +++--- test/battle/hold_effect/clear_amulet.c | 10 +- test/battle/hold_effect/cure_status.c | 24 ++-- test/battle/hold_effect/destiny_knot.c | 18 +-- test/battle/hold_effect/eject_pack.c | 8 +- test/battle/hold_effect/gems.c | 8 +- test/battle/hold_effect/iron_ball.c | 4 +- test/battle/hold_effect/metronome.c | 4 +- test/battle/hold_effect/mirror_herb.c | 2 +- test/battle/hold_effect/random_stat_up.c | 2 +- test/battle/hold_effect/red_card.c | 2 +- test/battle/hold_effect/rocky_helmet.c | 2 +- test/battle/hold_effect/safety_goggles.c | 4 +- test/battle/hold_effect/scope_lens.c | 2 +- test/battle/hold_effect/shed_shell.c | 2 +- test/battle/hold_effect/shell_bell.c | 18 +-- test/battle/hold_effect/sticky_barb.c | 2 +- test/battle/hold_effect/terrain_seed.c | 4 +- test/battle/hold_effect/utility_umbrella.c | 4 +- test/battle/hold_effect/white_herb.c | 10 +- test/battle/item_effect/cure_status.c | 26 ++-- .../battle/item_effect/heal_and_cure_status.c | 8 +- test/battle/item_effect/increase_stat.c | 4 +- test/battle/item_effect/revive.c | 12 +- test/battle/move_animations/all_anims.c | 42 +++--- test/battle/move_effect/ally_switch.c | 4 +- test/battle/move_effect/aura_wheel.c | 2 +- test/battle/move_effect/belch.c | 2 +- test/battle/move_effect/belly_drum.c | 2 +- test/battle/move_effect/charge.c | 2 +- test/battle/move_effect/clangorous_soul.c | 6 +- test/battle/move_effect/coaching.c | 4 +- test/battle/move_effect/corrosive_gas.c | 22 +-- test/battle/move_effect/counter.c | 2 +- test/battle/move_effect/court_change.c | 16 +-- test/battle/move_effect/defog.c | 4 +- test/battle/move_effect/destiny_bond.c | 2 +- test/battle/move_effect/doodle.c | 8 +- test/battle/move_effect/dragon_cheer.c | 2 +- test/battle/move_effect/dragon_darts.c | 14 +- test/battle/move_effect/dream_eater.c | 4 +- test/battle/move_effect/embargo.c | 28 ++-- test/battle/move_effect/encore.c | 2 +- test/battle/move_effect/entrainment.c | 4 +- test/battle/move_effect/explosion.c | 4 +- test/battle/move_effect/fillet_away.c | 2 +- test/battle/move_effect/fling.c | 68 ++++----- test/battle/move_effect/flower_shield.c | 2 +- test/battle/move_effect/focus_energy.c | 4 +- test/battle/move_effect/focus_punch.c | 2 +- test/battle/move_effect/future_sight.c | 24 ++-- test/battle/move_effect/gear_up.c | 2 +- test/battle/move_effect/glaive_rush.c | 8 +- test/battle/move_effect/grassy_terrain.c | 4 +- test/battle/move_effect/gravity.c | 2 +- test/battle/move_effect/grudge.c | 4 +- test/battle/move_effect/heal_bell.c | 2 +- test/battle/move_effect/hit_escape.c | 12 +- test/battle/move_effect/hydro_steam.c | 4 +- test/battle/move_effect/knock_off.c | 10 +- test/battle/move_effect/lash_out.c | 2 +- test/battle/move_effect/magnetic_flux.c | 2 +- test/battle/move_effect/max_move.c | 4 - test/battle/move_effect/me_first.c | 2 +- test/battle/move_effect/mirror_coat.c | 2 +- test/battle/move_effect/misty_explosion.c | 4 +- test/battle/move_effect/multi_hit.c | 2 +- test/battle/move_effect/nature_power.c | 2 +- test/battle/move_effect/pledge.c | 2 +- test/battle/move_effect/powder.c | 2 +- test/battle/move_effect/protect.c | 18 +-- test/battle/move_effect/psychic_terrain.c | 8 +- test/battle/move_effect/recoil_if_miss.c | 4 +- test/battle/move_effect/refresh.c | 12 +- test/battle/move_effect/revival_blessing.c | 6 +- test/battle/move_effect/rototiller.c | 2 +- test/battle/move_effect/spicy_extract.c | 2 +- test/battle/move_effect/steal_item.c | 2 +- test/battle/move_effect/sticky_web.c | 42 +++--- test/battle/move_effect/stomping_tantrum.c | 8 +- test/battle/move_effect/take_heart.c | 2 +- test/battle/move_effect/telekinesis.c | 4 +- test/battle/move_effect/toxic_spikes.c | 6 +- test/battle/move_effect/two_turns_attack.c | 8 +- test/battle/move_effect/upper_hand.c | 2 +- test/battle/move_effect/weather_ball.c | 4 +- test/battle/move_effect/wish.c | 4 +- test/battle/move_effect_secondary/bug_bite.c | 2 +- .../battle/move_effect_secondary/ion_deluge.c | 2 +- test/battle/move_effect_secondary/order_up.c | 6 +- test/battle/move_effect_secondary/recharge.c | 8 +- .../move_effect_secondary/remove_status.c | 20 +-- test/battle/move_effect_secondary/salt_cure.c | 6 +- .../move_effect_secondary/throat_chop.c | 4 +- .../move_effects_combined/infernal_parade.c | 2 +- test/battle/move_flags/recoil.c | 4 +- test/battle/sleep_clause.c | 10 +- test/battle/spread_moves.c | 2 +- test/battle/starting_status/terrain.c | 26 ++-- test/battle/status1/freeze.c | 2 +- test/battle/switch_in_abilities.c | 10 +- test/battle/test_runner_features.c | 30 ++-- test/battle/trainer_slides.c | 8 +- test/battle/volatiles/confusion.c | 6 +- test/battle/weather/hail.c | 4 +- test/battle/weather/sandstorm.c | 2 +- 221 files changed, 1081 insertions(+), 1079 deletions(-) delete mode 100644 test/battle/move_effect/max_move.c diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 6abaeff265..8868f83f7d 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -2364,26 +2364,26 @@ .4byte \minutes .endm - @ When OW_USE_FAKE_RTC is true, adds a specified number of days to the time. + @ When OW_USE_FAKE_RTC is true, adds a specified number of days to the time. .macro adddays days:req callnative ScrCmd_adddays, requests_effects=1 .4byte \days .endm - @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time. + @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time. .macro addhours hours:req callnative ScrCmd_addhours, requests_effects=1 .4byte \hours .endm - @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time. + @ When OW_USE_FAKE_RTC is true, adds a specified number of days, hours, and minutes to the time. .macro addminutes minutes:req callnative ScrCmd_addminutes, requests_effects=1 .4byte \minutes .endm - @ Forwards the time to a specified hour and minute. - @ This causes the time to go to the next day if the time has already been past. + @ Forwards the time to a specified hour and minute. + @ This causes the time to go to the next day if the time has already been past. .macro fwdtime hours:req, minutes:req callnative ScrCmd_fwdtime, requests_effects=1 .4byte \hours diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index ce71a102fd..41bf18da94 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -399,4 +399,4 @@ gFieldEffectScript_RockClimbDust:: @ 82DBB28 gFieldEffectScript_ORASDowse:: field_eff_callnative FldEff_ORASDowsing field_eff_end - + diff --git a/include/battle.h b/include/battle.h index b95da58aa2..49d7cbb0ab 100755 --- a/include/battle.h +++ b/include/battle.h @@ -616,7 +616,7 @@ struct EventStates u32 arenaTurn:8; enum BattleSide battlerSide:4; enum BattlerId moveEndBattler:4; - enum FirstTurnEventsStates beforeFristTurn:8; + enum FirstTurnEventsStates beforeFirstTurn:8; enum FaintedActions faintedAction:8; enum BattlerId faintedActionBattler:4; enum MoveSuccessOrder atkCanceler:8; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a2d40bc5e1..37d801c5b7 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -370,7 +370,7 @@ static void OpponentHandleDrawTrainerPic(u32 battler) { s16 xPos; u32 trainerPicId; - + // Sets Multibattle test opponent sprites to not be Hiker if (IsMultibattleTest()) { @@ -391,7 +391,7 @@ static void OpponentHandleDrawTrainerPic(u32 battler) else { trainerPicId = OpponentGetTrainerPicId(battler); - + if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) { if ((GetBattlerPosition(battler) & BIT_FLANK) != 0) // second mon diff --git a/src/battle_main.c b/src/battle_main.c index 242ad60588..a51caa2d5f 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3735,7 +3735,7 @@ static void DoBattleIntro(void) case BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS: if (!gBattleControllerExecFlags) { - gBattleStruct->eventState.beforeFristTurn = 0; + gBattleStruct->eventState.beforeFirstTurn = 0; gBattleStruct->switchInBattlerCounter = 0; Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield. @@ -3773,7 +3773,7 @@ static void TryDoEventsBeforeFirstTurn(void) if (gBattleControllerExecFlags) return; - switch (gBattleStruct->eventState.beforeFristTurn) + switch (gBattleStruct->eventState.beforeFirstTurn) { case FIRST_TURN_EVENTS_START: // Set invalid mons as absent(for example when starting a double battle with only one pokemon). @@ -3823,20 +3823,20 @@ static void TryDoEventsBeforeFirstTurn(void) SwapTurnOrder(i, j); } } - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_OVERWORLD_WEATHER: - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; if (TryFieldEffects(FIELD_EFFECT_OVERWORLD_WEATHER)) return; break; case FIRST_TURN_EVENTS_TERRAIN: - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; if (TryFieldEffects(FIELD_EFFECT_OVERWORLD_TERRAIN)) return; break; case FIRST_TURN_EVENTS_STARTING_STATUS: - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; if (TryFieldEffects(FIELD_EFFECT_TRAINER_STATUSES)) return; break; @@ -3851,7 +3851,7 @@ static void TryDoEventsBeforeFirstTurn(void) } } memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts for Mirror Herb and Opportunist - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_NEUTRALIZING_GAS: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest @@ -3861,7 +3861,7 @@ static void TryDoEventsBeforeFirstTurn(void) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest @@ -3878,7 +3878,7 @@ static void TryDoEventsBeforeFirstTurn(void) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_ITEM_EFFECTS: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest @@ -3888,7 +3888,7 @@ static void TryDoEventsBeforeFirstTurn(void) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_WHITE_HERB: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest @@ -3898,7 +3898,7 @@ static void TryDoEventsBeforeFirstTurn(void) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_OPPORTUNIST: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest @@ -3908,7 +3908,7 @@ static void TryDoEventsBeforeFirstTurn(void) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_MIRROR_HERB: while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest @@ -3918,10 +3918,10 @@ static void TryDoEventsBeforeFirstTurn(void) return; } gBattleStruct->switchInBattlerCounter = 0; - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; break; case FIRST_TURN_EVENTS_EJECT_PACK: - gBattleStruct->eventState.beforeFristTurn++; + gBattleStruct->eventState.beforeFirstTurn++; if (TrySwitchInEjectPack(FIRST_TURN)) return; break; @@ -3960,7 +3960,7 @@ static void TryDoEventsBeforeFirstTurn(void) if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN))) BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2); - gBattleStruct->eventState.beforeFristTurn = 0; + gBattleStruct->eventState.beforeFirstTurn = 0; break; } } diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 2b3afcd5d7..126bb76d4c 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4702,7 +4702,7 @@ static void Cmd_getexp(void) if ((holdEffect == HOLD_EFFECT_EXP_SHARE || IsGen6ExpShareEnabled()) && (B_SPLIT_EXP < GEN_6 || gBattleStruct->battlerExpReward == 0)) // only give exp share bonus in later gens if the mon wasn't sent out { - gBattleStruct->battlerExpReward += GetSoftLevelCapExpValue(gPlayerParty[*expMonId].level, gBattleStruct->expShareExpValue);; + gBattleStruct->battlerExpReward += GetSoftLevelCapExpValue(gPlayerParty[*expMonId].level, gBattleStruct->expShareExpValue); } ApplyExperienceMultipliers(&gBattleStruct->battlerExpReward, *expMonId, gBattlerFainted); diff --git a/src/battle_transition.c b/src/battle_transition.c index 2b28bf7dc7..ffb826664d 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -2446,7 +2446,7 @@ static bool8 Mugshot_WaitPlayerSlide(struct Task *task) else { return FALSE; - } + } } else { @@ -2468,7 +2468,7 @@ static bool8 Mugshot_WaitPlayerSlide(struct Task *task) else { return FALSE; - } + } } return FALSE; } @@ -2634,7 +2634,7 @@ static void Mugshots_CreateTrainerPics(struct Task *task) task->tPlayerSpriteId = CreateTrainerSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), DISPLAY_WIDTH + 32, 106, - 0, NULL); + 0, NULL); opponentSpriteA = &gSprites[task->tOpponentSpriteAId]; playerSprite = &gSprites[task->tPlayerSpriteId]; diff --git a/src/debug.c b/src/debug.c index 4d3e5cd39f..718ec46c5e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2086,7 +2086,7 @@ static void Debug_Display_ItemInfo(u32 itemId, u32 digit, u8 windowId) else if (CheckIfItemIsTMHMOrEvolutionStone(itemId) == 1) { end = StringCopy(end, COMPOUND_STRING(" None")); - } + } WrapFontIdToFit(gStringVar1, end, DEBUG_MENU_FONT, WindowWidthPx(windowId)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); diff --git a/src/decompress_asm.s b/src/decompress_asm.s index 9704d83a6a..4ab6060a0c 100644 --- a/src/decompress_asm.s +++ b/src/decompress_asm.s @@ -6,7 +6,7 @@ .global FastUnsafeCopy32 .type FastUnsafeCopy32, %function - + @ Word aligned, 32-byte copy @ This function WILL overwrite your buffer, so make sure it is at least 32 bytes larger than the desired size. FastUnsafeCopy32: @@ -18,10 +18,10 @@ FastUnsafeCopy32: bgt .Lloop_32 pop {r4-r10} bx lr - - + + @ Credit to: luckytyphlosion as it's his implementation - + .section .text @Copied to stack on run-time .align 2 @@ -126,6 +126,6 @@ LZ77_EightBlockLoop_HandleLoop: LZ77_Done: pop {r4, r5, r6, lr} bx lr - + .global LZ77UnCompWRAMOptimized_end LZ77UnCompWRAMOptimized_end: diff --git a/src/follower_npc.c b/src/follower_npc.c index 2cca3186b3..3675a99bd3 100644 --- a/src/follower_npc.c +++ b/src/follower_npc.c @@ -226,7 +226,7 @@ static void TurnNPCIntoFollower(u32 localId, u32 followerFlags, u32 setScript, c SetFollowerNPCData(FNPC_DATA_COME_OUT_DOOR, FNPC_DOOR_NONE); if (FollowerNPCHasRunningFrames()) followerFlags |= FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES; - + SetFollowerNPCData(FNPC_DATA_FOLLOWER_FLAGS, followerFlags); // If the player is biking and the follower flags prohibit biking, force the player to dismount the bike. @@ -810,7 +810,7 @@ void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr) { if (PlayerHasFollowerNPC()) return; - + struct ObjectEvent *player = &gObjectEvents[gPlayerAvatar.objectEventId]; struct ObjectEvent *follower; struct ObjectEventTemplate npc = @@ -827,7 +827,7 @@ void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr) follower = &gObjectEvents[GetFollowerNPCData(FNPC_DATA_OBJ_ID)]; follower->movementType = MOVEMENT_TYPE_NONE; gSprites[follower->spriteId].callback = MovementType_None; - + SetFollowerNPCData(FNPC_DATA_IN_PROGRESS, TRUE); SetFollowerNPCData(FNPC_DATA_GFX_ID, follower->graphicsId); SetFollowerNPCData(FNPC_DATA_SURF_BLOB, FNPC_SURF_BLOB_NONE); @@ -835,7 +835,7 @@ void CreateFollowerNPC(u32 gfx, u32 followerFlags, const u8 *scriptPtr) SetFollowerNPCScriptPointer(scriptPtr); if (FollowerNPCHasRunningFrames()) followerFlags |= FOLLOWER_NPC_FLAG_HAS_RUNNING_FRAMES; - + SetFollowerNPCData(FNPC_DATA_FOLLOWER_FLAGS, followerFlags); // If the player is biking and the follower flags prohibit biking, force the player to dismount the bike. @@ -887,7 +887,7 @@ u32 DetermineFollowerNPCState(struct ObjectEvent *follower, u32 state, u32 direc // Follower won't move if player is forced back onto the same tile. if (GetFollowerNPCData(FNPC_DATA_FORCED_MOVEMENT) == FNPC_FORCED_STAY) return MOVEMENT_ACTION_NONE; - + GetXYCoordsPlayerMovementDest(playerMoveDirection, &playerDestX, &playerDestY); newPlayerMB = MapGridGetMetatileBehaviorAt(playerDestX, playerDestY); @@ -1863,7 +1863,7 @@ void ScriptHideNPCFollower(struct ScriptContext *ctx) { if (!FNPC_ENABLE_NPC_FOLLOWERS || !PlayerHasFollowerNPC()) return; - + u32 walkSpeed = ScriptReadByte(ctx); struct ObjectEvent *npc = &gObjectEvents[GetFollowerNPCObjectId()]; @@ -1893,7 +1893,7 @@ void ScriptChangeFollowerNPCBattlePartner(struct ScriptContext *ctx) { if (!FNPC_ENABLE_NPC_FOLLOWERS || !PlayerHasFollowerNPC()) return; - + u32 newBattlePartner = ScriptReadHalfword(ctx); SetFollowerNPCData(FNPC_DATA_BATTLE_PARTNER, newBattlePartner); diff --git a/src/mirage_tower.c b/src/mirage_tower.c index bf73692a36..94e3027ef5 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -713,7 +713,7 @@ static void Task_FossilFallAndSink(u8 taskId) FieldEffectFreePaletteIfUnused(gSprites[sFallingFossil->spriteId].oam.paletteNum); gSprites[sFallingFossil->spriteId].inUse = TRUE; DestroySprite(&gSprites[sFallingFossil->spriteId]); - FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);; + FREE_AND_SET_NULL(sFallingFossil->disintegrateRand); FREE_AND_SET_NULL(sFallingFossil->frameImage); FREE_AND_SET_NULL(sFallingFossil->frameImageTiles); FREE_AND_SET_NULL(sFallingFossil); diff --git a/src/oras_dowse.c b/src/oras_dowse.c index 237c456187..d3dab1253d 100644 --- a/src/oras_dowse.c +++ b/src/oras_dowse.c @@ -531,7 +531,7 @@ void UpdateDowsingAnimDirection(struct Sprite *sprite, struct ObjectEvent *playe anim += 16; break; } - + // Don't completely restart anim if wiggling didn't stop. if (sprite->sPrevDowseState != ORASD_WIGGLE_NONE && sprite->sDowseState != ORASD_WIGGLE_NONE) SetAndStartSpriteAnim(sprite, anim, sprite->animCmdIndex); diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 346536c8aa..33d9af2caa 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -1945,7 +1945,7 @@ static void FrontFlip_2(struct Sprite *sprite) { TryFlipX(sprite); sprite->x2++; - sprite->y2--;; + sprite->y2--; if (sprite->x2 >= 0) { diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 26bec63015..4c0b5bdaca 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2027,7 +2027,7 @@ void TryUpdateRelearnType(enum IncrDecrUpdateValues delta) return; } zeroCounter++; - + } while (zeroCounter <= MOVE_RELEARNER_COUNT && !hasRelearnableMoves); } diff --git a/src/trainer_see.c b/src/trainer_see.c index bf66f66e2e..ea2869a97a 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -372,7 +372,7 @@ bool8 CheckForTrainersWantingBattle(void) // Adds trainers wanting to battle to array for (i = 0; i < OBJECT_EVENTS_COUNT; i++) - { + { if (!gObjectEvents[i].active) continue; if (gObjectEvents[i].trainerType != TRAINER_TYPE_NORMAL && gObjectEvents[i].trainerType != TRAINER_TYPE_SEE_ALL_DIRECTIONS && gObjectEvents[i].trainerType != TRAINER_TYPE_BURIED) diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c index 16ffad7adb..88c50a5562 100644 --- a/test/battle/ability/aftermath.c +++ b/test/battle/ability/aftermath.c @@ -6,10 +6,10 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai s16 aftermathDamage; GIVEN { - PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }; + PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN {MOVE(opponent, MOVE_SCRATCH);} + TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { MESSAGE("The opposing Wobbuffet used Scratch!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); @@ -24,10 +24,10 @@ SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fai SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: player point of view") { GIVEN { - PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); }; - OPPONENT(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }; + PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); } + OPPONENT(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); } } WHEN { - TURN {MOVE(player, MOVE_HEADBUTT);} + TURN { MOVE(player, MOVE_HEADBUTT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); MESSAGE("The opposing Voltorb fainted!"); @@ -38,10 +38,10 @@ SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: player SINGLE_BATTLE_TEST("Aftermath ability pop-up will be displayed correctly: opponent point of view") { GIVEN { - PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }; - OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); }; + PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); } + OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); } } WHEN { - TURN {MOVE(opponent, MOVE_HEADBUTT);} + TURN { MOVE(opponent, MOVE_HEADBUTT); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, opponent); MESSAGE("Voltorb fainted!"); diff --git a/test/battle/ability/anticipation.c b/test/battle/ability/anticipation.c index ee5b602a13..d23cb0c6a5 100644 --- a/test/battle/ability/anticipation.c +++ b/test/battle/ability/anticipation.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Anticipation causes notifies if an opponent has a super-effe PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CLOSE_COMBAT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Anticipation does not trigger even when a move is super effe PLAYER(SPECIES_WHISCASH) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_PIKACHU) { Moves(MOVE_CELEBRATE, MOVE_THUNDERBOLT); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Anticipation causes notifies if an opponent has a One-hit KO PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_FISSURE, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -48,7 +48,7 @@ SINGLE_BATTLE_TEST("Anticipation treats Self-Destruct and Explosion like all oth PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_EXPLOSION, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("Anticipation doesn't consider Normalize into their effective PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_DELCATTY) { Ability(ABILITY_NORMALIZE); Moves(MOVE_CLOSE_COMBAT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Anticipation doesn't consider Scrappy into their effectivene PLAYER(SPECIES_DOUBLADE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); Moves(MOVE_CLOSE_COMBAT, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -197,7 +197,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_ARCEUS) { Item(ITEM_FIST_PLATE); Moves(MOVE_JUDGMENT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -230,7 +230,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEPPA_BERRY); Moves(MOVE_NATURAL_GIFT, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N PLAYER(SPECIES_FERROTHORN) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_GENESECT) { Item(ITEM_BURN_DRIVE); Moves(MOVE_TECHNO_BLAST, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -261,7 +261,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N PLAYER(SPECIES_FERROTHORN) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_ORICORIO_BAILE) { Moves(MOVE_REVELATION_DANCE, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -276,7 +276,7 @@ SINGLE_BATTLE_TEST("Anticipation treats dynamic move types as their base type (N PLAYER(SPECIES_EEVEE) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_SILVALLY) { Item(ITEM_FIGHTING_MEMORY); Moves(MOVE_MULTI_ATTACK, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -308,7 +308,7 @@ SINGLE_BATTLE_TEST("Anticipation does not consider ate-abilities") PLAYER(SPECIES_WORMADAM_PLANT) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_AURORUS) { Ability(ABILITY_REFRIGERATE); Moves(MOVE_GROWL, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(player, ABILITY_ANTICIPATION); } @@ -343,7 +343,7 @@ SINGLE_BATTLE_TEST("Anticipation considers Inverse Battle types") PLAYER(SPECIES_FERROTHORN) { Ability(ABILITY_ANTICIPATION); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_GROWL, MOVE_SCRATCH, MOVE_POUND, MOVE_CELEBRATE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_ANTICIPATION); } diff --git a/test/battle/ability/aroma_veil.c b/test/battle/ability/aroma_veil.c index 08dedfae6e..9a911f5d21 100644 --- a/test/battle/ability/aroma_veil.c +++ b/test/battle/ability/aroma_veil.c @@ -159,7 +159,7 @@ DOUBLE_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Impriso ASSUME(GetMoveEffect(MOVE_IMPRISON) == EFFECT_IMPRISON); PLAYER(SPECIES_AROMATISSE) { Ability(ABILITY_AROMA_VEIL); } PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_IMPRISON, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_IMPRISON, MOVE_CELEBRATE); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(opponentLeft, MOVE_IMPRISON); MOVE(playerLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_SPLASH); } diff --git a/test/battle/ability/bad_dreams.c b/test/battle/ability/bad_dreams.c index cb724e2411..0fa9f6ef61 100644 --- a/test/battle/ability/bad_dreams.c +++ b/test/battle/ability/bad_dreams.c @@ -9,9 +9,9 @@ SINGLE_BATTLE_TEST("Bad Dreams causes the sleeping enemy Pokemon to lose 1/8 of PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { PLAYER(SPECIES_DARKRAI); - OPPONENT(SPECIES_WOBBUFFET) {Status1(status);} + OPPONENT(SPECIES_WOBBUFFET) { Status1(status); } } WHEN { - TURN {;} + TURN {} } SCENE { if (status == STATUS1_SLEEP) { ABILITY_POPUP(player, ABILITY_BAD_DREAMS); @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Bad Dreams causes Pokémon with Comatose to lose 1/8 of HP") PLAYER(SPECIES_DARKRAI); OPPONENT(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); } } WHEN { - TURN {;} + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_BAD_DREAMS); MESSAGE("The opposing Komala is tormented!"); @@ -55,11 +55,11 @@ DOUBLE_BATTLE_TEST("Bad Dreams does not activate if only the partner Pokemon is { GIVEN { PLAYER(SPECIES_DARKRAI); - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN {;} + TURN {} } SCENE { NONE_OF { ABILITY_POPUP(playerLeft, ABILITY_BAD_DREAMS); @@ -76,12 +76,12 @@ DOUBLE_BATTLE_TEST("Bad Dreams does not activate if only the partner Pokemon is DOUBLE_BATTLE_TEST("Bad Dreams activates for both sleeping Pokémon on the player side") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } OPPONENT(SPECIES_DARKRAI); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN {;} + TURN {} } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_BAD_DREAMS); MESSAGE("Wobbuffet is tormented!"); @@ -99,14 +99,14 @@ DOUBLE_BATTLE_TEST("Bad Dreams activates for both sleeping Pokémon on the playe DOUBLE_BATTLE_TEST("Bad Dreams faints both sleeping Pokemon on player side") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);} - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);} - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} - PLAYER(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); } + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); } + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } OPPONENT(SPECIES_DARKRAI); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN {SEND_OUT(playerLeft, 2); SEND_OUT(playerRight, 3);} + TURN { SEND_OUT(playerLeft, 2); SEND_OUT(playerRight, 3); } } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_BAD_DREAMS); MESSAGE("Wobbuffet is tormented!"); @@ -123,12 +123,12 @@ DOUBLE_BATTLE_TEST("Bad Dreams faints both sleeping Pokemon on opponent side") GIVEN { PLAYER(SPECIES_DARKRAI); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);} - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP); HP(1);} - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } } WHEN { - TURN {SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3);} + TURN { SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3); } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_BAD_DREAMS); MESSAGE("The opposing Wobbuffet is tormented!"); diff --git a/test/battle/ability/ball_fetch.c b/test/battle/ability/ball_fetch.c index 762225c0f0..5a8b4d9530 100644 --- a/test/battle/ability/ball_fetch.c +++ b/test/battle/ability/ball_fetch.c @@ -15,7 +15,7 @@ WILD_BATTLE_TEST("Ball Fetch causes the Pokémon to pick up the last failed Ball PLAYER(SPECIES_YAMPER) { Ability(ABILITY_BALL_FETCH); } OPPONENT(SPECIES_METAGROSS); } WHEN { - TURN { USE_ITEM(player, item, WITH_RNG(RNG_BALLTHROW_SHAKE, MAX_u16) );} + TURN { USE_ITEM(player, item, WITH_RNG(RNG_BALLTHROW_SHAKE, MAX_u16)); } TURN {} } SCENE { if (item != ITEM_X_ACCURACY) @@ -51,8 +51,7 @@ WILD_BATTLE_TEST("Ball Fetch doesn't trigger if the Pokémon is already holding } else { - NONE_OF - { + NONE_OF { ABILITY_POPUP(player, ABILITY_BALL_FETCH); MESSAGE("Yamper found a Great Ball!"); } @@ -74,7 +73,7 @@ WILD_BATTLE_TEST("Ball Fetch only picks up the first failed ball, once per battl PARAMETRIZE { item = ITEM_GREAT_BALL; item2 = ITEM_ULTRA_BALL; } PARAMETRIZE { item = ITEM_GREAT_BALL; item2 = ITEM_FAST_BALL; } PARAMETRIZE { item = ITEM_GREAT_BALL; item2 = ITEM_STRANGE_BALL; } - + GIVEN { PLAYER(SPECIES_YAMPER) { Ability(ABILITY_BALL_FETCH); } diff --git a/test/battle/ability/battle_bond.c b/test/battle/ability/battle_bond.c index 95787429b1..9d8bb1b3cd 100644 --- a/test/battle/ability/battle_bond.c +++ b/test/battle/ability/battle_bond.c @@ -11,10 +11,10 @@ SINGLE_BATTLE_TEST("Battle Bond transforms player's Greninja - Singles") { u32 monsCountPlayer, monsCountOpponent; - PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; } - PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; } - PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; } - PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; } + PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 1; } + PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 2; } + PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 1; } + PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; } GIVEN { WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); @@ -59,10 +59,10 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles") { u32 monsCountPlayer, monsCountOpponent; - PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 1; } - PARAMETRIZE {monsCountPlayer = 1; monsCountOpponent = 2; } - PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 1; } - PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; } + PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 1; } + PARAMETRIZE { monsCountPlayer = 1; monsCountOpponent = 2; } + PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 1; } + PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; } GIVEN { WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Battle Bond transforms opponent's Greninja - Singles") if (monsCountOpponent == 2) { OPPONENT(SPECIES_WOBBUFFET); } - PLAYER(SPECIES_WOBBUFFET) {HP(1); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } if (monsCountPlayer == 2) { PLAYER(SPECIES_WOBBUFFET); } @@ -107,10 +107,10 @@ DOUBLE_BATTLE_TEST("Battle Bond transforms player's Greninja when fainting its A { u32 monsCountPlayer, monsCountOpponent; - PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 2; } - PARAMETRIZE {monsCountPlayer = 2; monsCountOpponent = 3; } - PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 2; } - PARAMETRIZE {monsCountPlayer = 3; monsCountOpponent = 3; } + PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 2; } + PARAMETRIZE { monsCountPlayer = 2; monsCountOpponent = 3; } + PARAMETRIZE { monsCountPlayer = 3; monsCountOpponent = 2; } + PARAMETRIZE { monsCountPlayer = 3; monsCountOpponent = 3; } GIVEN { WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); diff --git a/test/battle/ability/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c index 86172459ab..037a56386c 100644 --- a/test/battle/ability/beads_of_ruin.c +++ b/test/battle/ability/beads_of_ruin.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler { GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_CHI_YU); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_CHI_YU); } WHEN { TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index f5b9573fe0..d1cd9f8d5e 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -12,9 +12,9 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke prevent intimid PARAMETRIZE{ species = SPECIES_SOLGALEO; ability = ABILITY_FULL_METAL_BODY; } PARAMETRIZE{ species = SPECIES_TORKOAL; ability = ABILITY_WHITE_SMOKE; } GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(species) { Ability(ability); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); } @@ -220,7 +220,7 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(species) { Speed(6); Ability(ability); Item(heldItem); } } WHEN { - TURN { } + TURN {} } SCENE { NOT ABILITY_POPUP(opponent, ability); if (heldItem == ITEM_IRON_BALL) { @@ -393,9 +393,9 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S PLAYER(SPECIES_WOBBUFFET) { Speed(4); } OPPONENT(species) { Speed(5); Ability(ability); } } WHEN { - TURN{ MOVE(opponent, MOVE_AGILITY); } - TURN{ MOVE(player, MOVE_SPECTRAL_THIEF); } - TURN{ } + TURN { MOVE(opponent, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_SPECTRAL_THIEF); } + TURN {} } SCENE { if (ability == ABILITY_FULL_METAL_BODY) MESSAGE("The opposing Solgaleo used Agility!"); diff --git a/test/battle/ability/color_change.c b/test/battle/ability/color_change.c index 49eaa3e916..9c5176e3ac 100644 --- a/test/battle/ability/color_change.c +++ b/test/battle/ability/color_change.c @@ -90,8 +90,8 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Futur OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(player, MOVE_FUTURE_SIGHT); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); MESSAGE("The opposing Kecleon took the Future Sight attack!"); @@ -107,8 +107,8 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Doom OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(player, MOVE_DOOM_DESIRE); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOOM_DESIRE, player); MESSAGE("The opposing Kecleon took the Doom Desire attack!"); @@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Electric when a Pokemon is OPPONENT(SPECIES_KECLEON) { Ability(ABILITY_COLOR_CHANGE); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); } - TURN { } + TURN {} TURN { MOVE(opponent, MOVE_ELECTRIFY); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); @@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type to Normal when a Pokemon is hi } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_FUTURE_SIGHT); } TURN { MOVE(player, MOVE_SOAK); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); MESSAGE("Wobbuffet used Soak!"); @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("Color Change does not change the type to Normal when a Pokem } WHEN { TURN { MOVE(player, MOVE_SOAK); } TURN { MOVE(player, MOVE_STRUGGLE); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SOAK, player); MESSAGE("The opposing Kecleon transformed into the Water type!"); diff --git a/test/battle/ability/commander.c b/test/battle/ability/commander.c index c64590a3a3..5a075a8ebf 100644 --- a/test/battle/ability/commander.c +++ b/test/battle/ability/commander.c @@ -64,7 +64,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take residual damage from a f OPPONENT(SPECIES_TYRANITAR) { Ability(ABILITY_SAND_STREAM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); @@ -83,7 +83,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri will still take poison damage if while i OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); MESSAGE("Tatsugiri was swallowed by Dondozo and became Dondozo's commander!"); @@ -176,7 +176,7 @@ DOUBLE_BATTLE_TEST("Commander Tatsugiri is not damaged by a double target move i { GIVEN { ASSUME(GetMoveTarget(MOVE_SURF) == MOVE_TARGET_FOES_AND_ALLY); - PLAYER(SPECIES_DONDOZO) { HP(1); }; + PLAYER(SPECIES_DONDOZO) { HP(1); } PLAYER(SPECIES_TATSUGIRI) { Ability(ABILITY_COMMANDER); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); @@ -244,7 +244,7 @@ DOUBLE_BATTLE_TEST("Commander doesn't prevent Imposter from working on a Command OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_DITTO) { Ability(ABILITY_IMPOSTER); } } WHEN { - TURN { } + TURN {} TURN { SWITCH(opponentLeft, 2); } } SCENE { ABILITY_POPUP(playerRight, ABILITY_COMMANDER); diff --git a/test/battle/ability/competitive.c b/test/battle/ability/competitive.c index 28cd0198ab..b7d938ae8d 100644 --- a/test/battle/ability/competitive.c +++ b/test/battle/ability/competitive.c @@ -174,7 +174,7 @@ SINGLE_BATTLE_TEST("Competitive correctly activates after Sticky Web lowers Spee } WHEN { TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } TURN { SWITCH(player, 1); } - TURN { MOVE(opponent, MOVE_GROWL);} + TURN { MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c index ef5b4c6c7d..577affeecb 100644 --- a/test/battle/ability/contrary.c +++ b/test/battle/ability/contrary.c @@ -246,7 +246,7 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn { GIVEN{ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT); - PLAYER(SPECIES_HERACROSS){ + PLAYER(SPECIES_HERACROSS) { Level(44); HP(1); Speed(5); @@ -254,7 +254,7 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn Item(ITEM_LOADED_DICE); Moves(MOVE_PIN_MISSILE); } - OPPONENT(SPECIES_SERPERIOR){ + OPPONENT(SPECIES_SERPERIOR) { Level(44); Speed(10); Nature(NATURE_TIMID); @@ -262,7 +262,7 @@ AI_SINGLE_BATTLE_TEST("AI sees Contrary-effected moves correctly in MoveEffectIn Moves(MOVE_DRAGON_PULSE, MOVE_SPIN_OUT, MOVE_HIDDEN_POWER, MOVE_GLARE); } } WHEN { - TURN{ + TURN { MOVE(player, MOVE_PIN_MISSILE); EXPECT_MOVE(opponent, MOVE_SPIN_OUT); // previously all 107, now sees speed can rise w/ Contrary } diff --git a/test/battle/ability/corrosion.c b/test/battle/ability/corrosion.c index f46ad72a72..75ac0fc4bb 100644 --- a/test/battle/ability/corrosion.c +++ b/test/battle/ability/corrosion.c @@ -100,7 +100,7 @@ SINGLE_BATTLE_TEST("If a Poison- or Steel-type Pokémon with Corrosion holds a T PLAYER(SPECIES_SALANDIT) { Ability(ABILITY_CORROSION); Item(ITEM_TOXIC_ORB); } OPPONENT(SPECIES_ODDISH); } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player); STATUS_ICON(player, badPoison: TRUE); diff --git a/test/battle/ability/cud_chew.c b/test/battle/ability/cud_chew.c index aca9e79447..809d9f1d7c 100644 --- a/test/battle/ability/cud_chew.c +++ b/test/battle/ability/cud_chew.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Kee Berry effect again on the next tu OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { Ability(ABILITY_CUD_CHEW); Item(ITEM_KEE_BERRY); } } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } - TURN { MOVE(player, MOVE_CELEBRATE);} + TURN { MOVE(player, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); HP_BAR(opponent); @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Cud Chew will activate Oran Berry effect again on the next t OPPONENT(SPECIES_TAUROS_PALDEA_COMBAT) { MaxHP(60); HP(60); Ability(ABILITY_CUD_CHEW); Item(ITEM_ORAN_BERRY); } } WHEN { TURN { MOVE(player, MOVE_DRAGON_RAGE); } - TURN { MOVE(player, MOVE_CELEBRATE);} + TURN { MOVE(player, MOVE_CELEBRATE); } TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_RAGE, player); diff --git a/test/battle/ability/dauntless_shield.c b/test/battle/ability/dauntless_shield.c index 91d5ceb4fc..9a8871d5d7 100644 --- a/test/battle/ability/dauntless_shield.c +++ b/test/battle/ability/dauntless_shield.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield raises Defense by one stage") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); diff --git a/test/battle/ability/defeatist.c b/test/battle/ability/defeatist.c index 16f7c406ee..93d84e8a9d 100644 --- a/test/battle/ability/defeatist.c +++ b/test/battle/ability/defeatist.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Defeatist halves Attack when HP <= 50%", s16 damage) PARAMETRIZE { hp = 400; } PARAMETRIZE { hp = 200; } GIVEN { - PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400);} + PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_CELEBRATE); } @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Defeatist halves Special Attack when HP <= 50%", s16 damage) PARAMETRIZE { hp = 400; } PARAMETRIZE { hp = 200; } GIVEN { - PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400);} + PLAYER(SPECIES_ARCHEN) { Ability(ABILITY_DEFEATIST); HP(hp), MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_ECHOED_VOICE); MOVE(opponent, MOVE_CELEBRATE); } diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 21c1e40a43..2c5c529717 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -151,7 +151,7 @@ SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Co OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL);} + TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); @@ -188,7 +188,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed if Court Cha OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } - TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL);} + TURN { SWITCH(player, 1); MOVE(opponent, MOVE_GROWL); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); diff --git a/test/battle/ability/desolate_land.c b/test/battle/ability/desolate_land.c index 3d19f4490d..918ea720a2 100644 --- a/test/battle/ability/desolate_land.c +++ b/test/battle/ability/desolate_land.c @@ -10,7 +10,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves") { GIVEN { - PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB);} + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_WATER_GUN); } @@ -35,10 +35,10 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th ASSUME(!IsBattleMoveStatus(MOVE_SURF)); ASSUME(GetMoveType(MOVE_SURF) == TYPE_WATER); ASSUME(GetMoveTarget(MOVE_SURF) == MOVE_TARGET_FOES_AND_ALLY); - PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB); {Speed(5);}} - PLAYER(SPECIES_WOBBUFFET) {Speed(5);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(10);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(8);} + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } } WHEN { TURN { MOVE(opponentLeft, MOVE_SURF); } } SCENE { @@ -56,8 +56,8 @@ DOUBLE_BATTLE_TEST("Desolate Land blocks damaging Water-type moves and prints th SINGLE_BATTLE_TEST("Desolate Land does not block a move if Pokémon is asleep and uses a Water-type move") // Sleep/confusion/paralysis all happen before the check for primal weather { GIVEN { - PLAYER(SPECIES_GROUDON) {Item(ITEM_RED_ORB);} - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } } WHEN { TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index d77f94c1db..24a6a2d5ce 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -52,7 +52,7 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes no damage from a confusion hit and c OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_CONFUSE_RAY); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, opponent); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, player); diff --git a/test/battle/ability/electromorphosis.c b/test/battle/ability/electromorphosis.c index 92fe09358e..5291a7d973 100644 --- a/test/battle/ability/electromorphosis.c +++ b/test/battle/ability/electromorphosis.c @@ -6,8 +6,8 @@ SINGLE_BATTLE_TEST("Electromorphosis sets up Charge when hit by any move") s16 dmgBefore, dmgAfter; u16 move; - PARAMETRIZE {move = MOVE_SCRATCH; } - PARAMETRIZE {move = MOVE_GUST; } + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_GUST; } GIVEN { ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH)); @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Electromorphosis sets up Charge when hit by any move") ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); PLAYER(SPECIES_BELLIBOLT) { Ability(ABILITY_ELECTROMORPHOSIS); Speed(10); } - OPPONENT(SPECIES_WOBBUFFET) {Ability(ABILITY_LIMBER); Speed(5) ;} // Limber, so it doesn't get paralyzed. + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_LIMBER); Speed(5); } // Limber, so it doesn't get paralyzed. } WHEN { TURN { MOVE(player, MOVE_THUNDER_SHOCK), MOVE(opponent, move); } diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c index e7ac53a9e8..326981125f 100644 --- a/test/battle/ability/embody_aspect.c +++ b/test/battle/ability/embody_aspect.c @@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Embody Aspect raises a stat depending on the users form by o PLAYER(SPECIES_WOBBUFFET); OPPONENT(species) { Ability(ability); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); diff --git a/test/battle/ability/emergency_exit.c b/test/battle/ability/emergency_exit.c index 3592b91b01..a03a4853cb 100644 --- a/test/battle/ability/emergency_exit.c +++ b/test/battle/ability/emergency_exit.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Emergency Exit switches out when taking 50% max-hp damage") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SUPER_FANG); SEND_OUT(opponent, 1); } @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Emergency Exit does not switch out when going below 50% max- { GIVEN { PLAYER(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); Item(ITEM_SITRUS_BERRY); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); Item(ITEM_SITRUS_BERRY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SUPER_FANG); } @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Emergency Exit switches out when going below 50% max-HP but { GIVEN { PLAYER(SPECIES_WOBBUFFET) - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); Item(ITEM_ORAN_BERRY); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); Item(ITEM_ORAN_BERRY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SUPER_FANG); SEND_OUT(opponent, 1); } @@ -53,8 +53,8 @@ DOUBLE_BATTLE_TEST("Only the fastest Wimp Out (Emergency Exit) user switches out GIVEN { PLAYER(SPECIES_ZAPDOS) { Speed(10); } PLAYER(SPECIES_WOBBUFFET) { Speed(10); } - OPPONENT(SPECIES_WIMPOD) { Speed(1); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); }; - OPPONENT(SPECIES_WIMPOD) { Speed(2); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); }; + OPPONENT(SPECIES_WIMPOD) { Speed(1); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); } + OPPONENT(SPECIES_WIMPOD) { Speed(2); Ability(ABILITY_WIMP_OUT); Item(ITEM_FOCUS_SASH); } OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } } WHEN { @@ -71,7 +71,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when taking residual damage and fal { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { SEND_OUT(opponent, 1); } @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when healing from under 50% max-hp GIVEN { ASSUME(GetMoveEffect(MOVE_AQUA_RING) == EFFECT_AQUA_RING); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Status1(STATUS1_BURN); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_AQUA_RING); SEND_OUT(opponent, 1); } @@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when taking residual damage and fal { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SANDSTORM); SEND_OUT(opponent, 1); } @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when healing from under 50% max-hp ASSUME(GetMoveEffect(MOVE_AQUA_RING) == EFFECT_AQUA_RING); ASSUME(GetItemHoldEffect(ITEM_STICKY_BARB) == HOLD_EFFECT_STICKY_BARB); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Item(ITEM_STICKY_BARB); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(130); Item(ITEM_STICKY_BARB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_AQUA_RING); SEND_OUT(opponent, 1); } @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Emergency Exit activates when taking residual damage and fal { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(160); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(160); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SALT_CURE); SEND_OUT(opponent, 1); } @@ -149,9 +149,9 @@ WILD_BATTLE_TEST("Emergency Exit makes the pokemon flee during wild battle") GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); } } WHEN { - TURN { MOVE(player, MOVE_SUPER_FANG);} + TURN { MOVE(player, MOVE_SUPER_FANG); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, player); HP_BAR(opponent); @@ -166,9 +166,9 @@ WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falli GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); Status1(STATUS1_BURN); } } WHEN { - TURN { } + TURN {} } SCENE { HP_BAR(opponent); ABILITY_POPUP(opponent, ABILITY_EMERGENCY_EXIT); @@ -180,11 +180,11 @@ WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falli WILD_BATTLE_TEST("Emergency Exit makes the player ran during wild battle") { GIVEN { - PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }; + PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_SUPER_FANG);} + TURN { MOVE(opponent, MOVE_SUPER_FANG); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent); HP_BAR(player); @@ -197,11 +197,11 @@ WILD_BATTLE_TEST("Emergency Exit makes the player ran during wild battle") WILD_BATTLE_TEST("Emergency Exit activates when taking residual damage and falling under 50% max-hp (wild battle player side)") { GIVEN { - PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); }; + PLAYER(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(134); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_SANDSTORM);} + TURN { MOVE(opponent, MOVE_SANDSTORM); } } SCENE { HP_BAR(player); ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT); diff --git a/test/battle/ability/frisk.c b/test/battle/ability/frisk.c index e20d2f5205..b39f53c481 100644 --- a/test/battle/ability/frisk.c +++ b/test/battle/ability/frisk.c @@ -4,12 +4,12 @@ DOUBLE_BATTLE_TEST("Frisk does not trigger when Pokémon hold no items") { GIVEN { - PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }; - PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }; - OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); }; - OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); }; + PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); } + PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); } + OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); } + OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); } } WHEN { - TURN { ; } + TURN {} } SCENE { NONE_OF { ABILITY_POPUP(playerLeft, ABILITY_FRISK); @@ -23,10 +23,10 @@ DOUBLE_BATTLE_TEST("Frisk does not trigger when Pokémon hold no items") SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle") { GIVEN { - PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); }; - OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); }; + PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); } + OPPONENT(SPECIES_SENTRET) { Ability(ABILITY_FRISK); Item(ITEM_POTION); } } WHEN { - TURN { ; } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_FRISK); MESSAGE("Furret frisked the opposing Sentret and found its Potion!"); @@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching ASSUME(!IsBattleMoveStatus(MOVE_POUND)); PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WOBBUFFET) { HP(1); } - PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); }; + PLAYER(SPECIES_FURRET) { Ability(ABILITY_FRISK); } OPPONENT(SPECIES_WYNAUT) { Item(ITEM_POTION); } OPPONENT(SPECIES_WYNAUT); } WHEN { @@ -70,7 +70,7 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); } - OPPONENT(SPECIES_FURRET) { Ability(ABILITY_FRISK); }; + OPPONENT(SPECIES_FURRET) { Ability(ABILITY_FRISK); } } WHEN { TURN { MOVE(playerLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); } } SCENE { diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c index be82da81d4..cc40d98b87 100644 --- a/test/battle/ability/gale_wings.c +++ b/test/battle/ability/gale_wings.c @@ -11,8 +11,8 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority at full HP (Gen 7+)") GIVEN { WITH_CONFIG(CONFIG_GALE_WINGS, config); ASSUME(GetMoveType(MOVE_AERIAL_ACE) == TYPE_FLYING); - PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1);} - OPPONENT(SPECIES_WOBBUFFET) { Speed(100);}; + PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(hp); MaxHP(100); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(player, MOVE_AERIAL_ACE); } } SCENE { @@ -35,8 +35,8 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves") GIVEN { ASSUME(GetMoveType(MOVE_AERIAL_ACE) == TYPE_FLYING); ASSUME(GetMoveType(MOVE_FLARE_BLITZ) == TYPE_FIRE); - PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(100); MaxHP(100); Speed(1);} - OPPONENT(SPECIES_WOBBUFFET) { Speed(100);}; + PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); HP(100); MaxHP(100); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(player, move); } } SCENE { @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural ASSUME(gItemsInfo[ITEM_SKY_PLATE].secondaryId == TYPE_FLYING); ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_LUM_BERRY)].type == TYPE_FLYING); OPPONENT(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); Speed(1); Item(heldItem); HPIV(31); AttackIV(3); DefenseIV(31); SpAttackIV(30); SpDefenseIV(30); SpeedIV(30); TeraType(TYPE_FLYING); } - PLAYER(SPECIES_WOBBUFFET) { Speed(100); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(opponent, move); } } SCENE { diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c index bb212e589b..2fe20473df 100644 --- a/test/battle/ability/grim_neigh.c +++ b/test/battle/ability/grim_neigh.c @@ -15,7 +15,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly cau OPPONENT(SPECIES_ABRA) { HP(1); } OPPONENT(SPECIES_ABRA); } WHEN { - TURN { MOVE(playerLeft, MOVE_DISCHARGE); SEND_OUT(opponentLeft, 2); } + TURN { MOVE(playerLeft, MOVE_DISCHARGE); SEND_OUT(opponentLeft, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft); MESSAGE("The opposing Glalie fainted!"); @@ -45,7 +45,7 @@ DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect dam OPPONENT(SPECIES_ABRA) { HP(1); } OPPONENT(SPECIES_ABRA); } WHEN { - TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } + TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } } SCENE { int i; diff --git a/test/battle/ability/healer.c b/test/battle/ability/healer.c index 6a113f407b..93422ed8a0 100644 --- a/test/battle/ability/healer.c +++ b/test/battle/ability/healer.c @@ -18,7 +18,7 @@ DOUBLE_BATTLE_TEST("Healer cures adjacent ally's status condition 30% of the tim OPPONENT(SPECIES_WOBBUFFET) { Status1(status); } OPPONENT(SPECIES_CHANSEY) { Ability(ABILITY_HEALER); } } WHEN { - TURN { } + TURN {} } SCENE { MESSAGE("The opposing Chansey's Healer cured the opposing Wobbuffet's problem!"); } diff --git a/test/battle/ability/hospitality.c b/test/battle/ability/hospitality.c index 2c89c3eb97..925c7b6ce1 100644 --- a/test/battle/ability/hospitality.c +++ b/test/battle/ability/hospitality.c @@ -14,7 +14,7 @@ DOUBLE_BATTLE_TEST("Hospitality user restores 25% of ally's health") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { if (health == 75) { ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY); @@ -72,8 +72,8 @@ DOUBLE_BATTLE_TEST("Hospitality ignores Substitute") DOUBLE_BATTLE_TEST("Hospitality does not trigger if there is no ally on the field") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); } - PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_POLTCHAGEIST) { Ability(ABILITY_HOSPITALITY); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/hunger_switch.c b/test/battle/ability/hunger_switch.c index 469cf02d3c..0c2dc8a533 100644 --- a/test/battle/ability/hunger_switch.c +++ b/test/battle/ability/hunger_switch.c @@ -42,7 +42,7 @@ SINGLE_BATTLE_TEST("Hunger Switch does not switch Morpeko's form when Terastalli PLAYER(SPECIES_MORPEKO) { Ability(ABILITY_HUNGER_SWITCH); TeraType(TYPE_NORMAL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_TERA); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Hunger Switch does not switch Morpeko's form after switching PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROAR); } TURN { SWITCH(player, 0); } } SCENE { diff --git a/test/battle/ability/illusion.c b/test/battle/ability/illusion.c index efa80cdafe..46d99c7741 100644 --- a/test/battle/ability/illusion.c +++ b/test/battle/ability/illusion.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Illusion can only imitate Normal Form terapagos") // Switch to Terapagos which enters Terastal Form TURN { SWITCH(player, 1); } // Switch back to Zoroark, should not be Terastal Terapagos - TURN { SWITCH(player, 0); MOVE(opponent, MOVE_SCRATCH);} + TURN { SWITCH(player, 0); MOVE(opponent, MOVE_SCRATCH); } // Switch back to Terapagos TURN { SWITCH(player, 1); } // Terapagos Stellar, Zoroark gets Roared in, should not be Stellar Terapagos @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Illusion breaks in Neutralizing Gas") PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ILLUSION_OFF, player); @@ -117,12 +117,12 @@ SINGLE_BATTLE_TEST("Illusion breaks if user loses Illusion due to Worry Seed") SINGLE_BATTLE_TEST("Illusion breaks when attacked behind a substitute") { GIVEN { - PLAYER(SPECIES_DRAGAPULT) {Ability(ABILITY_INFILTRATOR); Speed(1);}; - OPPONENT(SPECIES_WOBBUFFET) {Speed(2);}; - OPPONENT(SPECIES_ZOROARK) {Speed(2);}; - OPPONENT(SPECIES_WYNAUT) {Speed(2);}; + PLAYER(SPECIES_DRAGAPULT) { Ability(ABILITY_INFILTRATOR); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_ZOROARK) { Speed(2); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SHED_TAIL); SEND_OUT(opponent, 1);} + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SHED_TAIL); SEND_OUT(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SWAP_FROM_SUBSTITUTE, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ILLUSION_OFF, opponent); diff --git a/test/battle/ability/innards_out.c b/test/battle/ability/innards_out.c index 516bde342e..87f730c1bb 100644 --- a/test/battle/ability/innards_out.c +++ b/test/battle/ability/innards_out.c @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Innards Out uses correct damage amount for Future Sight") OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(opponent, MOVE_FUTURE_SIGHT); } - TURN { } + TURN {} TURN { SEND_OUT(player, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, opponent); diff --git a/test/battle/ability/inner_focus.c b/test/battle/ability/inner_focus.c index 7280725e88..ef0d8ea8a0 100644 --- a/test/battle/ability/inner_focus.c +++ b/test/battle/ability/inner_focus.c @@ -8,9 +8,9 @@ SINGLE_BATTLE_TEST("Inner Focus doesn't prevent intimidate (Gen3-7)") GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); } @@ -35,9 +35,9 @@ SINGLE_BATTLE_TEST("Inner Focus prevents intimidate (Gen8+)") GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); } @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }; + OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); } } WHEN { TURN { MOVE(player, MOVE_FAKE_OUT); MOVE(opponent, MOVE_SCRATCH); @@ -73,8 +73,8 @@ SINGLE_BATTLE_TEST("Inner Focus prevents flinching") SINGLE_BATTLE_TEST("Mold Breaker ignores Inner Focus") { GIVEN { - PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }; - OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); }; + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_ZUBAT) { Ability(ABILITY_INNER_FOCUS); } } WHEN { TURN { MOVE(player, MOVE_FAKE_OUT); } } SCENE { diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c index 0606938d45..443566cb76 100644 --- a/test/battle/ability/intimidate.c +++ b/test/battle/ability/intimidate.c @@ -171,7 +171,7 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot") DOUBLE_BATTLE_TEST("Intimidate activates immediately after the mon was switched in as long as one opposing mon is alive") { GIVEN { - PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; + PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ELECTRIC_SEED); } OPPONENT(SPECIES_WYNAUT) { HP(1); } diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c index f7c3705d44..2ea924fc26 100644 --- a/test/battle/ability/intrepid_sword.c +++ b/test/battle/ability/intrepid_sword.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword raises Attack by one stage") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); @@ -122,9 +122,9 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } OPPONENT(SPECIES_ZAMAZENTA) { Ability(ABILITY_DAUNTLESS_SHIELD); } } WHEN { - TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} - TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} - TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); } TURN { MOVE(player, MOVE_SKILL_SWAP); } } SCENE { NONE_OF { @@ -145,10 +145,10 @@ SINGLE_BATTLE_TEST("Intrepid Sword and Dauntless Shield do not proc at max stage OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } } WHEN { - TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} - TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} - TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE);} - TURN { MOVE(player, MOVE_BATON_PASS); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(player, 1); SEND_OUT(opponent, 1);} + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_IRON_DEFENSE); MOVE(opponent, MOVE_SWORDS_DANCE); } + TURN { MOVE(player, MOVE_BATON_PASS); MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } } SCENE { NONE_OF { ABILITY_POPUP(player, ABILITY_DAUNTLESS_SHIELD); diff --git a/test/battle/ability/magic_guard.c b/test/battle/ability/magic_guard.c index adcfdfc5ac..7c080c1fa5 100644 --- a/test/battle/ability/magic_guard.c +++ b/test/battle/ability/magic_guard.c @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Magic Guard ignores immobilization that can be caused by par else PASSES_RANDOMLY(75, 100, RNG_PARALYSIS); GIVEN { - PLAYER(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);} + PLAYER(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } @@ -35,10 +35,10 @@ SINGLE_BATTLE_TEST("Magic Guard ignores immobilization that can be caused by par SINGLE_BATTLE_TEST("Magic Guard does not ignore speed stat changes caused by paralysis") { GIVEN { - PLAYER(SPECIES_CLEFABLE) { Speed(100); Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS);} + PLAYER(SPECIES_CLEFABLE) { Speed(100); Ability(ABILITY_MAGIC_GUARD); Status1(STATUS1_PARALYSIS); } OPPONENT(SPECIES_WOBBUFFET) { Speed(99); } } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); diff --git a/test/battle/ability/mimicry.c b/test/battle/ability/mimicry.c index 5cdea7276f..ff65ebaa12 100644 --- a/test/battle/ability/mimicry.c +++ b/test/battle/ability/mimicry.c @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Mimicry restores the battler's types when terrain is removed GIVEN { ASSUME(GetSpeciesType(SPECIES_STUNFISK_GALAR, 0) == TYPE_GROUND); ASSUME(GetSpeciesType(SPECIES_STUNFISK_GALAR, 1) == TYPE_STEEL); - PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_STUNFISK_GALAR) { Ability(ABILITY_MIMICRY); } } WHEN { TURN { MOVE(opponent, terrainMove); MOVE(player, removeTerrainMove); } diff --git a/test/battle/ability/minds_eye.c b/test/battle/ability/minds_eye.c index 4ac339d899..2bc17b93d1 100644 --- a/test/battle/ability/minds_eye.c +++ b/test/battle/ability/minds_eye.c @@ -8,7 +8,7 @@ SINGLE_BATTLE_TEST("Mind's Eye allows to hit Ghost-type Pokémon with Normal- an PARAMETRIZE { move = MOVE_KARATE_CHOP; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_MINDS_EYE); }; + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_MINDS_EYE); } OPPONENT(SPECIES_GASTLY); } WHEN { TURN { MOVE(player, move); } @@ -26,8 +26,8 @@ SINGLE_BATTLE_TEST("Mind's Eye doesn't bypass a Ghost-type's Wonder Guard") PARAMETRIZE { move = MOVE_KARATE_CHOP; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SCRAPPY); }; - OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); }; + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SCRAPPY); } + OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); } } WHEN { TURN { MOVE(player, move); } } SCENE { diff --git a/test/battle/ability/mirror_armor.c b/test/battle/ability/mirror_armor.c index 771df02699..786ac6eaa8 100644 --- a/test/battle/ability/mirror_armor.c +++ b/test/battle/ability/mirror_armor.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Mirror Armor lowers a stat of the attacking Pokémon") PARAMETRIZE { move = MOVE_FAKE_TEARS; statId = STAT_SPDEF; } GIVEN { - PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(opponent, move); } @@ -129,8 +129,8 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stats of an attacking Pokemon SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Contrary") { GIVEN { - PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} - OPPONENT(SPECIES_SHUCKLE) {Ability(ABILITY_CONTRARY);} + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } + OPPONENT(SPECIES_SHUCKLE) { Ability(ABILITY_CONTRARY); } } WHEN { TURN { MOVE(opponent, MOVE_LEER); } } SCENE { @@ -147,7 +147,7 @@ SINGLE_BATTLE_TEST("Mirror Armor raises the stat of an attacking Pokemon with Co SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon if it is already at -6") { GIVEN { - PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR);} + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_SCREECH); } @@ -177,15 +177,15 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court ASSUME(GetMoveEffect(MOVE_COURT_CHANGE) == EFFECT_COURT_CHANGE); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); } + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); } OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(playerLeft, MOVE_STICKY_WEB); } TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } - TURN { SWITCH(playerRight, 2);} - TURN { } + TURN { SWITCH(playerRight, 2); } + TURN {} } SCENE { MESSAGE("Wobbuffet used Sticky Web!"); MESSAGE("The opposing Wynaut used Court Change!"); diff --git a/test/battle/ability/moody.c b/test/battle/ability/moody.c index 739bee6d01..ca04ec1f70 100644 --- a/test/battle/ability/moody.c +++ b/test/battle/ability/moody.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the user's Attack, Defense, Sp. Atk, S PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_MOODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Moody randomly lowers the user's Attack, Defense, Sp. Atk, S PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_MOODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -64,7 +64,7 @@ SINGLE_BATTLE_TEST("Moody randomly raises the holder's Attack, Defense, Sp. Atk, PLAYER(SPECIES_OCTILLERY) { Ability(ABILITY_MOODY); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_MOODY); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index 01eb51b9e7..0903c24db0 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -16,7 +16,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after direct OPPONENT(SPECIES_ABRA) { HP(1); } OPPONENT(SPECIES_ABRA); } WHEN { - TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); SEND_OUT(opponentLeft, 2); } + TURN { MOVE(playerLeft, MOVE_EARTHQUAKE); SEND_OUT(opponentLeft, 2); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, playerLeft); MESSAGE("The opposing Glalie fainted!"); @@ -49,7 +49,7 @@ DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to in OPPONENT(SPECIES_ABRA) { HP(1); } OPPONENT(SPECIES_ABRA); } WHEN { - TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } + TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } } SCENE { int i; diff --git a/test/battle/ability/mummy.c b/test/battle/ability/mummy.c index 990fba7a0d..ea1b0363da 100644 --- a/test/battle/ability/mummy.c +++ b/test/battle/ability/mummy.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Mummy/Lingering Aroma replace the attacker's ability on cont enum Ability ability; PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_MUMMY; species = SPECIES_YAMASK; } - PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_MUMMY; species = SPECIES_YAMASK;} + PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_MUMMY; species = SPECIES_YAMASK; } PARAMETRIZE { move = MOVE_AQUA_JET; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; } PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_LINGERING_AROMA; species = SPECIES_OINKOLOGNE; } GIVEN { diff --git a/test/battle/ability/mycelium_might.c b/test/battle/ability/mycelium_might.c index 7ffac1c641..e5a8b569e1 100644 --- a/test/battle/ability/mycelium_might.c +++ b/test/battle/ability/mycelium_might.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Mycelium Might ignores opposing abilities") { GIVEN { PLAYER(SPECIES_TOEDSCOOL) { Speed(100); Ability(ABILITY_MYCELIUM_MIGHT); } - OPPONENT(SPECIES_BELDUM) { Speed(1); Ability(ABILITY_CLEAR_BODY);} + OPPONENT(SPECIES_BELDUM) { Speed(1); Ability(ABILITY_CLEAR_BODY); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCREECH); } } SCENE { @@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Mycelium Might vs Stall action order depends on speed") PARAMETRIZE { speed = 101; } GIVEN { PLAYER(SPECIES_TOEDSCOOL) { Speed(100); Ability(ABILITY_MYCELIUM_MIGHT); } - OPPONENT(SPECIES_SABLEYE) { Speed(speed); Ability(ABILITY_STALL);} + OPPONENT(SPECIES_SABLEYE) { Speed(speed); Ability(ABILITY_STALL); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE); } } SCENE { diff --git a/test/battle/ability/neutralizing_gas.c b/test/battle/ability/neutralizing_gas.c index 02f7323af2..9a28bff8f2 100644 --- a/test/battle/ability/neutralizing_gas.c +++ b/test/battle/ability/neutralizing_gas.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Neutralizing Gas activates on switch-in") PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); MESSAGE("Neutralizing gas filled the area!"); @@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Neutralizing Gas prevents opponent's switch-in ability from PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } OPPONENT(SPECIES_ZEKROM) { Ability(ABILITY_TERAVOLT); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); NONE_OF { @@ -38,7 +38,7 @@ DOUBLE_BATTLE_TEST("Neutralizing Gas prevents ally's switch-in ability from acti OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_NEUTRALIZING_GAS); NONE_OF { @@ -243,7 +243,7 @@ SINGLE_BATTLE_TEST("Neutralizing Gas prevents Trace from copying it") PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); } OPPONENT(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); NONE_OF { diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c index b50c46be09..24401c8e7f 100644 --- a/test/battle/ability/normalize.c +++ b/test/battle/ability/normalize.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Normalize turns a move into a Normal-type move") GIVEN { ASSUME(GetSpeciesType(SPECIES_GASTLY, 0) == TYPE_GHOST); PLAYER(SPECIES_GASTLY); - OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_WATER_GUN);} + OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_WATER_GUN); } } WHEN { TURN { MOVE(opponent, MOVE_WATER_GUN); } } SCENE { @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Normalize affects status moves") ASSUME(GetMoveType(MOVE_THUNDER_WAVE) == TYPE_ELECTRIC); ASSUME(GetSpeciesType(SPECIES_DRILBUR, 0) == TYPE_GROUND); PLAYER(SPECIES_DRILBUR); - OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_THUNDER_WAVE);} + OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_THUNDER_WAVE); } } WHEN { TURN { MOVE(opponent, MOVE_THUNDER_WAVE); } } SCENE { @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Normalize still makes Freeze-Dry do super effective damage t ASSUME(GetMoveEffect(MOVE_FREEZE_DRY) == EFFECT_SUPER_EFFECTIVE_ON_ARG); ASSUME(GetSpeciesType(SPECIES_MUDKIP, 0) == TYPE_WATER); PLAYER(SPECIES_MUDKIP); - OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_FREEZE_DRY);} + OPPONENT(SPECIES_SKITTY) { Ability(ability); Moves(MOVE_FREEZE_DRY); } } WHEN { TURN { MOVE(opponent, MOVE_FREEZE_DRY); } } SCENE { diff --git a/test/battle/ability/opportunist.c b/test/battle/ability/opportunist.c index 6e5b13dd31..b78ebc96a0 100644 --- a/test/battle/ability/opportunist.c +++ b/test/battle/ability/opportunist.c @@ -218,7 +218,7 @@ DOUBLE_BATTLE_TEST("Opportunist copies the stat of each Pokémon that were raise OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); @@ -281,7 +281,7 @@ SINGLE_BATTLE_TEST("Opportunist and Mirror Herb stack stat increases") PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); Item(ITEM_MIRROR_HERB); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST); @@ -303,7 +303,7 @@ DOUBLE_BATTLE_TEST("Opportunist and Mirror Herb resolve correctly") OPPONENT(SPECIES_MEOWSCARADA) { Item(ITEM_MIRROR_HERB); } OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); Item(ITEM_MIRROR_HERB); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_INTREPID_SWORD); ABILITY_POPUP(opponentRight, ABILITY_OPPORTUNIST); diff --git a/test/battle/ability/overcoat.c b/test/battle/ability/overcoat.c index b0e8984bec..7346691c46 100644 --- a/test/battle/ability/overcoat.c +++ b/test/battle/ability/overcoat.c @@ -78,8 +78,8 @@ SINGLE_BATTLE_TEST("Overcoat blocks Effect Spore's effect (Gen6+)") PARAMETRIZE { config = GEN_6; } GIVEN { WITH_CONFIG(CONFIG_POWDER_OVERCOAT, config); - PLAYER(SPECIES_PINECO) {Ability(ABILITY_OVERCOAT);} - OPPONENT(SPECIES_SHROOMISH) {Ability(ABILITY_EFFECT_SPORE);} + PLAYER(SPECIES_PINECO) { Ability(ABILITY_OVERCOAT); } + OPPONENT(SPECIES_SHROOMISH) { Ability(ABILITY_EFFECT_SPORE); } } WHEN { TURN { MOVE(player, MOVE_TACKLE, WITH_RNG(RNG_EFFECT_SPORE, 1)); } } SCENE { diff --git a/test/battle/ability/own_tempo.c b/test/battle/ability/own_tempo.c index c2b9f4d6d9..06b6f366ff 100644 --- a/test/battle/ability/own_tempo.c +++ b/test/battle/ability/own_tempo.c @@ -6,10 +6,10 @@ SINGLE_BATTLE_TEST("Own Tempo doesn't prevent Intimidate (Gen3-7)") GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_INTIMIDATE); NONE_OF { @@ -24,8 +24,8 @@ SINGLE_BATTLE_TEST("Own Tempo prevents Intimidate but no other stat down changes GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } } WHEN { TURN { MOVE(player, MOVE_SCARY_FACE); } } SCENE { @@ -45,7 +45,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the opponent") GIVEN { ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } } WHEN { TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from moves by the user") GIVEN { ASSUME(MoveHasAdditionalEffectSelf(MOVE_PETAL_DANCE, MOVE_EFFECT_THRASH)); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } } WHEN { TURN { MOVE(opponent, MOVE_PETAL_DANCE); } TURN { MOVE(opponent, MOVE_PETAL_DANCE); } @@ -79,7 +79,7 @@ SINGLE_BATTLE_TEST("Mold Breaker ignores Own Tempo") GIVEN { ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } } WHEN { TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { @@ -92,8 +92,8 @@ SINGLE_BATTLE_TEST("Mold Breaker does not prevent Own Tempo from curing confusio { GIVEN { ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); - PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }; - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + PLAYER(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); } + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } } WHEN { TURN { MOVE(player, MOVE_CONFUSE_RAY); } } SCENE { @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Own Tempo cures confusion if it's obtained via Skill Swap") GIVEN { ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); ASSUME(GetMoveEffect(MOVE_SKILL_SWAP) == EFFECT_SKILL_SWAP); - PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); }; + PLAYER(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CONFUSE_RAY); } @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Own Tempo prevents confusion from items") GIVEN { ASSUME(gItemsInfo[ITEM_BERSERK_GENE].holdEffect == HOLD_EFFECT_BERSERK_GENE); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); Item(ITEM_BERSERK_GENE); }; + OPPONENT(SPECIES_SLOWPOKE) { Ability(ABILITY_OWN_TEMPO); Item(ITEM_BERSERK_GENE); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { diff --git a/test/battle/ability/poison_heal.c b/test/battle/ability/poison_heal.c index 2ee7620c62..9d7acc38a8 100644 --- a/test/battle/ability/poison_heal.c +++ b/test/battle/ability/poison_heal.c @@ -28,8 +28,8 @@ SINGLE_BATTLE_TEST("Poison Heal heals from Toxic Poison damage are constant") PLAYER(SPECIES_SHROOMISH) { Ability(ABILITY_POISON_HEAL); Status1(STATUS1_TOXIC_POISON); HP(1), MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_POISON_HEAL); MESSAGE("The poisoning healed Shroomish a little bit!"); diff --git a/test/battle/ability/poison_puppeteer.c b/test/battle/ability/poison_puppeteer.c index db27691415..6956271236 100644 --- a/test/battle/ability/poison_puppeteer.c +++ b/test/battle/ability/poison_puppeteer.c @@ -54,7 +54,7 @@ SINGLE_BATTLE_TEST("Poison Puppeteer does not trigger if poison is Toxic Spikes OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_TOXIC_SPIKES);} + TURN { MOVE(player, MOVE_TOXIC_SPIKES); } TURN { SWITCH(opponent, 1); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player); diff --git a/test/battle/ability/poison_touch.c b/test/battle/ability/poison_touch.c index 6678394e6f..e3775d7427 100644 --- a/test/battle/ability/poison_touch.c +++ b/test/battle/ability/poison_touch.c @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Poison Touch applies between multi-hit move hits") ASSUME(MoveMakesContact(MOVE_ARM_THRUST)); ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); PLAYER(SPECIES_GRIMER) { Ability(ABILITY_POISON_TOUCH); } - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); } } WHEN { TURN { MOVE(player, MOVE_ARM_THRUST); } } SCENE { diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c index 7e170570cf..0f1fcd0930 100644 --- a/test/battle/ability/prankster.c +++ b/test/battle/ability/prankster.c @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves called via Assist don't affect Dark WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen); PLAYER(SPECIES_UMBREON); OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } - OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CONFUSE_RAY); }; + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CONFUSE_RAY); } } WHEN { TURN { MOVE(opponent, MOVE_ASSIST); } } SCENE { @@ -89,7 +89,7 @@ DOUBLE_BATTLE_TEST("Prankster-affected moves called via Instruct do not affect D GIVEN { WITH_CONFIG(CONFIG_PRANKSTER_DARK_TYPES, gen); PLAYER(SPECIES_VOLBEAT) { Speed(20); Ability(ABILITY_PRANKSTER); } - PLAYER(SPECIES_WOBBUFFET) { Speed(10);} + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } OPPONENT(SPECIES_UMBREON) { Speed(15); } OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } OPPONENT(SPECIES_UMBREON) { Speed(1); } @@ -134,7 +134,7 @@ DOUBLE_BATTLE_TEST("Moves called via Prankster-affected After you affect Dark-ty { GIVEN { PLAYER(SPECIES_VOLBEAT) { Speed(1); Ability(ABILITY_PRANKSTER); } - PLAYER(SPECIES_WOBBUFFET) { Speed(1);} + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } OPPONENT(SPECIES_UMBREON) { Speed(10); } OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } } WHEN { diff --git a/test/battle/ability/primordial_sea.c b/test/battle/ability/primordial_sea.c index a34eb97b5c..7cf8dee531 100644 --- a/test/battle/ability/primordial_sea.c +++ b/test/battle/ability/primordial_sea.c @@ -10,7 +10,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves") { GIVEN { - PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_EMBER); } @@ -35,10 +35,10 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th ASSUME(!IsBattleMoveStatus(MOVE_ERUPTION)); ASSUME(GetMoveType(MOVE_ERUPTION) == TYPE_FIRE); ASSUME(GetMoveTarget(MOVE_ERUPTION) == MOVE_TARGET_BOTH); - PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB); {Speed(5);}} - PLAYER(SPECIES_WOBBUFFET) {Speed(5);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(10);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(8);} + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } } WHEN { TURN { MOVE(opponentLeft, MOVE_ERUPTION); } } SCENE { @@ -55,8 +55,8 @@ DOUBLE_BATTLE_TEST("Primordial Sea blocks damaging Fire-type moves and prints th SINGLE_BATTLE_TEST("Primordial Sea does not block a move if Pokémon is asleep and uses a Fire-type move") // Sleep/confusion/paralysis all happen before the check for primal weather { GIVEN { - PLAYER(SPECIES_KYOGRE) {Item(ITEM_BLUE_ORB);} - OPPONENT(SPECIES_WOBBUFFET) {Status1(STATUS1_SLEEP);} + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); } + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } } WHEN { TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c index a080e90a11..aca8e6fbf9 100644 --- a/test/battle/ability/protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Protosynthesis ability pop up activates only once during the GIVEN { WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_WALKING_WAKE) { Ability(ABILITY_PROTOSYNTHESIS); } - OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); }; + OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); } } WHEN { for (turns = 0; turns < 5; turns++) TURN {} @@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Protosynthesis activates on switch-in") GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_ROARING_MOON) { Ability(ABILITY_PROTOSYNTHESIS); } - OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); }; + OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); } } WHEN { TURN { SWITCH(player, 1); } } SCENE { @@ -113,7 +113,7 @@ SINGLE_BATTLE_TEST("Protosynthesis prioritizes stats in the case of a tie in the PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Attack(stats[0]); Defense(stats[1]); SpAttack(stats[2]); SpDefense(stats[3]); Speed(stats[4]); } OPPONENT(SPECIES_GROUDON) { Ability(ABILITY_DROUGHT); Speed(5); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_DROUGHT); ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); @@ -176,7 +176,7 @@ SINGLE_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an PLAYER(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_UTILITY_UMBRELLA); } OPPONENT(SPECIES_NINETALES) { Ability(ABILITY_DROUGHT); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_DROUGHT); ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c index 80dc786117..df348752fb 100644 --- a/test/battle/ability/purifying_salt.c +++ b/test/battle/ability/purifying_salt.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Purifying Salt halves damage from dynamic Ghost-type moves", SINGLE_BATTLE_TEST("Purifying Salt makes Rest fail") { GIVEN { - PLAYER(SPECIES_GARGANACL) { Ability(ABILITY_PURIFYING_SALT); HP(1); MaxHP(100);} + PLAYER(SPECIES_GARGANACL) { Ability(ABILITY_PURIFYING_SALT); HP(1); MaxHP(100); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_REST); } diff --git a/test/battle/ability/quark_drive.c b/test/battle/ability/quark_drive.c index 3523f7dca4..bdb8a26201 100644 --- a/test/battle/ability/quark_drive.c +++ b/test/battle/ability/quark_drive.c @@ -143,7 +143,7 @@ SINGLE_BATTLE_TEST("Quark Drive activates on switch-in") GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_IRON_MOTH) { Ability(ABILITY_QUARK_DRIVE); } - OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { TURN { SWITCH(player, 1); } } SCENE { @@ -159,9 +159,9 @@ SINGLE_BATTLE_TEST("Quark Drive activates on Electric Terrain even if not ground GIVEN { ASSUME(GetSpeciesType(SPECIES_IRON_JUGULIS, 0) == TYPE_FLYING || GetSpeciesType(SPECIES_IRON_JUGULIS, 1) == TYPE_FLYING); PLAYER(SPECIES_IRON_JUGULIS) { Ability(ABILITY_QUARK_DRIVE); } - OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); @@ -180,7 +180,7 @@ SINGLE_BATTLE_TEST("Quark Drive prioritizes stats in the case of a tie in the fo PLAYER(SPECIES_IRON_TREADS) { Ability(ABILITY_QUARK_DRIVE); Attack(stats[0]); Defense(stats[1]); SpAttack(stats[2]); SpDefense(stats[3]); Speed(stats[4]); } OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Speed(5); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); diff --git a/test/battle/ability/rattled.c b/test/battle/ability/rattled.c index e5e7b3b03e..485ce9daf0 100644 --- a/test/battle/ability/rattled.c +++ b/test/battle/ability/rattled.c @@ -21,8 +21,8 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when hit by Bug, Dark or Ghost typ PARAMETRIZE { move = MOVE_SHADOW_PUNCH; } PARAMETRIZE { move = MOVE_SCRATCH; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) {Speed(42) ;} - OPPONENT(SPECIES_SUDOWOODO) {Speed(40); Ability(ABILITY_RATTLED);} + PLAYER(SPECIES_WOBBUFFET) { Speed(42) ; } + OPPONENT(SPECIES_SUDOWOODO) { Speed(40); Ability(ABILITY_RATTLED); } } WHEN { TURN { MOVE(player, move); } TURN { MOVE(player, move); } @@ -56,8 +56,8 @@ SINGLE_BATTLE_TEST("Rattled does not boost speed by 1 when affected by Intimidat { GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); - PLAYER(SPECIES_GYARADOS) {Ability(ABILITY_INTIMIDATE); } - OPPONENT(SPECIES_SUDOWOODO) {Ability(ABILITY_RATTLED); } + PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); } } WHEN { TURN {} } SCENE { @@ -76,8 +76,8 @@ SINGLE_BATTLE_TEST("Rattled boosts speed by 1 when affected by Intimidate (Gen8+ { GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); - PLAYER(SPECIES_GYARADOS) {Ability(ABILITY_INTIMIDATE); } - OPPONENT(SPECIES_SUDOWOODO) {Ability(ABILITY_RATTLED); } + PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); } } WHEN { TURN {} } SCENE { @@ -97,7 +97,7 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific ASSUME(GetMoveType(MOVE_U_TURN) == TYPE_BUG); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_SUDOWOODO) {Ability(ABILITY_RATTLED); } + OPPONENT(SPECIES_SUDOWOODO) { Ability(ABILITY_RATTLED); } OPPONENT(SPECIES_SUDOWOODO); } WHEN { TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); } diff --git a/test/battle/ability/rivalry.c b/test/battle/ability/rivalry.c index fbb4ba4530..7db0fc1c91 100644 --- a/test/battle/ability/rivalry.c +++ b/test/battle/ability/rivalry.c @@ -66,7 +66,7 @@ SINGLE_BATTLE_TEST("Rivalry doesn't modify power if the attacker is genderless", GIVEN { ASSUME(GetSpeciesAbility(SPECIES_PORYGON, 0) == ABILITY_TRACE); PLAYER(SPECIES_PORYGON) { Ability(ABILITY_TRACE); } // No genderless mon naturally gets Rivalry - OPPONENT(species) { Ability(ability); }; + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Rivalry doesn't modify power if the target is genderless", s PARAMETRIZE { species = SPECIES_NIDOQUEEN; ability = ABILITY_RIVALRY; } GIVEN { - PLAYER(species) { Ability(ability); }; + PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_PORYGON); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } diff --git a/test/battle/ability/scrappy.c b/test/battle/ability/scrappy.c index 045f7dbde9..58543911f8 100644 --- a/test/battle/ability/scrappy.c +++ b/test/battle/ability/scrappy.c @@ -8,9 +8,9 @@ SINGLE_BATTLE_TEST("Scrappy doesn't prevent Intimidate (Gen4-7)") GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_7); - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); } @@ -36,9 +36,9 @@ SINGLE_BATTLE_TEST("Scrappy prevents Intimidate (Gen8+)") GIVEN { WITH_CONFIG(CONFIG_UPDATED_INTIMIDATE, GEN_8); - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); } @@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Scrappy allows to hit Ghost-type Pokémon with Normal- and F PARAMETRIZE { move = MOVE_KARATE_CHOP; } GIVEN { - PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }; + PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); } OPPONENT(SPECIES_GASTLY); } WHEN { TURN { MOVE(player, move); } @@ -79,8 +79,8 @@ SINGLE_BATTLE_TEST("Scrappy doesn't bypass a Ghost-type's Wonder Guard") PARAMETRIZE { move = MOVE_KARATE_CHOP; } GIVEN { - PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); }; - OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); }; + PLAYER(SPECIES_KANGASKHAN) { Ability(ABILITY_SCRAPPY); } + OPPONENT(SPECIES_SHEDINJA) { Ability(ABILITY_WONDER_GUARD); } } WHEN { TURN { MOVE(player, move); } } SCENE { diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index 0f64fbf904..701c96360e 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Present", s16 damage) } WHEN { //Test will fail if present heals because the hp change would be 0 //so we want a damaging version of present - TURN { MOVE(player, MOVE_PRESENT, WITH_RNG(RNG_PRESENT, 1)); } + TURN { MOVE(player, MOVE_PRESENT, WITH_RNG(RNG_PRESENT, 1)); } } SCENE { HP_BAR(opponent, captureDamage: &results[i].damage); } FINALLY { @@ -219,7 +219,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Double Shock", s16 damage) PARAMETRIZE { move = MOVE_CELEBRATE; } GIVEN { PLAYER(SPECIES_PIKACHU); - OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_DOUBLE_SHOCK); } } SCENE { @@ -270,7 +270,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Aura Wheel", s16 damage) PARAMETRIZE { move = MOVE_CELEBRATE; } GIVEN { PLAYER(SPECIES_MORPEKO); - OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_AURA_WHEEL); } } SCENE { @@ -287,7 +287,7 @@ SINGLE_BATTLE_TEST("Sheer Force doesn't boost Hyperspace Fury", s16 damage) PARAMETRIZE { move = MOVE_CELEBRATE; } GIVEN { PLAYER(SPECIES_HOOPA_UNBOUND); - OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_TAUROS) { Ability(ABILITY_SHEER_FORCE); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_HYPERSPACE_FURY); } } SCENE { @@ -664,11 +664,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -752,11 +752,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -840,11 +840,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -928,11 +928,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -1016,11 +1016,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -1104,11 +1104,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -1192,11 +1192,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -1280,11 +1280,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } @@ -1369,11 +1369,11 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to case EFFECT_SOLAR_BEAM: case EFFECT_SKY_DROP: TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } - TURN { ; } + TURN {} break; case EFFECT_FUTURE_SIGHT: - TURN { ; } - TURN { ; } + TURN {} + TURN {} break; case EFFECT_BIDE: TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } diff --git a/test/battle/ability/shields_down.c b/test/battle/ability/shields_down.c index 554e67b0d8..d16aa240da 100644 --- a/test/battle/ability/shields_down.c +++ b/test/battle/ability/shields_down.c @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Minior Core transforms into Minior Meteor on battle start if PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_MINIOR_CORE) { Ability(ABILITY_SHIELDS_DOWN); HP(51); MaxHP(101); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_SHIELDS_DOWN); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, opponent); diff --git a/test/battle/ability/stamina.c b/test/battle/ability/stamina.c index 39113fd15a..0d377f276f 100644 --- a/test/battle/ability/stamina.c +++ b/test/battle/ability/stamina.c @@ -20,8 +20,8 @@ SINGLE_BATTLE_TEST("Stamina raises Defense by 1 when hit by a move") s16 turnOneHit, turnTwoHit; u16 move; - PARAMETRIZE {move = MOVE_SCRATCH; } - PARAMETRIZE {move = MOVE_GUST; } + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_GUST; } GIVEN { ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH)); @@ -51,18 +51,18 @@ DOUBLE_BATTLE_TEST("Stamina activates correctly for every battler with the abili { enum Ability abilityLeft, abilityRight; - PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_STAMINA; } - PARAMETRIZE {abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_NONE; } - PARAMETRIZE {abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_STAMINA; } + PARAMETRIZE { abilityLeft = ABILITY_NONE, abilityRight = ABILITY_STAMINA; } + PARAMETRIZE { abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_NONE; } + PARAMETRIZE { abilityLeft = ABILITY_STAMINA, abilityRight = ABILITY_STAMINA; } GIVEN { ASSUME(GetMoveTarget(MOVE_EARTHQUAKE) == MOVE_TARGET_FOES_AND_ALLY); PLAYER(SPECIES_WOBBUFFET) { Ability(abilityLeft); Speed(10); } PLAYER(SPECIES_WOBBUFFET) { Ability(abilityRight); Speed(5); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(20); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(15); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_EARTHQUAKE);} + TURN { MOVE(opponentLeft, MOVE_EARTHQUAKE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, opponentLeft); diff --git a/test/battle/ability/stench.c b/test/battle/ability/stench.c index 84cbf20f64..e6a5c9cdcc 100644 --- a/test/battle/ability/stench.c +++ b/test/battle/ability/stench.c @@ -63,7 +63,7 @@ DOUBLE_BATTLE_TEST("Stench doesn't trigger if partner uses a move") PLAYER(SPECIES_WOBBUFFET) { Speed(20); } PLAYER(SPECIES_WYNAUT) { Speed(10); } OPPONENT(SPECIES_GRIMER) { Speed(100); Ability(ABILITY_STENCH); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { TURN { MOVE(playerLeft, MOVE_FAKE_OUT, target: opponentLeft); diff --git a/test/battle/ability/super_luck.c b/test/battle/ability/super_luck.c index 16dfc081a9..d271c6ff69 100644 --- a/test/battle/ability/super_luck.c +++ b/test/battle/ability/super_luck.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by 1 stage") GIVEN { ASSUME(GetSpeciesBaseSpeed(SPECIES_TOGEPI) == 20); WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); - PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); }; + PLAYER(SPECIES_TOGEPI) { Ability(ABILITY_SUPER_LUCK); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } diff --git a/test/battle/ability/supersweet_syrup.c b/test/battle/ability/supersweet_syrup.c index cd819eda72..572f697757 100644 --- a/test/battle/ability/supersweet_syrup.c +++ b/test/battle/ability/supersweet_syrup.c @@ -34,7 +34,7 @@ DOUBLE_BATTLE_TEST("Supersweet Syrup lowers evasion of both opposing mon's in ba OPPONENT(SPECIES_DIPPLIN) { Ability(ABILITY_SUPERSWEET_SYRUP); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_SUPERSWEET_SYRUP); MESSAGE("A supersweet aroma is wafting from the syrup covering the opposing Dipplin!"); diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c index 759202cc1b..17f9abe7b7 100644 --- a/test/battle/ability/supreme_overlord.c +++ b/test/battle/ability/supreme_overlord.c @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt { GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_KINGAMBIT) { Ability(ABILITY_SUPREME_OVERLORD); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -119,7 +119,7 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_KINGAMBIT) { Ability(ABILITY_SUPREME_OVERLORD); } } WHEN { TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } diff --git a/test/battle/ability/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c index a891f7d5a7..40c84b213f 100644 --- a/test/battle/ability/sword_of_ruin.c +++ b/test/battle/ability/sword_of_ruin.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler { GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_CHIEN_PAO); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_CHIEN_PAO); } WHEN { TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c index 0b58edc793..74ac8c252e 100644 --- a/test/battle/ability/tablets_of_ruin.c +++ b/test/battle/ability/tablets_of_ruin.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl { GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WO_CHIEN); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WO_CHIEN); } WHEN { TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } diff --git a/test/battle/ability/tangling_hair.c b/test/battle/ability/tangling_hair.c index fdae4de06d..ec0798f180 100644 --- a/test/battle/ability/tangling_hair.c +++ b/test/battle/ability/tangling_hair.c @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Tangling Hair does not trigger on Clear Body") { GIVEN { PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); } - OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }; + OPPONENT(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { @@ -103,7 +103,7 @@ SINGLE_BATTLE_TEST("Tangling Hair will trigger if move is boosted by Sheer Force ASSUME(MoveIsAffectedBySheerForce(MOVE_POISON_JAB)); GIVEN { PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_TANGLING_HAIR); } - OPPONENT(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); }; + OPPONENT(SPECIES_NIDOKING) { Ability(ABILITY_SHEER_FORCE); } } WHEN { TURN { MOVE(opponent, MOVE_POISON_JAB); } } SCENE { diff --git a/test/battle/ability/tera_shell.c b/test/battle/ability/tera_shell.c index 55a6c3d626..11a77ca711 100644 --- a/test/battle/ability/tera_shell.c +++ b/test/battle/ability/tera_shell.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Tera Shell makes all moves against Terapagos not very effect PARAMETRIZE { hp = 100; } PARAMETRIZE { hp = 99; } GIVEN { - PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); HP(hp); MaxHP(100);} + PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); HP(hp); MaxHP(100); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } diff --git a/test/battle/ability/tera_shift.c b/test/battle/ability/tera_shift.c index 9149160cd1..9213bf3b1b 100644 --- a/test/battle/ability/tera_shift.c +++ b/test/battle/ability/tera_shift.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Tera Shift transforms Terapagos into its Terastal form on sw PLAYER(SPECIES_TERAPAGOS_NORMAL) { Ability(ABILITY_TERA_SHIFT); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { ; } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_TERA_SHIFT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); @@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Tera Shift can't be suppressed by Neutralizing Gas") PLAYER(SPECIES_TERAPAGOS_NORMAL) { Ability(ABILITY_TERA_SHIFT); } OPPONENT(SPECIES_KOFFING) { Ability(ABILITY_NEUTRALIZING_GAS); } } WHEN { - TURN { ; } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); ABILITY_POPUP(player, ABILITY_TERA_SHIFT); diff --git a/test/battle/ability/teraform_zero.c b/test/battle/ability/teraform_zero.c index f6620d6625..17f086bf08 100644 --- a/test/battle/ability/teraform_zero.c +++ b/test/battle/ability/teraform_zero.c @@ -6,8 +6,8 @@ DOUBLE_BATTLE_TEST("Teraform Zero clears weather and terrain upon activation") GIVEN { PLAYER(SPECIES_TERAPAGOS_TERASTAL); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); } - OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); } + OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { TURN { MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } SCENE { @@ -22,9 +22,9 @@ DOUBLE_BATTLE_TEST("Teraform Zero can be supressed") GIVEN { PLAYER(SPECIES_TERAPAGOS_TERASTAL); PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); } - OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); } - OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); } + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } SCENE { @@ -87,10 +87,10 @@ DOUBLE_BATTLE_TEST("Teraform Zero shouldn't cause Neutralizing Gas to show it's { GIVEN { PLAYER(SPECIES_TERAPAGOS_TERASTAL); - PLAYER(SPECIES_ABSOL) {Ability(ABILITY_PRESSURE); } - PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); } - OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); } - OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); } + PLAYER(SPECIES_ABSOL) { Ability(ABILITY_PRESSURE); } + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + OPPONENT(SPECIES_KYOGRE) { Ability(ABILITY_DRIZZLE); } + OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } } SCENE { diff --git a/test/battle/ability/toxic_debris.c b/test/battle/ability/toxic_debris.c index 4661849905..587cb846ed 100644 --- a/test/battle/ability/toxic_debris.c +++ b/test/battle/ability/toxic_debris.c @@ -11,8 +11,8 @@ SINGLE_BATTLE_TEST("Toxic Debris sets Toxic Spikes on the opposing side if hit b { u32 move; - PARAMETRIZE { move = MOVE_SCRATCH;} - PARAMETRIZE { move = MOVE_SWIFT;} + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_SWIFT; } GIVEN { PLAYER(SPECIES_GLIMMORA) { Ability(ABILITY_TOXIC_DEBRIS); } diff --git a/test/battle/ability/trace.c b/test/battle/ability/trace.c index 71d5035084..d52da66468 100644 --- a/test/battle/ability/trace.c +++ b/test/battle/ability/trace.c @@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Trace copies opponents ability") PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); } OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); MESSAGE("It traced the opposing Torchic's Blaze!"); @@ -48,7 +48,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly") { enum Ability ability1, ability2; - PARAMETRIZE { ability1 = ABILITY_SPEED_BOOST; ability2 = ABILITY_BLAZE;} + PARAMETRIZE { ability1 = ABILITY_SPEED_BOOST; ability2 = ABILITY_BLAZE; } PARAMETRIZE { ability1 = ABILITY_BLAZE; ability2 = ABILITY_SPEED_BOOST; } PASSES_RANDOMLY(1, 2, RNG_TRACE); @@ -58,7 +58,7 @@ DOUBLE_BATTLE_TEST("Trace copies opponents ability randomly") OPPONENT(SPECIES_TORCHIC) { Ability(ability1); } OPPONENT(SPECIES_TORCHIC) { Ability(ability2); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_TRACE); MESSAGE("It traced the opposing Torchic's Blaze!"); @@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Trace copies opponent's Intimidate and triggers it immediate PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); } OPPONENT(SPECIES_MASQUERAIN) { Ability(ABILITY_INTIMIDATE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_TRACE); ABILITY_POPUP(player, ABILITY_INTIMIDATE); @@ -103,7 +103,7 @@ DOUBLE_BATTLE_TEST("Trace respects the turn order") OPPONENT(SPECIES_HIPPOWDON) { Speed(10); Ability(ABILITY_SAND_STREAM); } OPPONENT(SPECIES_DEOXYS_SPEED) { Speed(30); Ability(ABILITY_PRESSURE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_PRESSURE); ABILITY_POPUP(opponentRight, ABILITY_PRESSURE); diff --git a/test/battle/ability/unburden.c b/test/battle/ability/unburden.c index 4498bb4922..5f13692935 100644 --- a/test/battle/ability/unburden.c +++ b/test/battle/ability/unburden.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Unburden doubles speed once user uses item") OPPONENT(SPECIES_RILLABOOM) { Speed(7); Ability(ABILITY_GRASSY_SURGE); } } WHEN { TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 1); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponent); ABILITY_POPUP(opponent, ABILITY_GRASSY_SURGE); @@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Unburden doubles speed once user gets their item knocked off OPPONENT(SPECIES_WOBBUFFET) { Speed(7); } } WHEN { TURN { MOVE(opponent, MOVE_KNOCK_OFF); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF, player); @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Unburden doesn't activate when item is consumed in Neutraliz } WHEN { TURN { MOVE(opponent, MOVE_KNOCK_OFF); } TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 1); } - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); @@ -81,7 +81,7 @@ SINGLE_BATTLE_TEST("Unburden doubling speed effect is ignored by Neutralizing Ga TURN { MOVE(opponent, MOVE_KNOCK_OFF); } TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 1); } TURN { MOVE(opponent, MOVE_U_TURN); SEND_OUT(opponent, 0); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF, player); diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c index a1eabbcf5a..048b951964 100644 --- a/test/battle/ability/unnerve.c +++ b/test/battle/ability/unnerve.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Unnerve prevents opposing Pokémon from eating their own ber PLAYER(mon) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RAWST_BERRY); Status1(STATUS1_BURN); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ability); NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); @@ -104,7 +104,7 @@ DOUBLE_BATTLE_TEST("Unnerve stops applying on death but applies on revive") { u16 mon; u16 ability; - PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE;} + PARAMETRIZE { mon = SPECIES_JOLTIK, ability = ABILITY_UNNERVE; } PARAMETRIZE { mon = SPECIES_CALYREX_ICE, ability = ABILITY_AS_ONE_ICE_RIDER; } GIVEN { ASSUME(gItemsInfo[ITEM_RAWST_BERRY].holdEffect == HOLD_EFFECT_CURE_BRN); diff --git a/test/battle/ability/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c index 1a075db8cf..18ac502c08 100644 --- a/test/battle/ability/vessel_of_ruin.c +++ b/test/battle/ability/vessel_of_ruin.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle { GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_TING_LU); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_TING_LU); } WHEN { TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c index c78df34190..aacf1811ae 100644 --- a/test/battle/ability/wind_power.c +++ b/test/battle/ability/wind_power.c @@ -21,12 +21,12 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for player when hit by a wind move s16 dmgBefore, dmgAfter; u16 move; - PARAMETRIZE {move = MOVE_SCRATCH; } - PARAMETRIZE {move = MOVE_AIR_CUTTER; } + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_AIR_CUTTER; } GIVEN { PLAYER(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(10); } - OPPONENT(SPECIES_PERSIAN) {Ability(ABILITY_LIMBER); Speed(5) ;} // Limber, so it doesn't get paralyzed. + OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(5); } // Limber, so it doesn't get paralyzed. } WHEN { TURN { MOVE(player, MOVE_NUZZLE), MOVE(opponent, move); } TURN { MOVE(player, MOVE_NUZZLE), MOVE(opponent, move); } @@ -66,11 +66,11 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for opponent when hit by a wind mo s16 dmgBefore, dmgAfter; u16 move; - PARAMETRIZE {move = MOVE_SCRATCH; } - PARAMETRIZE {move = MOVE_AIR_CUTTER; } + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_AIR_CUTTER; } GIVEN { - PLAYER(SPECIES_PERSIAN) {Ability(ABILITY_LIMBER); Speed(5) ;} // Limber, so it doesn't get paralyzed. + PLAYER(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(5); } // Limber, so it doesn't get paralyzed. OPPONENT(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(10); } } WHEN { TURN { MOVE(opponent, MOVE_NUZZLE), MOVE(player, move); } @@ -111,12 +111,12 @@ SINGLE_BATTLE_TEST("Wind Power sets up Charge for only one attack when hit by a s16 dmgCharged, dmgAfter; u16 move; - PARAMETRIZE {move = MOVE_SCRATCH; } - PARAMETRIZE {move = MOVE_AIR_CUTTER; } + PARAMETRIZE { move = MOVE_SCRATCH; } + PARAMETRIZE { move = MOVE_AIR_CUTTER; } GIVEN { PLAYER(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(5); } - OPPONENT(SPECIES_PERSIAN) {Ability(ABILITY_LIMBER); Speed(10) ;} // Limber, so it doesn't get paralyzed. + OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(10); } // Limber, so it doesn't get paralyzed. } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_NUZZLE); } TURN { MOVE(player, MOVE_NUZZLE); } @@ -148,9 +148,9 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab { enum Ability abilityLeft, abilityRight; - PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER;} - PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; } - PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; } + PARAMETRIZE { abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER; } + PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; } + PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; } GIVEN { PLAYER(SPECIES_WATTREL) { Ability(abilityLeft); Speed(10); } @@ -158,7 +158,7 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(20); } OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(15); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_AIR_CUTTER); MOVE(opponentRight, MOVE_AIR_CUTTER);} + TURN { MOVE(opponentLeft, MOVE_AIR_CUTTER); MOVE(opponentRight, MOVE_AIR_CUTTER); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_AIR_CUTTER, opponentLeft); @@ -189,9 +189,9 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab { enum Ability abilityLeft, abilityRight; - PARAMETRIZE {abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER; } - PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; } - PARAMETRIZE {abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; } + PARAMETRIZE { abilityLeft = ABILITY_NONE, abilityRight = ABILITY_WIND_POWER; } + PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_NONE; } + PARAMETRIZE { abilityLeft = ABILITY_WIND_POWER, abilityRight = ABILITY_WIND_POWER; } GIVEN { PLAYER(SPECIES_WATTREL) { Ability(abilityLeft); Speed(10); } @@ -199,7 +199,7 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(20); } OPPONENT(SPECIES_PERSIAN) { Ability(ABILITY_LIMBER); Speed(15); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_PETAL_BLIZZARD);} + TURN { MOVE(opponentLeft, MOVE_PETAL_BLIZZARD); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_PETAL_BLIZZARD, opponentLeft); @@ -228,8 +228,8 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly when Tailwind is used") { bool8 opponentSide; - PARAMETRIZE {opponentSide = TRUE;} - PARAMETRIZE {opponentSide = FALSE;} + PARAMETRIZE { opponentSide = TRUE; } + PARAMETRIZE { opponentSide = FALSE; } GIVEN { ASSUME(GetMoveEffect(MOVE_TAILWIND) == EFFECT_TAILWIND); @@ -238,7 +238,7 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly when Tailwind is used") OPPONENT(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(20); } OPPONENT(SPECIES_WATTREL) { Ability(ABILITY_WIND_POWER); Speed(15); } } WHEN { - TURN { MOVE((opponentSide == TRUE) ? opponentLeft : playerLeft, MOVE_TAILWIND);} + TURN { MOVE((opponentSide == TRUE) ? opponentLeft : playerLeft, MOVE_TAILWIND); } } SCENE { if (opponentSide) { ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); diff --git a/test/battle/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c index 7df3f07702..9b4b362d75 100644 --- a/test/battle/ability/zero_to_hero.c +++ b/test/battle/ability/zero_to_hero.c @@ -141,7 +141,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); PLAYER(SPECIES_PALAFIN_ZERO); - PLAYER(SPECIES_WOBBUFFET) { HP(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PALAFIN_ZERO); - OPPONENT(SPECIES_WOBBUFFET) { HP(1);} + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } } WHEN { TURN { MOVE(opponent, MOVE_FLIP_TURN); SEND_OUT(opponent, 1); } TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 0); } diff --git a/test/battle/ai/ai.c b/test/battle/ai/ai.c index 0cb4a97375..43c6740f48 100644 --- a/test/battle/ai/ai.c +++ b/test/battle/ai/ai.c @@ -236,7 +236,7 @@ AI_SINGLE_BATTLE_TEST("AI prefers moves with the best possible score, chosen ran { GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_WOBBUFFET) { HP(5); }; + PLAYER(SPECIES_WOBBUFFET) { HP(5); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB, MOVE_TAKE_DOWN); } } WHEN { @@ -253,7 +253,7 @@ AI_SINGLE_BATTLE_TEST("AI can choose a status move that boosts the attack by two ASSUME(GetMoveCategory(MOVE_STRENGTH) == DAMAGE_CATEGORY_PHYSICAL); ASSUME(GetMoveCategory(MOVE_HORN_ATTACK) == DAMAGE_CATEGORY_PHYSICAL); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_WOBBUFFET) { HP(277); }; + PLAYER(SPECIES_WOBBUFFET) { HP(277); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_KANGASKHAN) { Moves(MOVE_STRENGTH, MOVE_HORN_ATTACK, MOVE_SWORDS_DANCE); } } WHEN { @@ -292,7 +292,7 @@ AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking OPPONENT(SPECIES_GEODUDE) { Moves(move1, move2, move3, move4); Ability(abilityAtk); Item(holdItemAtk); } } WHEN { TURN { if (expectedMove2 == MOVE_NONE) { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } - else {EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1);} + else { EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1); } } } SCENE { @@ -322,7 +322,7 @@ AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking OPPONENT(SPECIES_GEODUDE) { Moves(move1, move2, move3, move4); Ability(abilityAtk); Item(holdItemAtk); } } WHEN { TURN { if (expectedMove2 == MOVE_NONE) { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } - else {EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1);} + else { EXPECT_MOVES(opponent, expectedMove, expectedMove2); SCORE_EQ(opponent, expectedMove, expectedMove2); SEND_OUT(player, 1); } } } SCENE { @@ -490,7 +490,7 @@ AI_SINGLE_BATTLE_TEST("AI will only choose Surf 1/3 times if the opposing mon ha GIVEN { ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); } OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); } } WHEN { TURN { EXPECT_MOVE(opponent, MOVE_SURF); } @@ -507,7 +507,7 @@ AI_SINGLE_BATTLE_TEST("AI will choose Thunderbolt then Surf 2/3 times if the opp GIVEN { ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); } OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); } } WHEN { TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } @@ -522,8 +522,8 @@ AI_SINGLE_BATTLE_TEST("AI will choose Scratch over Power-up Punch with Contrary" { enum Ability ability; - PARAMETRIZE {ability = ABILITY_SUCTION_CUPS; } - PARAMETRIZE {ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_SUCTION_CUPS; } + PARAMETRIZE { ability = ABILITY_CONTRARY; } GIVEN { ASSUME(GetMovePower(MOVE_SCRATCH) == 40); ASSUME(GetMoveType(MOVE_SCRATCH) == TYPE_NORMAL); @@ -548,8 +548,8 @@ AI_SINGLE_BATTLE_TEST("AI will choose Superpower over Outrage with Contrary") { enum Ability ability; - PARAMETRIZE {ability = ABILITY_SUCTION_CUPS; } - PARAMETRIZE {ability = ABILITY_CONTRARY; } + PARAMETRIZE { ability = ABILITY_SUCTION_CUPS; } + PARAMETRIZE { ability = ABILITY_CONTRARY; } GIVEN { ASSUME(GetMovePower(MOVE_SUPERPOWER) == 120); ASSUME(GetMoveType(MOVE_SUPERPOWER) == TYPE_FIGHTING); @@ -944,10 +944,10 @@ AI_SINGLE_BATTLE_TEST("AI will prefer resisted move over failing move") GIVEN { WITH_CONFIG(CONFIG_POWDER_GRASS, GEN_6); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY); - PLAYER(SPECIES_ROSELIA) { Moves(MOVE_ABSORB); }; + PLAYER(SPECIES_ROSELIA) { Moves(MOVE_ABSORB); } OPPONENT(SPECIES_GLOOM) { Moves(MOVE_MEGA_DRAIN, MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_SYNTHESIS); } } WHEN { - TURN { MOVE(player, MOVE_ABSORB); EXPECT_MOVE(opponent, MOVE_MEGA_DRAIN);} + TURN { MOVE(player, MOVE_ABSORB); EXPECT_MOVE(opponent, MOVE_MEGA_DRAIN); } } } diff --git a/test/battle/ai/ai_calc_best_move_score.c b/test/battle/ai/ai_calc_best_move_score.c index 7fcf0ced24..715d30c1f5 100644 --- a/test/battle/ai/ai_calc_best_move_score.c +++ b/test/battle/ai/ai_calc_best_move_score.c @@ -15,7 +15,7 @@ AI_SINGLE_BATTLE_TEST("AI will not further increase Attack / Sp. Atk stat if it || GetMoveEffect(MOVE_HOWL) == EFFECT_ATTACK_UP_USER_ALLY); ASSUME(GetMoveEffect(MOVE_CALM_MIND) == EFFECT_CALM_MIND); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_CELEBRATE); }; + PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_CELEBRATE); } OPPONENT(SPECIES_KANGASKHAN) { Speed(20); Moves(MOVE_CHIP_AWAY, MOVE_SWIFT, move); } } WHEN { TURN { MOVE(player, MOVE_SKY_UPPERCUT); EXPECT_MOVE(opponent, move); } @@ -36,7 +36,7 @@ AI_SINGLE_BATTLE_TEST("AI will not further increase Attack / Sp. Atk stat if it || GetMoveEffect(MOVE_HOWL) == EFFECT_ATTACK_UP_USER_ALLY); ASSUME(GetMoveEffect(MOVE_CALM_MIND) == EFFECT_CALM_MIND); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); }; + PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); } OPPONENT(SPECIES_KANGASKHAN) { Speed(15); Moves(MOVE_CHIP_AWAY, MOVE_SWIFT, move); } } WHEN { TURN { MOVE(player, MOVE_DOUBLE_KICK); EXPECT_MOVE(opponent, move); } @@ -48,7 +48,7 @@ AI_SINGLE_BATTLE_TEST("AI will increase speed if it is slower") { GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); }; + PLAYER(SPECIES_COMBUSKEN) { Speed(20); Moves(MOVE_DOUBLE_KICK, MOVE_CELEBRATE); } OPPONENT(SPECIES_KANGASKHAN) { Speed(15); Moves(MOVE_CHIP_AWAY, MOVE_AGILITY); } } WHEN { TURN { MOVE(player, MOVE_DOUBLE_KICK); EXPECT_MOVE(opponent, MOVE_AGILITY); } @@ -69,7 +69,7 @@ AI_SINGLE_BATTLE_TEST("AI will not waste a turn setting up if it knows target ca || GetMoveEffect(MOVE_HOWL) == EFFECT_ATTACK_UP_USER_ALLY); ASSUME(GetMoveEffect(MOVE_CALM_MIND) == EFFECT_CALM_MIND); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); - PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_DOUBLE_KICK, MOVE_FLAME_WHEEL, MOVE_CELEBRATE); }; + PLAYER(SPECIES_COMBUSKEN) { Speed(15); Moves(MOVE_SKY_UPPERCUT, MOVE_DOUBLE_KICK, MOVE_FLAME_WHEEL, MOVE_CELEBRATE); } OPPONENT(SPECIES_KANGASKHAN) { Speed(20); Moves(MOVE_CHIP_AWAY, MOVE_SWIFT, move); } } WHEN { TURN { MOVE(player, MOVE_DOUBLE_KICK); EXPECT_MOVE(opponent, move); } @@ -86,12 +86,12 @@ AI_SINGLE_BATTLE_TEST("AI will not use Throat Chop if opposing mon has a better ASSUME(GetMovePower(MOVE_FLAME_BURST) == 70); ASSUME(MoveHasAdditionalEffect(MOVE_THROAT_CHOP, MOVE_EFFECT_THROAT_CHOP) == TRUE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_DISARMING_VOICE, MOVE_FLAME_BURST); }; + PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_DISARMING_VOICE, MOVE_FLAME_BURST); } OPPONENT(SPECIES_WOBBUFFET) { Speed(20); Moves(MOVE_THROAT_CHOP, MOVE_PSYCHIC_FANGS); } } WHEN { TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST); } TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_DISARMING_VOICE); } - TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST);} + TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST); } } } @@ -104,12 +104,12 @@ AI_SINGLE_BATTLE_TEST("AI will select Throat Chop if the sound move is the best ASSUME(GetMovePower(MOVE_FLAME_BURST) == 70); ASSUME(GetMovePower(MOVE_HYPER_VOICE) == 90); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); - PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_HYPER_VOICE, MOVE_FLAME_BURST); }; + PLAYER(SPECIES_REGIROCK) { Speed(15); Moves(MOVE_HYPER_VOICE, MOVE_FLAME_BURST); } OPPONENT(SPECIES_WOBBUFFET) { Speed(20); Moves(MOVE_THROAT_CHOP, MOVE_PSYCHIC_FANGS); } } WHEN { TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_FLAME_BURST); } TURN { EXPECT_MOVE(opponent, MOVE_PSYCHIC_FANGS); MOVE(player, MOVE_HYPER_VOICE); } - TURN { EXPECT_MOVE(opponent, MOVE_THROAT_CHOP); MOVE(player, MOVE_HYPER_VOICE);} + TURN { EXPECT_MOVE(opponent, MOVE_THROAT_CHOP); MOVE(player, MOVE_HYPER_VOICE); } } } diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index 5ec4161a17..0e6170b5fa 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -456,7 +456,7 @@ AI_DOUBLE_BATTLE_TEST("AI sees type-changing moves as the correct type") PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(fieldStatus, MOVE_RETURN, MOVE_TAUNT); } - OPPONENT(species) { Ability(ability); Moves(MOVE_HYPER_VOICE); } + OPPONENT(species) { Ability(ability); Moves(MOVE_HYPER_VOICE); } } WHEN { if (ability != ABILITY_NONE) TURN { EXPECT_MOVE(opponentLeft, fieldStatus); } diff --git a/test/battle/ai/ai_doubles.c b/test/battle/ai/ai_doubles.c index 746789cf5e..f1edc31fbb 100644 --- a/test/battle/ai/ai_doubles.c +++ b/test/battle/ai/ai_doubles.c @@ -23,11 +23,12 @@ AI_DOUBLE_BATTLE_TEST("AI won't use a Weather changing move if partner already c OPPONENT(SPECIES_WOBBUFFET) { Moves(weatherMoveLeft); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH, weatherMoveRight); } } WHEN { - TURN { NOT_EXPECT_MOVE(opponentRight, weatherMoveRight); - SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerLeft); - SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerRight); - SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:opponentLeft); - } + TURN { + NOT_EXPECT_MOVE(opponentRight, weatherMoveRight); + SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:playerRight); + SCORE_LT_VAL(opponentRight, weatherMoveRight, AI_SCORE_DEFAULT, target:opponentLeft); + } } } @@ -46,11 +47,12 @@ AI_DOUBLE_BATTLE_TEST("AI will not use Helping Hand if partner does not have any OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_SCRATCH); } OPPONENT(SPECIES_WOBBUFFET) { Moves(move1, move2, move3, move4); } } WHEN { - TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); - SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft); - SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerRight); - SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft); - } + TURN { + NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); + SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:playerRight); + SCORE_LT_VAL(opponentLeft, MOVE_HELPING_HAND, AI_SCORE_DEFAULT, target:opponentLeft); + } } SCENE { NOT MESSAGE("The opposing Wobbuffet used Helping Hand!"); } @@ -157,12 +159,13 @@ AI_DOUBLE_BATTLE_TEST("AI will not use a status move if partner already chose He OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_HELPING_HAND, MOVE_EXPLOSION); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH, statusMove, MOVE_WATER_GUN); } } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); - NOT_EXPECT_MOVE(opponentRight, statusMove); - SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerLeft); - SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerRight); - SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft); - } + TURN { + EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); + NOT_EXPECT_MOVE(opponentRight, statusMove); + SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerLeft); + SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:playerRight); + SCORE_LT_VAL(opponentRight, statusMove, AI_SCORE_DEFAULT, target:opponentLeft); + } } SCENE { MESSAGE("The opposing Wobbuffet used Helping Hand!"); } @@ -415,7 +418,7 @@ AI_DOUBLE_BATTLE_TEST("AI will choose Earthquake if it kills both opposing mons" PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_EARTHQUAKE, MOVE_SCRATCH); } - OPPONENT(SPECIES_PARAS) { Moves(MOVE_CELEBRATE); HP(1); } + OPPONENT(SPECIES_PARAS) { Moves(MOVE_CELEBRATE); HP(1); } } WHEN { TURN { EXPECT_MOVE(opponentLeft, MOVE_EARTHQUAKE); } } @@ -437,7 +440,7 @@ AI_DOUBLE_BATTLE_TEST("AI will trigger its ally's Weakness Policy") PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_EARTHQUAKE, MOVE_STOMPING_TANTRUM); } - OPPONENT(species) { Moves(MOVE_CELEBRATE); Item(ITEM_WEAKNESS_POLICY); } + OPPONENT(species) { Moves(MOVE_CELEBRATE); Item(ITEM_WEAKNESS_POLICY); } } WHEN { if (species == SPECIES_INCINEROAR) TURN { EXPECT_MOVE(opponentLeft, MOVE_EARTHQUAKE); } @@ -655,7 +658,7 @@ AI_DOUBLE_BATTLE_TEST("AI sets up terrain for its ally") PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(goodTerrain, badTerrain, MOVE_RETURN, MOVE_TAUNT); } - OPPONENT(SPECIES_WOBBUFFET) { Moves(terrainTrigger, MOVE_EARTH_POWER); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(terrainTrigger, MOVE_EARTH_POWER); } } WHEN { TURN { EXPECT_MOVE(opponentLeft, goodTerrain); } } @@ -724,12 +727,12 @@ AI_DOUBLE_BATTLE_TEST("AI uses Trick Room with both battlers on the turn it expi OPPONENT(SPECIES_WYNAUT) { Moves(MOVE_TRICK_ROOM, MOVE_PSYCHIC); Speed(2); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_TRICK_ROOM, MOVE_PSYCHIC); Speed(1); } } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } - TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } - TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } - TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } - TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } - } + TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); NOT_EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_TRICK_ROOM); EXPECT_MOVE(opponentRight, MOVE_TRICK_ROOM); } + } } AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if it's about to die") @@ -747,10 +750,10 @@ AI_DOUBLE_BATTLE_TEST("AI uses Helping Hand if it's about to die") OPPONENT(SPECIES_WOBBUFFET) { HP(hp); Moves(MOVE_HELPING_HAND, MOVE_MUDDY_WATER); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_MUDDY_WATER); } } WHEN { - if (hp == 1) - TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } - else - TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } + if (hp == 1) + TURN { EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } + else + TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_HELPING_HAND); } } } diff --git a/test/battle/ai/ai_flag_attacks_partner.c b/test/battle/ai/ai_flag_attacks_partner.c index 4f2533fa5b..ddc4ced5fd 100644 --- a/test/battle/ai/ai_flag_attacks_partner.c +++ b/test/battle/ai/ai_flag_attacks_partner.c @@ -26,12 +26,11 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_ATTACKS_PARTNER is willing to kill either the par ASSUME(gSpeciesInfo[SPECIES_ZIGZAGOON].baseDefense == 41); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_ATTACKS_PARTNER); PLAYER(SPECIES_ZIGZAGOON) { Level(50); } - PLAYER(SPECIES_ZIGZAGOON) { Level(16); } + PLAYER(SPECIES_ZIGZAGOON) { Level(16); } OPPONENT(SPECIES_ZIGZAGOON) { Level(50); Moves(move, MOVE_OVERDRIVE, MOVE_TACKLE); } OPPONENT(SPECIES_ZIGZAGOON) { Level(level); Moves(MOVE_CELEBRATE); } } WHEN { - TURN - { + TURN { if (move == MOVE_MIGHTY_CLEAVE) { if (level == 1) @@ -46,7 +45,7 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_ATTACKS_PARTNER is willing to kill either the par else EXPECT_MOVE(opponentLeft, MOVE_OVERDRIVE); } - } + } } } @@ -59,18 +58,16 @@ AI_DOUBLE_BATTLE_TEST("AI_FLAG_ATTACKS_PARTNER steps on its ally's weather") GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_ATTACKS_PARTNER); - PLAYER(SPECIES_WOBBUFFET) { Speed(50); } - PLAYER(SPECIES_WOBBUFFET) { Speed(50); } + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(75); Moves(weather1, move1, MOVE_HEADBUTT); } OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(weather2, move2, MOVE_HEADBUTT); } } WHEN { - TURN - { + TURN { EXPECT_MOVE(opponentLeft, weather1); EXPECT_MOVE(opponentRight, weather2); } - TURN - { + TURN { EXPECT_MOVE(opponentLeft, move1); EXPECT_MOVE(opponentRight, weather2); } diff --git a/test/battle/ai/ai_flag_predict_ability.c b/test/battle/ai/ai_flag_predict_ability.c index 9d85773e3e..46ffb53ca0 100644 --- a/test/battle/ai/ai_flag_predict_ability.c +++ b/test/battle/ai/ai_flag_predict_ability.c @@ -8,7 +8,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_WEIGH_ABILITY_PREDICTION: AI will predict opposin GIVEN { ASSUME(GetMoveType(MOVE_THUNDERBOLT) == TYPE_ELECTRIC); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_WEIGH_ABILITY_PREDICTION); - PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); }; + PLAYER(SPECIES_LANTURN) { Ability(ABILITY_VOLT_ABSORB); } OPPONENT(SPECIES_LANTURN) { Moves(MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_SURF); } } WHEN { TURN { EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c index 56d7eb881f..3c9136bdb8 100644 --- a/test/battle/ai/ai_flag_sequence_switching.c +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -44,7 +44,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still fo u32 move; PARAMETRIZE { move = MOVE_ROAR; } - PARAMETRIZE {move = MOVE_DRAGON_TAIL; } + PARAMETRIZE { move = MOVE_DRAGON_TAIL; } PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH); GIVEN { diff --git a/test/battle/ai/ai_multi.c b/test/battle/ai/ai_multi.c index 408a37f276..3fcc02d4c3 100644 --- a/test/battle/ai/ai_multi.c +++ b/test/battle/ai/ai_multi.c @@ -73,10 +73,10 @@ AI_MULTI_BATTLE_TEST("AI partner makes sensible move selections in battle (multi MULTI_PARTNER(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL, MOVE_AURA_SPHERE); } MULTI_OPPONENT_A(SPECIES_RATTATA) { Moves(MOVE_CELEBRATE); HP(1); } MULTI_OPPONENT_B(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); } - + } WHEN { - TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); }; - } + TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); } + } } // Used to test EXPECT_MOVE only on partner @@ -90,10 +90,10 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner makes sensible move selections in battle ( MULTI_PARTNER(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL, MOVE_AURA_SPHERE); } MULTI_OPPONENT_A(SPECIES_RATTATA) { Moves(MOVE_CELEBRATE); HP(1); } MULTI_OPPONENT_A(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); } - + } WHEN { - TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); }; - } + TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:opponentRight); EXPECT_MOVE(playerRight, MOVE_AURA_SPHERE, target:opponentLeft); } + } } AI_TWO_VS_ONE_BATTLE_TEST("Battler 3 has Battler 1 AI flags set correctly (2v1)") @@ -138,7 +138,7 @@ AI_MULTI_BATTLE_TEST("Partner will not steal your pokemon when running out") MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft);} + TURN { EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft); } TURN {} } THEN { EXPECT_EQ(gAbsentBattlerFlags, (1u << GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))); @@ -159,7 +159,7 @@ AI_MULTI_BATTLE_TEST("Partner will not steal your pokemon to delay using their a MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft);} + TURN { EXPECT_MOVE(playerRight, MOVE_MEMENTO, target:opponentLeft); } TURN {} } THEN { EXPECT_EQ(SPECIES_METAGROSS, playerRight->species); @@ -174,12 +174,12 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b BATTLER_AI_FLAGS(B_POSITION_OPPONENT_LEFT, AI_FLAG_ACE_POKEMON); MULTI_PLAYER(SPECIES_WOBBUFFET) { } MULTI_PARTNER(SPECIES_WOBBUFFET) { } - MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); HP(1);} + MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); HP(1); } MULTI_OPPONENT_A(SPECIES_VENUSAUR) { Moves(MOVE_GIGA_DRAIN); } MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } - TURN {MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } } THEN { EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species); } @@ -188,19 +188,19 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi battle when forced out") { u32 item, move; - PARAMETRIZE {item = ITEM_EJECT_BUTTON; move = MOVE_TACKLE;} - PARAMETRIZE {item = ITEM_EJECT_PACK; move = MOVE_TAIL_WHIP;} - PARAMETRIZE {item = ITEM_NONE; move = MOVE_ROAR;} + PARAMETRIZE { item = ITEM_EJECT_BUTTON; move = MOVE_TACKLE; } + PARAMETRIZE { item = ITEM_EJECT_PACK; move = MOVE_TAIL_WHIP; } + PARAMETRIZE { item = ITEM_NONE; move = MOVE_ROAR; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); BATTLER_AI_FLAGS(B_POSITION_OPPONENT_LEFT, AI_FLAG_ACE_POKEMON); MULTI_PLAYER(SPECIES_WOBBUFFET) { } MULTI_PARTNER(SPECIES_WOBBUFFET) { } - MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Item(item);} + MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE); Item(item); } MULTI_OPPONENT_A(SPECIES_VENUSAUR) { Moves(MOVE_GIGA_DRAIN); } MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {MOVE(playerLeft, move, target: opponentLeft); } + TURN { MOVE(playerLeft, move, target: opponentLeft); } } THEN { EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species); } @@ -213,11 +213,11 @@ AI_MULTI_BATTLE_TEST("AI opponents do not steal their partner pokemon in multi b BATTLER_AI_FLAGS(B_POSITION_OPPONENT_LEFT, AI_FLAG_ACE_POKEMON); MULTI_PLAYER(SPECIES_WOBBUFFET) { } MULTI_PARTNER(SPECIES_WOBBUFFET) { } - MULTI_OPPONENT_A(SPECIES_GOLISOPOD) { Moves(MOVE_CELEBRATE); HP(101); MaxHP(200); Ability(ABILITY_EMERGENCY_EXIT);} + MULTI_OPPONENT_A(SPECIES_GOLISOPOD) { Moves(MOVE_CELEBRATE); HP(101); MaxHP(200); Ability(ABILITY_EMERGENCY_EXIT); } MULTI_OPPONENT_A(SPECIES_VENUSAUR) { Moves(MOVE_GIGA_DRAIN); } MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN {MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } } THEN { EXPECT_EQ(SPECIES_VENUSAUR, opponentLeft->species); } diff --git a/test/battle/ai/ai_smart_tera.c b/test/battle/ai/ai_smart_tera.c index 7bed476b43..c2127a5787 100644 --- a/test/battle/ai/ai_smart_tera.c +++ b/test/battle/ai/ai_smart_tera.c @@ -31,7 +31,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_TERA: AI will not tera if it gets outsped a OPPONENT(SPECIES_WOBBUFFET) { HP(60); Speed(1); Moves(MOVE_SEED_BOMB); TeraType(TYPE_GRASS); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); TeraType(TYPE_FIRE); } } WHEN { - TURN { } + TURN {} } SCENE { NOT MESSAGE("The opposing Wobbuffet terastallized into the Grass type!"); } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index f0eee3ac90..82c3c6d42a 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -28,12 +28,12 @@ AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill") GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_SCRATCH); } - OPPONENT(SPECIES_CROBAT) {Moves(MOVE_SCRATCH); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SCRATCH); } + OPPONENT(SPECIES_CROBAT) { Moves(MOVE_SCRATCH); } } WHEN { TURN { MOVE(player, MOVE_PERISH_SONG); } - TURN { ; } - TURN { ; } + TURN {} + TURN {} TURN { EXPECT_SWITCH(opponent, 1); } } SCENE { MESSAGE(AI_TRAINER_NAME " sent out Crobat!"); @@ -47,11 +47,11 @@ AI_SINGLE_BATTLE_TEST("AI sees on-field player ability correctly and does not se PARAMETRIZE { testAbility = ABILITY_VOLT_ABSORB; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT); - PLAYER(SPECIES_PIKACHU) {Level(100); Moves(MOVE_VOLT_SWITCH, MOVE_SPARKLY_SWIRL); Ability(ABILITY_LIGHTNING_ROD); }; - PLAYER(SPECIES_LANTURN) {Level(44); Moves(MOVE_SCALD); Ability(testAbility); }; - OPPONENT(SPECIES_SOBBLE) {Level(44); Moves(MOVE_SCRATCH); } - OPPONENT(SPECIES_BOMBIRDIER) {Level(42); Moves(MOVE_ROCK_SLIDE); } - OPPONENT(SPECIES_IRON_THORNS) {Level(43); Moves(MOVE_SUPERCELL_SLAM, MOVE_ICE_PUNCH); } + PLAYER(SPECIES_PIKACHU) { Level(100); Moves(MOVE_VOLT_SWITCH, MOVE_SPARKLY_SWIRL); Ability(ABILITY_LIGHTNING_ROD); } + PLAYER(SPECIES_LANTURN) { Level(44); Moves(MOVE_SCALD); Ability(testAbility); } + OPPONENT(SPECIES_SOBBLE) { Level(44); Moves(MOVE_SCRATCH); } + OPPONENT(SPECIES_BOMBIRDIER) { Level(42); Moves(MOVE_ROCK_SLIDE); } + OPPONENT(SPECIES_IRON_THORNS) { Level(43); Moves(MOVE_SUPERCELL_SLAM, MOVE_ICE_PUNCH); } } WHEN { TURN { MOVE(player, MOVE_VOLT_SWITCH); @@ -66,8 +66,8 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spo { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -80,7 +80,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spo OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } } WHEN { - TURN { EXPECT_SWITCH(opponentLeft, 3); }; + TURN { EXPECT_SWITCH(opponentLeft, 3); } } SCENE { MESSAGE(AI_TRAINER_NAME " withdrew Gengar!"); MESSAGE(AI_TRAINER_NAME " sent out Raticate!"); @@ -96,8 +96,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch mid-turn into a player Pokémon { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -112,7 +112,7 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch mid-turn into a player Pokémon MULTI_OPPONENT_B(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN { EXPECT_SWITCH(playerRight, 5); }; + TURN { EXPECT_SWITCH(playerRight, 5); } } SCENE { MESSAGE(AI_PARTNER_NAME " withdrew Gengar!"); MESSAGE(AI_PARTNER_NAME " sent out Raticate!"); @@ -128,8 +128,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch mid-turn into a player Pok { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -144,7 +144,7 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch mid-turn into a player Pok MULTI_OPPONENT_A(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN { EXPECT_SWITCH(playerRight, 5); }; + TURN { EXPECT_SWITCH(playerRight, 5); } } SCENE { MESSAGE(AI_PARTNER_NAME " withdrew Gengar!"); MESSAGE(AI_PARTNER_NAME " sent out Raticate!"); @@ -160,8 +160,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon after fa { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -176,7 +176,7 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon after fa MULTI_OPPONENT_B(SPECIES_VIBRAVA) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); }; + TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); } } SCENE { MESSAGE(AI_PARTNER_NAME " sent out Haunter!"); NONE_OF { @@ -190,8 +190,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon aft { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -206,7 +206,7 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon aft MULTI_OPPONENT_A(SPECIES_VIBRAVA) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); }; + TURN { EXPECT_MOVE(playerRight, MOVE_CELEBRATE); EXPECT_SEND_OUT(playerRight, 5); } } SCENE { MESSAGE(AI_PARTNER_NAME " sent out Haunter!"); NONE_OF { @@ -220,8 +220,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon (multi)" { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -235,8 +235,8 @@ AI_MULTI_BATTLE_TEST("AI partner will not switch into a player Pokémon (multi)" MULTI_OPPONENT_B(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); }; - TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); }; + TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); } + TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); } } SCENE { MESSAGE(AI_PARTNER_NAME " sent out Raticate!"); NONE_OF { @@ -250,8 +250,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon (2v { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -265,8 +265,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI partner will not switch into a player Pokémon (2v MULTI_OPPONENT_A(SPECIES_KANGASKHAN) { Moves(MOVE_CELEBRATE); } } WHEN { - TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); }; - TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); }; + TURN { MOVE(playerLeft, MOVE_AURA_SPHERE, target:playerRight); EXPECT_SWITCH(playerRight, 4); EXPECT_SEND_OUT(playerRight, 3); } + TURN { EXPECT_MOVE(playerRight, MOVE_SHADOW_BALL, target:opponentLeft); } } SCENE { MESSAGE(AI_PARTNER_NAME " sent out Raticate!"); NONE_OF { @@ -279,8 +279,8 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -294,7 +294,7 @@ AI_TWO_VS_ONE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 MULTI_OPPONENT_A(SPECIES_GASTLY) { Moves(MOVE_LICK); } MULTI_OPPONENT_A(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } } WHEN { - TURN { EXPECT_SWITCH(opponentLeft, 3); }; + TURN { EXPECT_SWITCH(opponentLeft, 3); } } SCENE { MESSAGE(AI_TRAINER_NAME " withdrew Gengar!"); MESSAGE(AI_TRAINER_NAME " sent out Raticate!"); @@ -309,8 +309,8 @@ AI_ONE_VS_TWO_BATTLE_TEST("AI will not switch into a partner Pokémon in a 1v2 b { u32 flags; - PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; } - PARAMETRIZE {flags = 0; } + PARAMETRIZE { flags = AI_FLAG_SMART_SWITCHING; } + PARAMETRIZE { flags = 0; } PASSES_RANDOMLY(SHOULD_SWITCH_ALL_MOVES_BAD_PERCENTAGE, 100, RNG_AI_SWITCH_ALL_MOVES_BAD); GIVEN { @@ -324,7 +324,7 @@ AI_ONE_VS_TWO_BATTLE_TEST("AI will not switch into a partner Pokémon in a 1v2 b MULTI_OPPONENT_B(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); } } WHEN { - TURN { EXPECT_SWITCH(opponentRight, 5); }; + TURN { EXPECT_SWITCH(opponentRight, 5); } } SCENE { MESSAGE(AI_TRAINER_2_NAME " withdrew Gengar!"); MESSAGE(AI_TRAINER_2_NAME " sent out Raticate!"); @@ -359,7 +359,7 @@ AI_SINGLE_BATTLE_TEST("When AI switches out due to having no move that affects t OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); } OPPONENT(SPECIES_ABRA) { Moves(MOVE_TACKLE); } } WHEN { - TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_SWITCH(opponent, 2); EXPECT_SEND_OUT(opponent, 0);} + TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_SWITCH(opponent, 2); EXPECT_SEND_OUT(opponent, 0); } TURN { MOVE(player, MOVE_SHADOW_BALL); EXPECT_MOVE(opponent, MOVE_TACKLE); } } } @@ -377,7 +377,7 @@ AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same Pokémon for 2 spo OPPONENT(SPECIES_LINOONE) { Moves(MOVE_SCRATCH); } OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); } } WHEN { - TURN { EXPECT_SWITCH(opponentLeft, 3); }; + TURN { EXPECT_SWITCH(opponentLeft, 3); } } SCENE { MESSAGE(AI_TRAINER_NAME " withdrew Linoone!"); MESSAGE(AI_TRAINER_NAME " sent out Gengar!"); @@ -423,7 +423,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Eject Button will send out Ace GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag | AI_FLAG_ACE_POKEMON); PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_SCRATCH); } - OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_EJECT_BUTTON); }; + OPPONENT(SPECIES_ZIGZAGOON) { Item(ITEM_EJECT_BUTTON); } OPPONENT(SPECIES_LINOONE); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_SCRATCH); EXPECT_SEND_OUT(opponent, 1); } @@ -548,7 +548,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage whe OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium } WHEN { - TURN { MOVE(player, MOVE_STEALTH_ROCK) ;} + TURN { MOVE(player, MOVE_STEALTH_ROCK) ; } TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard } } @@ -584,7 +584,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); SpAttack(50); } OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_IRON_HEAD); Speed(4); SpDefense(50); } // Mid battle, AI sends out Aron - OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53);} + OPPONENT(SPECIES_ELECTRODE) { Level(30); Ability(ABILITY_STATIC); Moves(MOVE_CHARGE_BEAM); Speed(6); SpDefense(53); } } WHEN { TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); } } @@ -748,7 +748,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch in trapping mon m ASSUME(GetSpeciesType(SPECIES_GOLURK, 1) == TYPE_GHOST); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchingFlag); PLAYER(SPECIES_ELECTRODE) { Speed(4); Moves(MOVE_THUNDERBOLT, MOVE_AURA_SPHERE, MOVE_PROTECT); } - PLAYER(SPECIES_WOBBUFFET) { Speed(1); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } OPPONENT(SPECIES_SNORLAX) { Speed(1); Moves(MOVE_HEADBUTT); } OPPONENT(SPECIES_DUGTRIO) { Speed(3); Ability(ABILITY_ARENA_TRAP); Moves(MOVE_EARTHQUAKE); } OPPONENT(SPECIES_GOLURK) { Speed(5); Moves(MOVE_EARTHQUAKE); } @@ -775,9 +775,9 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will switch in trapping mon OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); } } WHEN { if (aiSmartMonChoicesFlag == AI_FLAG_SMART_MON_CHOICES) - TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); } else - TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } } } @@ -794,7 +794,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); } OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); } } WHEN { - TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } + TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } } } @@ -824,7 +824,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_ELECTRODE) { Moves(MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_THUNDER_SHOCK); } - OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); }; + OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); } OPPONENT(SPECIES_RHYDON) { Moves(MOVE_EARTHQUAKE); Ability(ABILITY_ROCK_HEAD); } } WHEN { TURN { MOVE(player, MOVE_THUNDERBOLT) ; EXPECT_SWITCH(opponent, 1); } @@ -1094,20 +1094,20 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if it has an { u32 aiMon; u32 move; enum Ability absorbingAbility; - PARAMETRIZE { aiMon = SPECIES_NINETALES; absorbingAbility = ABILITY_FLASH_FIRE; move = MOVE_FLAMETHROWER;} - PARAMETRIZE { aiMon = SPECIES_MANTINE; absorbingAbility = ABILITY_WATER_ABSORB; move = MOVE_SURF;} - PARAMETRIZE { aiMon = SPECIES_TOXICROAK; absorbingAbility = ABILITY_DRY_SKIN; move = MOVE_SURF;} - PARAMETRIZE { aiMon = SPECIES_GASTRODON; absorbingAbility = ABILITY_STORM_DRAIN; move = MOVE_SURF;} - PARAMETRIZE { aiMon = SPECIES_JOLTEON; absorbingAbility = ABILITY_VOLT_ABSORB; move = MOVE_THUNDERBOLT;} - PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT;} - PARAMETRIZE { aiMon = SPECIES_MANECTRIC; absorbingAbility = ABILITY_LIGHTNING_ROD; move = MOVE_THUNDERBOLT;} - PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT;} - PARAMETRIZE { aiMon = SPECIES_AZUMARILL; absorbingAbility = ABILITY_SAP_SIPPER; move = MOVE_GIGA_DRAIN;} - PARAMETRIZE { aiMon = SPECIES_ORTHWORM; absorbingAbility = ABILITY_EARTH_EATER; move = MOVE_EARTHQUAKE;} - PARAMETRIZE { aiMon = SPECIES_BRONZONG; absorbingAbility = ABILITY_LEVITATE; move = MOVE_EARTHQUAKE;} - PARAMETRIZE { aiMon = SPECIES_ELECTRODE; absorbingAbility = ABILITY_SOUNDPROOF; move = MOVE_HYPER_VOICE;} - PARAMETRIZE { aiMon = SPECIES_CHESNAUGHT; absorbingAbility = ABILITY_BULLETPROOF; move = MOVE_SLUDGE_BOMB;} - PARAMETRIZE { aiMon = SPECIES_BRAMBLEGHAST; absorbingAbility = ABILITY_WIND_RIDER; move = MOVE_HURRICANE;} + PARAMETRIZE { aiMon = SPECIES_NINETALES; absorbingAbility = ABILITY_FLASH_FIRE; move = MOVE_FLAMETHROWER; } + PARAMETRIZE { aiMon = SPECIES_MANTINE; absorbingAbility = ABILITY_WATER_ABSORB; move = MOVE_SURF; } + PARAMETRIZE { aiMon = SPECIES_TOXICROAK; absorbingAbility = ABILITY_DRY_SKIN; move = MOVE_SURF; } + PARAMETRIZE { aiMon = SPECIES_GASTRODON; absorbingAbility = ABILITY_STORM_DRAIN; move = MOVE_SURF; } + PARAMETRIZE { aiMon = SPECIES_JOLTEON; absorbingAbility = ABILITY_VOLT_ABSORB; move = MOVE_THUNDERBOLT; } + PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT; } + PARAMETRIZE { aiMon = SPECIES_MANECTRIC; absorbingAbility = ABILITY_LIGHTNING_ROD; move = MOVE_THUNDERBOLT; } + PARAMETRIZE { aiMon = SPECIES_ELECTIVIRE; absorbingAbility = ABILITY_MOTOR_DRIVE; move = MOVE_THUNDERBOLT; } + PARAMETRIZE { aiMon = SPECIES_AZUMARILL; absorbingAbility = ABILITY_SAP_SIPPER; move = MOVE_GIGA_DRAIN; } + PARAMETRIZE { aiMon = SPECIES_ORTHWORM; absorbingAbility = ABILITY_EARTH_EATER; move = MOVE_EARTHQUAKE; } + PARAMETRIZE { aiMon = SPECIES_BRONZONG; absorbingAbility = ABILITY_LEVITATE; move = MOVE_EARTHQUAKE; } + PARAMETRIZE { aiMon = SPECIES_ELECTRODE; absorbingAbility = ABILITY_SOUNDPROOF; move = MOVE_HYPER_VOICE; } + PARAMETRIZE { aiMon = SPECIES_CHESNAUGHT; absorbingAbility = ABILITY_BULLETPROOF; move = MOVE_SLUDGE_BOMB; } + PARAMETRIZE { aiMon = SPECIES_BRAMBLEGHAST; absorbingAbility = ABILITY_WIND_RIDER; move = MOVE_HURRICANE; } GIVEN { WITH_CONFIG(CONFIG_REDIRECT_ABILITY_IMMUNITY, GEN_5); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING); @@ -1261,8 +1261,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attac u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE; PASSES_RANDOMLY(SHOULD_SWITCH_ATTACKING_STAT_MINUS_TWO_PERCENTAGE, 100, RNG_AI_SWITCH_STATS_LOWERED); - PARAMETRIZE {move = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }; - PARAMETRIZE {move = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_CONFUSION; }; + PARAMETRIZE { move = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; } + PARAMETRIZE { move = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_CONFUSION; } GIVEN { ASSUME(GetMoveEffect(MOVE_CHARM) == EFFECT_ATTACK_DOWN_2); @@ -1282,8 +1282,8 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if main attac u32 aiSpecies = SPECIES_NONE, aiMove = MOVE_NONE, move = MOVE_NONE, move2 = MOVE_NONE; PASSES_RANDOMLY(SHOULD_SWITCH_ATTACKING_STAT_MINUS_THREE_PLUS_PERCENTAGE, 100, RNG_AI_SWITCH_STATS_LOWERED); - PARAMETRIZE {move = MOVE_GROWL; move2 = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; }; - PARAMETRIZE {move = MOVE_CONFIDE; move2 = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_STORED_POWER; }; + PARAMETRIZE { move = MOVE_GROWL; move2 = MOVE_CHARM; aiSpecies = SPECIES_FLAREON; aiMove = MOVE_FIRE_FANG; } + PARAMETRIZE { move = MOVE_CONFIDE; move2 = MOVE_EERIE_IMPULSE; aiSpecies = SPECIES_ESPEON; aiMove = MOVE_STORED_POWER; } GIVEN { ASSUME(GetMoveEffect(MOVE_CHARM) == EFFECT_ATTACK_DOWN_2); diff --git a/test/battle/ai/ai_trytofaint.c b/test/battle/ai/ai_trytofaint.c index 50ab376503..f8bdded933 100644 --- a/test/battle/ai/ai_trytofaint.c +++ b/test/battle/ai/ai_trytofaint.c @@ -64,11 +64,12 @@ AI_SINGLE_BATTLE_TEST("AI sees Parental Bond killing through sturdy") { GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY); - PLAYER(SPECIES_MAGNEZONE){Level(64); Ability(ABILITY_STURDY); Moves(MOVE_TACKLE, MOVE_LIGHT_SCREEN); } - OPPONENT(SPECIES_KANGASKHAN_MEGA){Level(64); Moves(MOVE_DRAIN_PUNCH, MOVE_TAUNT); } - } WHEN { - TURN{ MOVE(player, MOVE_TACKLE); - EXPECT_MOVE(opponent, MOVE_DRAIN_PUNCH); // AI should see drain punch as a kill due to multi hit, outscoring taunt + PLAYER(SPECIES_MAGNEZONE){ Level(64); Ability(ABILITY_STURDY); Moves(MOVE_TACKLE, MOVE_LIGHT_SCREEN); } + OPPONENT(SPECIES_KANGASKHAN_MEGA){ Level(64); Moves(MOVE_DRAIN_PUNCH, MOVE_TAUNT); } + } WHEN { + TURN { + MOVE(player, MOVE_TACKLE); + EXPECT_MOVE(opponent, MOVE_DRAIN_PUNCH); // AI should see drain punch as a kill due to multi hit, outscoring taunt } } } diff --git a/test/battle/ai/can_use_all_moves.c b/test/battle/ai/can_use_all_moves.c index d7ea827f39..b9333978cf 100644 --- a/test/battle/ai/can_use_all_moves.c +++ b/test/battle/ai/can_use_all_moves.c @@ -19,7 +19,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Final Gambit") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_FINAL_GAMBIT); SEND_OUT(playerLeft, 2); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_FINAL_GAMBIT); SEND_OUT(playerLeft, 2); } } } @@ -35,7 +35,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Guillotine") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_GUILLOTINE); SEND_OUT(playerLeft, 2); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_GUILLOTINE); SEND_OUT(playerLeft, 2); } } } @@ -51,7 +51,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Sheer Cold") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_SHEER_COLD); SEND_OUT(playerLeft, 2); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_SHEER_COLD); SEND_OUT(playerLeft, 2); } } } @@ -113,7 +113,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 1-100") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -189,7 +189,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 101-200") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -278,7 +278,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 201-300") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -355,7 +355,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 301-400") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -423,7 +423,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 401-500") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -498,7 +498,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 501-600") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -570,7 +570,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 601-700") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -639,7 +639,7 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 701-800") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } @@ -701,6 +701,6 @@ AI_DOUBLE_BATTLE_TEST("AI can use all moves, 801-900") OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_BURN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, move); } + TURN { EXPECT_MOVE(opponentLeft, move); } } } diff --git a/test/battle/badge_boost.c b/test/battle/badge_boost.c index b03168d476..bc60778cb1 100644 --- a/test/battle/badge_boost.c +++ b/test/battle/badge_boost.c @@ -8,8 +8,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_ATTACK boost Attack", s16 dmg) u32 genConfig = 0; for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++) { - PARAMETRIZE{badge = FALSE; genConfig = gen;} - PARAMETRIZE{badge = TRUE; genConfig = gen;} + PARAMETRIZE { badge = FALSE; genConfig = gen; } + PARAMETRIZE { badge = TRUE; genConfig = gen; } } GIVEN { if (badge) @@ -17,8 +17,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_ATTACK boost Attack", s16 dmg) else FlagClear(B_FLAG_BADGE_BOOST_ATTACK); WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); - PLAYER(SPECIES_WOBBUFFET) {} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { @@ -40,8 +40,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPATK boost Special Attack", s u32 genConfig = 0; for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++) { - PARAMETRIZE{badge = FALSE; genConfig = gen;} - PARAMETRIZE{badge = TRUE; genConfig = gen;} + PARAMETRIZE { badge = FALSE; genConfig = gen; } + PARAMETRIZE { badge = TRUE; genConfig = gen; } } GIVEN { if (badge) @@ -49,8 +49,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPATK boost Special Attack", s else FlagClear(B_FLAG_BADGE_BOOST_SPATK); WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); - PLAYER(SPECIES_WOBBUFFET) {} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_THUNDER_SHOCK); } } SCENE { @@ -72,8 +72,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_DEFENSE boost Defense", s16 dm u32 genConfig = 0; for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++) { - PARAMETRIZE{badge = FALSE; genConfig = gen;} - PARAMETRIZE{badge = TRUE; genConfig = gen;} + PARAMETRIZE { badge = FALSE; genConfig = gen; } + PARAMETRIZE { badge = TRUE; genConfig = gen; } } GIVEN { @@ -82,8 +82,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_DEFENSE boost Defense", s16 dm else FlagClear(B_FLAG_BADGE_BOOST_DEFENSE); WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); - PLAYER(SPECIES_WOBBUFFET) {} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { @@ -105,8 +105,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPDEF boost Special Defense", u32 genConfig = 0; for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++) { - PARAMETRIZE{badge = FALSE; genConfig = gen;} - PARAMETRIZE{badge = TRUE; genConfig = gen;} + PARAMETRIZE { badge = FALSE; genConfig = gen; } + PARAMETRIZE { badge = TRUE; genConfig = gen; } } GIVEN { @@ -115,8 +115,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPDEF boost Special Defense", else FlagClear(B_FLAG_BADGE_BOOST_SPDEF); WITH_CONFIG(CONFIG_BADGE_BOOST, genConfig); - PLAYER(SPECIES_WOBBUFFET) {} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_THUNDER_SHOCK); } } SCENE { @@ -138,8 +138,8 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPEED boost Speed", s16 dmg) u32 genConfig = 0; for (u32 gen = GEN_1; gen <= GEN_LATEST; gen++) { - PARAMETRIZE{badge = FALSE; genConfig = gen;} - PARAMETRIZE{badge = TRUE; genConfig = gen;} + PARAMETRIZE { badge = FALSE; genConfig = gen; } + PARAMETRIZE { badge = TRUE; genConfig = gen; } } GIVEN { if (badge) @@ -150,7 +150,7 @@ WILD_BATTLE_TEST("Badge boost: B_FLAG_BADGE_BOOST_SPEED boost Speed", s16 dmg) PLAYER(SPECIES_WOBBUFFET) { Speed(100); HP(1); } OPPONENT(SPECIES_WOBBUFFET) { Speed(101); HP(1); } } WHEN { - TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH);} + TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH); } } THEN { if (badge && genConfig <= GEN_3) { diff --git a/test/battle/battle_message.c b/test/battle/battle_message.c index 423da7cf05..ac8917a156 100644 --- a/test/battle/battle_message.c +++ b/test/battle/battle_message.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Battle Message: Send-in message depends on foe HP") PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET) { HP(hp); MaxHP(100); } } WHEN { - TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 1); } } SCENE { if (hp > 69) MESSAGE("Go! Wynaut!"); @@ -34,7 +34,7 @@ TO_DO_BATTLE_TEST("Battle Message: Switch-out message changes based on condition PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 1); } } SCENE { if (???) MESSAGE("Wynaut, that's enough! Come back!"); diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c index 8e1c9cf682..58650f7f5d 100644 --- a/test/battle/crit_chance.c +++ b/test/battle/crit_chance.c @@ -38,7 +38,7 @@ SINGLE_BATTLE_TEST("Crit Chance: Raising critical hit rate to 3 guarantees a cri WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); ASSUME(GetMoveCriticalHitStage(MOVE_SLASH) == 1); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); - PLAYER(SPECIES_TOGEKISS) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); }; + PLAYER(SPECIES_TOGEKISS) { Ability(ABILITY_SUPER_LUCK); Item(ITEM_SCOPE_LENS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SLASH); } diff --git a/test/battle/end_turn_effects.c b/test/battle/end_turn_effects.c index 931f792efe..cf65a50c6b 100644 --- a/test/battle/end_turn_effects.c +++ b/test/battle/end_turn_effects.c @@ -89,7 +89,7 @@ TWO_VS_ONE_BATTLE_TEST("End Turn Effects: First Event Block is executed correctl s16 damage; GIVEN { - MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1);} + MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1); } MULTI_PARTNER(SPECIES_EKANS) { HP(100); Ability(ABILITY_SHED_SKIN); Status1(STATUS1_BURN); Speed(2); } MULTI_OPPONENT_A(SPECIES_WYNAUT) { HP(100); Item(ITEM_LEFTOVERS); Speed(3); } MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { HP(100); Item(ITEM_BLACK_SLUDGE); Speed(4); } @@ -118,7 +118,7 @@ ONE_VS_TWO_BATTLE_TEST("End Turn Effects: First Event Block is executed correctl s16 damage; GIVEN { - MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1);} + MULTI_PLAYER(SPECIES_WYNAUT) { HP(100); Speed(1); } MULTI_PLAYER(SPECIES_EKANS) { HP(100); Ability(ABILITY_SHED_SKIN); Status1(STATUS1_BURN); Speed(2); } MULTI_OPPONENT_A(SPECIES_WYNAUT) { HP(100); Item(ITEM_LEFTOVERS); Speed(3); } MULTI_OPPONENT_B(SPECIES_WOBBUFFET) { HP(100); Item(ITEM_BLACK_SLUDGE); Speed(4); } diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index af16b779b5..7cb3d2b783 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -76,7 +76,7 @@ SINGLE_BATTLE_TEST("Mega Evolution doesn't affect turn order (Gen6)") GIVEN { WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_6); PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); } - OPPONENT(SPECIES_WOBBUFFET) {} + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { @@ -91,8 +91,8 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order (Gen7+)") { GIVEN { WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); - PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE);} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); } + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 7ae591f27b..3addb2afdb 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -4,9 +4,9 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red Orb") { u16 heldItem; - PARAMETRIZE { heldItem = ITEM_NONE;} - PARAMETRIZE { heldItem = ITEM_RED_ORB;} - PARAMETRIZE { heldItem = ITEM_BLUE_ORB;} + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_RED_ORB; } + PARAMETRIZE { heldItem = ITEM_BLUE_ORB; } GIVEN { PLAYER(SPECIES_GROUDON) { Item(heldItem); } OPPONENT(SPECIES_WOBBUFFET); @@ -36,9 +36,9 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Groudon only when holding Red O SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue Orb") { u16 heldItem; - PARAMETRIZE { heldItem = ITEM_NONE;} - PARAMETRIZE { heldItem = ITEM_RED_ORB;} - PARAMETRIZE { heldItem = ITEM_BLUE_ORB;} + PARAMETRIZE { heldItem = ITEM_NONE; } + PARAMETRIZE { heldItem = ITEM_RED_ORB; } + PARAMETRIZE { heldItem = ITEM_BLUE_ORB; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_KYOGRE) { Item(heldItem); } @@ -68,8 +68,8 @@ SINGLE_BATTLE_TEST("Primal reversion happens for Kyogre only when holding Blue O DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent faster") { GIVEN { - PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); }; - PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(15); }; + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(5); } + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(15); } OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(10); } OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); } } WHEN { @@ -94,8 +94,8 @@ DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - opponent f DOUBLE_BATTLE_TEST("Primal reversion's order is determined by Speed - player faster") { GIVEN { - PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); }; - PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(30); }; + PLAYER(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(20); } + PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(30); } OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(10); } OPPONENT(SPECIES_KYOGRE) { Item(ITEM_BLUE_ORB); Speed(2); } } WHEN { @@ -121,7 +121,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a mon is sent out after a mon { GIVEN { ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH)); - PLAYER(SPECIES_WOBBUFFET) {HP(1); } + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -158,7 +158,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B GIVEN { ASSUME(!IsBattleMoveStatus(MOVE_SCRATCH)); ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON); - PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_EJECT_BUTTON); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); } PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -181,7 +181,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Red Car ASSUME(gItemsInfo[ITEM_RED_CARD].holdEffect == HOLD_EFFECT_RED_CARD); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } - OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_RED_CARD); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); } } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { @@ -203,7 +203,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SPIKES); } - TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1);} + TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1); } } SCENE { SEND_IN_MESSAGE("Groudon"); HP_BAR(player); diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index 183f61ec87..edaf391d43 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -59,8 +59,8 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order") { GIVEN { WITH_CONFIG(CONFIG_MEGA_EVO_TURN_ORDER, GEN_7); - PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z);} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } } SCENE { diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 25a0d5d08e..f1683df156 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -144,7 +144,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamax expires after three turns and correctly con } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: dynamax); } TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_SCRATCH, WITH_RNG(RNG_DAMAGE_MODIFIER, 24)); } - TURN { } + TURN {} } SCENE { if (dynamax) ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player); @@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot be hit by OHKO moves") SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are affected by Grudge") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } } WHEN { TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } @@ -270,7 +270,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by phazing moves { GIVEN { ASSUME(GetMoveEffect(MOVE_DRAGON_TAIL) == EFFECT_HIT_SWITCH_TARGET); - PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -354,8 +354,8 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon can have base moves disabled on t { GIVEN { ASSUME(B_DISABLE_TURNS >= GEN_5); - PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; - OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_SCRATCH); } TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } @@ -570,7 +570,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by Choice items" PARAMETRIZE { item = ITEM_NONE; } GIVEN { ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND); - PLAYER(SPECIES_WOBBUFFET) { Item(item); }; + PLAYER(SPECIES_WOBBUFFET) { Item(item); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } @@ -588,7 +588,7 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon cannot use Max Guard while holdin { GIVEN { ASSUME(gItemsInfo[ITEM_ASSAULT_VEST].holdEffect == HOLD_EFFECT_ASSAULT_VEST); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } @@ -733,7 +733,7 @@ DOUBLE_BATTLE_TEST("Dynamax: Max Strike lowers both opponents' speed") ASSUME(MoveHasAdditionalEffect(MOVE_MAX_STRIKE, MOVE_EFFECT_LOWER_SPEED_SIDE)); PLAYER(SPECIES_WOBBUFFET) { Speed(80); } PLAYER(SPECIES_WOBBUFFET) { Speed(79); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } OPPONENT(SPECIES_WOBBUFFET) { Speed(99); } } WHEN { TURN { MOVE(playerLeft, MOVE_SCRATCH, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \ @@ -886,8 +886,8 @@ SINGLE_BATTLE_TEST("Dynamax: Max Overgrowth sets up Grassy Terrain") GIVEN { ASSUME(MoveHasAdditionalEffect(MOVE_MAX_OVERGROWTH, MOVE_EFFECT_GRASSY_TERRAIN)); ASSUME(GetSpeciesBaseHP(SPECIES_WOBBUFFET) == 190); - OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }; - PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); }; + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); } + PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); } } WHEN { TURN { MOVE(player, MOVE_VINE_WHIP, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); } TURN { MOVE(player, MOVE_VINE_WHIP); MOVE(opponent, MOVE_CELEBRATE); } @@ -979,7 +979,7 @@ SINGLE_BATTLE_TEST("Dynamax: G-Max Steelsurge sets up sharp steel") } WHEN { TURN { MOVE(player, MOVE_IRON_HEAD, gimmick: GIMMICK_DYNAMAX); } TURN { SWITCH(opponent, 1); } - TURN { } // wait out Dynamax + TURN {} // wait out Dynamax TURN { MOVE(opponent, MOVE_DEFOG); } } SCENE { // turn 1 @@ -1301,10 +1301,10 @@ DOUBLE_BATTLE_TEST("Dynamax: G-Max Wildfire sets a field effect that damages non OPPONENT(SPECIES_ARCANINE); } WHEN { TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } - TURN { } + TURN {} TURN { SWITCH(opponentLeft, 2); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { // turn 1 MESSAGE("Charizard used G-Max Wildfire!"); @@ -1375,7 +1375,7 @@ DOUBLE_BATTLE_TEST("Dynamax: G-Max Snooze makes only the target drowsy") OPPONENT(SPECIES_CHANSEY); } WHEN { TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } - TURN { } + TURN {} } SCENE { // turn 1 MESSAGE("Grimmsnarl used G-Max Snooze!"); @@ -1551,7 +1551,7 @@ DOUBLE_BATTLE_TEST("Dynamax: Max Flare doesn't softlock the game when fainting p { GIVEN { PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); @@ -1559,7 +1559,7 @@ DOUBLE_BATTLE_TEST("Dynamax: Max Flare doesn't softlock the game when fainting p TURN { MOVE(playerLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, gimmick: GIMMICK_DYNAMAX); SEND_OUT(playerRight, 2); } - TURN { } + TURN {} } } @@ -1567,7 +1567,7 @@ SINGLE_BATTLE_TEST("Dynamax: Max Moves don't execute effects on fainted battlers { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } } WHEN { TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } } SCENE { @@ -1664,8 +1664,8 @@ SINGLE_BATTLE_TEST("Dynamax: Dynamax is reverted before switch out") SINGLE_BATTLE_TEST("Dynamax: max move against semi-invulnerable target prints the correct message") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) {Speed(1);}; - OPPONENT(SPECIES_WOBBUFFET) {Speed(2);}; + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } } WHEN { TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FLY); } } SCENE { @@ -1679,12 +1679,12 @@ DOUBLE_BATTLE_TEST("Dynamax stat lowering moves don't make stat-changing abiliti { u32 move, stat, ability; move = 0; stat = 0; ability = 0; - u32 abilityList[] = {ABILITY_COMPETITIVE, ABILITY_DEFIANT, ABILITY_CONTRARY, ABILITY_SIMPLE}; + u32 abilityList[] = { ABILITY_COMPETITIVE, ABILITY_DEFIANT, ABILITY_CONTRARY, ABILITY_SIMPLE}; for (u32 j = 0; j < 4; j++) { PARAMETRIZE { move = MOVE_SCRATCH; stat = STAT_SPEED; ability = abilityList[j]; } PARAMETRIZE { move = MOVE_FURY_CUTTER; stat = STAT_SPATK; ability = abilityList[j]; } - PARAMETRIZE { move = MOVE_LICK; stat = STAT_DEF; ability = abilityList[j]; ;} + PARAMETRIZE { move = MOVE_LICK; stat = STAT_DEF; ability = abilityList[j]; } PARAMETRIZE { move = MOVE_DRAGON_CLAW; stat = STAT_ATK; ability = abilityList[j]; } PARAMETRIZE { move = MOVE_CRUNCH; stat = STAT_SPDEF; ability = abilityList[j]; } } @@ -1699,7 +1699,7 @@ DOUBLE_BATTLE_TEST("Dynamax stat lowering moves don't make stat-changing abiliti OPPONENT(SPECIES_WOBBUFFET) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); } } WHEN { - TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX);} + TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); @@ -1712,12 +1712,12 @@ DOUBLE_BATTLE_TEST("Dynamax stat raising moves don't make stat-changing abilitie { u32 move, stat, ability; move = 0; stat = 0; ability = 0; - u32 abilityList[] = {ABILITY_CONTRARY, ABILITY_SIMPLE}; + u32 abilityList[] = { ABILITY_CONTRARY, ABILITY_SIMPLE}; for (u32 j = 0; j < 2; j++) { PARAMETRIZE { move = MOVE_PECK; stat = STAT_SPEED; ability = abilityList[j]; } PARAMETRIZE { move = MOVE_POISON_JAB; stat = STAT_SPATK; ability = abilityList[j]; } - PARAMETRIZE { move = MOVE_BULLET_PUNCH; stat = STAT_DEF; ability = abilityList[j]; ;} + PARAMETRIZE { move = MOVE_BULLET_PUNCH; stat = STAT_DEF; ability = abilityList[j]; } PARAMETRIZE { move = MOVE_DOUBLE_KICK; stat = STAT_ATK; ability = abilityList[j]; } PARAMETRIZE { move = MOVE_MUD_SLAP; stat = STAT_SPDEF; ability = abilityList[j]; } } @@ -1729,10 +1729,10 @@ DOUBLE_BATTLE_TEST("Dynamax stat raising moves don't make stat-changing abilitie ASSUME(MoveHasAdditionalEffect(MOVE_MAX_DARKNESS, MOVE_EFFECT_LOWER_SP_DEF_SIDE)); PLAYER(SPECIES_WOBBUFFET) { Ability(ability); } PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); } - OPPONENT(SPECIES_WOBBUFFET) {} - OPPONENT(SPECIES_WOBBUFFET) {} + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX);} + TURN { MOVE(playerLeft, move, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c index 9f98ea98ef..6e5a9884b8 100644 --- a/test/battle/hold_effect/ability_shield.c +++ b/test/battle/hold_effect/ability_shield.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Neutralizing Gas") PLAYER(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); Item(item); } OPPONENT(SPECIES_KOFFING) { Ability(ABILITY_NEUTRALIZING_GAS); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS); MESSAGE("Neutralizing gas filled the area!"); diff --git a/test/battle/hold_effect/air_balloon.c b/test/battle/hold_effect/air_balloon.c index ad0fb457a8..3493012e9c 100644 --- a/test/battle/hold_effect/air_balloon.c +++ b/test/battle/hold_effect/air_balloon.c @@ -12,7 +12,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Air Balloon prevents the holder from taking damage from ground type moves") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_EARTHQUAKE); } @@ -27,7 +27,7 @@ SINGLE_BATTLE_TEST("Air Balloon prevents the holder from taking damage from grou SINGLE_BATTLE_TEST("Air Balloon pops when the holder is hit by a move that is not ground type") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } @@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops when the holder is hit by a move that is no SINGLE_BATTLE_TEST("Air Balloon no longer prevents the holder from taking damage from ground type moves once it has been popped") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } @@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Air Balloon no longer prevents the holder from taking damage SINGLE_BATTLE_TEST("Air Balloon can not be restored with Recycle after it has been popped") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Air Balloon can not be restored with Recycle after it has be SINGLE_BATTLE_TEST("Air Balloon prevents the user from being healed by Grassy Terrain") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); MaxHP(100); HP(1); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); MaxHP(100); HP(1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } @@ -91,8 +91,8 @@ SINGLE_BATTLE_TEST("Air Balloon prevents the user from being healed by Grassy Te SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen with Magician") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }; - OPPONENT(SPECIES_DELPHOX) { Ability(ABILITY_MAGICIAN); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } + OPPONENT(SPECIES_DELPHOX) { Ability(ABILITY_MAGICIAN); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { @@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Air Balloon pops before it can be stolen by Thief") { GIVEN { ASSUME(GetMoveEffect(MOVE_THIEF) == EFFECT_STEAL_ITEM); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_THIEF); } diff --git a/test/battle/hold_effect/berserk_gene.c b/test/battle/hold_effect/berserk_gene.c index c7b9ba0933..002d164d1e 100644 --- a/test/battle/hold_effect/berserk_gene.c +++ b/test/battle/hold_effect/berserk_gene.c @@ -269,7 +269,7 @@ SINGLE_BATTLE_TEST("Berserker Gene confusion can be healed with bag items") PARAMETRIZE { item = ITEM_JUBILIFE_MUFFIN; } GIVEN { ASSUME(gItemsInfo[item].battleUsage == EFFECT_ITEM_CURE_STATUS); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE);}; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); } OPPONENT(SPECIES_GENGAR); } WHEN { TURN { USE_ITEM(player, item, partyIndex: 0); } @@ -290,8 +290,8 @@ SINGLE_BATTLE_TEST("Berserker Gene confusion can be healed with used held items" GIVEN { ASSUME(gItemsInfo[ITEM_PERSIM_BERRY].holdEffect == HOLD_EFFECT_CURE_CONFUSION); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE);}; - OPPONENT(SPECIES_WOBBUFFET) { Item(item);}; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_BERSERK_GENE); } + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } } WHEN { TURN { MOVE(player, MOVE_COVET, WITH_RNG(RNG_CONFUSION, FALSE)); } TURN {} diff --git a/test/battle/hold_effect/booster_energy.c b/test/battle/hold_effect/booster_energy.c index f98675a1e9..d59c17ef68 100644 --- a/test/battle/hold_effect/booster_energy.c +++ b/test/battle/hold_effect/booster_energy.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Booster Energy will activate Quark Drive after Electric Terr { GIVEN { PLAYER(SPECIES_IRON_MOTH) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); } - OPPONENT(SPECIES_TAPU_KOKO) { Speed(100); Ability(ABILITY_ELECTRIC_SURGE); }; + OPPONENT(SPECIES_TAPU_KOKO) { Speed(100); Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { TURN {} TURN {} @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Booster Energy will activate Protosynthesis after harsh sunl GIVEN { WITH_CONFIG(CONFIG_ABILITY_WEATHER, GEN_6); PLAYER(SPECIES_RAGING_BOLT) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } - OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); }; + OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); } } WHEN { TURN {} TURN {} @@ -72,11 +72,11 @@ SINGLE_BATTLE_TEST("Booster Energy's Protosynthesis boost is preserved when weat OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_SUNNY_DAY, MOVE_CELEBRATE); } } WHEN { TURN { MOVE(opponent, MOVE_SUNNY_DAY); } - TURN { } - TURN { } - TURN { } - TURN { } - TURN { } + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!"); @@ -100,9 +100,9 @@ SINGLE_BATTLE_TEST("Booster Energy activates Protosynthesis and increases highes GIVEN { PLAYER(SPECIES_RAGING_BOLT) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS); @@ -134,9 +134,9 @@ SINGLE_BATTLE_TEST("Booster Energy activates Quark Drive and increases highest s GIVEN { PLAYER(SPECIES_IRON_MOTH) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); if (attack == 110) @@ -161,11 +161,11 @@ SINGLE_BATTLE_TEST("Booster Energy's Quark Drive boost is preserved when terrain OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_GRASSY_TERRAIN, MOVE_CELEBRATE); } } WHEN { TURN { MOVE(opponent, MOVE_GRASSY_TERRAIN); } - TURN { } - TURN { } - TURN { } - TURN { } - TURN { } + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Iron Moth used its Booster Energy to activate Quark Drive!"); @@ -192,7 +192,7 @@ SINGLE_BATTLE_TEST("Booster Energy increases special attack by 30% if it is the GIVEN { ASSUME(GetMoveCategory(MOVE_ROUND) == DAMAGE_CATEGORY_SPECIAL); PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ability); Item(item); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(player, MOVE_ROUND); } } SCENE { @@ -218,7 +218,7 @@ SINGLE_BATTLE_TEST("Booster Energy increases special defense by 30% if it is the GIVEN { ASSUME(GetMoveCategory(MOVE_ROUND) == DAMAGE_CATEGORY_SPECIAL); PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(100); SpDefense(110); Ability(ability); Item(item); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(opponent, MOVE_ROUND); } } SCENE { @@ -288,9 +288,9 @@ DOUBLE_BATTLE_TEST("Booster Energy activates on any terrain") PLAYER(SPECIES_IRON_MOTH) { Speed(110); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); } PLAYER(SPECIES_WOBBUFFET) { Speed(80); } OPPONENT(SPECIES_TAPU_BULU) { Speed(100); Ability(ABILITY_GRASSY_SURGE); } - OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); }; + OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_GRASSY_SURGE); ABILITY_POPUP(playerLeft, ABILITY_QUARK_DRIVE); @@ -305,7 +305,7 @@ DOUBLE_BATTLE_TEST("Booster Energy activates on air locked sun") PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_RAGING_BOLT) { Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } OPPONENT(SPECIES_PSYDUCK) { Ability(ABILITY_CLOUD_NINE); } - OPPONENT(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); }; + OPPONENT(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); } } WHEN { TURN { SWITCH(playerLeft, 2); } } SCENE { @@ -321,9 +321,9 @@ DOUBLE_BATTLE_TEST("Booster Energy will not activate on terrain if user has Prot PLAYER(SPECIES_RAGING_BOLT) { Speed(110); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); } PLAYER(SPECIES_WOBBUFFET) { Speed(80); } OPPONENT(SPECIES_TAPU_BULU) { Speed(100); Ability(ABILITY_GRASSY_SURGE); } - OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); }; + OPPONENT(SPECIES_TAPU_KOKO) { Speed(10); Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponentLeft, ABILITY_GRASSY_SURGE); NOT ABILITY_POPUP(playerLeft, ABILITY_PROTOSYNTHESIS); diff --git a/test/battle/hold_effect/clear_amulet.c b/test/battle/hold_effect/clear_amulet.c index 5c69655dc1..f073fe3a00 100644 --- a/test/battle/hold_effect/clear_amulet.c +++ b/test/battle/hold_effect/clear_amulet.c @@ -12,9 +12,9 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents Intimidate") s16 turnTwoHit; GIVEN { - PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); }; - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }; + PLAYER(SPECIES_EKANS) { Ability(ABILITY_SHED_SKIN); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SCRATCH); } @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents stat reducing effects") ASSUME(GetMoveEffect(MOVE_SWEET_SCENT) == (B_UPDATED_MOVE_DATA >= GEN_6 ? EFFECT_EVASION_DOWN_2 : EFFECT_EVASION_DOWN)); ASSUME(GetMoveEffect(MOVE_SAND_ATTACK) == EFFECT_ACCURACY_DOWN); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); } } WHEN { TURN { MOVE(player, move); } } SCENE { @@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Clear Amulet prevents secondary effects that reduce stats") ASSUME(MoveHasAdditionalEffect(MOVE_PSYCHIC, MOVE_EFFECT_SP_DEF_MINUS_1) == TRUE); ASSUME(MoveHasAdditionalEffect(MOVE_MUD_SLAP, MOVE_EFFECT_ACC_MINUS_1) == TRUE); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_CLEAR_AMULET); } } WHEN { TURN { MOVE(player, move); } } SCENE { diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 4a5d354a10..0f389af4d5 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -181,7 +181,7 @@ SINGLE_BATTLE_TEST("Berry hold effect cures status if a Pokémon enters a battle PLAYER(SPECIES_WOBBUFFET) { Status1(status); Item(ITEM_LUM_BERRY); } OPPONENT(SPECIES_WOBBUFFET) { Status1(status); Item(item); } } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); @@ -239,7 +239,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN); ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS); PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WOBBUFFET) {Item(item); } + PLAYER(SPECIES_WOBBUFFET) { Item(item); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -297,20 +297,20 @@ DOUBLE_BATTLE_TEST("Lum Berry correctly cures all battlers if multiple fainted t SINGLE_BATTLE_TEST("Lum Berry properly cures a battler affected by a non-volatiles status and confusion") { u32 status; - PARAMETRIZE { status = STATUS1_BURN;} - PARAMETRIZE { status = STATUS1_FREEZE;} - PARAMETRIZE { status = STATUS1_PARALYSIS;} - PARAMETRIZE { status = STATUS1_POISON;} - PARAMETRIZE { status = STATUS1_TOXIC_POISON;} - PARAMETRIZE { status = STATUS1_SLEEP;} + PARAMETRIZE { status = STATUS1_BURN; } + PARAMETRIZE { status = STATUS1_FREEZE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; } + PARAMETRIZE { status = STATUS1_POISON; } + PARAMETRIZE { status = STATUS1_TOXIC_POISON; } + PARAMETRIZE { status = STATUS1_SLEEP; } GIVEN { ASSUME(GetMoveEffect(MOVE_CONFUSE_RAY) == EFFECT_CONFUSE); - PLAYER(SPECIES_WOBBUFFET) { Status1(status); Speed(1);}; - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Speed(2);}; + PLAYER(SPECIES_WOBBUFFET) { Status1(status); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); Speed(2); } } WHEN { - TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_CELEBRATE, WITH_RNG(RNG_FROZEN, 0));} - TURN { MOVE(opponent, MOVE_SWITCHEROO);} + TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_CELEBRATE, WITH_RNG(RNG_FROZEN, 0)); } + TURN { MOVE(opponent, MOVE_SWITCHEROO); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("Wobbuffet's Lum Berry normalized its status!"); diff --git a/test/battle/hold_effect/destiny_knot.c b/test/battle/hold_effect/destiny_knot.c index 7c0fabff5d..566ded5735 100644 --- a/test/battle/hold_effect/destiny_knot.c +++ b/test/battle/hold_effect/destiny_knot.c @@ -9,10 +9,10 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is targeted") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); } } WHEN { - TURN { MOVE(player, MOVE_ATTRACT); } + TURN { MOVE(player, MOVE_ATTRACT); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("Wobbuffet fell in love because of the Destiny Knot!"); @@ -24,10 +24,10 @@ SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is targeted") SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is attacking") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); Item(ITEM_DESTINY_KNOT);} - OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM);} + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); Item(ITEM_DESTINY_KNOT); } + OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); } } WHEN { - TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); MESSAGE("The opposing Clefairy fell in love because of the Destiny Knot!"); @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Destiny Knot infatuates back when holder is attacking") SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is already infatuated") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } + PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); } } WHEN { TURN { MOVE(opponent, MOVE_ATTRACT); MOVE(player, MOVE_ATTRACT, WITH_RNG(RNG_INFATUATION, FALSE)); } @@ -68,11 +68,11 @@ SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is oblivious") SINGLE_BATTLE_TEST("Destiny Knot procs but fails if the target is already infatuated (cute charm)") { GIVEN { - PLAYER(SPECIES_CLEFAIRY) { Gender(MON_MALE); Ability(ABILITY_CUTE_CHARM);} + PLAYER(SPECIES_CLEFAIRY) { Gender(MON_MALE); Ability(ABILITY_CUTE_CHARM); } OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); Item(ITEM_DESTINY_KNOT); } } WHEN { - TURN { MOVE(opponent, MOVE_ATTRACT);} - TURN { MOVE(opponent, MOVE_TACKLE);} + TURN { MOVE(opponent, MOVE_ATTRACT); } + TURN { MOVE(opponent, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); MESSAGE("But it failed!"); diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c index 836f3d0fd1..7e854055dd 100644 --- a/test/battle/hold_effect/eject_pack.c +++ b/test/battle/hold_effect/eject_pack.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Eject Pack does not activate if there are no Pokémon left t PLAYER(SPECIES_WOBBUFFET) { HP(0); } OPPONENT(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); NONE_OF { @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Eject Pack will miss timing to switch out user if Emergency GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(133); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_OVERHEAT); SEND_OUT(opponent, 1); } @@ -125,7 +125,7 @@ DOUBLE_BATTLE_TEST("Eject Pack will not trigger if the conditions are not met") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } - PLAYER(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); }; + PLAYER(SPECIES_BELDUM) { Ability(ABILITY_CLEAR_BODY); } PLAYER(SPECIES_RALTS) { Ability(ABILITY_TRACE); Item(ITEM_EJECT_PACK); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); @@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("Eject Pack does not activate if mon is switched in due to Ej GIVEN { PLAYER(SPECIES_DUGTRIO) { Ability(ABILITY_ARENA_TRAP); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); } - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { diff --git a/test/battle/hold_effect/gems.c b/test/battle/hold_effect/gems.c index b597beeab7..8455fe09da 100644 --- a/test/battle/hold_effect/gems.c +++ b/test/battle/hold_effect/gems.c @@ -9,7 +9,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Gem is consumed when it corresponds to the type of a move") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_EMBER); } @@ -60,7 +60,7 @@ SINGLE_BATTLE_TEST("Gem boost is only applied once") s16 normalHit; GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } @@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Gem modifier is used for all hits of Multi Hit Moves") s16 secondHit; GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { @@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Gem modifier is used for all hits of Multi Hit Moves") SINGLE_BATTLE_TEST("Gem is consumed if the move type is changed") { GIVEN { - PLAYER(SPECIES_DELCATTY) { Ability(ABILITY_NORMALIZE); Item(ITEM_NORMAL_GEM); }; + PLAYER(SPECIES_DELCATTY) { Ability(ABILITY_NORMALIZE); Item(ITEM_NORMAL_GEM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { diff --git a/test/battle/hold_effect/iron_ball.c b/test/battle/hold_effect/iron_ball.c index 90c370e8f3..48c87dbccb 100644 --- a/test/battle/hold_effect/iron_ball.c +++ b/test/battle/hold_effect/iron_ball.c @@ -13,9 +13,9 @@ SINGLE_BATTLE_TEST("Ground-type moves do neutral damage to non-grounded Flying t GIVEN { WITH_CONFIG(CONFIG_IRON_BALL, config); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_SKARMORY) { Item(ITEM_IRON_BALL); }; + OPPONENT(SPECIES_SKARMORY) { Item(ITEM_IRON_BALL); } } WHEN { - TURN { MOVE(player, MOVE_EARTHQUAKE); }; + TURN { MOVE(player, MOVE_EARTHQUAKE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player); if (config >= GEN_5) { diff --git a/test/battle/hold_effect/metronome.c b/test/battle/hold_effect/metronome.c index e7037db8d0..8e9e07d9ff 100644 --- a/test/battle/hold_effect/metronome.c +++ b/test/battle/hold_effect/metronome.c @@ -109,8 +109,8 @@ SINGLE_BATTLE_TEST("Metronome Item counts charging turn of moves for its attacki { u32 item; - PARAMETRIZE {item = ITEM_NONE; } - PARAMETRIZE {item = ITEM_METRONOME; } + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_METRONOME; } GIVEN { ASSUME(GetMoveEffect(MOVE_SOLAR_BEAM) == EFFECT_SOLAR_BEAM); PLAYER(SPECIES_WOBBUFFET) { Item(item); } diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c index 6618d41950..def6cdd429 100644 --- a/test/battle/hold_effect/mirror_herb.c +++ b/test/battle/hold_effect/mirror_herb.c @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Mirror Herb copies the boost gained by an ability") PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(player, ABILITY_INTREPID_SWORD); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); diff --git a/test/battle/hold_effect/random_stat_up.c b/test/battle/hold_effect/random_stat_up.c index ff6b03e035..53a11c6f9f 100644 --- a/test/battle/hold_effect/random_stat_up.c +++ b/test/battle/hold_effect/random_stat_up.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Starf Berry randomly raises the holder's Attack, Defense, Sp PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STARF_BERRY); HP(100); MaxHP(400); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 6b5e08c450..e020b43f59 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -485,7 +485,7 @@ SINGLE_BATTLE_TEST("Red Card prevents Emergency Exit activation when triggered") GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_GOLISOPOD) { Item(ITEM_RED_CARD); Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); }; + OPPONENT(SPECIES_GOLISOPOD) { Item(ITEM_RED_CARD); Ability(ABILITY_EMERGENCY_EXIT); MaxHP(263); HP(262); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SUPER_FANG); MOVE(opponent, MOVE_CELEBRATE); } diff --git a/test/battle/hold_effect/rocky_helmet.c b/test/battle/hold_effect/rocky_helmet.c index bc52f44b87..f49d26c1eb 100644 --- a/test/battle/hold_effect/rocky_helmet.c +++ b/test/battle/hold_effect/rocky_helmet.c @@ -11,7 +11,7 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Rocky Helmet damages attacker even if damage is blocked by Disguise") { GIVEN { - PLAYER(SPECIES_MIMIKYU) { Item(ITEM_ROCKY_HELMET); Ability(ABILITY_DISGUISE); }; + PLAYER(SPECIES_MIMIKYU) { Item(ITEM_ROCKY_HELMET); Ability(ABILITY_DISGUISE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SHADOW_SNEAK); } diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c index ec90b251b3..a5cfca0769 100644 --- a/test/battle/hold_effect/safety_goggles.c +++ b/test/battle/hold_effect/safety_goggles.c @@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Hail") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(player, MOVE_HAIL); } } SCENE { @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Safety Goggles blocks damage from Sandstorm") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(player, MOVE_SANDSTORM); } } SCENE { diff --git a/test/battle/hold_effect/scope_lens.c b/test/battle/hold_effect/scope_lens.c index 2a073900a7..f74a06a1c5 100644 --- a/test/battle/hold_effect/scope_lens.c +++ b/test/battle/hold_effect/scope_lens.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by 1 stage") WITH_CONFIG(CONFIG_CRIT_CHANCE, genConfig); ASSUME(gItemsInfo[ITEM_SCOPE_LENS].holdEffect == HOLD_EFFECT_SCOPE_LENS); ASSUME(GetSpeciesBaseSpeed(SPECIES_WOBBUFFET) == 33); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SCOPE_LENS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_SCRATCH); } diff --git a/test/battle/hold_effect/shed_shell.c b/test/battle/hold_effect/shed_shell.c index 93c3fb0e53..f8f6277ff2 100644 --- a/test/battle/hold_effect/shed_shell.c +++ b/test/battle/hold_effect/shed_shell.c @@ -62,6 +62,6 @@ SINGLE_BATTLE_TEST("Shed Shell does not allow Teleport when trapped") } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_MEAN_LOOK, opponent); MESSAGE("Wobbuffet used Teleport!"); - MESSAGE("But it failed!"); + MESSAGE("But it failed!"); } } diff --git a/test/battle/hold_effect/shell_bell.c b/test/battle/hold_effect/shell_bell.c index 82f1b0b184..7473f6db59 100644 --- a/test/battle/hold_effect/shell_bell.c +++ b/test/battle/hold_effect/shell_bell.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Shell Bell recovers no HP if the move did no damage") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_SHELL_BELL); } - OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } } WHEN { TURN { MOVE(player, MOVE_FALSE_SWIPE); } } SCENE { @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Shell Bell restores 1/8 HP of damage dealt") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Level(16); Item(ITEM_SHELL_BELL); HP(10); } - OPPONENT(SPECIES_WOBBUFFET) { Level(16); }; + OPPONENT(SPECIES_WOBBUFFET) { Level(16); } } WHEN { TURN { MOVE(player, MOVE_SEISMIC_TOSS); } } SCENE { @@ -135,11 +135,11 @@ SINGLE_BATTLE_TEST("Shell Bell doesn't restore HP for damage dealt by a foreseen GIVEN { ASSUME(GetMoveEffect(MOVE_FUTURE_SIGHT) == EFFECT_FUTURE_SIGHT); PLAYER(SPECIES_WOBBUFFET) { Level(16); Item(ITEM_SHELL_BELL); HP(10); } - OPPONENT(SPECIES_WOBBUFFET) { Level(16); }; + OPPONENT(SPECIES_WOBBUFFET) { Level(16); } } WHEN { TURN { MOVE(player, MOVE_FUTURE_SIGHT); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); MESSAGE("The opposing Wobbuffet took the Future Sight attack!"); @@ -210,9 +210,9 @@ DOUBLE_BATTLE_TEST("Shell Bell heals accumulated damage for spread moves") GIVEN { ASSUME(GetMoveTarget(MOVE_DISCHARGE) == MOVE_TARGET_FOES_AND_ALLY); PLAYER(SPECIES_ARIADOS) { MaxHP(maxHp); HP(initHp); Item(ITEM_SHELL_BELL); } - PLAYER(SPECIES_WOBBUFFET) {} - OPPONENT(SPECIES_GYARADOS) {} - OPPONENT(SPECIES_CHANSEY) {} + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_GYARADOS); + OPPONENT(SPECIES_CHANSEY); } WHEN { TURN { MOVE(playerLeft, MOVE_DISCHARGE); @@ -275,7 +275,7 @@ SINGLE_BATTLE_TEST("Shell Bell recovers only 1 damage if the move only did 1 dam { GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(1); Item(ITEM_SHELL_BELL); } - OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } } WHEN { TURN { MOVE(player, MOVE_DRAGON_RAGE); } } SCENE { diff --git a/test/battle/hold_effect/sticky_barb.c b/test/battle/hold_effect/sticky_barb.c index 59c1e12270..b13f2a5987 100644 --- a/test/battle/hold_effect/sticky_barb.c +++ b/test/battle/hold_effect/sticky_barb.c @@ -13,7 +13,7 @@ SINGLE_BATTLE_TEST("Sticky Barb hurts its holder at the end of the turn") PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_STICKY_BARB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { HP_BAR(player, captureDamage: &damage); } THEN { diff --git a/test/battle/hold_effect/terrain_seed.c b/test/battle/hold_effect/terrain_seed.c index b54dd54f5b..1ff1c252bf 100644 --- a/test/battle/hold_effect/terrain_seed.c +++ b/test/battle/hold_effect/terrain_seed.c @@ -155,7 +155,7 @@ SINGLE_BATTLE_TEST("Seeds get consumed in Terrain even if holder is not affected PLAYER(SPECIES_PIDGEY) { Item(item); } OPPONENT(species) { Ability(ability); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ability); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -170,7 +170,7 @@ SINGLE_BATTLE_TEST("Electric Seed is consumed on Electric Terrain before other a PLAYER(SPECIES_TAPU_BULU) { Ability(ABILITY_GRASSY_SURGE); Item(ITEM_ELECTRIC_SEED); Speed(5); } OPPONENT(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); Item(ITEM_ELECTRIC_SEED); Speed(10); } } WHEN { - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); diff --git a/test/battle/hold_effect/utility_umbrella.c b/test/battle/hold_effect/utility_umbrella.c index 67a3be4c7a..83bb0539f4 100644 --- a/test/battle/hold_effect/utility_umbrella.c +++ b/test/battle/hold_effect/utility_umbrella.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Utility Umbrella blocks Sun damage modifiers", s16 damage) PARAMETRIZE { setupMove = MOVE_SUNNY_DAY; attackingMove = MOVE_WATER_GUN; heldItem = ITEM_NONE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); } } WHEN { TURN { MOVE(opponent, setupMove); } TURN { MOVE(player, attackingMove); } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Utility Umbrella blocks Rain damage modifiers", s16 damage) PARAMETRIZE { setupMove = MOVE_RAIN_DANCE; attackingMove = MOVE_WATER_GUN; heldItem = ITEM_NONE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(heldItem); } } WHEN { TURN { MOVE(opponent, setupMove); } TURN { MOVE(player, attackingMove); } diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c index 8423c29fdb..fe4a34ad97 100644 --- a/test/battle/hold_effect/white_herb.c +++ b/test/battle/hold_effect/white_herb.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } } WHEN { - TURN { ; } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); @@ -50,7 +50,7 @@ DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimi PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } PLAYER(SPECIES_WOBBUFFET); } WHEN { - TURN { ; } + TURN {} } SCENE { ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o GIVEN { ASSUME(GetMoveEffect(MOVE_KNOCK_OFF) == EFFECT_KNOCK_OFF); ASSUME(GetMoveEffect(MOVE_THIEF) == EFFECT_STEAL_ITEM); - PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); } + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, move); } @@ -162,7 +162,7 @@ SINGLE_BATTLE_TEST("White Herb wont have time to activate if it is knocked off o SINGLE_BATTLE_TEST("White Herb wont have time to activate if Magician steals it") { GIVEN { - PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); } + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); Item(ITEM_WHITE_HERB); } OPPONENT(SPECIES_FENNEKIN) { Ability(ABILITY_MAGICIAN); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); } @@ -196,7 +196,7 @@ SINGLE_BATTLE_TEST("White Herb has correct interactions with Intimidate triggere PLAYER(species) { Ability(ability); Item(ITEM_WHITE_HERB); } OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } } WHEN { - TURN { ; } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); ABILITY_POPUP(player, ability); diff --git a/test/battle/item_effect/cure_status.c b/test/battle/item_effect/cure_status.c index 79490b48dc..915196691b 100644 --- a/test/battle/item_effect/cure_status.c +++ b/test/battle/item_effect/cure_status.c @@ -36,9 +36,9 @@ DOUBLE_BATTLE_TEST("Antidote heals a battler from being poisoned (doubles)") u32 index; struct BattlePokemon *user = NULL; struct BattlePokemon *target = NULL; - PARAMETRIZE { index = 0; user = playerRight; target = playerLeft;} - PARAMETRIZE { index = 1; user = playerLeft; target = playerRight;} - PARAMETRIZE { index = 0; user = playerLeft; target = playerLeft;} + PARAMETRIZE { index = 0; user = playerRight; target = playerLeft; } + PARAMETRIZE { index = 1; user = playerLeft; target = playerRight; } + PARAMETRIZE { index = 0; user = playerLeft; target = playerLeft; } PARAMETRIZE { index = 1; user = playerRight; target = playerRight; } GIVEN { @@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("Antidote resets Toxic Counter") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_TOXIC); } - TURN { ; } + TURN {} TURN { USE_ITEM(player, ITEM_ANTIDOTE, partyIndex: 0); } } SCENE { MESSAGE("The opposing Wobbuffet used Toxic!"); @@ -177,10 +177,10 @@ DOUBLE_BATTLE_TEST("Full Heal heals a battler from any primary status (doubles)" struct BattlePokemon *target = NULL; for (u32 j = 0; j < 7; j++) { - PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0;} - PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1;} - PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0;} - PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerRight; index = 1;} + PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0; } + PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1; } + PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0; } + PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerRight; index = 1; } } GIVEN { ASSUME(gItemsInfo[ITEM_FULL_HEAL].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -237,10 +237,10 @@ DOUBLE_BATTLE_TEST("Heal Powder heals a battler from any primary status (doubles struct BattlePokemon *target = NULL; for (u32 j = 0; j < 7; j++) { - PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0;} - PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1;} - PARAMETRIZE {status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0;} - PARAMETRIZE {status = statusParameters[j]; user = playerRight; target = playerRight; index = 1;} + PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerLeft; index = 0; } + PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerRight; index = 1; } + PARAMETRIZE { status = statusParameters[j]; user = playerLeft; target = playerLeft; index = 0; } + PARAMETRIZE { status = statusParameters[j]; user = playerRight; target = playerRight; index = 1; } } GIVEN { ASSUME(gItemsInfo[ITEM_HEAL_POWDER].battleUsage == EFFECT_ITEM_CURE_STATUS); @@ -387,7 +387,7 @@ SINGLE_BATTLE_TEST("Lumiose Galette heals a battler from any primary status") } WHEN { TURN { USE_ITEM(player, ITEM_LUMIOSE_GALETTE, partyIndex: 0); } } SCENE { - MESSAGE("Wobbuffet had its status healed!");; + MESSAGE("Wobbuffet had its status healed!"); } THEN { EXPECT_EQ(player->status1, STATUS1_NONE); } diff --git a/test/battle/item_effect/heal_and_cure_status.c b/test/battle/item_effect/heal_and_cure_status.c index d85f11b33d..bb75625371 100644 --- a/test/battle/item_effect/heal_and_cure_status.c +++ b/test/battle/item_effect/heal_and_cure_status.c @@ -114,9 +114,9 @@ SINGLE_BATTLE_TEST("Full Restore restores a battler's HP and cures confusion") PLAYER(SPECIES_WOBBUFFET) { HP(1); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN{ MOVE(opponent, MOVE_CONFUSE_RAY); } - TURN{ USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } - TURN{ MOVE(player, MOVE_SCRATCH); } + TURN { MOVE(opponent, MOVE_CONFUSE_RAY); } + TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } + TURN { MOVE(player, MOVE_SCRATCH); } } SCENE { MESSAGE("Wobbuffet had its HP restored."); NONE_OF { MESSAGE("Wobbuffet is confused!"); } @@ -132,7 +132,7 @@ SINGLE_BATTLE_TEST("Full Restore resets Toxic Counter") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_TOXIC); } - TURN { ; } + TURN {} TURN { USE_ITEM(player, ITEM_FULL_RESTORE, partyIndex: 0); } } SCENE { MESSAGE("The opposing Wobbuffet used Toxic!"); diff --git a/test/battle/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c index 227a638c6a..37b8501c4b 100644 --- a/test/battle/item_effect/increase_stat.c +++ b/test/battle/item_effect/increase_stat.c @@ -268,7 +268,7 @@ SINGLE_BATTLE_TEST("Using X items in battle raises Friendship", s16 damage) PARAMETRIZE { startingFriendship = 0; } PARAMETRIZE { startingFriendship = X_ITEM_MAX_FRIENDSHIP; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); }; + PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); } // Set met location to currentMapSec + 1 to avoid getting the friendship boost // from being met in the current map section SetMonData(&PLAYER_PARTY[0], MON_DATA_MET_LOCATION, &metLocation); @@ -291,7 +291,7 @@ SINGLE_BATTLE_TEST("Using X items in battle where Pokemon was met raises Friends PARAMETRIZE { startingFriendship = 0; } PARAMETRIZE { startingFriendship = X_ITEM_MAX_FRIENDSHIP; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); }; + PLAYER(SPECIES_WOBBUFFET) { Friendship(startingFriendship); } // Set met location to currentMapSec to get the friendship boost SetMonData(&PLAYER_PARTY[0], MON_DATA_MET_LOCATION, &metLocation); OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/item_effect/revive.c b/test/battle/item_effect/revive.c index df866edf0e..f12c208fb0 100644 --- a/test/battle/item_effect/revive.c +++ b/test/battle/item_effect/revive.c @@ -130,8 +130,8 @@ DOUBLE_BATTLE_TEST("Revive does reset abilities") OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(opponentRight, MOVE_WORRY_SEED, target: playerLeft); MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); } - TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 0); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_SPORE, target: playerLeft);} + TURN { MOVE(opponentRight, MOVE_WORRY_SEED, target: playerLeft); MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); } + TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 0); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_SPORE, target: playerLeft); } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); @@ -184,7 +184,7 @@ DOUBLE_BATTLE_TEST("Revive does not grant a mon its pre-death types") OPPONENT(SPECIES_POOCHYENA); } WHEN { TURN { MOVE(playerRight, MOVE_REFLECT_TYPE, target: opponentRight); MOVE(opponentLeft, MOVE_PSYSHOCK, target: playerRight); MOVE(opponentRight, MOVE_SCRATCH, target: playerRight); } - TURN { USE_ITEM(playerLeft, ITEM_MAX_REVIVE, partyIndex: 1); SKIP_TURN(playerRight); MOVE(opponentLeft, MOVE_PSYCHIC, target: playerRight);} + TURN { USE_ITEM(playerLeft, ITEM_MAX_REVIVE, partyIndex: 1); SKIP_TURN(playerRight); MOVE(opponentLeft, MOVE_PSYCHIC, target: playerRight); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, playerRight); NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYSHOCK, opponentLeft); @@ -203,12 +203,12 @@ DOUBLE_BATTLE_TEST("Revive force revived pokemon to replace absent battler immed GIVEN { PLAYER(SPECIES_WYNAUT) { HP(1); } - PLAYER(SPECIES_WOBBUFFET) { }; - PLAYER(SPECIES_ARBOK) { Ability(ability); HP(0) ;} ; + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ARBOK) { Ability(ability); HP(0); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft);} + TURN { MOVE(opponentLeft, MOVE_SCRATCH, target: playerLeft); } TURN { USE_ITEM(playerRight, ITEM_REVIVE, partyIndex: 2); SKIP_TURN(playerLeft); MOVE(opponentRight, MOVE_SCRATCH, target: playerRight); } } SCENE { if (ability == ABILITY_INTIMIDATE) diff --git a/test/battle/move_animations/all_anims.c b/test/battle/move_animations/all_anims.c index c30f1c3a13..d77cb5ec4c 100644 --- a/test/battle/move_animations/all_anims.c +++ b/test/battle/move_animations/all_anims.c @@ -382,11 +382,11 @@ static void WhenSingles(u32 move, struct BattlePokemon *attacker, struct BattleP } else if (gMovesInfo[move].effect == EFFECT_ROLLOUT) { - TURN {MOVE(attacker, move);}; - TURN {MOVE(attacker, move);}; - TURN {MOVE(attacker, move);}; - TURN {MOVE(attacker, move);}; - TURN {MOVE(attacker, MOVE_HELPING_HAND);}; + TURN { MOVE(attacker, move); } + TURN { MOVE(attacker, move); } + TURN { MOVE(attacker, move); } + TURN { MOVE(attacker, move); } + TURN { MOVE(attacker, MOVE_HELPING_HAND); } } } @@ -601,11 +601,11 @@ static void DoublesWhen(u32 move, struct BattlePokemon *attacker, struct BattleP } else if (gMovesInfo[move].effect == EFFECT_ROLLOUT) { - TURN {MOVE(attacker, move, target: target);}; - TURN {MOVE(attacker, move, target: target);}; - TURN {MOVE(attacker, move, target: target);}; - TURN {MOVE(attacker, move, target: target);}; - TURN {MOVE(attacker, MOVE_LAST_RESORT, target: attacker);}; + TURN { MOVE(attacker, move, target: target); } + TURN { MOVE(attacker, move, target: target); } + TURN { MOVE(attacker, move, target: target); } + TURN { MOVE(attacker, move, target: target); } + TURN { MOVE(attacker, MOVE_LAST_RESORT, target: attacker); } } } @@ -647,7 +647,7 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (player to op for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -695,7 +695,7 @@ SINGLE_BATTLE_TEST("Move Animations don't leak when used - Singles (opponent to for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -747,7 +747,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -818,7 +818,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -890,7 +890,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerLeft t for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -962,7 +962,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -1034,7 +1034,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -1106,7 +1106,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentLeft for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -1178,7 +1178,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (playerRight for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -1250,7 +1250,7 @@ DOUBLE_BATTLE_TEST("Move Animations don't leak when used - Doubles (opponentRigh for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { @@ -1556,7 +1556,7 @@ SINGLE_BATTLE_TEST("Move Animations occur before their stat change animations - for (k = 0; k < variationsNumber; k++) { ParametrizeMovesAndSpecies(j, &tempMove, &tempSpecies, k); tempFriendship = ParametrizeFriendship(j, k); - PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship;} + PARAMETRIZE { move = tempMove; species = tempSpecies; variation = k; friendship = tempFriendship; } } } GIVEN { diff --git a/test/battle/move_effect/ally_switch.c b/test/battle/move_effect/ally_switch.c index 9b0117afe1..af4e1810fc 100644 --- a/test/battle/move_effect/ally_switch.c +++ b/test/battle/move_effect/ally_switch.c @@ -358,7 +358,7 @@ DOUBLE_BATTLE_TEST("Ally Switch does not update leech seed battler") } WHEN { TURN { MOVE(opponentLeft, MOVE_LEECH_SEED, target: playerLeft); } TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); } - TURN { ; } + TURN {} } SCENE { // turn 1 MESSAGE("The opposing Bulbasaur used Leech Seed!"); @@ -389,7 +389,7 @@ DOUBLE_BATTLE_TEST("Ally Switch updates attract battler") } WHEN { TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } TURN { MOVE(opponentRight, MOVE_ALLY_SWITCH); } - TURN { ; } + TURN {} } SCENE { // turn 1 MESSAGE("Wobbuffet used Tackle!"); diff --git a/test/battle/move_effect/aura_wheel.c b/test/battle/move_effect/aura_wheel.c index 3e26176eee..55af998c63 100644 --- a/test/battle/move_effect/aura_wheel.c +++ b/test/battle/move_effect/aura_wheel.c @@ -75,7 +75,7 @@ SINGLE_BATTLE_TEST("Aura Wheel can be turned into a Normal-type move after Morpe OPPONENT(SPECIES_DUSKULL); } WHEN { if (hangryMode) - TURN { } + TURN {} TURN { MOVE(opponent, MOVE_ENTRAINMENT); } TURN { MOVE(player, MOVE_AURA_WHEEL); SWITCH(opponent, 1); } } SCENE { diff --git a/test/battle/move_effect/belch.c b/test/battle/move_effect/belch.c index 38a41ae2c7..01bb244002 100644 --- a/test/battle/move_effect/belch.c +++ b/test/battle/move_effect/belch.c @@ -19,7 +19,7 @@ AI_SINGLE_BATTLE_TEST("AI: Belch has nonzero score after eating a berry") OPPONENT(SPECIES_PIKACHU) { Level(15); Item(ITEM_SHUCA_BERRY); Moves(MOVE_BELCH, MOVE_SCRATCH); } } WHEN { TURN { MOVE(player, MOVE_MUD_SHOT); EXPECT_MOVE(opponent, MOVE_SCRATCH); } - TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_BELCH);} + TURN { MOVE(player, MOVE_SCRATCH); EXPECT_MOVE(opponent, MOVE_BELCH); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELCH, opponent); } diff --git a/test/battle/move_effect/belly_drum.c b/test/battle/move_effect/belly_drum.c index 194ee5b9d0..8b2cdf1d18 100644 --- a/test/battle/move_effect/belly_drum.c +++ b/test/battle/move_effect/belly_drum.c @@ -47,7 +47,7 @@ SINGLE_BATTLE_TEST("Belly Drum maximizes the user's Attack stat", s16 damage) SINGLE_BATTLE_TEST("Belly Drum fails if user's current HP is half or less than half its maximum") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50);} + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_BELLY_DRUM); } diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c index 48b77d8bdc..610230de11 100644 --- a/test/battle/move_effect/charge.c +++ b/test/battle/move_effect/charge.c @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Charge's effect does not stack with Electromorphosis or Wind GIVEN { ASSUME(IsWindMove(MOVE_AIR_CUTTER)); - PLAYER(species) { Ability(ability); } + PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_THUNDERBOLT); } diff --git a/test/battle/move_effect/clangorous_soul.c b/test/battle/move_effect/clangorous_soul.c index a1a7ffa42a..b2914c18aa 100644 --- a/test/battle/move_effect/clangorous_soul.c +++ b/test/battle/move_effect/clangorous_soul.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Clangorous Soul cuts the user's HP by 1/3") { s16 dmg; GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); }; + PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CLANGOROUS_SOUL); } @@ -21,7 +21,7 @@ SINGLE_BATTLE_TEST("Clangorous Soul cuts the user's HP by 1/3") SINGLE_BATTLE_TEST("Clangorous Soul raises the user's Atk, Def, Sp. Atk. Sp. Def and Speed by 1 stage") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); }; + PLAYER(SPECIES_WOBBUFFET) { HP(300); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CLANGOROUS_SOUL); } @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Clangorous Soul raises the user's Atk, Def, Sp. Atk. Sp. Def SINGLE_BATTLE_TEST("Clangorous Soul fails if the user's HP is less or equal than 1/3") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(300); }; + PLAYER(SPECIES_WOBBUFFET) { HP(100); MaxHP(300); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_CLANGOROUS_SOUL); } diff --git a/test/battle/move_effect/coaching.c b/test/battle/move_effect/coaching.c index 642727de51..76030f1811 100644 --- a/test/battle/move_effect/coaching.c +++ b/test/battle/move_effect/coaching.c @@ -99,7 +99,7 @@ DOUBLE_BATTLE_TEST("Coaching fails if there's no ally") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT) { HP(1); }; + PLAYER(SPECIES_WYNAUT) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -132,7 +132,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Coaching") OPPONENT(SPECIES_WOBBUFFET) { Moves(move); } } WHEN { if (move == MOVE_HEADBUTT) - TURN { EXPECT_MOVE(opponentLeft, MOVE_COACHING); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_COACHING); } else TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_COACHING); } } diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index 84b7c1c70b..2d3678eaca 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -10,12 +10,12 @@ SINGLE_BATTLE_TEST("Corrosive Gas destroys the target's item or fails if the tar { u16 item; - PARAMETRIZE {item = ITEM_NONE; } - PARAMETRIZE {item = ITEM_POTION; } + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_POTION; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Item(item); } + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } } WHEN { TURN { MOVE(player, MOVE_CORROSIVE_GAS); } } SCENE { @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_MUK) {Item(ITEM_POISON_BARB); Ability(ABILITY_STICKY_HOLD); } + OPPONENT(SPECIES_MUK) { Item(ITEM_POISON_BARB); Ability(ABILITY_STICKY_HOLD); } } WHEN { TURN { MOVE(player, MOVE_CORROSIVE_GAS); } } SCENE { @@ -54,8 +54,8 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle") { GIVEN { ASSUME(GetMoveEffect(MOVE_RECYCLE) == EFFECT_RECYCLE); - PLAYER(SPECIES_WOBBUFFET) {Speed(15); } - OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_ORAN_BERRY); Speed(10); } + PLAYER(SPECIES_WOBBUFFET) { Speed(15); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); Speed(10); } } WHEN { TURN { MOVE(player, MOVE_CORROSIVE_GAS); MOVE(opponent, MOVE_RECYCLE); } } SCENE { @@ -78,7 +78,7 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { for (l = 0; l < 2; l++) { - PARAMETRIZE {itemOpponentLeft = (j & 1) ? ITEM_ORAN_BERRY : ITEM_NONE; + PARAMETRIZE { itemOpponentLeft = (j & 1) ? ITEM_ORAN_BERRY : ITEM_NONE; itemOpponentRight = (k & 1) ? ITEM_CHESTO_BERRY : ITEM_NONE; itemPlayerLeft = (l & 1) ? ITEM_CHERI_BERRY : ITEM_NONE; } } @@ -86,10 +86,10 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on } GIVEN { - PLAYER(SPECIES_WOBBUFFET) {Item(itemPlayerLeft);} - PLAYER(SPECIES_WYNAUT) {Item(ITEM_SITRUS_BERRY);} - OPPONENT(SPECIES_ABRA) {Item(itemOpponentLeft);} - OPPONENT(SPECIES_KADABRA) {Item(itemOpponentRight);} + PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayerLeft); } + PLAYER(SPECIES_WYNAUT) { Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_ABRA) { Item(itemOpponentLeft); } + OPPONENT(SPECIES_KADABRA) { Item(itemOpponentRight); } } WHEN { TURN { MOVE(playerRight, MOVE_CORROSIVE_GAS); } } SCENE { diff --git a/test/battle/move_effect/counter.c b/test/battle/move_effect/counter.c index 7fc9fb4b9f..7001d61451 100644 --- a/test/battle/move_effect/counter.c +++ b/test/battle/move_effect/counter.c @@ -134,7 +134,7 @@ DOUBLE_BATTLE_TEST("Counter fails if mon that damaged Counter user is no longer GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index 5ebe4c70f6..7b2946f40a 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -93,10 +93,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Auror TURN { MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_REFLECT); } TURN { MOVE(opponentLeft, MOVE_LIGHT_SCREEN); MOVE(opponentRight, MOVE_TAILWIND); } TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } - TURN { } - TURN { } - TURN { } - TURN { } + TURN {} + TURN {} + TURN {} + TURN {} } SCENE { MESSAGE("Wynaut used Snowscape!"); MESSAGE("The opposing Wobbuffet used Mist!"); @@ -132,10 +132,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aur TURN { MOVE(playerLeft, MOVE_AURORA_VEIL); MOVE(playerRight, MOVE_REFLECT); } TURN { MOVE(playerLeft, MOVE_LIGHT_SCREEN); MOVE(playerRight, MOVE_TAILWIND); } TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } - TURN { } - TURN { } - TURN { } - TURN { } + TURN {} + TURN {} + TURN {} + TURN {} } SCENE { MESSAGE("Wobbuffet used Mist!"); MESSAGE("Wobbuffet used Safeguard!"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index f2fa558e13..4ff5eb8b0e 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -40,7 +40,7 @@ SINGLE_BATTLE_TEST("Defog fails if target has minimum evasion stat change") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Ability(ABILITY_SIMPLE);}; + OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_SIMPLE); } } WHEN { TURN { MOVE(player, MOVE_DEFOG); } TURN { MOVE(player, MOVE_DEFOG); } @@ -80,7 +80,7 @@ SINGLE_BATTLE_TEST("Defog fails if target has minimum evasion stat change behind GIVEN { WITH_CONFIG(CONFIG_DEFOG_EFFECT_CLEARING, GEN_4); PLAYER(SPECIES_WOBBUFFET) { Speed(4); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Ability(ABILITY_SIMPLE);} + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); Ability(ABILITY_SIMPLE); } } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } TURN { MOVE(player, MOVE_DEFOG); } diff --git a/test/battle/move_effect/destiny_bond.c b/test/battle/move_effect/destiny_bond.c index ff532fa0d7..3be2384003 100644 --- a/test/battle/move_effect/destiny_bond.c +++ b/test/battle/move_effect/destiny_bond.c @@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Destiny Bond does not fail if used after failing (Gen7+)") SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); } } WHEN { TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } diff --git a/test/battle/move_effect/doodle.c b/test/battle/move_effect/doodle.c index 3484dac6a0..b8db08bb84 100644 --- a/test/battle/move_effect/doodle.c +++ b/test/battle/move_effect/doodle.c @@ -14,7 +14,7 @@ DOUBLE_BATTLE_TEST("Doodle gives the target's ability to user and ally") OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); MESSAGE("Wynaut copied the opposing Torchic's Ability!"); @@ -33,7 +33,7 @@ DOUBLE_BATTLE_TEST("Doodle can't copy a banned ability") OPPONENT(SPECIES_GREAT_TUSK) { Ability(ABILITY_PROTOSYNTHESIS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); @@ -54,7 +54,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if user has a banned Ability") OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); MESSAGE("But it failed!"); @@ -72,7 +72,7 @@ DOUBLE_BATTLE_TEST("Doodle fails if partner has a banned Ability") OPPONENT(SPECIES_TORCHIC) { Ability(ABILITY_BLAZE); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } + TURN { MOVE(playerLeft, MOVE_DOODLE, target: opponentLeft); } } SCENE { NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_DOODLE, playerLeft); MESSAGE("But it failed!"); diff --git a/test/battle/move_effect/dragon_cheer.c b/test/battle/move_effect/dragon_cheer.c index 01458bdc11..e7b24f3495 100644 --- a/test/battle/move_effect/dragon_cheer.c +++ b/test/battle/move_effect/dragon_cheer.c @@ -121,7 +121,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Dragon Cheer") OPPONENT(species) { Moves(MOVE_DRAGON_CHEER, MOVE_POUND); } } WHEN { if (species == SPECIES_DRATINI) - TURN { EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); } else TURN { NOT_EXPECT_MOVE(opponentLeft, MOVE_DRAGON_CHEER); } } diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c index 97694909fe..73df37e654 100644 --- a/test/battle/move_effect/dragon_darts.c +++ b/test/battle/move_effect/dragon_darts.c @@ -106,8 +106,8 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if electrified and th ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_LANTURN) { Ability(abilityLeft); }; - OPPONENT(SPECIES_LANTURN) { Ability(abilityRight); }; + OPPONENT(SPECIES_LANTURN) { Ability(abilityLeft); } + OPPONENT(SPECIES_LANTURN) { Ability(abilityRight); } } WHEN { TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { @@ -132,8 +132,8 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes an opponent twice if electrified and th ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY); PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityLeft); }; - OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityRight); }; + OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityLeft); } + OPPONENT(SPECIES_ELECTIVIRE) { Ability(abilityRight); } } WHEN { TURN { MOVE(opponentRight, MOVE_ELECTRIFY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget); } } SCENE { @@ -222,8 +222,8 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if one strike misses") GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(itemLeft); }; - OPPONENT(SPECIES_WOBBUFFET) { Item(itemRight); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(itemLeft); } + OPPONENT(SPECIES_WOBBUFFET) { Item(itemRight); } } WHEN { TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: chosenTarget, hit: FALSE); } } SCENE { @@ -240,7 +240,7 @@ DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if one strike misses") GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft, hit: FALSE); } diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index 183a513b79..0460f594ef 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Dream Eater fails if the target is behind a Substitute (Gen OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); } - TURN { } + TURN {} TURN { MOVE(opponent, MOVE_DREAM_EATER); } } SCENE { MESSAGE("The opposing Wobbuffet used Dream Eater!"); @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen OPPONENT(SPECIES_WOBBUFFET) { HP(1); } } WHEN { TURN { MOVE(opponent, MOVE_YAWN); MOVE(player, MOVE_SUBSTITUTE); } - TURN { } + TURN {} TURN { MOVE(opponent, MOVE_DREAM_EATER); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DREAM_EATER, opponent); diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c index 41c456d9ac..ef577fef61 100644 --- a/test/battle/move_effect/embargo.c +++ b/test/battle/move_effect/embargo.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Embargo blocks the effect of an affected Pokémon's held ite GIVEN { ASSUME(gItemsInfo[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_FOCUS_SASH); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_FOCUS_SASH); } } WHEN { TURN { MOVE(player, MOVE_EMBARGO); } TURN { MOVE(player, MOVE_FISSURE); } @@ -126,7 +126,7 @@ SINGLE_BATTLE_TEST("Embargo negates a held item's Speed reduction") // KNOWN_FAILING; // Pokémon are currently not obtaining Friendship for using items in battle. // GIVEN { // ASSUME(gItemsInfo[ITEM_X_ACCURACY].battleUsage == EFFECT_ITEM_INCREASE_STAT); -// PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); }; +// PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_SOOTHE_BELL); } // OPPONENT(SPECIES_WOBBUFFET); // } WHEN { // TURN { USE_ITEM(player, ITEM_X_ACCURACY); } @@ -149,7 +149,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't block a held item's form-changing effect, bu PARAMETRIZE { heldItem = ITEM_MEADOW_PLATE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_ARCEUS_GRASS) { Item(heldItem); }; + OPPONENT(SPECIES_ARCEUS_GRASS) { Item(heldItem); } ASSUME(gItemsInfo[ITEM_MEADOW_PLATE].holdEffect == HOLD_EFFECT_PLATE); ASSUME(gItemsInfo[ITEM_MEADOW_PLATE].holdEffectParam == 20); ASSUME(gItemsInfo[ITEM_MEADOW_PLATE].secondaryId == TYPE_GRASS); @@ -169,7 +169,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail") PARAMETRIZE { heldItem = ITEM_LIGHT_BALL; moveId = MOVE_FLING; } PARAMETRIZE { heldItem = ITEM_CHERI_BERRY; moveId = MOVE_NATURAL_GIFT; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(heldItem); }; + PLAYER(SPECIES_WOBBUFFET) { Item(heldItem); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); } @@ -190,7 +190,7 @@ SINGLE_BATTLE_TEST("Embargo makes Fling and Natural Gift fail") SINGLE_BATTLE_TEST("Embargo doesn't stop an item flung at an affected target from activating") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_EMBARGO); } @@ -211,7 +211,7 @@ SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - PLAYER(SPECIES_WYNAUT) { Item(ITEM_LIGHT_BALL); }; + PLAYER(SPECIES_WYNAUT) { Item(ITEM_LIGHT_BALL); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); } @@ -236,8 +236,8 @@ SINGLE_BATTLE_TEST("Embargo doesn't block the effects of berries obtained throug u32 hp = 10; GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); }; - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); } } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); } TURN { MOVE(player, MOVE_PLUCK); } @@ -260,7 +260,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Plate items on the move J PARAMETRIZE { heldItem = ITEM_NONE; } PARAMETRIZE { heldItem = ITEM_PIXIE_PLATE; } GIVEN { - PLAYER(SPECIES_ARCEUS) { Item(heldItem); }; + PLAYER(SPECIES_ARCEUS) { Item(heldItem); } OPPONENT(SPECIES_DRAGONITE); } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_JUDGMENT); } @@ -281,7 +281,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Drive items on the move T PARAMETRIZE { heldItem = ITEM_NONE; } PARAMETRIZE { heldItem = ITEM_SHOCK_DRIVE; } GIVEN { - PLAYER(SPECIES_GENESECT) { Item(heldItem); }; + PLAYER(SPECIES_GENESECT) { Item(heldItem); } OPPONENT(SPECIES_GYARADOS); } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_TECHNO_BLAST); } @@ -302,7 +302,7 @@ SINGLE_BATTLE_TEST("Embargo disables the effect of the Memory items on the move PARAMETRIZE { heldItem = ITEM_NONE; } PARAMETRIZE { heldItem = ITEM_FIRE_MEMORY; } GIVEN { - PLAYER(SPECIES_SILVALLY) { Item(heldItem); }; + PLAYER(SPECIES_SILVALLY) { Item(heldItem); } OPPONENT(SPECIES_VENUSAUR); } WHEN { TURN { MOVE(opponent, MOVE_EMBARGO); MOVE(player, MOVE_MULTI_ATTACK); } @@ -320,7 +320,7 @@ SINGLE_BATTLE_TEST("Embargo can be reflected by Magic Coat") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LIGHT_BALL); } } WHEN { TURN { MOVE(player, MOVE_MAGIC_COAT); MOVE(opponent, MOVE_EMBARGO); } TURN { MOVE(opponent, MOVE_FLING); } @@ -342,7 +342,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution") GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_CHARIZARD) { Item(ITEM_CHARIZARDITE_Y); }; + OPPONENT(SPECIES_CHARIZARD) { Item(ITEM_CHARIZARDITE_Y); } } WHEN { TURN { MOVE(player, MOVE_EMBARGO); } TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } @@ -367,7 +367,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Primal Reversion") GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); }; + OPPONENT(SPECIES_GROUDON) { Item(ITEM_RED_ORB); } } WHEN { TURN { MOVE(player, MOVE_EMBARGO); } TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); } diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index 094191f665..6e169c6b43 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after { GIVEN { PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary - OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(100); } } WHEN { TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); } TURN { MOVE(player, MOVE_ARM_THRUST); } diff --git a/test/battle/move_effect/entrainment.c b/test/battle/move_effect/entrainment.c index ac6050bbe0..ead4ff3b60 100644 --- a/test/battle/move_effect/entrainment.c +++ b/test/battle/move_effect/entrainment.c @@ -5,8 +5,8 @@ AI_DOUBLE_BATTLE_TEST("AI prefers Entrainment'ing good abilities onto partner wi { GIVEN { AI_FLAGS(AI_FLAG_SMART_TRAINER); - PLAYER(SPECIES_QUAXWELL) { Level(18); Ability(ABILITY_TORRENT); Moves(MOVE_WATER_GUN); }; - PLAYER(SPECIES_CORPHISH) { Level(18); Moves(MOVE_WATER_GUN); }; + PLAYER(SPECIES_QUAXWELL) { Level(18); Ability(ABILITY_TORRENT); Moves(MOVE_WATER_GUN); } + PLAYER(SPECIES_CORPHISH) { Level(18); Moves(MOVE_WATER_GUN); } OPPONENT(SPECIES_SMEARGLE) { Level(17); Ability(ABILITY_TECHNICIAN); Moves(MOVE_AERIAL_ACE, MOVE_ENTRAINMENT, MOVE_FLAME_WHEEL, MOVE_MAGICAL_LEAF); } OPPONENT(SPECIES_ARCHEN) { Level(17); Ability(ABILITY_DEFEATIST); Moves(MOVE_DUAL_WINGBEAT, MOVE_ROCK_TOMB); } } WHEN { diff --git a/test/battle/move_effect/explosion.c b/test/battle/move_effect/explosion.c index 8185171796..d54648e13a 100644 --- a/test/battle/move_effect/explosion.c +++ b/test/battle/move_effect/explosion.c @@ -111,10 +111,10 @@ SINGLE_BATTLE_TEST("Explosion is blocked by Ability Damp") SINGLE_BATTLE_TEST("Explosion does not trigger Destiny Bond") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_EXPLOSION);} + TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_EXPLOSION); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player); HP_BAR(opponent); diff --git a/test/battle/move_effect/fillet_away.c b/test/battle/move_effect/fillet_away.c index 70f180a700..0cd53e6848 100644 --- a/test/battle/move_effect/fillet_away.c +++ b/test/battle/move_effect/fillet_away.c @@ -43,7 +43,7 @@ SINGLE_BATTLE_TEST("Fillet Away sharply raises Attack, Sp. Atk, and Speed") SINGLE_BATTLE_TEST("Fillet Away fails if user's current HP is half or less than half its maximum") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50);} + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(50); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_FILLET_AWAY); } diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c index 012485abe8..595938bef5 100644 --- a/test/battle/move_effect/fling.c +++ b/test/battle/move_effect/fling.c @@ -10,14 +10,14 @@ SINGLE_BATTLE_TEST("Fling fails if Pokémon holds no item") { u16 item; - PARAMETRIZE {item = ITEM_NONE; } - PARAMETRIZE {item = ITEM_RAZOR_CLAW; } + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_RAZOR_CLAW; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(item); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_FLING);} + TURN { MOVE(player, MOVE_FLING); } } SCENE { MESSAGE("Wobbuffet used Fling!"); if (item != ITEM_NONE) { @@ -33,9 +33,9 @@ SINGLE_BATTLE_TEST("Fling fails if Pokémon is under the effects of Embargo or M { u16 move; - PARAMETRIZE {move = MOVE_CELEBRATE; } - PARAMETRIZE {move = MOVE_EMBARGO; } - PARAMETRIZE {move = MOVE_MAGIC_ROOM; } + PARAMETRIZE { move = MOVE_CELEBRATE; } + PARAMETRIZE { move = MOVE_EMBARGO; } + PARAMETRIZE { move = MOVE_MAGIC_ROOM; } GIVEN { ASSUME(GetMoveEffect(MOVE_EMBARGO) == EFFECT_EMBARGO); @@ -116,12 +116,12 @@ SINGLE_BATTLE_TEST("Fling's thrown item can be regained with Recycle") { GIVEN { ASSUME(GetMoveEffect(MOVE_RECYCLE) == EFFECT_RECYCLE); - PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_RAZOR_CLAW); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RAZOR_CLAW); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_FLING);} - TURN { MOVE(player, MOVE_RECYCLE);} - TURN { MOVE(player, MOVE_FLING);} + TURN { MOVE(player, MOVE_FLING); } + TURN { MOVE(player, MOVE_RECYCLE); } + TURN { MOVE(player, MOVE_FLING); } } SCENE { MESSAGE("Wobbuffet used Fling!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); @@ -139,9 +139,9 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target") { GIVEN { ASSUME(GetMoveEffect(MOVE_SELF_DESTRUCT) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_RAZOR_CLAW); Speed(2); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RAZOR_CLAW); Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { TURN { MOVE(opponent, MOVE_SELF_DESTRUCT); MOVE(player, MOVE_FLING); SEND_OUT(opponent, 1); } TURN { MOVE(player, MOVE_FLING); } @@ -164,10 +164,10 @@ SINGLE_BATTLE_TEST("Fling - Item is lost when target protects itself") { GIVEN { ASSUME(GetMoveEffect(MOVE_PROTECT) == EFFECT_PROTECT); - PLAYER(SPECIES_WOBBUFFET) {Item(ITEM_RAZOR_CLAW); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_RAZOR_CLAW); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING);} + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_FLING); } TURN { MOVE(player, MOVE_FLING); } } SCENE { MESSAGE("The opposing Wobbuffet used Protect!"); @@ -204,15 +204,15 @@ SINGLE_BATTLE_TEST("Fling doesn't consume the item if Pokémon is asleep/frozen/ u32 status; u16 item; - PARAMETRIZE {status = STATUS1_SLEEP_TURN(2); item = ITEM_RAZOR_CLAW; } - PARAMETRIZE {status = STATUS1_PARALYSIS; item = ITEM_RAZOR_CLAW; } - PARAMETRIZE {status = STATUS1_FREEZE; item = ITEM_RAZOR_CLAW; } - PARAMETRIZE {status = STATUS1_SLEEP_TURN(2); item = ITEM_NONE; } - PARAMETRIZE {status = STATUS1_PARALYSIS; item = ITEM_NONE; } - PARAMETRIZE {status = STATUS1_FREEZE; item = ITEM_NONE; } + PARAMETRIZE { status = STATUS1_SLEEP_TURN(2); item = ITEM_RAZOR_CLAW; } + PARAMETRIZE { status = STATUS1_PARALYSIS; item = ITEM_RAZOR_CLAW; } + PARAMETRIZE { status = STATUS1_FREEZE; item = ITEM_RAZOR_CLAW; } + PARAMETRIZE { status = STATUS1_SLEEP_TURN(2); item = ITEM_NONE; } + PARAMETRIZE { status = STATUS1_PARALYSIS; item = ITEM_NONE; } + PARAMETRIZE { status = STATUS1_FREEZE; item = ITEM_NONE; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) {Item(item); Status1(status); } + PLAYER(SPECIES_WOBBUFFET) { Item(item); Status1(status); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { if (status == STATUS1_FREEZE) { @@ -254,12 +254,12 @@ SINGLE_BATTLE_TEST("Fling applies special effects when throwing specific Items") { u16 item; - PARAMETRIZE {item = ITEM_FLAME_ORB; } - PARAMETRIZE {item = ITEM_LIGHT_BALL; } - PARAMETRIZE {item = ITEM_POISON_BARB; } - PARAMETRIZE {item = ITEM_TOXIC_ORB; } - PARAMETRIZE {item = ITEM_RAZOR_FANG; } - PARAMETRIZE {item = ITEM_KINGS_ROCK; } + PARAMETRIZE { item = ITEM_FLAME_ORB; } + PARAMETRIZE { item = ITEM_LIGHT_BALL; } + PARAMETRIZE { item = ITEM_POISON_BARB; } + PARAMETRIZE { item = ITEM_TOXIC_ORB; } + PARAMETRIZE { item = ITEM_RAZOR_FANG; } + PARAMETRIZE { item = ITEM_KINGS_ROCK; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(item); } @@ -310,12 +310,12 @@ SINGLE_BATTLE_TEST("Fling's secondary effects are blocked by Shield Dust") { u16 item; - PARAMETRIZE {item = ITEM_FLAME_ORB; } - PARAMETRIZE {item = ITEM_LIGHT_BALL; } - PARAMETRIZE {item = ITEM_POISON_BARB; } - PARAMETRIZE {item = ITEM_TOXIC_ORB; } - PARAMETRIZE {item = ITEM_RAZOR_FANG; } - PARAMETRIZE {item = ITEM_KINGS_ROCK; } + PARAMETRIZE { item = ITEM_FLAME_ORB; } + PARAMETRIZE { item = ITEM_LIGHT_BALL; } + PARAMETRIZE { item = ITEM_POISON_BARB; } + PARAMETRIZE { item = ITEM_TOXIC_ORB; } + PARAMETRIZE { item = ITEM_RAZOR_FANG; } + PARAMETRIZE { item = ITEM_KINGS_ROCK; } GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(item); } diff --git a/test/battle/move_effect/flower_shield.c b/test/battle/move_effect/flower_shield.c index 4a72163855..b582f495ec 100644 --- a/test/battle/move_effect/flower_shield.c +++ b/test/battle/move_effect/flower_shield.c @@ -84,6 +84,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Flower Shield") OPPONENT(SPECIES_TANGELA) { Moves(MOVE_FLOWER_SHIELD, MOVE_POUND); } OPPONENT(SPECIES_TANGELA); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_FLOWER_SHIELD); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_FLOWER_SHIELD); } } } diff --git a/test/battle/move_effect/focus_energy.c b/test/battle/move_effect/focus_energy.c index 363e6bd563..ffc9370572 100644 --- a/test/battle/move_effect/focus_energy.c +++ b/test/battle/move_effect/focus_energy.c @@ -45,8 +45,8 @@ SINGLE_BATTLE_TEST("Focus Energy multiplies crit chance by 4 with gen 1 crit cha bool32 useFocusEnergy = 0; u32 genConfig = 0, chance = 0; for (u32 j = GEN_1; j <= GEN_9; j++) { - PARAMETRIZE { genConfig = j; useFocusEnergy = FALSE; chance = 16;} - PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; chance = 4;} + PARAMETRIZE { genConfig = j; useFocusEnergy = FALSE; chance = 16; } + PARAMETRIZE { genConfig = j; useFocusEnergy = TRUE; chance = 4; } } PASSES_RANDOMLY(1, chance, RNG_CRITICAL_HIT); GIVEN { diff --git a/test/battle/move_effect/focus_punch.c b/test/battle/move_effect/focus_punch.c index 35f26ae9ee..e29e27f94a 100644 --- a/test/battle/move_effect/focus_punch.c +++ b/test/battle/move_effect/focus_punch.c @@ -123,7 +123,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use status moves if the player's best attacking ASSUME(GetSpeciesType(SPECIES_CLEFABLE, 1) == TYPE_FAIRY); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_OMNISCIENT); PLAYER(SPECIES_SNORLAX) { Moves(MOVE_FOCUS_PUNCH, MOVE_POUND); } - OPPONENT(SPECIES_CLEFABLE) { Moves(MOVE_PLAY_ROUGH, MOVE_SWORDS_DANCE); } + OPPONENT(SPECIES_CLEFABLE) { Moves(MOVE_PLAY_ROUGH, MOVE_SWORDS_DANCE); } } WHEN { TURN { MOVE(player, MOVE_FOCUS_PUNCH); EXPECT_MOVE(opponent, MOVE_PLAY_ROUGH); } } diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c index ee424c9bd9..01a5bed349 100644 --- a/test/battle/move_effect/future_sight.c +++ b/test/battle/move_effect/future_sight.c @@ -34,8 +34,8 @@ SINGLE_BATTLE_TEST("Future Sight uses Sp. Atk stat of the original user without TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); } TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { SWITCH(player, 1); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); @@ -60,8 +60,8 @@ SINGLE_BATTLE_TEST("Future Sight is not boosted by Life Orb is original user if TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); } TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { SWITCH(player, 1); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); @@ -88,8 +88,8 @@ SINGLE_BATTLE_TEST("Future Sight receives STAB from party mon (Gen 5+)") TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); } TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { SWITCH(player, 1); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player); HP_BAR(opponent, captureDamage: &seedFlareDmg); @@ -111,8 +111,8 @@ SINGLE_BATTLE_TEST("Future Sight is affected by type effectiveness (Gen 5+)") TURN { MOVE(player, FUTURE_SIGHT_EQUIVALENT, WITH_RNG(RNG_SECONDARY_EFFECT, FALSE)); } TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { SWITCH(player, 1); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, FUTURE_SIGHT_EQUIVALENT, player); HP_BAR(opponent); @@ -136,7 +136,7 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints before it is TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { MOVE(player, MOVE_CELEBRATE); } TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_MEMENTO); SEND_OUT(opponent, 1); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); @@ -158,7 +158,7 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints by residual d TURN { MOVE(player, MOVE_FUTURE_SIGHT); } TURN { MOVE(player, MOVE_CELEBRATE); } TURN { MOVE(player, MOVE_WRAP); SEND_OUT(opponent, 1); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); @@ -178,8 +178,8 @@ SINGLE_BATTLE_TEST("Future Sight breaks Focus Sash and doesn't make the holder e OPPONENT(SPECIES_PIDGEY) { Level(1); Item(ITEM_FOCUS_SASH); } } WHEN { TURN { MOVE(player, MOVE_FUTURE_SIGHT); } - TURN { } - TURN { } + TURN {} + TURN {} TURN { MOVE(player, MOVE_PSYCHIC); } } SCENE { MESSAGE("The opposing Pidgey hung on using its Focus Sash!"); diff --git a/test/battle/move_effect/gear_up.c b/test/battle/move_effect/gear_up.c index 8689d6d268..9a9bdab79c 100644 --- a/test/battle/move_effect/gear_up.c +++ b/test/battle/move_effect/gear_up.c @@ -12,6 +12,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Gear Up") OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); } OPPONENT(SPECIES_KLINKLANG) { Ability(ABILITY_PLUS); Moves(MOVE_GEAR_UP, MOVE_WATER_GUN, MOVE_POUND); } } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_GEAR_UP); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_GEAR_UP); } } } diff --git a/test/battle/move_effect/glaive_rush.c b/test/battle/move_effect/glaive_rush.c index ff949a57cd..31e923443b 100644 --- a/test/battle/move_effect/glaive_rush.c +++ b/test/battle/move_effect/glaive_rush.c @@ -55,7 +55,7 @@ SINGLE_BATTLE_TEST("If Glaive Rush is successful, moves targeted at the user dea OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_GLAIVE_RUSH); } - TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_CELEBRATE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); HP_BAR(player, captureDamage: &normalDmg); @@ -118,7 +118,7 @@ SINGLE_BATTLE_TEST("Glaive Rush doesn't affect the user if the effect is blocked SINGLE_BATTLE_TEST("Glaive Rush status last until the the user's next turn") { - s16 normalDmgFristHit; + s16 normalDmgFirstHit; s16 normalDmgSecondHit; GIVEN { @@ -133,11 +133,11 @@ SINGLE_BATTLE_TEST("Glaive Rush status last until the the user's next turn") ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); - HP_BAR(player, captureDamage: &normalDmgFristHit); + HP_BAR(player, captureDamage: &normalDmgFirstHit); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, opponent); HP_BAR(player, captureDamage: &normalDmgSecondHit); } THEN { - EXPECT_EQ(normalDmgFristHit, normalDmgSecondHit); + EXPECT_EQ(normalDmgFirstHit, normalDmgSecondHit); } } diff --git a/test/battle/move_effect/grassy_terrain.c b/test/battle/move_effect/grassy_terrain.c index 2b5e166bfd..063d5ae981 100644 --- a/test/battle/move_effect/grassy_terrain.c +++ b/test/battle/move_effect/grassy_terrain.c @@ -5,7 +5,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain recovers 1/16th HP at end of turn") { GIVEN { PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } - OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(1); } } WHEN { TURN { MOVE(player, MOVE_GRASSY_TERRAIN); } TURN {} @@ -85,7 +85,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain heals the Pokémon on the field for the durat { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_GRASSY_TERRAIN); } TURN {} diff --git a/test/battle/move_effect/gravity.c b/test/battle/move_effect/gravity.c index 001505bae0..7175f085f7 100644 --- a/test/battle/move_effect/gravity.c +++ b/test/battle/move_effect/gravity.c @@ -73,7 +73,7 @@ AI_DOUBLE_BATTLE_TEST("AI uses Gravity") PLAYER(SPECIES_WOBBUFFET) { Item(foeItem); } PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_GRAVITY, MOVE_HEADBUTT, MOVE_TAUNT); } - OPPONENT(SPECIES_WOBBUFFET) { Moves(move, MOVE_EARTH_POWER); Item(friendItem); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(move, MOVE_EARTH_POWER); Item(friendItem); } } WHEN { if (move == MOVE_THUNDER || (foeItem == ITEM_AIR_BALLOON && friendItem != ITEM_AIR_BALLOON)) TURN { EXPECT_MOVE(opponentLeft, MOVE_GRAVITY); } diff --git a/test/battle/move_effect/grudge.c b/test/battle/move_effect/grudge.c index 9d381ad833..8da8b33fb8 100644 --- a/test/battle/move_effect/grudge.c +++ b/test/battle/move_effect/grudge.c @@ -6,7 +6,7 @@ SINGLE_BATTLE_TEST("Grudge depletes all PP of the move that fainted the target") GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }; + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); } } WHEN { TURN { MOVE(player, MOVE_GRUDGE); @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Grudge does not deplete PP of a Z-Move") GIVEN { PLAYER(SPECIES_WOBBUFFET) { HP(1); } PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Moves(MOVE_CELEBRATE, MOVE_SCRATCH, MOVE_POUND, MOVE_SURF); } } WHEN { TURN { MOVE(player, MOVE_GRUDGE); diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index e2ca05206a..66a754df5c 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -179,7 +179,7 @@ DOUBLE_BATTLE_TEST("Aromatherapy cure Soundproof battlers regardless of config") GIVEN { ASSUME(!IsSoundMove(MOVE_AROMATHERAPY)); WITH_CONFIG(CONFIG_HEAL_BELL_SOUNDPROOF, config); - PLAYER(SPECIES_WOBBUFFET) { Ability(ability); Status1(STATUS1_POISON); }; + PLAYER(SPECIES_WOBBUFFET) { Ability(ability); Status1(STATUS1_POISON); } PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c index f587d078a0..b4e3e2f4e5 100644 --- a/test/battle/move_effect/hit_escape.c +++ b/test/battle/move_effect/hit_escape.c @@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("Hit Escape: U-turn switches the user out after Ice Face acti SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon switched in by U-turn: player side") { GIVEN { - PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; + PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ELECTRIC_SEED); } OPPONENT(SPECIES_WYNAUT) { HP(1); } OPPONENT(SPECIES_WYNAUT); @@ -138,8 +138,8 @@ SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon switched in by U-turn: opposing side") { GIVEN { - PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; - PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } + PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_WYNAUT) { HP(1); } OPPONENT(SPECIES_WYNAUT) { Item(ITEM_ELECTRIC_SEED); } } WHEN { @@ -160,7 +160,7 @@ SINGLE_BATTLE_TEST("Hit Escape: Held items are consumed immediately after a mon SINGLE_BATTLE_TEST("Hit Escape: Electric Seed boost is received by the right Pokémon after U-turn and Intimidate") { GIVEN { - PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); }; + PLAYER(SPECIES_TAPU_KOKO) { Ability(ABILITY_ELECTRIC_SURGE); } PLAYER(SPECIES_EKANS) { Ability(ABILITY_INTIMIDATE); Item(ITEM_ELECTRIC_SEED); } OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); @@ -181,9 +181,9 @@ SINGLE_BATTLE_TEST("Hit Escape: Electric Seed boost is received by the right Pok SINGLE_BATTLE_TEST("Hit Escape: U-turn triggers before Eject Pack") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_PACK); } PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_GOODRA_HISUI) { Ability(ABILITY_GOOEY); }; + OPPONENT(SPECIES_GOODRA_HISUI) { Ability(ABILITY_GOOEY); } } WHEN { TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); } } SCENE { diff --git a/test/battle/move_effect/hydro_steam.c b/test/battle/move_effect/hydro_steam.c index cb19cc6ec1..781e083af4 100644 --- a/test/battle/move_effect/hydro_steam.c +++ b/test/battle/move_effect/hydro_steam.c @@ -35,8 +35,8 @@ SINGLE_BATTLE_TEST("Hydro Steam is affected by Utility Umbrella", s16 damage) PARAMETRIZE { itemPlayer = ITEM_NONE; itemOpponent = ITEM_UTILITY_UMBRELLA; } PARAMETRIZE { itemPlayer = ITEM_UTILITY_UMBRELLA; itemOpponent = ITEM_UTILITY_UMBRELLA; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayer); }; - OPPONENT(SPECIES_WOBBUFFET) {Item(itemOpponent); }; + PLAYER(SPECIES_WOBBUFFET) { Item(itemPlayer); } + OPPONENT(SPECIES_WOBBUFFET) { Item(itemOpponent); } } WHEN { TURN { MOVE(player, MOVE_SUNNY_DAY); } TURN { MOVE(player, MOVE_HYDRO_STEAM); } diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index eb0874d7bf..fd7a9a8824 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -92,7 +92,7 @@ SINGLE_BATTLE_TEST("Knock Off deals additional damage to opponents holding an it GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(item); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(item); } } WHEN { TURN { MOVE(player, MOVE_KNOCK_OFF); } } SCENE { @@ -115,7 +115,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Substitute") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); } } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { @@ -130,7 +130,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Substitute even if i { GIVEN { PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_WOBBUFFET) { MaxHP(4); HP(4); Item(ITEM_LEFTOVERS); }; + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(4); HP(4); Item(ITEM_LEFTOVERS); } } WHEN { TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { @@ -146,7 +146,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Protect") { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); } } WHEN { TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { @@ -165,7 +165,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items if target is immune") ASSUME(GetMoveEffect(MOVE_ELECTRIFY) == EFFECT_ELECTRIFY); ASSUME(GetSpeciesType(SPECIES_DONPHAN, 0) == TYPE_GROUND || GetSpeciesType(SPECIES_DONPHAN, 1) == TYPE_GROUND); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_DONPHAN) { Item(ITEM_LEFTOVERS); }; + OPPONENT(SPECIES_DONPHAN) { Item(ITEM_LEFTOVERS); } } WHEN { TURN { MOVE(opponent, MOVE_ELECTRIFY); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { diff --git a/test/battle/move_effect/lash_out.c b/test/battle/move_effect/lash_out.c index ed9465e915..52fca85758 100644 --- a/test/battle/move_effect/lash_out.c +++ b/test/battle/move_effect/lash_out.c @@ -161,7 +161,7 @@ DOUBLE_BATTLE_TEST("Lash Out damage is not boosted by Treasure of Ruin ability a GIVEN { PLAYER(SPECIES_GRIMMSNARL) { Moves(MOVE_LASH_OUT); } - PLAYER(SPECIES_RATTATA); + PLAYER(SPECIES_RATTATA); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_GOLEM); OPPONENT(species) { Ability(ability); } diff --git a/test/battle/move_effect/magnetic_flux.c b/test/battle/move_effect/magnetic_flux.c index 6a23d2082f..7bbcd52754 100644 --- a/test/battle/move_effect/magnetic_flux.c +++ b/test/battle/move_effect/magnetic_flux.c @@ -12,6 +12,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Magnetic Flux") OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); } OPPONENT(SPECIES_KLINK) { Ability(ABILITY_PLUS); Moves(MOVE_MAGNETIC_FLUX, MOVE_POUND); } } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_MAGNETIC_FLUX); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_MAGNETIC_FLUX); } } } diff --git a/test/battle/move_effect/max_move.c b/test/battle/move_effect/max_move.c deleted file mode 100644 index 38924f1d33..0000000000 --- a/test/battle/move_effect/max_move.c +++ /dev/null @@ -1,4 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -// Tested in the dynamax.c test file diff --git a/test/battle/move_effect/me_first.c b/test/battle/move_effect/me_first.c index 51f673ae5f..8ccaa324ef 100644 --- a/test/battle/move_effect/me_first.c +++ b/test/battle/move_effect/me_first.c @@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Me First can be selected if users holds Assault Vest") } } -SINGLE_BATTLE_TEST("Me Frist deducts power points from itself, not the copied move") +SINGLE_BATTLE_TEST("Me First deducts power points from itself, not the copied move") { ASSUME(GetMovePP(MOVE_ME_FIRST) == 20); ASSUME(GetMovePP(MOVE_POUND) == 35); diff --git a/test/battle/move_effect/mirror_coat.c b/test/battle/move_effect/mirror_coat.c index 6de1c03c29..301ba1ef26 100644 --- a/test/battle/move_effect/mirror_coat.c +++ b/test/battle/move_effect/mirror_coat.c @@ -97,7 +97,7 @@ DOUBLE_BATTLE_TEST("Mirror Coat fails if mon that damaged Mirror Coat user is no GIVEN { PLAYER(SPECIES_WOBBUFFET); PLAYER(SPECIES_WYNAUT); - OPPONENT(SPECIES_WOBBUFFET) { HP(1); }; + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { diff --git a/test/battle/move_effect/misty_explosion.c b/test/battle/move_effect/misty_explosion.c index b7e0ede902..edd0906ff6 100644 --- a/test/battle/move_effect/misty_explosion.c +++ b/test/battle/move_effect/misty_explosion.c @@ -79,10 +79,10 @@ DOUBLE_BATTLE_TEST("Misty Explosion causes everyone to faint in a double battle" SINGLE_BATTLE_TEST("Misty Explosion does not trigger Destiny Bond") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_MISTY_EXPLOSION);} + TURN { MOVE(player, MOVE_DESTINY_BOND); MOVE(opponent, MOVE_MISTY_EXPLOSION); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, player); HP_BAR(opponent); diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index 594094385b..62f9556879 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -11,7 +11,7 @@ SINGLE_BATTLE_TEST("Multi hit Moves hit the maximum amount with Skill Link") PASSES_RANDOMLY(100, 100, RNG_HITS); GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SKILL_LINK); }; + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SKILL_LINK); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_BULLET_SEED); } diff --git a/test/battle/move_effect/nature_power.c b/test/battle/move_effect/nature_power.c index 53aa68442d..dc50c3bff8 100644 --- a/test/battle/move_effect/nature_power.c +++ b/test/battle/move_effect/nature_power.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Nature power plays a move correctly in any background") u32 move = MOVE_TRI_ATTACK; for (u32 j = 0; j < BATTLE_ENVIRONMENT_COUNT; j++) { - PARAMETRIZE {environment = i;} + PARAMETRIZE { environment = i; } } GIVEN { PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index f2607b4ff7..3c6b04b17a 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -217,7 +217,7 @@ DOUBLE_BATTLE_TEST("Pledge moves can not be redirected by absorbing abilities") OPPONENT(SPECIES_LILEEP) { Ability(ABILITY_STORM_DRAIN); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight);} + TURN { MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); HP_BAR(opponentRight); diff --git a/test/battle/move_effect/powder.c b/test/battle/move_effect/powder.c index 2bcfc58da8..3f0a3135d9 100644 --- a/test/battle/move_effect/powder.c +++ b/test/battle/move_effect/powder.c @@ -287,7 +287,7 @@ DOUBLE_BATTLE_TEST("Powder damages a target using Shell Trap even if it wasn't h u32 move; PARAMETRIZE { move = MOVE_SCRATCH; } PARAMETRIZE { move = MOVE_EMBER; } - PARAMETRIZE { move = MOVE_TICKLE;} + PARAMETRIZE { move = MOVE_TICKLE; } GIVEN { ASSUME(GetMoveEffect(MOVE_SHELL_TRAP) == EFFECT_SHELL_TRAP); ASSUME(GetMoveType(MOVE_SHELL_TRAP) == TYPE_FIRE); diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 05b238fe0e..85546f2064 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -166,9 +166,9 @@ SINGLE_BATTLE_TEST("Protect: Baneful Bunker poisons Pokémon for moves making co { u16 usedMove = MOVE_NONE; - PARAMETRIZE {usedMove = MOVE_SCRATCH; } - PARAMETRIZE {usedMove = MOVE_LEER; } - PARAMETRIZE {usedMove = MOVE_WATER_GUN; } + PARAMETRIZE { usedMove = MOVE_SCRATCH; } + PARAMETRIZE { usedMove = MOVE_LEER; } + PARAMETRIZE { usedMove = MOVE_WATER_GUN; } GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -218,9 +218,9 @@ SINGLE_BATTLE_TEST("Protect: Burning Bulwark burns Pokémon for moves making con { u16 usedMove = MOVE_NONE; - PARAMETRIZE {usedMove = MOVE_SCRATCH; } - PARAMETRIZE {usedMove = MOVE_LEER; } - PARAMETRIZE {usedMove = MOVE_WATER_GUN; } + PARAMETRIZE { usedMove = MOVE_SCRATCH; } + PARAMETRIZE { usedMove = MOVE_LEER; } + PARAMETRIZE { usedMove = MOVE_WATER_GUN; } GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -269,8 +269,8 @@ SINGLE_BATTLE_TEST("Protect: Burning Bulwark can't burn Pokémon if they are alr SINGLE_BATTLE_TEST("Protect: Recoil damage is not applied if target was protected") { u32 j, k; - static const u16 protectMoves[] = { MOVE_PROTECT, MOVE_DETECT, MOVE_KINGS_SHIELD, MOVE_BANEFUL_BUNKER, MOVE_SILK_TRAP, MOVE_OBSTRUCT, MOVE_SPIKY_SHIELD }; - static const u16 recoilMoves[] = { MOVE_VOLT_TACKLE, MOVE_HEAD_SMASH, MOVE_TAKE_DOWN, MOVE_DOUBLE_EDGE }; + static const u16 protectMoves[] = {MOVE_PROTECT, MOVE_DETECT, MOVE_KINGS_SHIELD, MOVE_BANEFUL_BUNKER, MOVE_SILK_TRAP, MOVE_OBSTRUCT, MOVE_SPIKY_SHIELD}; + static const u16 recoilMoves[] = {MOVE_VOLT_TACKLE, MOVE_HEAD_SMASH, MOVE_TAKE_DOWN, MOVE_DOUBLE_EDGE}; u16 protectMove = MOVE_NONE; u16 recoilMove = MOVE_NONE; @@ -721,7 +721,7 @@ SINGLE_BATTLE_TEST("Protect: Protective Pads protects from secondary effects") DOUBLE_BATTLE_TEST("Protect is not transferred to a mon that is switched in due to Eject Button") { GIVEN { - PLAYER(SPECIES_URSHIFU) { Ability(ABILITY_UNSEEN_FIST); }; + PLAYER(SPECIES_URSHIFU) { Ability(ABILITY_UNSEEN_FIST); } PLAYER(SPECIES_WYNAUT); OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WYNAUT) { Item(ITEM_EJECT_BUTTON); } diff --git a/test/battle/move_effect/psychic_terrain.c b/test/battle/move_effect/psychic_terrain.c index 36f4841ef1..c8fb061d9c 100644 --- a/test/battle/move_effect/psychic_terrain.c +++ b/test/battle/move_effect/psychic_terrain.c @@ -117,16 +117,16 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves") SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves against semi-invulnerable targets") { u32 move = 0, shouldWork = 0; - PARAMETRIZE { move = MOVE_SOLAR_BEAM; shouldWork = FALSE;} - PARAMETRIZE { move = MOVE_FLY; shouldWork = TRUE;} + PARAMETRIZE { move = MOVE_SOLAR_BEAM; shouldWork = FALSE; } + PARAMETRIZE { move = MOVE_FLY; shouldWork = TRUE; } GIVEN { WITH_CONFIG(CONFIG_TOXIC_NEVER_MISS, GEN_6); ASSUME(IsSpeciesOfType(SPECIES_SHROODLE, TYPE_POISON)); PLAYER(SPECIES_SHROODLE) { Ability(ABILITY_PRANKSTER); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); MOVE(opponent,move);} - TURN { MOVE(player, MOVE_TOXIC); SKIP_TURN(opponent);} + TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); MOVE(opponent,move); } + TURN { MOVE(player, MOVE_TOXIC); SKIP_TURN(opponent); } } SCENE { if (shouldWork) { diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c index 7f62f2065e..335120a5e5 100644 --- a/test/battle/move_effect/recoil_if_miss.c +++ b/test/battle/move_effect/recoil_if_miss.c @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Recoil if miss: Jump Kick's recoil happens after Spiky Shiel } else { TURN { MOVE(opponent, MOVE_SPIKY_SHIELD); MOVE(player, MOVE_JUMP_KICK, hit: FALSE); SEND_OUT(player, 1); } } - TURN { ; } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPIKY_SHIELD, opponent); MESSAGE("Wobbuffet used Jump Kick!"); @@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Recoil if miss: Disguise doesn't prevent crash damage from J PARAMETRIZE { ability = ABILITY_SCRAPPY; } GIVEN { - PLAYER(SPECIES_KANGASKHAN) { Ability(ability); }; + PLAYER(SPECIES_KANGASKHAN) { Ability(ability); } OPPONENT(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } } WHEN { TURN { MOVE(player, MOVE_JUMP_KICK); } diff --git a/test/battle/move_effect/refresh.c b/test/battle/move_effect/refresh.c index f11a8dfca1..727bd7c862 100644 --- a/test/battle/move_effect/refresh.c +++ b/test/battle/move_effect/refresh.c @@ -15,7 +15,7 @@ SINGLE_BATTLE_TEST("Refresh cures the user of burn, frostbite, poison, and paral PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } PARAMETRIZE { status1 = STATUS1_FROSTBITE; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(status1); }; + PLAYER(SPECIES_WOBBUFFET) { Status1(status1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_REFRESH); } @@ -35,9 +35,10 @@ SINGLE_BATTLE_TEST("Refresh does not cure the user of Freeze") TURN { MOVE(player, MOVE_REFRESH); } } SCENE { MESSAGE("Wobbuffet used Refresh!"); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_REFRESH, player); - STATUS_ICON(player, none: TRUE); } + STATUS_ICON(player, none: TRUE); + } MESSAGE("But it failed!"); } } @@ -61,9 +62,10 @@ SINGLE_BATTLE_TEST("Refresh does not cure sleep when used by Sleep Talk") MESSAGE("The opposing Wobbuffet used Sleep Talk!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, opponent); MESSAGE("The opposing Wobbuffet used Refresh!"); - NONE_OF { + NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_REFRESH, player); - STATUS_ICON(player, none: TRUE); } + STATUS_ICON(player, none: TRUE); + } MESSAGE("But it failed!"); } } diff --git a/test/battle/move_effect/revival_blessing.c b/test/battle/move_effect/revival_blessing.c index eeb90d202d..add15a7c3d 100644 --- a/test/battle/move_effect/revival_blessing.c +++ b/test/battle/move_effect/revival_blessing.c @@ -61,13 +61,13 @@ AI_MULTI_BATTLE_TEST("Revival Blessing cannot revive a partner's party member") MULTI_PLAYER(SPECIES_CLEFABLE); MULTI_PLAYER(SPECIES_CLEFABLE) { HP(0); } MULTI_PLAYER(SPECIES_CLEFABLE); - MULTI_PARTNER(SPECIES_CLEFAIRY) { Moves(move2); } + MULTI_PARTNER(SPECIES_CLEFAIRY) { Moves(move2); } MULTI_PARTNER(SPECIES_CLEFAIRY); MULTI_PARTNER(SPECIES_CLEFAIRY); - MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(move1); } + MULTI_OPPONENT_A(SPECIES_WOBBUFFET) { Moves(move1); } MULTI_OPPONENT_A(SPECIES_WOBBUFFET); MULTI_OPPONENT_A(SPECIES_WOBBUFFET); - MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(move3); } + MULTI_OPPONENT_B(SPECIES_WYNAUT) { Moves(move3); } MULTI_OPPONENT_B(SPECIES_WYNAUT) { HP(0); } MULTI_OPPONENT_B(SPECIES_WYNAUT); } WHEN { diff --git a/test/battle/move_effect/rototiller.c b/test/battle/move_effect/rototiller.c index b86228a3f1..c9c2cb7588 100644 --- a/test/battle/move_effect/rototiller.c +++ b/test/battle/move_effect/rototiller.c @@ -109,6 +109,6 @@ AI_DOUBLE_BATTLE_TEST("AI uses Rototiller") OPPONENT(SPECIES_TANGELA) { Moves(MOVE_ROTOTILLER, MOVE_POUND); } OPPONENT(SPECIES_TANGELA); } WHEN { - TURN { EXPECT_MOVE(opponentLeft, MOVE_ROTOTILLER); } + TURN { EXPECT_MOVE(opponentLeft, MOVE_ROTOTILLER); } } } diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c index 6dc2a77427..ea78e08eeb 100644 --- a/test/battle/move_effect/spicy_extract.c +++ b/test/battle/move_effect/spicy_extract.c @@ -168,7 +168,7 @@ AI_DOUBLE_BATTLE_TEST("Spicy Extract user will use it if partner holds Clear Amu u32 move; PARAMETRIZE { move = MOVE_SCRATCH; } - PARAMETRIZE { move = MOVE_SWIFT;} + PARAMETRIZE { move = MOVE_SWIFT; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); diff --git a/test/battle/move_effect/steal_item.c b/test/battle/move_effect/steal_item.c index 1259cf4599..dffc1ecd6a 100644 --- a/test/battle/move_effect/steal_item.c +++ b/test/battle/move_effect/steal_item.c @@ -134,7 +134,7 @@ SINGLE_BATTLE_TEST("Thief and Covet can't steal target's held item if user faint PARAMETRIZE { move = MOVE_THIEF; } PARAMETRIZE { move = MOVE_COVET; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { HP(1); }; + PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ROCKY_HELMET); } } WHEN { TURN { MOVE(player, move); } diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index ed0f6e5d93..cbcf39ad7b 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -50,13 +50,13 @@ DOUBLE_BATTLE_TEST("Sticky Web lowers Speed by 1 in a double battle after Explos { GIVEN { ASSUME(GetMoveEffect(MOVE_EXPLOSION) == EFFECT_EXPLOSION); - PLAYER(SPECIES_WOBBUFFET) {Speed(5);} - PLAYER(SPECIES_WOBBUFFET) {HP(1500); Speed(10);} - PLAYER(SPECIES_WOBBUFFET) {Speed(10);} - OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);} - OPPONENT(SPECIES_WOBBUFFET) {HP(1); Speed(1);} - OPPONENT(SPECIES_WYNAUT) {Speed(10);} - OPPONENT(SPECIES_ALAKAZAM) {Speed(100);} + PLAYER(SPECIES_WOBBUFFET) { Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { HP(1500); Speed(10); } + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(1); } + OPPONENT(SPECIES_WYNAUT) { Speed(10); } + OPPONENT(SPECIES_ALAKAZAM) { Speed(100); } } WHEN { TURN { MOVE(playerRight, MOVE_STICKY_WEB); MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(opponentRight, 3); } TURN {} @@ -102,10 +102,10 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the { u8 playerSetUpper, opponentSetUpper; // 0 left, 1 right - PARAMETRIZE {playerSetUpper = 0; opponentSetUpper = 0; } - PARAMETRIZE {playerSetUpper = 0; opponentSetUpper = 1; } - PARAMETRIZE {playerSetUpper = 1; opponentSetUpper = 0; } - PARAMETRIZE {playerSetUpper = 1; opponentSetUpper = 1; } + PARAMETRIZE { playerSetUpper = 0; opponentSetUpper = 0; } + PARAMETRIZE { playerSetUpper = 0; opponentSetUpper = 1; } + PARAMETRIZE { playerSetUpper = 1; opponentSetUpper = 0; } + PARAMETRIZE { playerSetUpper = 1; opponentSetUpper = 1; } GIVEN { PLAYER(SPECIES_SQUIRTLE); @@ -193,18 +193,18 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o bool8 hasReplacement; // We need to make sure Sticky Web user saves for both sides, so it doesn't matter who sets it first. - PARAMETRIZE {hasReplacement = TRUE;} - PARAMETRIZE {hasReplacement = FALSE;} + PARAMETRIZE { hasReplacement = TRUE; } + PARAMETRIZE { hasReplacement = FALSE; } GIVEN { ASSUME(GetMoveEffect(MOVE_MEMENTO) == EFFECT_MEMENTO); - PLAYER(SPECIES_SQUIRTLE) {Speed(5); } - PLAYER(SPECIES_CHARMANDER) {Speed(5); } - PLAYER(SPECIES_CORVIKNIGHT) {Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); Speed(5); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web. - OPPONENT(SPECIES_CATERPIE) {Speed(7); } - OPPONENT(SPECIES_WEEDLE) {Speed(7); } + PLAYER(SPECIES_SQUIRTLE) { Speed(5); } + PLAYER(SPECIES_CHARMANDER) { Speed(5); } + PLAYER(SPECIES_CORVIKNIGHT) { Ability(ABILITY_MIRROR_ARMOR); Item(ITEM_IRON_BALL); Speed(5); } // Iron Ball, so that flying type Corviknight is affected by Sticky Web. + OPPONENT(SPECIES_CATERPIE) { Speed(7); } + OPPONENT(SPECIES_WEEDLE) { Speed(7); } if (hasReplacement) { - OPPONENT(SPECIES_PIDGEY) {Speed(7); } + OPPONENT(SPECIES_PIDGEY) { Speed(7); } } } WHEN { @@ -212,7 +212,7 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o if (hasReplacement) { TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft); SEND_OUT(opponentLeft, 2); } } else { - TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft);} + TURN { MOVE(opponentLeft, MOVE_MEMENTO, target:playerLeft); } } TURN { SWITCH(playerRight, 2); } } SCENE { @@ -245,7 +245,7 @@ SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Explosion") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_EXPLOSION); MOVE(opponent, MOVE_STICKY_WEB); SEND_OUT(player, 1);} + TURN { MOVE(player, MOVE_EXPLOSION); MOVE(opponent, MOVE_STICKY_WEB); SEND_OUT(player, 1); } } SCENE { HP_BAR(player, hp: 0); ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c index 06b29334d7..43580f6851 100644 --- a/test/battle/move_effect/stomping_tantrum.c +++ b/test/battle/move_effect/stomping_tantrum.c @@ -41,11 +41,11 @@ SINGLE_BATTLE_TEST("Stomping Tantrum will deal double damage if user failed to a s16 damage[3]; PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_POTION); }; - OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_LUM_BERRY); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_POTION); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_LUM_BERRY); } } WHEN { TURN { MOVE(player, MOVE_STOMPING_TANTRUM); MOVE(opponent, MOVE_THUNDER_WAVE); } - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRICK); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRICK); } TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } } SCENE { @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Stomping Tantrum will not deal double if it missed") s16 damage[2]; GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); } } WHEN { TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } TURN { MOVE(player, MOVE_STOMPING_TANTRUM, hit: FALSE); } diff --git a/test/battle/move_effect/take_heart.c b/test/battle/move_effect/take_heart.c index 69560de74d..2377624b7d 100644 --- a/test/battle/move_effect/take_heart.c +++ b/test/battle/move_effect/take_heart.c @@ -28,7 +28,7 @@ SINGLE_BATTLE_TEST("Take Heart cures the user of all status conditions") PARAMETRIZE { status1 = STATUS1_PARALYSIS; } PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Status1(status1); }; + PLAYER(SPECIES_WOBBUFFET) { Status1(status1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_TAKE_HEART); } diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 31390d9733..da3ee611ff 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -33,8 +33,8 @@ SINGLE_BATTLE_TEST("Telekinesis ends after 3 turns") OPPONENT(SPECIES_WYNAUT); } WHEN { TURN { MOVE(player, MOVE_TELEKINESIS); } - TURN { } - TURN { } + TURN {} + TURN {} } SCENE { MESSAGE("Wobbuffet used Telekinesis!"); MESSAGE("The opposing Wynaut was hurled into the air!"); diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c index 3d21c0693b..f74e1bddb4 100644 --- a/test/battle/move_effect/toxic_spikes.c +++ b/test/battle/move_effect/toxic_spikes.c @@ -208,10 +208,10 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever { GIVEN { ASSUME(GetMoveEffect(MOVE_MEMENTO) == EFFECT_MEMENTO); // Faints the user. - PLAYER(SPECIES_WOBBUFFET) {Speed(5); } + PLAYER(SPECIES_WOBBUFFET) { Speed(5); } PLAYER(SPECIES_GROUDON) { Item(ITEM_RED_ORB); Speed(1); } - PLAYER(SPECIES_WYNAUT) {Speed(5); } - OPPONENT(SPECIES_WOBBUFFET) {Speed(15); } + PLAYER(SPECIES_WYNAUT) { Speed(5); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(15); } } WHEN { TURN { MOVE(opponent, MOVE_TOXIC_SPIKES); } TURN { SWITCH(player, 1); } diff --git a/test/battle/move_effect/two_turns_attack.c b/test/battle/move_effect/two_turns_attack.c index 661a45c110..94540f566e 100644 --- a/test/battle/move_effect/two_turns_attack.c +++ b/test/battle/move_effect/two_turns_attack.c @@ -305,7 +305,7 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in a Sandstorm", s16 damage) PARAMETRIZE { move = MOVE_SANDSTORM; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } TURN { SKIP_TURN(player); } @@ -323,7 +323,7 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in a Sandstorm", s16 damage) PARAMETRIZE { move = MOVE_SANDSTORM; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } TURN { SKIP_TURN(player); } @@ -341,7 +341,7 @@ SINGLE_BATTLE_TEST("Solar Beam's power is halved in Hail", s16 damage) PARAMETRIZE { move = MOVE_HAIL; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BEAM); } TURN { SKIP_TURN(player); } @@ -359,7 +359,7 @@ SINGLE_BATTLE_TEST("Solar Blade's power is halved in Hail", s16 damage) PARAMETRIZE { move = MOVE_HAIL; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(opponent, move); MOVE(player, MOVE_SOLAR_BLADE); } TURN { SKIP_TURN(player); } diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c index 59d6057521..49dc21bf49 100644 --- a/test/battle/move_effect/upper_hand.c +++ b/test/battle/move_effect/upper_hand.c @@ -127,7 +127,7 @@ AI_SINGLE_BATTLE_TEST("AI won't use Upper Hand unless it has seen a priority mov GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); ASSUME(GetMovePriority(MOVE_QUICK_ATTACK) == 1); - PLAYER(SPECIES_WOBBUFFET) {Moves(move); } + PLAYER(SPECIES_WOBBUFFET) { Moves(move); } OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_UPPER_HAND, MOVE_KARATE_CHOP); } } WHEN { TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_KARATE_CHOP); } diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c index 0474383483..3586b71a32 100644 --- a/test/battle/move_effect/weather_ball.c +++ b/test/battle/move_effect/weather_ball.c @@ -49,7 +49,7 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to a Rock-type move PARAMETRIZE { move = MOVE_SANDSTORM; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_MAGMAR) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(player, move); } TURN { MOVE(player, MOVE_WEATHER_BALL); } @@ -68,7 +68,7 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to an Ice-type move PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); }; + OPPONENT(SPECIES_DRAGONAIR) { Item(ITEM_SAFETY_GOGGLES); } } WHEN { TURN { MOVE(player, move); } TURN { MOVE(player, MOVE_WEATHER_BALL); } diff --git a/test/battle/move_effect/wish.c b/test/battle/move_effect/wish.c index a901ce0bbf..6e9114bc09 100644 --- a/test/battle/move_effect/wish.c +++ b/test/battle/move_effect/wish.c @@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("Wish restores 50% of the user's HP when not switching") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_WISH); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); @@ -74,7 +74,7 @@ SINGLE_BATTLE_TEST("Wish heals the user at the end of the next turn") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(player, MOVE_WISH); MOVE(opponent, MOVE_POUND); } - TURN { } + TURN {} } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WISH, player); ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponent); diff --git a/test/battle/move_effect_secondary/bug_bite.c b/test/battle/move_effect_secondary/bug_bite.c index e6df81dc70..c0b2bc2979 100644 --- a/test/battle/move_effect_secondary/bug_bite.c +++ b/test/battle/move_effect_secondary/bug_bite.c @@ -120,7 +120,7 @@ SINGLE_BATTLE_TEST("Tanga Berry activates before Bug Bite") ASSUME(gItemsInfo[ITEM_TANGA_BERRY].holdEffect == HOLD_EFFECT_RESIST_BERRY); ASSUME(gItemsInfo[ITEM_TANGA_BERRY].holdEffectParam == TYPE_BUG); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) {Item(ITEM_TANGA_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_TANGA_BERRY); } } WHEN { TURN { MOVE(player, MOVE_BUG_BITE); } } SCENE { diff --git a/test/battle/move_effect_secondary/ion_deluge.c b/test/battle/move_effect_secondary/ion_deluge.c index 21d37de407..003bfc825f 100644 --- a/test/battle/move_effect_secondary/ion_deluge.c +++ b/test/battle/move_effect_secondary/ion_deluge.c @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Plasma Fists does not set up Ion Deluge if it does not conne SINGLE_BATTLE_TEST("Plasma Fists type-changing effect does not override Pixilate") { GIVEN { - PLAYER(SPECIES_KRABBY) { Speed(300); }; + PLAYER(SPECIES_KRABBY) { Speed(300); } OPPONENT(SPECIES_SYLVEON) { Speed(1); Ability(ABILITY_PIXILATE); } } WHEN { TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_SCRATCH); } diff --git a/test/battle/move_effect_secondary/order_up.c b/test/battle/move_effect_secondary/order_up.c index bfabd6e3e3..b24b366c56 100644 --- a/test/battle/move_effect_secondary/order_up.c +++ b/test/battle/move_effect_secondary/order_up.c @@ -17,7 +17,7 @@ DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form") PLAYER(species) { Ability(ABILITY_COMMANDER); } PLAYER(SPECIES_DONDOZO); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }; + OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } } WHEN { TURN { MOVE(opponentRight, MOVE_HAZE); MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); } } SCENE { @@ -65,9 +65,9 @@ DOUBLE_BATTLE_TEST("Order Up increases a stat based on Tatsugiri's form even if PLAYER(species) { HP(1); Status1(STATUS1_POISON); Ability(ABILITY_COMMANDER); } PLAYER(SPECIES_DONDOZO); OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }; + OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); } } WHEN { - TURN { } + TURN {} TURN { MOVE(opponentRight, MOVE_HAZE); MOVE(playerRight, MOVE_ORDER_UP, target: opponentLeft); } } SCENE { ABILITY_POPUP(playerLeft, ABILITY_COMMANDER); diff --git a/test/battle/move_effect_secondary/recharge.c b/test/battle/move_effect_secondary/recharge.c index 9146083675..c4915f4b45 100644 --- a/test/battle/move_effect_secondary/recharge.c +++ b/test/battle/move_effect_secondary/recharge.c @@ -12,9 +12,9 @@ SINGLE_BATTLE_TEST("Recharge moves make the user unable to attack for exactly on PLAYER(SPECIES_WOBBUFFET) { } OPPONENT(SPECIES_WOBBUFFET) { } } WHEN { - TURN { MOVE(player, MOVE_METEOR_ASSAULT);} - TURN { SKIP_TURN(player);} - TURN { MOVE(player, MOVE_TACKLE);} + TURN { MOVE(player, MOVE_METEOR_ASSAULT); } + TURN { SKIP_TURN(player); } + TURN { MOVE(player, MOVE_TACKLE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_METEOR_ASSAULT, player); MESSAGE("Wobbuffet must recharge!"); @@ -29,7 +29,7 @@ SINGLE_BATTLE_TEST("Recharge moves don't timeout when all battlers are rechargin PLAYER(SPECIES_WOBBUFFET) { } OPPONENT(SPECIES_WOBBUFFET) { } } WHEN { - TURN { MOVE(player, MOVE_METEOR_ASSAULT); MOVE(opponent, MOVE_METEOR_ASSAULT);} + TURN { MOVE(player, MOVE_METEOR_ASSAULT); MOVE(opponent, MOVE_METEOR_ASSAULT); } } } diff --git a/test/battle/move_effect_secondary/remove_status.c b/test/battle/move_effect_secondary/remove_status.c index f1219d7ed0..02389a50ed 100644 --- a/test/battle/move_effect_secondary/remove_status.c +++ b/test/battle/move_effect_secondary/remove_status.c @@ -19,8 +19,7 @@ SINGLE_BATTLE_TEST("Smelling Salts does not cure paralyzed pokemons behind subst if (ability == ABILITY_INNER_FOCUS) { MESSAGE("The substitute took damage for the opposing Seismitoad!"); - NONE_OF - { + NONE_OF { MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. MESSAGE("The opposing Seismitoad was cured of paralysis!"); STATUS_ICON(opponent, none: TRUE); @@ -75,15 +74,17 @@ SINGLE_BATTLE_TEST("Wake-Up Slap does not cure paralyzed pokemons behind substit TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WAKE_UP_SLAP); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); - if (ability == ABILITY_INNER_FOCUS) { + if (ability == ABILITY_INNER_FOCUS) + { MESSAGE("The substitute took damage for the opposing Seismitoad!"); - NONE_OF - { + NONE_OF { MESSAGE("The opposing Seismitoad's substitute faded!"); // Smelling Salts does 86 damage, the sub has 122 HP, if hitting a sub it shouldn't get boosted damage. MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } - } else { + } + else + { MESSAGE("The opposing Seismitoad woke up!"); STATUS_ICON(opponent, none: TRUE); } @@ -104,9 +105,12 @@ SINGLE_BATTLE_TEST("Wake-Up Slap gets increased power against sleeping targets") TURN { MOVE(player, MOVE_WAKE_UP_SLAP); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_WAKE_UP_SLAP, player); - if (status1 == STATUS1_SLEEP) { + if (status1 == STATUS1_SLEEP) + { MESSAGE("The opposing Lotad fainted!"); - } else { + } + else + { NOT MESSAGE("The opposing Lotad fainted!"); MESSAGE("The opposing Lotad used Celebrate!"); } diff --git a/test/battle/move_effect_secondary/salt_cure.c b/test/battle/move_effect_secondary/salt_cure.c index e304d2d447..70ba855b95 100644 --- a/test/battle/move_effect_secondary/salt_cure.c +++ b/test/battle/move_effect_secondary/salt_cure.c @@ -32,8 +32,8 @@ SINGLE_BATTLE_TEST("Salt Cure inflicts 1/4 to Water/Steel types of their maximum { u32 species; - PARAMETRIZE { species = SPECIES_LAPRAS; }; - PARAMETRIZE { species = SPECIES_JIRACHI; }; + PARAMETRIZE { species = SPECIES_LAPRAS; } + PARAMETRIZE { species = SPECIES_JIRACHI; } GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -104,7 +104,7 @@ SINGLE_BATTLE_TEST("Salt Cure residual damage does not inflict any damage agains { GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); }; + OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); } } WHEN { TURN { MOVE(player, MOVE_SALT_CURE); } } SCENE { diff --git a/test/battle/move_effect_secondary/throat_chop.c b/test/battle/move_effect_secondary/throat_chop.c index c2724a0f38..3d6438a4ba 100644 --- a/test/battle/move_effect_secondary/throat_chop.c +++ b/test/battle/move_effect_secondary/throat_chop.c @@ -9,8 +9,8 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Throat Chop prevents the usage of sound moves") { GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(100); }; - OPPONENT(SPECIES_WOBBUFFET) { Speed(50); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(100); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } } WHEN { TURN { MOVE(player, MOVE_THROAT_CHOP); MOVE(opponent, MOVE_HYPER_VOICE); } TURN {} diff --git a/test/battle/move_effects_combined/infernal_parade.c b/test/battle/move_effects_combined/infernal_parade.c index 266718d2e9..4310dc8876 100644 --- a/test/battle/move_effects_combined/infernal_parade.c +++ b/test/battle/move_effects_combined/infernal_parade.c @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Infernal Parade's power doubles if the target has a status c PARAMETRIZE { status1 = STATUS1_TOXIC_POISON; } GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); }; + OPPONENT(SPECIES_WOBBUFFET) { Status1(status1); } } WHEN { TURN { MOVE(player, MOVE_INFERNAL_PARADE); } } SCENE { diff --git a/test/battle/move_flags/recoil.c b/test/battle/move_flags/recoil.c index 7a71187c82..2593a0e1f6 100644 --- a/test/battle/move_flags/recoil.c +++ b/test/battle/move_flags/recoil.c @@ -89,7 +89,7 @@ SINGLE_BATTLE_TEST("Recoil: Flare Blitz is absorbed by Flash Fire and no recoil GIVEN { ASSUME(GetMoveRecoil(MOVE_FLARE_BLITZ) > 0); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_VULPIX) { Ability(ABILITY_FLASH_FIRE); }; + OPPONENT(SPECIES_VULPIX) { Ability(ABILITY_FLASH_FIRE); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH); MOVE(player, MOVE_FLARE_BLITZ); } } SCENE { @@ -111,7 +111,7 @@ SINGLE_BATTLE_TEST("Recoil: The correct amount of recoil damage is dealt after t GIVEN { ASSUME(GetMoveRecoil(MOVE_TAKE_DOWN) == 25); PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); }; + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } } WHEN { TURN { MOVE(player, MOVE_TAKE_DOWN); } } SCENE { diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index 085bd05fda..14ee7f052f 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -286,7 +286,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn will fail when sleep clause is active") OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_YAWN); } - TURN { } + TURN {} TURN { SWITCH(player, 1); MOVE(opponent, MOVE_YAWN); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent); @@ -318,7 +318,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with TURN { MOVE(opponent, MOVE_SPORE); } TURN { SWITCH(player, 1); } TURN { MOVE(player, MOVE_SCRATCH); } - TURN { } + TURN {} } SCENE { ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); @@ -341,7 +341,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } } WHEN { - TURN { MOVE(opponentLeft, MOVE_SPORE, target:playerRight); MOVE(playerLeft, MOVE_SCRATCH, target:opponentLeft);} + TURN { MOVE(opponentLeft, MOVE_SPORE, target:playerRight); MOVE(playerLeft, MOVE_SCRATCH, target:opponentLeft); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponentLeft); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, playerRight); @@ -1019,7 +1019,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo OPPONENT(SPECIES_ZIGZAGOON); } WHEN { TURN { MOVE(playerLeft, MOVE_SPORE, target: opponentLeft); MOVE(playerRight, MOVE_SCRATCH, target: opponentLeft); } - TURN { MOVE(playerLeft, MOVE_SPORE, target: opponentRight);} + TURN { MOVE(playerLeft, MOVE_SPORE, target: opponentRight); } } SCENE { MESSAGE("Zigzagoon used Spore!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, playerLeft); @@ -1533,7 +1533,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: If both Pokémon on one side are Yawn'd at the OPPONENT(SPECIES_ZIGZAGOON) { Speed(2); } } WHEN { TURN { MOVE(playerLeft, MOVE_YAWN, target: opponentLeft); MOVE(playerRight, MOVE_YAWN, target: opponentRight); } - TURN { } + TURN {} } SCENE { MESSAGE("The opposing Zigzagoon grew drowsy!"); MESSAGE("The opposing Zigzagoon grew drowsy!"); diff --git a/test/battle/spread_moves.c b/test/battle/spread_moves.c index 68b9f40273..477af564c8 100644 --- a/test/battle/spread_moves.c +++ b/test/battle/spread_moves.c @@ -6,7 +6,7 @@ DOUBLE_BATTLE_TEST("Spread Moves: Ability and Item effects activate correctly af GIVEN { PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); } PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); } - OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(260); HP(131); }; + OPPONENT(SPECIES_GOLISOPOD) { Ability(ABILITY_EMERGENCY_EXIT); MaxHP(260); HP(131); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); } OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_PIKACHU); diff --git a/test/battle/starting_status/terrain.c b/test/battle/starting_status/terrain.c index 3d84dba000..7c4fd6d29e 100644 --- a/test/battle/starting_status/terrain.c +++ b/test/battle/starting_status/terrain.c @@ -21,13 +21,13 @@ SINGLE_BATTLE_TEST("B_VAR_STARTING_STATUS starts a chosen terrain at the beginni OPPONENT(SPECIES_WOBBUFFET); } WHEN { // More than 5 turns - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} } SCENE { switch (terrain) { @@ -73,12 +73,12 @@ SINGLE_BATTLE_TEST("Terrain started after the one which started the battle lasts } WHEN { // More than 5 turns TURN { MOVE(player, viaMove == TRUE ? MOVE_GRASSY_TERRAIN : MOVE_CELEBRATE); } - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } - TURN { ; } + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} + TURN {} } SCENE { // Electric Terrain at battle's start MESSAGE("An electric current is running across the battlefield!"); diff --git a/test/battle/status1/freeze.c b/test/battle/status1/freeze.c index 12104438ac..89f0b91100 100644 --- a/test/battle/status1/freeze.c +++ b/test/battle/status1/freeze.c @@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Freeze isn't thawed if opponent is asleep during thawing att GIVEN { ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_FREEZE); } - OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }; + OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); } } WHEN { TURN { MOVE(opponent, MOVE_EMBER); MOVE(player, MOVE_CELEBRATE); } } SCENE { diff --git a/test/battle/switch_in_abilities.c b/test/battle/switch_in_abilities.c index 4d125ddce8..1fc5e8a935 100644 --- a/test/battle/switch_in_abilities.c +++ b/test/battle/switch_in_abilities.c @@ -12,7 +12,7 @@ SINGLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order at the battle's s PLAYER(SPECIES_EKANS) { Speed(spdPlayer); Ability(ABILITY_INTIMIDATE); } OPPONENT(SPECIES_NINETALES) { Speed(spdOpponent); Ability(ABILITY_DROUGHT); } } WHEN { - TURN { ; } + TURN {} } SCENE { if (spdPlayer > spdOpponent) { ABILITY_POPUP(player, ABILITY_INTIMIDATE); @@ -38,7 +38,7 @@ DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order at the battle's s OPPONENT(SPECIES_PORYGON2) { Speed(spdOpponent1); Ability(ABILITY_DOWNLOAD); } OPPONENT(SPECIES_PINSIR) { Speed(spdOpponent2); Ability(ABILITY_MOLD_BREAKER); } } WHEN { - TURN { ; } + TURN {} } SCENE { if (spdPlayer1 == 5) { ABILITY_POPUP(playerLeft, ABILITY_DRIZZLE); @@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swi OPPONENT(SPECIES_PORYGON2) { Speed(spdOpponent); Ability(ABILITY_DOWNLOAD); } } WHEN { TURN { MOVE(player, MOVE_EXPLOSION); SEND_OUT(player, 1); SEND_OUT(opponent, 1); } - TURN { ; } + TURN {} } SCENE { MESSAGE("Wobbuffet used Explosion!"); if (spdPlayer > spdOpponent) { @@ -105,7 +105,7 @@ DOUBLE_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swi OPPONENT(SPECIES_VULPIX_ALOLA) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); } } WHEN { TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 2); SEND_OUT(opponentLeft, 2); SEND_OUT(playerRight, 3); SEND_OUT(opponentRight, 3); } - TURN { ; } + TURN {} } SCENE { MESSAGE("Wobbuffet used Explosion!"); if (spdPlayer1 == 5) { @@ -146,7 +146,7 @@ MULTI_BATTLE_TEST("Switch-in abilities trigger in Speed Order after post-KO swit MULTI_OPPONENT_B(SPECIES_VULPIX_ALOLA) { Speed(spdOpponent2); Ability(ABILITY_SNOW_WARNING); } } WHEN { TURN { MOVE(playerLeft, MOVE_EXPLOSION); SEND_OUT(playerLeft, 1); SEND_OUT(opponentLeft, 1); SEND_OUT(playerRight, 4); SEND_OUT(opponentRight, 4); } - TURN { ; } + TURN {} } SCENE { MESSAGE("Wobbuffet used Explosion!"); if (spdPlayer1 == 5) { diff --git a/test/battle/test_runner_features.c b/test/battle/test_runner_features.c index 25a75f9ce5..d76740a08e 100644 --- a/test/battle/test_runner_features.c +++ b/test/battle/test_runner_features.c @@ -13,11 +13,11 @@ SINGLE_BATTLE_TEST("Forced abilities activate on switch-in") { GIVEN { PLAYER(SPECIES_ALAKAZAM); - PLAYER(SPECIES_KADABRA) { Ability(ABILITY_QUARK_DRIVE); SpAttack(400);} + PLAYER(SPECIES_KADABRA) { Ability(ABILITY_QUARK_DRIVE); SpAttack(400); } OPPONENT(SPECIES_ARON); - OPPONENT(SPECIES_ALAKAZAM) { Ability(ABILITY_ELECTRIC_SURGE); }; + OPPONENT(SPECIES_ALAKAZAM) { Ability(ABILITY_ELECTRIC_SURGE); } } WHEN { - TURN { SWITCH(player, 1); SWITCH(opponent, 1);} + TURN { SWITCH(player, 1); SWITCH(opponent, 1); } } SCENE { ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE); ABILITY_POPUP(player, ABILITY_QUARK_DRIVE); @@ -30,15 +30,15 @@ SINGLE_BATTLE_TEST("Setting level doesn't overwrite set stats") { u32 level = 0; - PARAMETRIZE{level = 1;} - PARAMETRIZE{level = 10;} - PARAMETRIZE{level = 50;} - PARAMETRIZE{level = 99;} + PARAMETRIZE { level = 1; } + PARAMETRIZE { level = 10; } + PARAMETRIZE { level = 50; } + PARAMETRIZE { level = 99; } GIVEN { - PLAYER(SPECIES_WOBBUFFET) {HP(5); MaxHP(10); Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Level(level); }; - OPPONENT(SPECIES_WOBBUFFET) {Speed(1);} + PLAYER(SPECIES_WOBBUFFET) { HP(5); MaxHP(10); Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Level(level); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE);} + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_CELEBRATE); } } THEN { EXPECT_EQ(player->hp, 5); EXPECT_EQ(player->maxHP, 10); @@ -53,8 +53,8 @@ SINGLE_BATTLE_TEST("Setting level doesn't overwrite set stats") SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (not HP)") { GIVEN { - PLAYER(SPECIES_DIANCIE) {Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Item(ITEM_DIANCITE);} - OPPONENT(SPECIES_WOBBUFFET) {Speed(1);} + PLAYER(SPECIES_DIANCIE) { Attack(10); Defense(10); Speed(10); SpAttack(10); SpDefense(10); Item(ITEM_DIANCITE); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } } WHEN { TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { @@ -71,10 +71,10 @@ SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (not HP)") SINGLE_BATTLE_TEST("Changing forms doesn't overwrite set stats (HP)") { GIVEN { - PLAYER(SPECIES_TERAPAGOS) {HP(5); MaxHP(10); TeraType(TYPE_STELLAR);} - OPPONENT(SPECIES_WOBBUFFET) {} + PLAYER(SPECIES_TERAPAGOS) { HP(5); MaxHP(10); TeraType(TYPE_STELLAR); } + OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE);} + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE); } } THEN { EXPECT_EQ(player->hp, 5); EXPECT_EQ(player->maxHP, 10); diff --git a/test/battle/trainer_slides.c b/test/battle/trainer_slides.c index 972e359f87..8f7bae9b09 100644 --- a/test/battle/trainer_slides.c +++ b/test/battle/trainer_slides.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Before First Turn") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { } + TURN {} } SCENE { MESSAGE("This message plays before the first turn.{PAUSE_UNTIL_PRESS}"); } @@ -157,8 +157,8 @@ SINGLE_BATTLE_TEST("Trainer Slide: Last Low Hp") gBattleTestRunnerState->data.recordedBattle.opponentA = TRAINER_SLIDE_LAST_LOW_HP; GIVEN { ASSUME(GetMoveEffect(MOVE_FALSE_SWIPE) == EFFECT_FALSE_SWIPE); - PLAYER(SPECIES_WOBBUFFET) { Attack(999);} - OPPONENT(SPECIES_WOBBUFFET) { Defense(1);} + PLAYER(SPECIES_WOBBUFFET) { Attack(999); } + OPPONENT(SPECIES_WOBBUFFET) { Defense(1); } } WHEN { TURN { MOVE(player, MOVE_FALSE_SWIPE); } } SCENE { @@ -172,7 +172,7 @@ SINGLE_BATTLE_TEST("Trainer Slide: Mega Evolution") GIVEN { PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_LOPUNNY) {Item(ITEM_LOPUNNITE); }; + OPPONENT(SPECIES_LOPUNNY) { Item(ITEM_LOPUNNITE); } } WHEN { TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } } SCENE { diff --git a/test/battle/volatiles/confusion.c b/test/battle/volatiles/confusion.c index 540abbd5a6..b9a1237955 100644 --- a/test/battle/volatiles/confusion.c +++ b/test/battle/volatiles/confusion.c @@ -12,8 +12,8 @@ SINGLE_BATTLE_TEST("Confusion adds a 50/33% chance to hit self with 40 power") GIVEN { WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); ASSUME(GetMovePower(MOVE_SCRATCH) == 40); - PLAYER(SPECIES_WOBBUFFET) { Speed(1); }; - OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }; + PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(2); } } WHEN { TURN { MOVE(opponent, MOVE_SCRATCH, WITH_RNG(RNG_DAMAGE_MODIFIER, 0)); MOVE(player, MOVE_CONFUSE_RAY); } TURN; @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Confusion self hit does not consume Gems") PASSES_RANDOMLY(pctChance, 100, RNG_CONFUSION); GIVEN { WITH_CONFIG(CONFIG_CONFUSION_SELF_DMG_CHANCE, genConfig); - PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); }; + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMAL_GEM); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_CONFUSE_RAY); MOVE(player, MOVE_SCRATCH); } diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c index 3a0dd53026..c38370a891 100644 --- a/test/battle/weather/hail.c +++ b/test/battle/weather/hail.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Hail deals 1/16 damage per turn") PLAYER(SPECIES_GLALIE); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN {MOVE(player, MOVE_HAIL);} + TURN { MOVE(player, MOVE_HAIL); } } SCENE { MESSAGE("The opposing Wobbuffet is buffeted by the hail!"); HP_BAR(opponent, captureDamage: &hailDamage); @@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_GLALIE); } WHEN { - TURN {MOVE(player, MOVE_HAIL);} + TURN { MOVE(player, MOVE_HAIL); } } SCENE { NOT MESSAGE("The opposing Glalie is buffeted by the hail!"); } diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 78dc0ecdce..55b5907ffb 100644 --- a/test/battle/weather/sandstorm.c +++ b/test/battle/weather/sandstorm.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Sandstorm deals 1/16 damage per turn") PLAYER(SPECIES_SANDSLASH); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN {MOVE(player, MOVE_SANDSTORM);} + TURN { MOVE(player, MOVE_SANDSTORM); } } SCENE { MESSAGE("The opposing Wobbuffet is buffeted by the sandstorm!"); HP_BAR(opponent, captureDamage: &sandstormDamage); From 2055adcfedc15cda53e21e0f200af33732655061 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 18:03:44 +0100 Subject: [PATCH 35/54] add SonikkuA-DatH as a contributor for design (#8756) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 12df149027..0ebc17d582 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -561,6 +561,15 @@ "contributions": [ "code" ] + }, + { + "login": "SonikkuA-DatH", + "name": "SonikkuA-DatH", + "avatar_url": "https://avatars.githubusercontent.com/u/58025603?v=4", + "profile": "https://github.com/SonikkuA-DatH", + "contributions": [ + "design" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index ccef84a4f8..c6647c9dd0 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -91,6 +91,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Gamer2020
Gamer2020

💻 + SonikkuA-DatH
SonikkuA-DatH

🎨 From d6a1cf357a6304a06cff9b2e189654d338daa478 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 2 Jan 2026 18:05:08 +0100 Subject: [PATCH 36/54] add Jaizu as a contributor for code (#8757) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0ebc17d582..43e388d6f2 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -570,6 +570,15 @@ "contributions": [ "design" ] + }, + { + "login": "Jaizu", + "name": "Jaizu", + "avatar_url": "https://avatars.githubusercontent.com/u/18596778?v=4", + "profile": "https://jaizu.moe", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index c6647c9dd0..d67931ff34 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -92,6 +92,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Gamer2020
Gamer2020

💻 SonikkuA-DatH
SonikkuA-DatH

🎨 + Jaizu
Jaizu

💻 From add14d90ff9bc08fa4edb493c538aa6bc2194306 Mon Sep 17 00:00:00 2001 From: amiosi <44352097+amiosi@users.noreply.github.com> Date: Fri, 2 Jan 2026 14:31:11 -0500 Subject: [PATCH 37/54] Miscellaneous Item Changes (#8461) --- src/data/items.h | 713 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 573 insertions(+), 140 deletions(-) diff --git a/src/data/items.h b/src/data/items.h index e39d84166d..6d69de9c89 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -552,7 +552,7 @@ const struct Item gItemsInfo[] = [ITEM_SPORT_BALL] = { .name = ITEM_NAME("Sport Ball"), - .price = (I_PRICE < GEN_3 || I_PRICE >= GEN_9) ? 0 : 300, + .price = (I_PRICE <= GEN_3 || I_PRICE >= GEN_9) ? 0 : 300, .description = COMPOUND_STRING( "A special Ball\n" "used in the Bug-\n" @@ -833,7 +833,6 @@ const struct Item gItemsInfo[] = [ITEM_MOOMOO_MILK] = { .name = ITEM_NAME("Moomoo Milk"), - .pluralName = ITEM_PLURAL_NAME("Moomoo Milk"), .price = (I_PRICE >= GEN_7) ? 600 : 500, .holdEffectParam = 100, .description = COMPOUND_STRING( @@ -854,7 +853,6 @@ const struct Item gItemsInfo[] = [ITEM_ENERGY_POWDER] = { .name = ITEM_NAME("Energy Powder"), - .pluralName = ITEM_PLURAL_NAME("Energy Powder"), .price = 500, .description = COMPOUND_STRING( "A bitter powder\n" @@ -901,7 +899,6 @@ const struct Item gItemsInfo[] = [ITEM_HEAL_POWDER] = { .name = ITEM_NAME("Heal Powder"), - .pluralName = ITEM_PLURAL_NAME("Heal Powder"), .price = (I_PRICE >= GEN_7) ? 300 : 450, .description = COMPOUND_STRING( "A bitter powder\n" @@ -976,7 +973,13 @@ const struct Item gItemsInfo[] = [ITEM_BURN_HEAL] = { .name = ITEM_NAME("Burn Heal"), - .price = (I_PRICE == GEN_7) ? 300 : ((I_PRICE <= GEN_7) ? 250 : 200), + #if I_PRICE >= GEN_8 + .price = 200, + #elif I_PRICE == GEN_7 + .price = 300, + #else + .price = 250, + #endif .description = COMPOUND_STRING( "Heals Pokémon\n" "of a burn."), @@ -994,7 +997,13 @@ const struct Item gItemsInfo[] = [ITEM_ICE_HEAL] = { .name = ITEM_NAME("Ice Heal"), - .price = (I_PRICE == GEN_7) ? 100 : ((I_PRICE <= GEN_7) ? 250 : 200), + #if I_PRICE >= GEN_8 + .price = 200, + #elif I_PRICE == GEN_7 + .price = 100, + #else + .price = 250, + #endif .description = COMPOUND_STRING( "Defrosts a frozen\n" "Pokémon."), @@ -1012,7 +1021,13 @@ const struct Item gItemsInfo[] = [ITEM_AWAKENING] = { .name = ITEM_NAME("Awakening"), - .price = (I_PRICE >= GEN_2 && I_PRICE <= GEN_6) ? 250 : ((I_PRICE == GEN_7) ? 100 : 200), + #if (I_PRICE >= GEN_8 || I_PRICE == GEN_1) + .price = 200, + #elif I_PRICE == GEN_7 + .price = 100, + #else + .price = 250, + #endif .description = COMPOUND_STRING( "Awakens a sleeping\n" "Pokémon."), @@ -1125,7 +1140,6 @@ const struct Item gItemsInfo[] = [ITEM_BERRY_JUICE] = { .name = ITEM_NAME("Berry Juice"), - .pluralName = ITEM_PLURAL_NAME("Berry Juice"), .price = 100, .holdEffect = HOLD_EFFECT_RESTORE_HP, .holdEffectParam = 20, @@ -1448,7 +1462,13 @@ const struct Item gItemsInfo[] = [ITEM_PP_UP] = { .name = ITEM_NAME("PP Up"), - .price = (I_PRICE == GEN_1) ? 1 : ((I_PRICE >= GEN_7) ? 10000 : 9800), + #if I_PRICE >= GEN_7 + .price = 10000, + #elif I_PRICE >= GEN_2 + .price = 9800, + #else + .price = 1, + #endif .description = COMPOUND_STRING( "Raises the maximum\n" "PP of a selected\n" @@ -1579,7 +1599,13 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_CAPSULE] = { .name = ITEM_NAME("Ability Capsule"), - .price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE < GEN_9) ? 10000 : 100000), + #if I_PRICE >= GEN_9 + .price = 100000, + #elif I_PRICE >= GEN_7 + .price = 10000, + #else + .price = 1000, + #endif .holdEffectParam = 0, .description = COMPOUND_STRING( "Switches a Poké-\n" @@ -2567,7 +2593,13 @@ const struct Item gItemsInfo[] = [ITEM_POKE_DOLL] = { .name = ITEM_NAME("Poké Doll"), - .price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE == GEN_7) ? 100 : 300), + #if I_PRICE >= GEN_8 + .price = 300, + #elif I_PRICE == GEN_7 + .price = 100, + #else + .price = 1000, + #endif .description = sPokeDollDesc, .pocket = POCKET_ITEMS, .sortType = ITEM_TYPE_BATTLE_ITEM, @@ -2684,7 +2716,13 @@ const struct Item gItemsInfo[] = [ITEM_BIG_NUGGET] = { .name = ITEM_NAME("Big Nugget"), - .price = (I_PRICE >= GEN_7) ? (40000 * TREASURE_FACTOR) : 20000, + #if I_PRICE >= GEN_7 + .price = 40000 * TREASURE_FACTOR, + #elif I_PRICE == GEN_6 + .price = 20000, + #else + .price = 0, + #endif .description = COMPOUND_STRING( "A big nugget made\n" "of gold, sellable\n" @@ -2693,7 +2731,7 @@ const struct Item gItemsInfo[] = .sortType = ITEM_TYPE_SELLABLE, .type = ITEM_USE_BAG_MENU, .fieldUseFunc = ItemUseOutOfBattle_CannotUse, - .flingPower = 130, + .flingPower = B_UPDATED_MOVE_DATA >= GEN_8 ? 130 : 80, .iconPic = gItemIcon_BigNugget, .iconPalette = gItemIconPalette_BigNugget, }, @@ -2732,7 +2770,13 @@ const struct Item gItemsInfo[] = [ITEM_BALM_MUSHROOM] = { .name = ITEM_NAME("Balm Mushroom"), - .price = (I_PRICE >= GEN_7) ? 15000 * TREASURE_FACTOR: 12500, + #if I_PRICE >= GEN_7 + .price = 15000 * TREASURE_FACTOR, + #elif I_PRICE == GEN_6 + .price = 12500, + #else + .price = 0, + #endif .description = sBigMushroomDesc, .pocket = POCKET_ITEMS, .sortType = ITEM_TYPE_SELLABLE, @@ -2780,7 +2824,15 @@ const struct Item gItemsInfo[] = [ITEM_PEARL_STRING] = { .name = ITEM_NAME("Pearl String"), - .price = (I_PRICE >= GEN_8) ? 15000 * TREASURE_FACTOR: ((I_PRICE == GEN_7) ? 30000 : 15000), + #if I_PRICE >= GEN_8 + .price = 20000 * TREASURE_FACTOR, + #elif I_PRICE == GEN_7 + .price = 30000, + #elif I_PRICE == GEN_6 + .price = 15000, + #else + .price = 0, + #endif .description = COMPOUND_STRING( "Very large pearls\n" "that would sell at a\n" @@ -2797,7 +2849,6 @@ const struct Item gItemsInfo[] = [ITEM_STARDUST] = { .name = ITEM_NAME("Stardust"), - .pluralName = ITEM_PLURAL_NAME("Stardust"), .price = (I_PRICE >= GEN_7) ? 3000 * TREASURE_FACTOR: 2000, .description = COMPOUND_STRING( "Beautiful red sand.\n" @@ -2832,7 +2883,15 @@ const struct Item gItemsInfo[] = [ITEM_COMET_SHARD] = { .name = ITEM_NAME("Comet Shard"), - .price = (I_PRICE <= GEN_5) ? 0 : ((I_PRICE == GEN_6) ? 30000 : ((I_PRICE == GEN_7) ? 60000 : 25000 * TREASURE_FACTOR)), + #if I_PRICE >= GEN_8 + .price = 25000 * TREASURE_FACTOR, + #elif I_PRICE == GEN_7 + .price = 60000, + #elif I_PRICE == GEN_6 + .price = 30000, + #else + .price = 0, + #endif .description = COMPOUND_STRING( "A comet's shard.\n" "It would sell for a\n" @@ -2849,7 +2908,6 @@ const struct Item gItemsInfo[] = [ITEM_SHOAL_SALT] = { .name = ITEM_NAME("Shoal Salt"), - .pluralName = ITEM_PLURAL_NAME("Shoal Salt"), .price = 20, .description = COMPOUND_STRING( "Salt obtained from\n" @@ -2958,7 +3016,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Honey"), .pluralName = ITEM_PLURAL_NAME("Honey"), - .price = (I_PRICE < GEN_5) ? 100 : ((I_PRICE < GEN_8) ? 300 : 900), + #if I_PRICE >= GEN_8 + .price = 900, + #elif I_PRICE == GEN_7 + .price = 300, + #else + .price = 100, + #endif .description = COMPOUND_STRING( "Sweet honey that\n" "attracts wild\n" @@ -3060,7 +3124,7 @@ const struct Item gItemsInfo[] = [ITEM_RELIC_GOLD] = { .name = ITEM_NAME("Relic Gold"), - .price = 0, + .price = (I_PRICE >= GEN_6) ? 60000 : 0, .description = COMPOUND_STRING( "A gold coin used\n" "long ago. It sells\n" @@ -3392,7 +3456,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_FISH] = { .name = ITEM_NAME("Fossilized Fish"), - .pluralName = ITEM_PLURAL_NAME("Fossilized Fishes"), + .pluralName = ITEM_PLURAL_NAME("Fossilized Fish"), .price = 5000, .description = sFossilizedFishDesc, .pocket = POCKET_ITEMS, @@ -3622,11 +3686,18 @@ const struct Item gItemsInfo[] = }, // Apricorns + #if (I_PRICE >= GEN_8 || I_PRICE <= GEN_2) + #define APRICORN_PRICE 200 + #elif I_PRICE >= GEN_5 + #define APRICORN_PRICE 20 + #else + #define APRICORN_PRICE 0 + #endif [ITEM_RED_APRICORN] = { .name = ITEM_NAME("Red Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A red apricorn.\n" "It assails your\n" @@ -3642,7 +3713,7 @@ const struct Item gItemsInfo[] = [ITEM_BLUE_APRICORN] = { .name = ITEM_NAME("Blue Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A blue apricorn.\n" "It smells a bit\n" @@ -3658,7 +3729,7 @@ const struct Item gItemsInfo[] = [ITEM_YELLOW_APRICORN] = { .name = ITEM_NAME("Yellow Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A yellow apricorn.\n" "It has an invigor-\n" @@ -3674,7 +3745,7 @@ const struct Item gItemsInfo[] = [ITEM_GREEN_APRICORN] = { .name = ITEM_NAME("Green Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A green apricorn.\n" "It has a strange,\n" @@ -3690,7 +3761,7 @@ const struct Item gItemsInfo[] = [ITEM_PINK_APRICORN] = { .name = ITEM_NAME("Pink Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A pink apricorn.\n" "It has a nice,\n" @@ -3706,7 +3777,7 @@ const struct Item gItemsInfo[] = [ITEM_WHITE_APRICORN] = { .name = ITEM_NAME("White Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A white apricorn.\n" "It doesn't smell\n" @@ -3722,7 +3793,7 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_APRICORN] = { .name = ITEM_NAME("Black Apricorn"), - .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), + .price = APRICORN_PRICE, .description = COMPOUND_STRING( "A black apricorn.\n" "It has an inde-\n" @@ -4112,7 +4183,15 @@ const struct Item gItemsInfo[] = [ITEM_MOON_STONE] = { .name = ITEM_NAME("Moon Stone"), - .price = (I_PRICE >= GEN_7) ? 3000 : 2100, + #if I_PRICE >= GEN_7 + .price = 3000, + #elif I_PRICE >= GEN_4 + .price = 2100, + #elif I_PRICE == GEN_3 + .price = 0, + #else + .price = 1, + #endif .description = sEvolutionStoneDesc, .pocket = POCKET_ITEMS, .sortType = ITEM_TYPE_EVOLUTION_STONE, @@ -4262,7 +4341,6 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_WREATH] = { .name = ITEM_NAME("Galarica Wreath"), - .pluralName = ITEM_PLURAL_NAME("Galarica Wreathes"), .price = (I_PRICE >= GEN_9) ? 3000 : 6000, .description = COMPOUND_STRING( "A wreath made in\n" @@ -4391,7 +4469,6 @@ const struct Item gItemsInfo[] = [ITEM_REAPER_CLOTH] = { .name = ITEM_NAME("Reaper Cloth"), - .pluralName = ITEM_PLURAL_NAME("Reaper Cloths"), .price = (I_PRICE >= GEN_7) ? 2000 * TREASURE_FACTOR : 2100, .description = COMPOUND_STRING( "Loved by a certain\n" @@ -4410,7 +4487,13 @@ const struct Item gItemsInfo[] = [ITEM_PRISM_SCALE] = { .name = ITEM_NAME("Prism Scale"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 2000 : 500), + #if I_PRICE >= GEN_9 + .price = 3000, + #elif I_PRICE >= GEN_7 + .price = 2000, + #else + .price = 500, + #endif .description = COMPOUND_STRING( "A mysterious scale\n" "that evolves a\n" @@ -4428,7 +4511,6 @@ const struct Item gItemsInfo[] = [ITEM_WHIPPED_DREAM] = { .name = ITEM_NAME("Whipped Dream"), - .pluralName = ITEM_PLURAL_NAME("Whipped Dream"), .price = (I_PRICE >= GEN_7) ? 2000 * TREASURE_FACTOR : 2100, .description = COMPOUND_STRING( "A soft and sweet\n" @@ -5549,7 +5631,6 @@ const struct Item gItemsInfo[] = [ITEM_CHARIZARDITE_X] = { .name = ITEM_NAME("Charizardite X"), - .pluralName = ITEM_PLURAL_NAME("Charizardites X"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, .description = sCharizarditeDesc, @@ -5565,7 +5646,6 @@ const struct Item gItemsInfo[] = [ITEM_CHARIZARDITE_Y] = { .name = ITEM_NAME("Charizardite Y"), - .pluralName = ITEM_PLURAL_NAME("Charizardites Y"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, .description = sCharizarditeDesc, @@ -5761,7 +5841,6 @@ const struct Item gItemsInfo[] = [ITEM_MEWTWONITE_X] = { .name = ITEM_NAME("Mewtwonite X"), - .pluralName = ITEM_PLURAL_NAME("Mewtwonites X"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, .description = sMewtwoniteDesc, @@ -5777,7 +5856,6 @@ const struct Item gItemsInfo[] = [ITEM_MEWTWONITE_Y] = { .name = ITEM_NAME("Mewtwonite Y"), - .pluralName = ITEM_PLURAL_NAME("Mewtwonites Y"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, .description = sMewtwoniteDesc, @@ -6835,11 +6913,18 @@ const struct Item gItemsInfo[] = }, // Gems + #if I_PRICE >= GEN_9 + #define GEM_PRICE 15000 + #elif I_PRICE >= GEN_7 + #define GEM_PRICE 4000 + #else + #define GEM_PRICE 200 + #endif [ITEM_NORMAL_GEM] = { .name = ITEM_NAME("Normal Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6858,7 +6943,7 @@ const struct Item gItemsInfo[] = [ITEM_FIRE_GEM] = { .name = ITEM_NAME("Fire Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6877,7 +6962,7 @@ const struct Item gItemsInfo[] = [ITEM_WATER_GEM] = { .name = ITEM_NAME("Water Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6896,7 +6981,7 @@ const struct Item gItemsInfo[] = [ITEM_ELECTRIC_GEM] = { .name = ITEM_NAME("Electric Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6915,7 +7000,7 @@ const struct Item gItemsInfo[] = [ITEM_GRASS_GEM] = { .name = ITEM_NAME("Grass Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6934,7 +7019,7 @@ const struct Item gItemsInfo[] = [ITEM_ICE_GEM] = { .name = ITEM_NAME("Ice Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6953,7 +7038,7 @@ const struct Item gItemsInfo[] = [ITEM_FIGHTING_GEM] = { .name = ITEM_NAME("Fighting Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6972,7 +7057,7 @@ const struct Item gItemsInfo[] = [ITEM_POISON_GEM] = { .name = ITEM_NAME("Poison Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -6991,7 +7076,7 @@ const struct Item gItemsInfo[] = [ITEM_GROUND_GEM] = { .name = ITEM_NAME("Ground Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7010,7 +7095,7 @@ const struct Item gItemsInfo[] = [ITEM_FLYING_GEM] = { .name = ITEM_NAME("Flying Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7029,7 +7114,7 @@ const struct Item gItemsInfo[] = [ITEM_PSYCHIC_GEM] = { .name = ITEM_NAME("Psychic Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7048,7 +7133,7 @@ const struct Item gItemsInfo[] = [ITEM_BUG_GEM] = { .name = ITEM_NAME("Bug Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7067,7 +7152,7 @@ const struct Item gItemsInfo[] = [ITEM_ROCK_GEM] = { .name = ITEM_NAME("Rock Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7086,7 +7171,7 @@ const struct Item gItemsInfo[] = [ITEM_GHOST_GEM] = { .name = ITEM_NAME("Ghost Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7105,7 +7190,7 @@ const struct Item gItemsInfo[] = [ITEM_DRAGON_GEM] = { .name = ITEM_NAME("Dragon Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7124,7 +7209,7 @@ const struct Item gItemsInfo[] = [ITEM_DARK_GEM] = { .name = ITEM_NAME("Dark Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7143,7 +7228,7 @@ const struct Item gItemsInfo[] = [ITEM_STEEL_GEM] = { .name = ITEM_NAME("Steel Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7162,7 +7247,7 @@ const struct Item gItemsInfo[] = [ITEM_FAIRY_GEM] = { .name = ITEM_NAME("Fairy Gem"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + .price = GEM_PRICE, .holdEffect = HOLD_EFFECT_GEMS, .holdEffectParam = GEM_BOOST_PARAM, .description = COMPOUND_STRING( @@ -7888,7 +7973,6 @@ const struct Item gItemsInfo[] = [ITEM_METAL_POWDER] = { .name = ITEM_NAME("Metal Powder"), - .pluralName = ITEM_PLURAL_NAME("Metal Powder"), .price = (I_PRICE >= GEN_7) ? 1000 : 10, .holdEffect = HOLD_EFFECT_METAL_POWDER, .description = COMPOUND_STRING( @@ -7907,7 +7991,6 @@ const struct Item gItemsInfo[] = [ITEM_QUICK_POWDER] = { .name = ITEM_NAME("Quick Powder"), - .pluralName = ITEM_PLURAL_NAME("Quick Powder"), .price = (I_PRICE >= GEN_7) ? 1000 : 10, .holdEffect = HOLD_EFFECT_QUICK_POWDER, .description = COMPOUND_STRING( @@ -8430,12 +8513,19 @@ const struct Item gItemsInfo[] = }, // Type-boosting Held Items + #if I_PRICE >= GEN_9 + #define TYPE_BOOSTING_PRICE 3000 + #elif I_PRICE >= GEN_7 + #define TYPE_BOOSTING_PRICE 1000 + #else + #define TYPE_BOOSTING_PRICE 100 + #endif [ITEM_SILK_SCARF] = { .name = ITEM_NAME("Silk Scarf"), .pluralName = ITEM_PLURAL_NAME("Silk Scarves"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8455,7 +8545,13 @@ const struct Item gItemsInfo[] = [ITEM_CHARCOAL] = { .name = ITEM_NAME("Charcoal"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 9800), + #if I_PRICE >= GEN_9 + .price = 3000, + #elif I_PRICE >= GEN_7 + .price = 1000, + #else + .price = 9800, + #endif .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8475,8 +8571,7 @@ const struct Item gItemsInfo[] = [ITEM_MYSTIC_WATER] = { .name = ITEM_NAME("Mystic Water"), - .pluralName = ITEM_PLURAL_NAME("Mystic Water"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8496,7 +8591,7 @@ const struct Item gItemsInfo[] = [ITEM_MAGNET] = { .name = ITEM_NAME("Magnet"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8516,7 +8611,7 @@ const struct Item gItemsInfo[] = [ITEM_MIRACLE_SEED] = { .name = ITEM_NAME("Miracle Seed"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = sRoseIncenseDesc, @@ -8533,8 +8628,7 @@ const struct Item gItemsInfo[] = [ITEM_NEVER_MELT_ICE] = { .name = ITEM_NAME("Never-Melt Ice"), - .pluralName = ITEM_PLURAL_NAME("Never-Melt Ice"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8554,7 +8648,7 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_BELT] = { .name = ITEM_NAME("Black Belt"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8574,7 +8668,7 @@ const struct Item gItemsInfo[] = [ITEM_POISON_BARB] = { .name = ITEM_NAME("Poison Barb"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8595,7 +8689,7 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Soft Sand"), .pluralName = ITEM_PLURAL_NAME("Soft Sand"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8615,7 +8709,7 @@ const struct Item gItemsInfo[] = [ITEM_SHARP_BEAK] = { .name = ITEM_NAME("Sharp Beak"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8635,7 +8729,7 @@ const struct Item gItemsInfo[] = [ITEM_TWISTED_SPOON] = { .name = ITEM_NAME("Twisted Spoon"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = sOddIncenseDesc, @@ -8652,8 +8746,7 @@ const struct Item gItemsInfo[] = [ITEM_SILVER_POWDER] = { .name = ITEM_NAME("Silver Powder"), - .pluralName = ITEM_PLURAL_NAME("Silver Powder"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8673,7 +8766,7 @@ const struct Item gItemsInfo[] = [ITEM_HARD_STONE] = { .name = ITEM_NAME("Hard Stone"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = sRockIncenseDesc, @@ -8690,7 +8783,7 @@ const struct Item gItemsInfo[] = [ITEM_SPELL_TAG] = { .name = ITEM_NAME("Spell Tag"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8710,7 +8803,7 @@ const struct Item gItemsInfo[] = [ITEM_DRAGON_FANG] = { .name = ITEM_NAME("Dragon Fang"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8731,7 +8824,7 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Black Glasses"), .pluralName = ITEM_PLURAL_NAME("Black Glasses"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), + .price = TYPE_BOOSTING_PRICE, .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8751,7 +8844,13 @@ const struct Item gItemsInfo[] = [ITEM_METAL_COAT] = { .name = ITEM_NAME("Metal Coat"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 2000 : 100), + #if I_PRICE >= GEN_9 + .price = 3000, + #elif I_PRICE >= GEN_7 + .price = 2000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_TYPE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, .description = COMPOUND_STRING( @@ -8774,7 +8873,13 @@ const struct Item gItemsInfo[] = [ITEM_CHOICE_BAND] = { .name = ITEM_NAME("Choice Band"), - .price = (I_PRICE >= GEN_9) ? 100000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 100000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_CHOICE_BAND, .description = COMPOUND_STRING( "Boosts Attack, but\n" @@ -8793,7 +8898,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Choice Specs"), .pluralName = ITEM_PLURAL_NAME("Choice Specs"), - .price = (I_PRICE >= GEN_9) ? 100000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 100000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_CHOICE_SPECS, .description = COMPOUND_STRING( "Boosts Sp. Atk, but\n" @@ -8812,7 +8923,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Choice Scarf"), .pluralName = ITEM_PLURAL_NAME("Choice Scarves"), - .price = (I_PRICE >= GEN_9) ? 100000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 100000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_CHOICE_SCARF, .description = COMPOUND_STRING( "Boosts Speed, but\n" @@ -8832,7 +8949,13 @@ const struct Item gItemsInfo[] = [ITEM_FLAME_ORB] = { .name = ITEM_NAME("Flame Orb"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_FLAME_ORB, .description = COMPOUND_STRING( "A bizarre orb that\n" @@ -8850,7 +8973,13 @@ const struct Item gItemsInfo[] = [ITEM_TOXIC_ORB] = { .name = ITEM_NAME("Toxic Orb"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_TOXIC_ORB, .description = COMPOUND_STRING( "A bizarre orb that\n" @@ -8870,7 +8999,13 @@ const struct Item gItemsInfo[] = [ITEM_DAMP_ROCK] = { .name = ITEM_NAME("Damp Rock"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_DAMP_ROCK, .description = COMPOUND_STRING( "Extends the length\n" @@ -8888,7 +9023,13 @@ const struct Item gItemsInfo[] = [ITEM_HEAT_ROCK] = { .name = ITEM_NAME("Heat Rock"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_HEAT_ROCK, .description = COMPOUND_STRING( "Extends the length\n" @@ -8906,7 +9047,13 @@ const struct Item gItemsInfo[] = [ITEM_SMOOTH_ROCK] = { .name = ITEM_NAME("Smooth Rock"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_SMOOTH_ROCK, .description = COMPOUND_STRING( "Extends the length\n" @@ -8924,7 +9071,13 @@ const struct Item gItemsInfo[] = [ITEM_ICY_ROCK] = { .name = ITEM_NAME("Icy Rock"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_ICY_ROCK, #if B_PREFERRED_ICE_WEATHER == B_ICE_WEATHER_HAIL .description = COMPOUND_STRING( @@ -9034,7 +9187,13 @@ const struct Item gItemsInfo[] = [ITEM_ABSORB_BULB] = { .name = ITEM_NAME("Absorb Bulb"), - .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 5000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_ABSORB_BULB, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9054,7 +9213,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Cell Battery"), .pluralName = ITEM_PLURAL_NAME("Cell Batteries"), - .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 5000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_CELL_BATTERY, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9074,7 +9239,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Luminous Moss"), .pluralName = ITEM_PLURAL_NAME("Luminous Moss"), - .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 1000), + #if I_PRICE >= GEN_9 + .price = 5000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 1000, + #endif .holdEffect = HOLD_EFFECT_LUMINOUS_MOSS, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9093,7 +9264,13 @@ const struct Item gItemsInfo[] = [ITEM_SNOWBALL] = { .name = ITEM_NAME("Snowball"), - .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 5000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_SNOWBALL, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9114,8 +9291,13 @@ const struct Item gItemsInfo[] = [ITEM_BRIGHT_POWDER] = { .name = ITEM_NAME("Bright Powder"), - .pluralName = ITEM_PLURAL_NAME("Bright Powder"), - .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 10), + #if I_PRICE >= GEN_9 + .price = 30000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 10, + #endif .holdEffect = HOLD_EFFECT_EVASION_UP, .holdEffectParam = 10, .description = COMPOUND_STRING( @@ -9134,7 +9316,13 @@ const struct Item gItemsInfo[] = [ITEM_WHITE_HERB] = { .name = ITEM_NAME("White Herb"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_WHITE_HERB, .description = COMPOUND_STRING( "A hold item that\n" @@ -9155,18 +9343,20 @@ const struct Item gItemsInfo[] = .holdEffect = HOLD_EFFECT_EXP_SHARE, #if I_EXP_SHARE_ITEM >= GEN_6 .price = 0, + .importance = 1, .description = COMPOUND_STRING( "This device gives\n" "exp. to other\n" "party members."), + .pocket = POCKET_KEY_ITEMS, #else - .price = 3000, + .price = (I_PRICE == GEN_1) ? 1 : 3000, .description = COMPOUND_STRING( "A hold item that\n" "gets Exp. points\n" "from battles."), + .pocket = POCKET_ITEMS, #endif - .pocket = I_EXP_SHARE_ITEM >= GEN_6 ? POCKET_KEY_ITEMS : POCKET_ITEMS, .sortType = ITEM_TYPE_HELD_ITEM, .type = ITEM_USE_FIELD, .fieldUseFunc = ItemUseOutOfBattle_ExpShare, @@ -9178,7 +9368,13 @@ const struct Item gItemsInfo[] = [ITEM_QUICK_CLAW] = { .name = ITEM_NAME("Quick Claw"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_QUICK_CLAW, .holdEffectParam = 20, .description = COMPOUND_STRING( @@ -9197,7 +9393,13 @@ const struct Item gItemsInfo[] = [ITEM_SOOTHE_BELL] = { .name = ITEM_NAME("Soothe Bell"), - .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 5000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_FRIENDSHIP_UP, .description = COMPOUND_STRING( "A hold item that\n" @@ -9215,7 +9417,13 @@ const struct Item gItemsInfo[] = [ITEM_MENTAL_HERB] = { .name = ITEM_NAME("Mental Herb"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_MENTAL_HERB, .description = COMPOUND_STRING( #if B_MENTAL_HERB >= GEN_5 @@ -9239,7 +9447,13 @@ const struct Item gItemsInfo[] = [ITEM_KINGS_ROCK] = { .name = ITEM_NAME("King's Rock"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 5000 : 100), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 5000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_FLINCH, .holdEffectParam = 10, .description = sKingsRockDesc, @@ -9256,7 +9470,13 @@ const struct Item gItemsInfo[] = [ITEM_AMULET_COIN] = { .name = ITEM_NAME("Amulet Coin"), - .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 10000 : 100), + #if I_PRICE >= GEN_9 + .price = 30000, + #elif I_PRICE >= GEN_7 + .price = 10000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE, .description = sLuckIncenseDesc, .pocket = POCKET_ITEMS, @@ -9286,7 +9506,13 @@ const struct Item gItemsInfo[] = [ITEM_SMOKE_BALL] = { .name = ITEM_NAME("Smoke Ball"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN, .description = COMPOUND_STRING( "A hold item that\n" @@ -9304,7 +9530,13 @@ const struct Item gItemsInfo[] = [ITEM_FOCUS_BAND] = { .name = ITEM_NAME("Focus Band"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_FOCUS_BAND, .holdEffectParam = 10, .description = COMPOUND_STRING( @@ -9342,7 +9574,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Scope Lens"), .pluralName = ITEM_PLURAL_NAME("Scope Lenses"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_SCOPE_LENS, .description = COMPOUND_STRING( "A hold item that\n" @@ -9361,7 +9599,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Leftovers"), .pluralName = ITEM_PLURAL_NAME("Leftovers"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_LEFTOVERS, .holdEffectParam = 10, .description = COMPOUND_STRING( @@ -9380,7 +9624,13 @@ const struct Item gItemsInfo[] = [ITEM_SHELL_BELL] = { .name = ITEM_NAME("Shell Bell"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_SHELL_BELL, .holdEffectParam = 8, .description = COMPOUND_STRING( @@ -9400,7 +9650,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Wide Lens"), .pluralName = ITEM_PLURAL_NAME("Wide Lenses"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_WIDE_LENS, .holdEffectParam = 10, .description = COMPOUND_STRING( @@ -9419,7 +9675,13 @@ const struct Item gItemsInfo[] = [ITEM_MUSCLE_BAND] = { .name = ITEM_NAME("Muscle Band"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_MUSCLE_BAND, .holdEffectParam = 10, .description = COMPOUND_STRING( @@ -9439,7 +9701,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Wise Glasses"), .pluralName = ITEM_PLURAL_NAME("Wise Glasses"), - .price = (I_PRICE >= GEN_9) ? 8000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 8000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_WISE_GLASSES, .holdEffectParam = 10, .description = COMPOUND_STRING( @@ -9458,7 +9726,13 @@ const struct Item gItemsInfo[] = [ITEM_EXPERT_BELT] = { .name = ITEM_NAME("Expert Belt"), - .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 30000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_EXPERT_BELT, .holdEffectParam = 20, .description = COMPOUND_STRING( @@ -9477,8 +9751,13 @@ const struct Item gItemsInfo[] = [ITEM_LIGHT_CLAY] = { .name = ITEM_NAME("Light Clay"), - .pluralName = ITEM_PLURAL_NAME("Light Clay"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_LIGHT_CLAY, .description = COMPOUND_STRING( "Extends the length\n" @@ -9496,7 +9775,13 @@ const struct Item gItemsInfo[] = [ITEM_LIFE_ORB] = { .name = ITEM_NAME("Life Orb"), - .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 50000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_LIFE_ORB, .description = COMPOUND_STRING( "Boosts move power\n" @@ -9514,7 +9799,13 @@ const struct Item gItemsInfo[] = [ITEM_POWER_HERB] = { .name = ITEM_NAME("Power Herb"), - .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 30000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_POWER_HERB, .description = COMPOUND_STRING( "Allows immediate\n" @@ -9533,7 +9824,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Focus Sash"), .pluralName = ITEM_PLURAL_NAME("Focus Sashes"), - .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 50000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_FOCUS_SASH, .description = COMPOUND_STRING( "If the holder has\n" @@ -9552,7 +9849,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Zoom Lens"), .pluralName = ITEM_PLURAL_NAME("Zoom Lenses"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_ZOOM_LENS, .holdEffectParam = 20, .description = COMPOUND_STRING( @@ -9571,7 +9874,13 @@ const struct Item gItemsInfo[] = [ITEM_METRONOME] = { .name = ITEM_NAME("Metronome"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_METRONOME, .holdEffectParam = 20, .description = COMPOUND_STRING( @@ -9590,7 +9899,13 @@ const struct Item gItemsInfo[] = [ITEM_IRON_BALL] = { .name = ITEM_NAME("Iron Ball"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_IRON_BALL, .description = COMPOUND_STRING( "Cuts Speed and\n" @@ -9608,7 +9923,13 @@ const struct Item gItemsInfo[] = [ITEM_LAGGING_TAIL] = { .name = ITEM_NAME("Lagging Tail"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_LAGGING_TAIL, .description = sFullIncenseDesc, .pocket = POCKET_ITEMS, @@ -9623,7 +9944,13 @@ const struct Item gItemsInfo[] = [ITEM_DESTINY_KNOT] = { .name = ITEM_NAME("Destiny Knot"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_DESTINY_KNOT, .description = COMPOUND_STRING( "If the holder falls\n" @@ -9641,8 +9968,13 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_SLUDGE] = { .name = ITEM_NAME("Black Sludge"), - .pluralName = ITEM_PLURAL_NAME("Black Sludge"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_BLACK_SLUDGE, .description = COMPOUND_STRING( "Restores HP for\n" @@ -9660,7 +9992,13 @@ const struct Item gItemsInfo[] = [ITEM_GRIP_CLAW] = { .name = ITEM_NAME("Grip Claw"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_GRIP_CLAW, .description = COMPOUND_STRING( "A held item that\n" @@ -9678,7 +10016,13 @@ const struct Item gItemsInfo[] = [ITEM_STICKY_BARB] = { .name = ITEM_NAME("Sticky Barb"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_STICKY_BARB, .description = COMPOUND_STRING( "Damages the holder\n" @@ -9696,7 +10040,13 @@ const struct Item gItemsInfo[] = [ITEM_SHED_SHELL] = { .name = ITEM_NAME("Shed Shell"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 100), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 100, + #endif .holdEffect = HOLD_EFFECT_SHED_SHELL, .description = COMPOUND_STRING( "Allows the holder\n" @@ -9714,7 +10064,13 @@ const struct Item gItemsInfo[] = [ITEM_BIG_ROOT] = { .name = ITEM_NAME("Big Root"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_BIG_ROOT, .holdEffectParam = 30, .description = COMPOUND_STRING( @@ -9733,7 +10089,13 @@ const struct Item gItemsInfo[] = [ITEM_RAZOR_CLAW] = { .name = ITEM_NAME("Razor Claw"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 5000 : 2100), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 5000, + #else + .price = 2100, + #endif .holdEffect = HOLD_EFFECT_SCOPE_LENS, .description = COMPOUND_STRING( "A hooked claw that\n" @@ -9752,7 +10114,13 @@ const struct Item gItemsInfo[] = [ITEM_RAZOR_FANG] = { .name = ITEM_NAME("Razor Fang"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 5000 : 2100), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 5000, + #else + .price = 2100, + #endif .holdEffect = HOLD_EFFECT_FLINCH, .holdEffectParam = 10, .description = sKingsRockDesc, @@ -9769,7 +10137,13 @@ const struct Item gItemsInfo[] = [ITEM_EVIOLITE] = { .name = ITEM_NAME("Eviolite"), - .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 50000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_EVIOLITE, .holdEffectParam = 50, .description = COMPOUND_STRING( @@ -9788,7 +10162,13 @@ const struct Item gItemsInfo[] = [ITEM_FLOAT_STONE] = { .name = ITEM_NAME("Float Stone"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_FLOAT_STONE, .description = COMPOUND_STRING( "It's so light that\n" @@ -9806,7 +10186,13 @@ const struct Item gItemsInfo[] = [ITEM_ROCKY_HELMET] = { .name = ITEM_NAME("Rocky Helmet"), - .price = (I_PRICE >= GEN_9) ? 50000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 50000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_ROCKY_HELMET, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9825,7 +10211,13 @@ const struct Item gItemsInfo[] = [ITEM_AIR_BALLOON] = { .name = ITEM_NAME("Air Balloon"), - .price = (I_PRICE >= GEN_9) ? 15000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 15000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_AIR_BALLOON, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9844,7 +10236,13 @@ const struct Item gItemsInfo[] = [ITEM_RED_CARD] = { .name = ITEM_NAME("Red Card"), - .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 3000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_RED_CARD, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9863,7 +10261,13 @@ const struct Item gItemsInfo[] = [ITEM_RING_TARGET] = { .name = ITEM_NAME("Ring Target"), - .price = (I_PRICE >= GEN_9) ? 10000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 10000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_RING_TARGET, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9882,7 +10286,13 @@ const struct Item gItemsInfo[] = [ITEM_BINDING_BAND] = { .name = ITEM_NAME("Binding Band"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_BINDING_BAND, .description = COMPOUND_STRING( "Increases the\n" @@ -9900,7 +10310,13 @@ const struct Item gItemsInfo[] = [ITEM_EJECT_BUTTON] = { .name = ITEM_NAME("Eject Button"), - .price = (I_PRICE >= GEN_9) ? 30000 : ((I_PRICE >= GEN_7) ? 4000 : 200), + #if I_PRICE >= GEN_9 + .price = 30000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 200, + #endif .holdEffect = HOLD_EFFECT_EJECT_BUTTON, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -9959,7 +10375,13 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Safety Goggles"), .pluralName = ITEM_PLURAL_NAME("Safety Goggles"), - .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 1000), + #if I_PRICE >= GEN_9 + .price = 20000, + #elif I_PRICE >= GEN_7 + .price = 4000, + #else + .price = 1000, + #endif .holdEffect = HOLD_EFFECT_SAFETY_GOGGLES, .description = COMPOUND_STRING( "Protect from\n" @@ -9977,7 +10399,13 @@ const struct Item gItemsInfo[] = [ITEM_ADRENALINE_ORB] = { .name = ITEM_NAME("Adrenaline Orb"), - .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_8) ? 4000 : 300), + #if I_PRICE >= GEN_9 + .price = 5000, + #elif I_PRICE == GEN_8 + .price = 4000, + #else + .price = 300, + #endif .holdEffect = HOLD_EFFECT_ADRENALINE_ORB, .description = COMPOUND_STRING( "This orb boosts\n" @@ -13035,6 +13463,7 @@ const struct Item gItemsInfo[] = { .name = ITEM_NAME("Dynamax Band"), .price = 0, + .importance = 1, .description = COMPOUND_STRING( "A band carrying a\n" "Wishing Star that\n" @@ -13050,7 +13479,7 @@ const struct Item gItemsInfo[] = [ITEM_BICYCLE] = { - .name = ITEM_NAME("Bicycle"), + .name = ITEM_NAME("Bike"), .price = 0, .description = COMPOUND_STRING( "A folding bicycle\n" @@ -14766,8 +15195,8 @@ const struct Item gItemsInfo[] = [ITEM_FRESH_START_MOCHI] = { - .name = ITEM_NAME("Fresh Start Mochi"), - .pluralName = ITEM_PLURAL_NAME("Fresh Start Mochi"), + .name = ITEM_NAME("Fresh-Start Mochi"), + .pluralName = ITEM_PLURAL_NAME("Fresh-Start Mochi"), .price = 300, .description = COMPOUND_STRING( "An item that resets\n" @@ -14848,6 +15277,7 @@ const struct Item gItemsInfo[] = [ITEM_REMEDY] = { .name = ITEM_NAME("Remedy"), + .pluralName = ITEM_PLURAL_NAME("Remedies"), .price = 150, .description = COMPOUND_STRING( "A bitter powder\n" @@ -14867,6 +15297,7 @@ const struct Item gItemsInfo[] = [ITEM_FINE_REMEDY] = { .name = ITEM_NAME("Fine Remedy"), + .pluralName = ITEM_PLURAL_NAME("Fine Remedies"), .price = 150, .description = COMPOUND_STRING( "A bitter powder\n" @@ -14890,6 +15321,7 @@ const struct Item gItemsInfo[] = [ITEM_SUPERB_REMEDY] = { .name = ITEM_NAME("Superb Remedy"), + .pluralName = ITEM_PLURAL_NAME("Superb Remedies"), .price = 750, .description = COMPOUND_STRING( "A bitter powder\n" @@ -15032,6 +15464,7 @@ const struct Item gItemsInfo[] = [ITEM_TWICE_SPICED_RADISH] = { .name = ITEM_NAME("Twice-Spiced Radish"), + .pluralName = ITEM_PLURAL_NAME("Twice-Spiced Radishes"), .price = 1600, .description = sQuestionMarksDesc, .pocket = POCKET_ITEMS, From 86ab7194695e60de078cbe87ece8a0eb1b5701c8 Mon Sep 17 00:00:00 2001 From: FosterProgramming Date: Sat, 3 Jan 2026 08:39:59 +0100 Subject: [PATCH 38/54] Disable L button config (throw ball shortcut or move description) when there is overlap with L=A option (#8332) --- src/battle_controller_player.c | 6 ++++-- src/battle_interface.c | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index aba9d7d837..00f88a74a5 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -242,7 +242,8 @@ static void HandleInputChooseAction(u32 battler) else gPlayerDpadHoldFrames = 0; - if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE) + if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE + && !(B_LAST_USED_BALL_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)) { if (!gLastUsedBallMenuPresent) { @@ -880,7 +881,8 @@ void HandleInputChooseMove(u32 battler) MoveSelectionDisplayMoveType(battler); } } - else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON)) + else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) && + !(B_MOVE_DESCRIPTION_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)) { gBattleStruct->descriptionSubmenu = TRUE; TryMoveSelectionDisplayMoveDescription(battler); diff --git a/src/battle_interface.c b/src/battle_interface.c index f87a889641..a48225b966 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2987,6 +2987,9 @@ void TryToAddMoveInfoWindow(void) if (!B_SHOW_MOVE_DESCRIPTION) return; + if (B_MOVE_DESCRIPTION_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + return; + LoadSpritePalette(&sSpritePalette_AbilityPopUp); if (GetSpriteTileStartByTag(MOVE_INFO_WINDOW_TAG) == 0xFFFF) LoadSpriteSheet(&sSpriteSheet_MoveInfoWindow); @@ -3096,6 +3099,9 @@ static void TryHideOrRestoreLastUsedBall(u8 caseId) void TryHideLastUsedBall(void) { + if (B_LAST_USED_BALL_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + return; + if (B_LAST_USED_BALL == TRUE) TryHideOrRestoreLastUsedBall(0); } @@ -3105,6 +3111,9 @@ void TryRestoreLastUsedBall(void) if (B_LAST_USED_BALL == FALSE) return; + if (B_LAST_USED_BALL_BUTTON == L_BUTTON && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) + return; + if (gBattleStruct->ballSpriteIds[0] != MAX_SPRITES) TryHideOrRestoreLastUsedBall(1); else From 0e33bf916e80e4dcf4f96ca0419a8b2fda5da51d Mon Sep 17 00:00:00 2001 From: moostoet <70690976+moostoet@users.noreply.github.com> Date: Sat, 3 Jan 2026 08:50:17 +0100 Subject: [PATCH 39/54] Fix berry activation timing for Yawn sleep and Leech Seed damage (#8776) --- data/battle_scripts_1.s | 2 ++ include/constants/hold_effects.h | 1 + src/battle_script_commands.c | 4 ++++ test/battle/hold_effect/cure_status.c | 19 +++++++++++++++++++ test/battle/hold_effect/restore_hp.c | 19 +++++++++++++++++++ 5 files changed, 45 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index e37074b339..b7abe25190 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -4958,6 +4958,7 @@ BattleScript_LeechSeedTurnDrain: healthbarupdate BS_ATTACKER, PASSIVE_HP_UPDATE datahpupdate BS_ATTACKER, PASSIVE_HP_UPDATE tryfaintmon BS_ATTACKER + tryactivateitem BS_ATTACKER, ACTIVATION_ON_HP_THRESHOLD return BattleScript_BideStoringEnergy:: @@ -6294,6 +6295,7 @@ BattleScript_YawnMakesAsleepEnd2:: waitmessage B_WAIT_TIME_LONG updatestatusicon BS_EFFECT_BATTLER waitstate + tryactivateitem BS_EFFECT_BATTLER, ACTIVATION_ON_STATUS_CHANGE jumpfifsemiinvulnerable BS_EFFECT_BATTLER, STATE_SKY_DROP, BattleScript_YawnEnd makevisible BS_EFFECT_BATTLER skydropyawn diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h index 32dacc36d3..8be7b39bf2 100644 --- a/include/constants/hold_effects.h +++ b/include/constants/hold_effects.h @@ -157,6 +157,7 @@ enum ItemActivationState ACTIVATION_ON_PICK_UP, ACTIVATION_ON_HARVEST, ACTIVATION_ON_HP_THRESHOLD, + ACTIVATION_ON_STATUS_CHANGE, }; #endif // GUARD_HOLD_EFFECTS_H diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 126bb76d4c..edbe3f89ea 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -12211,6 +12211,10 @@ static void Cmd_tryactivateitem(void) if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnHpThresholdActivation)) return; break; + case ACTIVATION_ON_STATUS_CHANGE: + if (ItemBattleEffects(battler, 0, GetBattlerHoldEffect(battler), IsOnStatusChangeActivation)) + return; + break; } } diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c index 0f389af4d5..0318d3991a 100644 --- a/test/battle/hold_effect/cure_status.c +++ b/test/battle/hold_effect/cure_status.c @@ -116,6 +116,25 @@ SINGLE_BATTLE_TEST("Chesto and Lum Berries cure sleep") } } +SINGLE_BATTLE_TEST("Chesto Berry cures sleep when Yawn takes effect") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); + ASSUME(gItemsInfo[ITEM_CHESTO_BERRY].holdEffect == HOLD_EFFECT_CURE_SLP); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHESTO_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_YAWN); } + TURN { MOVE(opponent, MOVE_CELEBRATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_YAWN, opponent); + ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player); + STATUS_ICON(player, sleep: TRUE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + STATUS_ICON(player, sleep: FALSE); + } +} + TO_DO_BATTLE_TEST("Chesto and Lum Berries don't trigger if the holder has Comatose") SINGLE_BATTLE_TEST("Cheri and Lum Berries cure paralysis") diff --git a/test/battle/hold_effect/restore_hp.c b/test/battle/hold_effect/restore_hp.c index ef96ead7e4..2441e92449 100644 --- a/test/battle/hold_effect/restore_hp.c +++ b/test/battle/hold_effect/restore_hp.c @@ -63,3 +63,22 @@ DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing after a recoil mo ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); } } + +SINGLE_BATTLE_TEST("Sitrus Berry restores HP immediately after Leech Seed damage") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_LEECH_SEED) == EFFECT_LEECH_SEED); + ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP); + PLAYER(SPECIES_WOBBUFFET) { MaxHP(80); HP(41); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_LEECH_SEED); } + TURN { } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_LEECH_SEED_DRAIN, player); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + HP_BAR(player); + } +} From 900abdb5a6aa9703c83316d4463c0ff43e57548f Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Sat, 3 Jan 2026 14:52:21 +0100 Subject: [PATCH 40/54] Add enum for battle script commands (#8778) --- asm/macros/battle_script.inc | 198 ++++---- include/constants/battle_script_commands.h | 260 +++++++++++ src/battle_script_commands.c | 512 ++++++++++----------- 3 files changed, 615 insertions(+), 355 deletions(-) diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 7d7812c3b4..d8a8be7612 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -1,44 +1,44 @@ @ commands .macro attackcanceler - .byte 0x0 + .byte B_SCR_OP_ATTACKCANCELER .endm .macro accuracycheck failInstr:req, move:req - .byte 0x1 + .byte B_SCR_OP_ACCURACYCHECK .4byte \failInstr .2byte \move .endm .macro printattackstring - .byte 0x2 + .byte B_SCR_OP_PRINTATTACKSTRING .endm .macro unused_0x3 - .byte 0x3 + .byte B_SCR_OP_UNUSED_0x3 .endm .macro critcalc - .byte 0x4 + .byte B_SCR_OP_CRITCALC .endm .macro damagecalc - .byte 0x5 + .byte B_SCR_OP_DAMAGECALC .endm .macro typecalc - .byte 0x6 + .byte B_SCR_OP_TYPECALC .endm .macro adjustdamage - .byte 0x7 + .byte B_SCR_OP_ADJUSTDAMAGE .endm .macro multihitresultmessage - .byte 0x8 + .byte B_SCR_OP_MULTIHITRESULTMESSAGE .endm .macro attackanimation - .byte 0x9 + .byte B_SCR_OP_ATTACKANIMATION .endm .macro waitanimation @@ -70,7 +70,7 @@ .endm .macro printstring id:req - .byte 0x10 + .byte B_SCR_OP_PRINTSTRING .2byte \id .endm @@ -79,28 +79,28 @@ .endm .macro printselectionstring id:req - .byte 0x11 + .byte B_SCR_OP_PRINTSELECTIONSTRING .2byte \id .endm .macro waitmessage time:req - .byte 0x12 + .byte B_SCR_OP_WAITMESSAGE .2byte \time .endm .macro printfromtable ptr:req - .byte 0x13 + .byte B_SCR_OP_PRINTFROMTABLE .4byte \ptr .endm .macro printselectionstringfromtable ptr:req - .byte 0x14 + .byte B_SCR_OP_PRINTSELECTIONSTRINGFROMTABLE .4byte \ptr .endm .macro setadditionaleffects 1: - .byte 0x15 + .byte B_SCR_OP_SETADDITIONALEFFECTS jumpifhalfword CMP_EQUAL, sMOVE_EFFECT, MOVE_EFFECT_CONTINUE, 1b .endm @@ -108,7 +108,7 @@ .if \moveEffect != 0 setmoveeffect \moveEffect .endif - .byte 0x16 + .byte B_SCR_OP_SETEFFECTPRIMARY .byte \battler .byte \effectBattler .endm @@ -117,26 +117,26 @@ .if \moveEffect != 0 setmoveeffect \moveEffect .endif - .byte 0x17 + .byte B_SCR_OP_SETEFFECTSECONDARY .byte \battler .byte \effectBattler .endm .macro clearvolatile battler:req, volatile:req - .byte 0x18 + .byte B_SCR_OP_CLEARVOLATILE .byte \battler .byte \volatile .endm .macro tryfaintmon battler:req - .byte 0x19 + .byte B_SCR_OP_TRYFAINTMON .byte \battler .byte FALSE .4byte NULL .endm .macro tryfaintmon_spikes battler:req, instr:req - .byte 0x19 + .byte B_SCR_OP_TRYFAINTMON .byte \battler .byte TRUE .4byte \instr @@ -181,7 +181,7 @@ .endm .macro jumpifstat battler:req, comparison:req, stat:req, value:req, jumpInstr:req - .byte 0x20 + .byte B_SCR_OP_JUMPIFSTAT .byte \battler .byte \comparison .byte \stat @@ -190,7 +190,7 @@ .endm .macro jumpifstatignorecontrary battler:req, comparison:req, stat:req, value:req, jumpInstr:req - .byte 0x21 + .byte B_SCR_OP_JUMPIFSTATIGNORECONTRARY .byte \battler .byte \comparison .byte \stat @@ -199,7 +199,7 @@ .endm .macro jumpbasedontype battler:req, type:req, jumpIfType:req, jumpInstr:req - .byte 0x22 + .byte B_SCR_OP_JUMPBASEDONTYPE .byte \battler .byte \type .byte \jumpIfType @@ -215,36 +215,36 @@ .endm .macro getexp battler:req - .byte 0x23 + .byte B_SCR_OP_GETEXP .byte \battler .endm .macro checkteamslost jumpInstr:req - .byte 0x24 + .byte B_SCR_OP_CHECKTEAMSLOST .4byte \jumpInstr .endm .macro movevaluescleanup - .byte 0x25 + .byte B_SCR_OP_MOVEVALUESCLEANUP .endm .macro setmultihit value:req - .byte 0x26 + .byte B_SCR_OP_SETMULTIHIT .byte \value .endm .macro decrementmultihit loopInstr:req - .byte 0x27 + .byte B_SCR_OP_DECREMENTMULTIHIT .4byte \loopInstr .endm .macro goto instr:req - .byte 0x28 + .byte B_SCR_OP_GOTO .4byte \instr .endm .macro jumpifbyte comparison:req, bytePtr:req, value:req, jumpInstr:req - .byte 0x29 + .byte B_SCR_OP_JUMPIFBYTE .byte \comparison .4byte \bytePtr .byte \value @@ -296,20 +296,20 @@ .endm .macro subbyte bytePtr:req, value:req - .byte 0x30 + .byte B_SCR_OP_SUBBYTE .4byte \bytePtr .byte \value .endm .macro copyarray dest:req, src:req, size:req - .byte 0x31 + .byte B_SCR_OP_COPYARRAY .4byte \dest .4byte \src .byte \size .endm .macro copyarraywithindex dest:req, src:req, indexPtr:req, size:req - .byte 0x32 + .byte B_SCR_OP_COPYARRAYWITHINDEX .4byte \dest .4byte \src .4byte \indexPtr @@ -317,48 +317,48 @@ .endm .macro orbyte bytePtr:req, value:req - .byte 0x33 + .byte B_SCR_OP_ORBYTE .4byte \bytePtr .byte \value .endm .macro orhalfword halfwordPtr:req, value:req - .byte 0x34 + .byte B_SCR_OP_ORHALFWORD .4byte \halfwordPtr .2byte \value .endm .macro orword wordPtr:req, value:req - .byte 0x35 + .byte B_SCR_OP_ORWORD .4byte \wordPtr .4byte \value .endm .macro bicbyte bytePtr:req, value:req - .byte 0x36 + .byte B_SCR_OP_BICBYTE .4byte \bytePtr .byte \value .endm .macro bichalfword halfwordPtr:req, value:req - .byte 0x37 + .byte B_SCR_OP_BICHALFWORD .4byte \halfwordPtr .2byte \value .endm .macro bicword wordPtr:req, value:req - .byte 0x38 + .byte B_SCR_OP_BICWORD .4byte \wordPtr .4byte \value .endm .macro pause frames:req - .byte 0x39 + .byte B_SCR_OP_PAUSE .2byte \frames .endm .macro setchargingturn - .byte 0x40 + .byte B_SCR_OP_SETCHARGINGTURN .endm .macro waitstate @@ -386,51 +386,51 @@ .endm .macro call instr:req - .byte 0x41 + .byte B_SCR_OP_CALL .4byte \instr .endm .macro setroost - .byte 0x42 + .byte B_SCR_OP_SETROOST .endm .macro jumpifabilitypresent ability:req, jumpInstr:req - .byte 0x43 + .byte B_SCR_OP_JUMPIFABILITYPRESENT .2byte \ability .4byte \jumpInstr .endm .macro endselectionscript - .byte 0x44 + .byte B_SCR_OP_ENDSELECTIONSCRIPT .endm .macro playanimation battler:req, animId:req, argPtr=NULL - .byte 0x45 + .byte B_SCR_OP_PLAYANIMATION .byte \battler .byte \animId .4byte \argPtr .endm .macro playanimation_var battler:req, animIdPtr:req, argPtr=NULL - .byte 0x46 + .byte B_SCR_OP_PLAYANIMATION_VAR .byte \battler .4byte \animIdPtr .4byte \argPtr .endm .macro jumpfifsemiinvulnerable battler:req, state:req, jumpInstr:req - .byte 0x47 + .byte B_SCR_OP_JUMPFIFSEMIINVULNERABLE .byte \battler .byte \state .4byte \jumpInstr .endm .macro unused_0x48 - .byte 0x48 + .byte B_SCR_OP_UNUSED_0x48 .endm .macro moveend endMode:req, endState:req - .byte 0x49 + .byte B_SCR_OP_MOVEEND .byte \endMode .byte \endState .endm @@ -500,54 +500,54 @@ .endm .macro openpartyscreen battler:req, failInstr:req - .byte 0x50 + .byte B_SCR_OP_OPENPARTYSCREEN .byte \battler .4byte \failInstr .endm .macro switchhandleorder battler:req, state:req - .byte 0x51 + .byte B_SCR_OP_SWITCHHANDLEORDER .byte \battler .byte \state .endm .macro switchineffects battler:req - .byte 0x52 + .byte B_SCR_OP_SWITCHINEFFECTS .byte \battler .endm .macro trainerslidein position:req - .byte 0x53 + .byte B_SCR_OP_TRAINERSLIDEIN .byte \position .endm .macro playse song:req - .byte 0x54 + .byte B_SCR_OP_PLAYSE .2byte \song .endm .macro fanfare song:req - .byte 0x55 + .byte B_SCR_OP_FANFARE .2byte \song .endm .macro playfaintcry battler:req - .byte 0x56 + .byte B_SCR_OP_PLAYFAINTCRY .byte \battler .endm .macro endlinkbattle - .byte 0x57 + .byte B_SCR_OP_ENDLINKBATTLE .endm .macro returntoball battler:req, changingForm:req - .byte 0x58 + .byte B_SCR_OP_RETURNTOBALL .byte \battler .byte \changingForm .endm .macro handlelearnnewmove learnedMoveInstr:req, nothingToLearnInstr:req, isFirstMove:req - .byte 0x59 + .byte B_SCR_OP_HANDLELEARNNEWMOVE .4byte \learnedMoveInstr .4byte \nothingToLearnInstr .byte \isFirstMove @@ -582,27 +582,27 @@ .endm .macro incrementgamestat stat:req - .byte 0x60 + .byte B_SCR_OP_INCREMENTGAMESTAT .byte \stat .endm .macro drawpartystatussummary battler:req - .byte 0x61 + .byte B_SCR_OP_DRAWPARTYSTATUSSUMMARY .byte \battler .endm .macro hidepartystatussummary battler:req - .byte 0x62 + .byte B_SCR_OP_HIDEPARTYSTATUSSUMMARY .byte \battler .endm .macro jumptocalledmove notChosenMove:req - .byte 0x63 + .byte B_SCR_OP_JUMPTOCALLEDMOVE .byte \notChosenMove .endm .macro statusanimation battler:req, status=0, isVolatile=FALSE - .byte 0x64 + .byte B_SCR_OP_STATUSANIMATION .byte \battler .4byte \status .byte \isVolatile @@ -613,15 +613,15 @@ .endm .macro yesnobox - .byte 0x67 + .byte B_SCR_OP_YESNOBOX .endm .macro cancelallactions - .byte 0x68 + .byte B_SCR_OP_CANCELALLACTIONS .endm .macro setgravity failInstr:req - .byte 0x69 + .byte B_SCR_OP_SETGRAVITY .4byte \failInstr .endm @@ -652,47 +652,47 @@ .endm .macro recordability battler:req - .byte 0x70 + .byte B_SCR_OP_RECORDABILITY .byte \battler .endm .macro buffermovetolearn - .byte 0x71 + .byte B_SCR_OP_BUFFERMOVETOLEARN .endm .macro jumpifplayerran jumpInstr:req - .byte 0x72 + .byte B_SCR_OP_JUMPIFPLAYERRAN .4byte \jumpInstr .endm .macro hpthresholds battler:req - .byte 0x73 + .byte B_SCR_OP_HPTHRESHOLDS .byte \battler .endm .macro hpthresholds2 battler:req - .byte 0x74 + .byte B_SCR_OP_HPTHRESHOLDS2 .byte \battler .endm .macro useitemonopponent - .byte 0x75 + .byte B_SCR_OP_USEITEMONOPPONENT .endm .macro unused_0x78 - .byte 0x76 + .byte B_SCR_OP_UNUSED_0x78 .endm .macro setprotectlike - .byte 0x77 + .byte B_SCR_OP_SETPROTECTLIKE .endm .macro tryexplosion - .byte 0x78 + .byte B_SCR_OP_TRYEXPLOSION .endm .macro setatkhptozero - .byte 0x79 + .byte B_SCR_OP_SETATKHPTOZERO .endm .macro jumpifnexttargetvalid jumpInstr:req @@ -724,38 +724,38 @@ .endm .macro manipulatedamage mode:req - .byte 0x80 + .byte B_SCR_OP_MANIPULATEDAMAGE .byte \mode .endm .macro trysetrest - .byte 0x81 + .byte B_SCR_OP_TRYSETREST .endm .macro unused_0x82 - .byte 0x82 + .byte B_SCR_OP_UNUSED_0x82 .endm .macro unused_0x83 - .byte 0x83 + .byte B_SCR_OP_UNUSED_0x83 .endm .macro jumpifuproarwakes jumpInstr:req - .byte 0x84 + .byte B_SCR_OP_JUMPIFUPROARWAKES .4byte \jumpInstr .endm .macro stockpile id:req - .byte 0x85 + .byte B_SCR_OP_STOCKPILE .byte \id .endm .macro stockpiletobasedamage - .byte 0x86 + .byte B_SCR_OP_STOCKPILETOBASEDAMAGE .endm .macro stockpiletohpheal failInstr:req - .byte 0x87 + .byte B_SCR_OP_STOCKPILETOHPHEAL .4byte \failInstr .endm @@ -764,11 +764,11 @@ .endm .macro unused_0x88 - .byte 0x88 + .byte B_SCR_OP_UNUSED_0x88 .endm .macro statbuffchange battler:req, flags:req, failInstr:req, stats=0 - .byte 0x89 + .byte B_SCR_OP_STATBUFFCHANGE .byte \battler .2byte \flags .4byte \failInstr @@ -814,50 +814,50 @@ .endm .macro tryconversiontypechange failInstr:req - .byte 0x90 + .byte B_SCR_OP_TRYCONVERSIONTYPECHANGE .4byte \failInstr .endm .macro givepaydaymoney - .byte 0x91 + .byte B_SCR_OP_GIVEPAYDAYMONEY .endm .macro setlightscreen - .byte 0x92 + .byte B_SCR_OP_SETLIGHTSCREEN .endm .macro tryKO failInstr:req - .byte 0x93 + .byte B_SCR_OP_TRYKO .4byte \failInstr .endm .macro checknonvolatiletrigger nonVolatile:req, failInstr:req - .byte 0x94 + .byte B_SCR_OP_CHECKNONVOLATILETRIGGER .2byte \nonVolatile .4byte \failInstr .endm .macro copybidedmg - .byte 0x95 + .byte B_SCR_OP_COPYBIDEDMG .endm .macro animatewildpokemonafterfailedpokeball battler:req - .byte 0x96 + .byte B_SCR_OP_ANIMATEWILDPOKEMONAFTERFAILEDPOKEBALL .byte \battler .endm .macro tryinfatuating failInstr:req - .byte 0x97 + .byte B_SCR_OP_TRYINFATUATING .4byte \failInstr .endm .macro updatestatusicon battler:req - .byte 0x98 + .byte B_SCR_OP_UPDATESTATUSICON .byte \battler .endm .macro setmist - .byte 0x99 + .byte B_SCR_OP_SETMIST .endm .macro setfocusenergy battler:req diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 234ebad0b2..78745aad8f 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -1,6 +1,266 @@ #ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H #define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H +enum BattleScriptOpcode +{ + B_SCR_OP_ATTACKCANCELER, + B_SCR_OP_ACCURACYCHECK, + B_SCR_OP_PRINTATTACKSTRING, + B_SCR_OP_UNUSED_0x3, + B_SCR_OP_CRITCALC, + B_SCR_OP_DAMAGECALC, + B_SCR_OP_TYPECALC, + B_SCR_OP_ADJUSTDAMAGE, + B_SCR_OP_MULTIHITRESULTMESSAGE, + B_SCR_OP_ATTACKANIMATION, + B_SCR_OP_WAITANIMATION, + B_SCR_OP_HEALTHBARUPDATE, + B_SCR_OP_DATAHPUPDATE, + B_SCR_OP_CRITMESSAGE, + B_SCR_OP_EFFECTIVENESSSOUND, + B_SCR_OP_RESULTMESSAGE, + B_SCR_OP_PRINTSTRING, + B_SCR_OP_PRINTSELECTIONSTRING, + B_SCR_OP_WAITMESSAGE, + B_SCR_OP_PRINTFROMTABLE, + B_SCR_OP_PRINTSELECTIONSTRINGFROMTABLE, + B_SCR_OP_SETADDITIONALEFFECTS, + B_SCR_OP_SETEFFECTPRIMARY, + B_SCR_OP_SETEFFECTSECONDARY, + B_SCR_OP_CLEARVOLATILE, + B_SCR_OP_TRYFAINTMON, + B_SCR_OP_DOFAINTANIMATION, + B_SCR_OP_CLEAREFFECTSONFAINT, + B_SCR_OP_JUMPIFSTATUS, + B_SCR_OP_JUMPIFVOLATILE, + B_SCR_OP_JUMPIFABILITY, + B_SCR_OP_JUMPIFSIDEAFFECTING, + B_SCR_OP_JUMPIFSTAT, + B_SCR_OP_JUMPIFSTATIGNORECONTRARY, + B_SCR_OP_JUMPBASEDONTYPE, + B_SCR_OP_GETEXP, + B_SCR_OP_CHECKTEAMSLOST, + B_SCR_OP_MOVEVALUESCLEANUP, + B_SCR_OP_SETMULTIHIT, + B_SCR_OP_DECREMENTMULTIHIT, + B_SCR_OP_GOTO, + B_SCR_OP_JUMPIFBYTE, + B_SCR_OP_JUMPIFHALFWORD, + B_SCR_OP_JUMPIFWORD, + B_SCR_OP_JUMPIFARRAYEQUAL, + B_SCR_OP_JUMPIFARRAYNOTEQUAL, + B_SCR_OP_SETBYTE, + B_SCR_OP_ADDBYTE, + B_SCR_OP_SUBBYTE, + B_SCR_OP_COPYARRAY, + B_SCR_OP_COPYARRAYWITHINDEX, + B_SCR_OP_ORBYTE, + B_SCR_OP_ORHALFWORD, + B_SCR_OP_ORWORD, + B_SCR_OP_BICBYTE, + B_SCR_OP_BICHALFWORD, + B_SCR_OP_BICWORD, + B_SCR_OP_PAUSE, + B_SCR_OP_WAITSTATE, + B_SCR_OP_ISDMGBLOCKEDBYDISGUISE, + B_SCR_OP_RETURN, + B_SCR_OP_END, + B_SCR_OP_END2, + B_SCR_OP_END3, + B_SCR_OP_SETCHARGINGTURN, + B_SCR_OP_CALL, + B_SCR_OP_SETROOST, + B_SCR_OP_JUMPIFABILITYPRESENT, + B_SCR_OP_ENDSELECTIONSCRIPT, + B_SCR_OP_PLAYANIMATION, + B_SCR_OP_PLAYANIMATION_VAR, + B_SCR_OP_JUMPFIFSEMIINVULNERABLE, + B_SCR_OP_UNUSED_0x48, + B_SCR_OP_MOVEEND, + B_SCR_OP_SETHEALBLOCK, + B_SCR_OP_RETURNATKTOBALL, + B_SCR_OP_GETSWITCHEDMONDATA, + B_SCR_OP_SWITCHINDATAUPDATE, + B_SCR_OP_SWITCHINANIM, + B_SCR_OP_JUMPIFCANTSWITCH, + B_SCR_OP_OPENPARTYSCREEN, + B_SCR_OP_SWITCHHANDLEORDER, + B_SCR_OP_SWITCHINEFFECTS, + B_SCR_OP_TRAINERSLIDEIN, + B_SCR_OP_PLAYSE, + B_SCR_OP_FANFARE, + B_SCR_OP_PLAYFAINTCRY, + B_SCR_OP_ENDLINKBATTLE, + B_SCR_OP_RETURNTOBALL, + B_SCR_OP_HANDLELEARNNEWMOVE, + B_SCR_OP_YESNOBOXLEARNMOVE, + B_SCR_OP_YESNOBOXSTOPLEARNINGMOVE, + B_SCR_OP_HITANIMATION, + B_SCR_OP_GETMONEYREWARD, + B_SCR_OP_UPDATEBATTLERMOVES, + B_SCR_OP_SWAPATTACKERWITHTARGET, + B_SCR_OP_INCREMENTGAMESTAT, + B_SCR_OP_DRAWPARTYSTATUSSUMMARY, + B_SCR_OP_HIDEPARTYSTATUSSUMMARY, + B_SCR_OP_JUMPTOCALLEDMOVE, + B_SCR_OP_STATUSANIMATION, + B_SCR_OP_UNUSED_0x65, + B_SCR_OP_UNUSED_0x66, + B_SCR_OP_YESNOBOX, + B_SCR_OP_CANCELALLACTIONS, + B_SCR_OP_SETGRAVITY, + B_SCR_OP_REMOVEITEM, + B_SCR_OP_ATKNAMEINBUFF1, + B_SCR_OP_DRAWLVLUPBOX, + B_SCR_OP_RESETSENTMONSVALUE, + B_SCR_OP_SETATKTOPLAYER0, + B_SCR_OP_MAKEVISIBLE, + B_SCR_OP_RECORDABILITY, + B_SCR_OP_BUFFERMOVETOLEARN, + B_SCR_OP_JUMPIFPLAYERRAN, + B_SCR_OP_HPTHRESHOLDS, + B_SCR_OP_HPTHRESHOLDS2, + B_SCR_OP_USEITEMONOPPONENT, + B_SCR_OP_UNUSED_0x78, + B_SCR_OP_SETPROTECTLIKE, + B_SCR_OP_TRYEXPLOSION, + B_SCR_OP_SETATKHPTOZERO, + B_SCR_OP_JUMPIFNEXTTARGETVALID, + B_SCR_OP_TRYHEALHALFHEALTH, + B_SCR_OP_UNUSED_0x7E, + B_SCR_OP_SETFIELDWEATHER, + B_SCR_OP_SETREFLECT, + B_SCR_OP_SETSEEDED, + B_SCR_OP_MANIPULATEDAMAGE, + B_SCR_OP_TRYSETREST, + B_SCR_OP_UNUSED_0x82, + B_SCR_OP_UNUSED_0x83, + B_SCR_OP_JUMPIFUPROARWAKES, + B_SCR_OP_STOCKPILE, + B_SCR_OP_STOCKPILETOBASEDAMAGE, + B_SCR_OP_STOCKPILETOHPHEAL, + B_SCR_OP_UNUSED_0x88, + B_SCR_OP_STATBUFFCHANGE, + B_SCR_OP_NORMALISEBUFFS, + B_SCR_OP_SETBIDE, + B_SCR_OP_TWOTURNMOVESCHARGESTRINGANDANIMATION, + B_SCR_OP_TRYNONVOLATILESTATUS, + B_SCR_OP_INITMULTIHITSTRING, + B_SCR_OP_FORCERANDOMSWITCH, + B_SCR_OP_TRYCONVERSIONTYPECHANGE, + B_SCR_OP_GIVEPAYDAYMONEY, + B_SCR_OP_SETLIGHTSCREEN, + B_SCR_OP_TRYKO, + B_SCR_OP_CHECKNONVOLATILETRIGGER, + B_SCR_OP_COPYBIDEDMG, + B_SCR_OP_ANIMATEWILDPOKEMONAFTERFAILEDPOKEBALL, + B_SCR_OP_TRYINFATUATING, + B_SCR_OP_UPDATESTATUSICON, + B_SCR_OP_SETMIST, + B_SCR_OP_SETFOCUSENERGY, + B_SCR_OP_TRANSFORMDATAEXECUTION, + B_SCR_OP_SETSUBSTITUTE, + B_SCR_OP_MIMICATTACKCOPY, + B_SCR_OP_SETCALLEDMOVE, + B_SCR_OP_UNUSED_0x9F, + B_SCR_OP_UNUSED_0xA0, + B_SCR_OP_COUNTERDAMAGECALCULATOR, + B_SCR_OP_MIRRORCOATDAMAGECALCULATOR, + B_SCR_OP_DISABLELASTUSEDATTACK, + B_SCR_OP_TRYSETENCORE, + B_SCR_OP_PAINSPLITDMGCALC, + B_SCR_OP_SETTYPETORANDOMRESISTANCE, + B_SCR_OP_SETALWAYSHITFLAG, + B_SCR_OP_COPYMOVEPERMANENTLY, + B_SCR_OP_UNUSED_0xA9, + B_SCR_OP_UNUSED_AA, + B_SCR_OP_UNUSED_0xAB, + B_SCR_OP_SETTAILWIND, + B_SCR_OP_TRYSPITEPPREDUCE, + B_SCR_OP_HEALPARTYSTATUS, + B_SCR_OP_CURSETARGET, + B_SCR_OP_TRYSETSPIKES, + B_SCR_OP_SETVOLATILE, + B_SCR_OP_TRYSETPERISHSONG, + B_SCR_OP_HANDLEROLLOUT, + B_SCR_OP_JUMPIFCONFUSEDANDSTATMAXED, + B_SCR_OP_HANDLEFURYCUTTER, + B_SCR_OP_SETEMBARGO, + B_SCR_OP_PRESENTDAMAGECALCULATION, + B_SCR_OP_SETSAFEGUARD, + B_SCR_OP_MAGNITUDEDAMAGECALCULATION, + B_SCR_OP_JUMPIFNOPURSUITSWITCHDMG, + B_SCR_OP_TRYACTIVATEITEM, + B_SCR_OP_HALVEHP, + B_SCR_OP_COPYFOESTATS, + B_SCR_OP_RAPIDSPINFREE, + B_SCR_OP_UNUSED_0xBF, + B_SCR_OP_RECOVERBASEDONSUNLIGHT, + B_SCR_OP_SETSTICKYWEB, + B_SCR_OP_SELECTFIRSTVALIDTARGET, + B_SCR_OP_SETFUTUREATTACK, + B_SCR_OP_TRYDOBEATUP, + B_SCR_OP_SETSEMIINVULNERABLEBIT, + B_SCR_OP_TRYFIRETWOTURNMOVENOWBYEFFECT, + B_SCR_OP_UNUSED_0xC7, + B_SCR_OP_UNUSED_C8, + B_SCR_OP_TRYMEMENTO, + B_SCR_OP_SETFORCEDTARGET, + B_SCR_OP_UNUSED_0xCB, + B_SCR_OP_UNUSED_0xCC, + B_SCR_OP_CURESTATUSWITHMOVE, + B_SCR_OP_SETTORMENT, + B_SCR_OP_JUMPIFNODAMAGE, + B_SCR_OP_SETTAUNT, + B_SCR_OP_TRYSETHELPINGHAND, + B_SCR_OP_TRYSWAPITEMS, + B_SCR_OP_TRYCOPYABILITY, + B_SCR_OP_TRYWISH, + B_SCR_OP_SETTOXICSPIKES, + B_SCR_OP_SETGASTROACID, + B_SCR_OP_SETYAWN, + B_SCR_OP_SETDAMAGETOHEALTHDIFFERENCE, + B_SCR_OP_SETROOM, + B_SCR_OP_TRYSWAPABILITIES, + B_SCR_OP_TRYIMPRISON, + B_SCR_OP_SETSTEALTHROCK, + B_SCR_OP_TRYSETVOLATILE, + B_SCR_OP_UNUSED_0xDE, + B_SCR_OP_TRYSETMAGICCOAT, + B_SCR_OP_TRYSETSNATCH, + B_SCR_OP_UNUSED2, + B_SCR_OP_SWITCHOUTABILITIES, + B_SCR_OP_JUMPIFHASNOHP, + B_SCR_OP_UNUSED_0xE4, + B_SCR_OP_PICKUP, + B_SCR_OP_UNUSED_0xE6, + B_SCR_OP_UNUSED_0xE7, + B_SCR_OP_SETTYPEBASEDHALVERS, + B_SCR_OP_JUMPIFSUBSTITUTEBLOCKS, + B_SCR_OP_TRYRECYCLEITEM, + B_SCR_OP_SETTYPETOENVIRONMENT, + B_SCR_OP_PURSUITDOUBLES, + B_SCR_OP_SNATCHSETBATTLERS, + B_SCR_OP_REMOVESCREENS, + B_SCR_OP_HANDLEBALLTHROW, + B_SCR_OP_GIVECAUGHTMON, + B_SCR_OP_TRYSETCAUGHTMONDEXFLAGS, + B_SCR_OP_DISPLAYDEXINFO, + B_SCR_OP_TRYGIVECAUGHTMONNICK, + B_SCR_OP_UNUSED_0xF4, + B_SCR_OP_REMOVEATTACKERSTATUS1, + B_SCR_OP_FINISHACTION, + B_SCR_OP_FINISHTURN, + B_SCR_OP_TRAINERSLIDEOUT, + B_SCR_OP_SETTELEKINESIS, + B_SCR_OP_SWAPSTATSTAGES, + B_SCR_OP_AVERAGESTATS, + B_SCR_OP_JUMPIFCAPTIVATEAFFECTED, + B_SCR_OP_SETNONVOLATILESTATUS, + B_SCR_OP_TRYOVERWRITEABILITY, + B_SCR_OP_CALLNATIVE, +}; + // The following correspond to the struct members of BattleScripting by adding their offset #define sUNUSED_0x00 (gBattleScripting + 0x00) // unused_0x00 #define sUNUSED_0x04 (gBattleScripting + 0x04) // unused_0x04 diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index edbe3f89ea..9dd71d4733 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -598,262 +598,262 @@ static void Cmd_callnative(void); void (*const gBattleScriptingCommandsTable[])(void) = { - Cmd_attackcanceler, //0x0 - Cmd_accuracycheck, //0x1 - Cmd_printattackstring, //0x2 - Cmd_unused_0x3, //0x3 - Cmd_critcalc, //0x4 - Cmd_damagecalc, //0x5 - Cmd_typecalc, //0x6 - Cmd_adjustdamage, //0x7 - Cmd_multihitresultmessage, //0x8 - Cmd_attackanimation, //0x9 - Cmd_waitanimation, //0xA - Cmd_healthbarupdate, //0xB - Cmd_datahpupdate, //0xC - Cmd_critmessage, //0xD - Cmd_effectivenesssound, //0xE - Cmd_resultmessage, //0xF - Cmd_printstring, //0x10 - Cmd_printselectionstring, //0x11 - Cmd_waitmessage, //0x12 - Cmd_printfromtable, //0x13 - Cmd_printselectionstringfromtable, //0x14 - Cmd_setadditionaleffects, //0x15 - Cmd_seteffectprimary, //0x16 - Cmd_seteffectsecondary, //0x17 - Cmd_clearvolatile, //0x18 - Cmd_tryfaintmon, //0x19 - Cmd_dofaintanimation, //0x1A - Cmd_cleareffectsonfaint, //0x1B - Cmd_jumpifstatus, //0x1C - Cmd_jumpifvolatile, //0x1D - Cmd_jumpifability, //0x1E - Cmd_jumpifsideaffecting, //0x1F - Cmd_jumpifstat, //0x20 - Cmd_jumpifstatignorecontrary, //0x21 - Cmd_jumpbasedontype, //0x22 - Cmd_getexp, //0x23 - Cmd_checkteamslost, //0x24 - Cmd_movevaluescleanup, //0x25 - Cmd_setmultihit, //0x26 - Cmd_decrementmultihit, //0x27 - Cmd_goto, //0x28 - Cmd_jumpifbyte, //0x29 - Cmd_jumpifhalfword, //0x2A - Cmd_jumpifword, //0x2B - Cmd_jumpifarrayequal, //0x2C - Cmd_jumpifarraynotequal, //0x2D - Cmd_setbyte, //0x2E - Cmd_addbyte, //0x2F - Cmd_subbyte, //0x30 - Cmd_copyarray, //0x31 - Cmd_copyarraywithindex, //0x32 - Cmd_orbyte, //0x33 - Cmd_orhalfword, //0x34 - Cmd_orword, //0x35 - Cmd_bicbyte, //0x36 - Cmd_bichalfword, //0x37 - Cmd_bicword, //0x38 - Cmd_pause, //0x39 - Cmd_waitstate, //0x3A - Cmd_isdmgblockedbydisguise, //0x3B - Cmd_return, //0x3C - Cmd_end, //0x3D - Cmd_end2, //0x3E - Cmd_end3, //0x3F - Cmd_setchargingturn, //0x40 - Cmd_call, //0x41 - Cmd_setroost, //0x42 - Cmd_jumpifabilitypresent, //0x43 - Cmd_endselectionscript, //0x44 - Cmd_playanimation, //0x45 - Cmd_playanimation_var, //0x46 - Cmd_jumpfifsemiinvulnerable, //0x47 - Cmd_unused_0x48, //0x48 - Cmd_moveend, //0x49 - Cmd_sethealblock, //0x4A - Cmd_returnatktoball, //0x4B - Cmd_getswitchedmondata, //0x4C - Cmd_switchindataupdate, //0x4D - Cmd_switchinanim, //0x4E - Cmd_jumpifcantswitch, //0x4F - Cmd_openpartyscreen, //0x50 - Cmd_switchhandleorder, //0x51 - Cmd_switchineffects, //0x52 - Cmd_trainerslidein, //0x53 - Cmd_playse, //0x54 - Cmd_fanfare, //0x55 - Cmd_playfaintcry, //0x56 - Cmd_endlinkbattle, //0x57 - Cmd_returntoball, //0x58 - Cmd_handlelearnnewmove, //0x59 - Cmd_yesnoboxlearnmove, //0x5A - Cmd_yesnoboxstoplearningmove, //0x5B - Cmd_hitanimation, //0x5C - Cmd_getmoneyreward, //0x5D - Cmd_updatebattlermoves, //0x5E - Cmd_swapattackerwithtarget, //0x5F - Cmd_incrementgamestat, //0x60 - Cmd_drawpartystatussummary, //0x61 - Cmd_hidepartystatussummary, //0x62 - Cmd_jumptocalledmove, //0x63 - Cmd_statusanimation, //0x64 - Cmd_unused_0x65, //0x65 - Cmd_unused_0x66, //0x66 - Cmd_yesnobox, //0x67 - Cmd_cancelallactions, //0x68 - Cmd_setgravity, //0x69 - Cmd_removeitem, //0x6A - Cmd_atknameinbuff1, //0x6B - Cmd_drawlvlupbox, //0x6C - Cmd_resetsentmonsvalue, //0x6D - Cmd_setatktoplayer0, //0x6E - Cmd_makevisible, //0x6F - Cmd_recordability, //0x70 - Cmd_buffermovetolearn, //0x71 - Cmd_jumpifplayerran, //0x72 - Cmd_hpthresholds, //0x73 - Cmd_hpthresholds2, //0x74 - Cmd_useitemonopponent, //0x75 - Cmd_unused_0x78, //0x76 - Cmd_setprotectlike, //0x77 - Cmd_tryexplosion, //0x78 - Cmd_setatkhptozero, //0x79 - Cmd_jumpifnexttargetvalid, //0x7A - Cmd_tryhealhalfhealth, //0x7B - Cmd_unused_0x7e, //0x7C - Cmd_setfieldweather, //0x7D - Cmd_setreflect, //0x7E - Cmd_setseeded, //0x7F - Cmd_manipulatedamage, //0x80 - Cmd_trysetrest, //0x81 - Cmd_unused_0x82, //0x82 - Cmd_unused_0x83, //0x83 - Cmd_jumpifuproarwakes, //0x84 - Cmd_stockpile, //0x85 - Cmd_stockpiletobasedamage, //0x86 - Cmd_stockpiletohpheal, //0x87 - Cmd_unused_0x88, //0x88 - Cmd_statbuffchange, //0x89 - Cmd_normalisebuffs, //0x8A - Cmd_setbide, //0x8B - Cmd_twoturnmoveschargestringandanimation, //0x8C - Cmd_trynonvolatilestatus, //0x8D - Cmd_initmultihitstring, //0x8E - Cmd_forcerandomswitch, //0x8F - Cmd_tryconversiontypechange, //0x90 - Cmd_givepaydaymoney, //0x91 - Cmd_setlightscreen, //0x92 - Cmd_tryKO, //0x93 - Cmd_checknonvolatiletrigger, //0x94 - Cmd_copybidedmg, //0x95 - Cmd_animatewildpokemonafterfailedpokeball, //0x96 - Cmd_tryinfatuating, //0x97 - Cmd_updatestatusicon, //0x98 - Cmd_setmist, //0x99 - Cmd_setfocusenergy, //0x9A - Cmd_transformdataexecution, //0x9B - Cmd_setsubstitute, //0x9C - Cmd_mimicattackcopy, //0x9D - Cmd_setcalledmove, //0x9E - Cmd_unused_0x9f, //0x9F - Cmd_unused_0xA0, //0xA0 - Cmd_counterdamagecalculator, //0xA1 - Cmd_mirrorcoatdamagecalculator, //0xA2 - Cmd_disablelastusedattack, //0xA3 - Cmd_trysetencore, //0xA4 - Cmd_painsplitdmgcalc, //0xA5 - Cmd_settypetorandomresistance, //0xA6 - Cmd_setalwayshitflag, //0xA7 - Cmd_copymovepermanently, //0xA8 - Cmd_unused_0xA9, //0xA9 - Cmd_unused_AA, //0xAA - Cmd_unused_0xab, //0xAB - Cmd_settailwind, //0xAC - Cmd_tryspiteppreduce, //0xAD - Cmd_healpartystatus, //0xAE - Cmd_cursetarget, //0xAF - Cmd_trysetspikes, //0xB0 - Cmd_setvolatile, //0xB1 - Cmd_trysetperishsong, //0xB2 - Cmd_handlerollout, //0xB3 - Cmd_jumpifconfusedandstatmaxed, //0xB4 - Cmd_handlefurycutter, //0xB5 - Cmd_setembargo, //0xB6 - Cmd_presentdamagecalculation, //0xB7 - Cmd_setsafeguard, //0xB8 - Cmd_magnitudedamagecalculation, //0xB9 - Cmd_jumpifnopursuitswitchdmg, //0xBA - Cmd_tryactivateitem, //0xBB - Cmd_halvehp, //0xBC - Cmd_copyfoestats, //0xBD - Cmd_rapidspinfree, //0xBE - Cmd_unused_0xBF, //0xBF - Cmd_recoverbasedonsunlight, //0xC0 - Cmd_setstickyweb, //0xC1 - Cmd_selectfirstvalidtarget, //0xC2 - Cmd_setfutureattack, //0xC3 - Cmd_trydobeatup, //0xC4 - Cmd_setsemiinvulnerablebit, //0xC5 - Cmd_tryfiretwoturnmovenowbyeffect, //0xC6 - Cmd_unused_0xC7, //0xC7 - Cmd_unused_c8, //0xC8 - Cmd_trymemento, //0xC9 - Cmd_setforcedtarget, //0xCA - Cmd_unused_0xcb, //0xCB - Cmd_unused_0xCC, //0xCC - Cmd_curestatuswithmove, //0xCD - Cmd_settorment, //0xCE - Cmd_jumpifnodamage, //0xCF - Cmd_settaunt, //0xD0 - Cmd_trysethelpinghand, //0xD1 - Cmd_tryswapitems, //0xD2 - Cmd_trycopyability, //0xD3 - Cmd_trywish, //0xD4 - Cmd_settoxicspikes, //0xD5 - Cmd_setgastroacid, //0xD6 - Cmd_setyawn, //0xD7 - Cmd_setdamagetohealthdifference, //0xD8 - Cmd_setroom, //0xD9 - Cmd_tryswapabilities, //0xDA - Cmd_tryimprison, //0xDB - Cmd_setstealthrock, //0xDC - Cmd_trysetvolatile, //0xDD - Cmd_unused_0xde, //0xDE - Cmd_trysetmagiccoat, //0xDF - Cmd_trysetsnatch, //0xE0 - Cmd_unused2, //0xE1 - Cmd_switchoutabilities, //0xE2 - Cmd_jumpifhasnohp, //0xE3 - Cmd_unused_0xE4, //0xE4 - Cmd_pickup, //0xE5 - Cmd_unused_0xE6, //0xE6 - Cmd_unused_0xE7, //0xE7 - Cmd_settypebasedhalvers, //0xE8 - Cmd_jumpifsubstituteblocks, //0xE9 - Cmd_tryrecycleitem, //0xEA - Cmd_settypetoenvironment, //0xEB - Cmd_pursuitdoubles, //0xEC - Cmd_snatchsetbattlers, //0xED - Cmd_removescreens, //0xEE - Cmd_handleballthrow, //0xEF - Cmd_givecaughtmon, //0xF0 - Cmd_trysetcaughtmondexflags, //0xF1 - Cmd_displaydexinfo, //0xF2 - Cmd_trygivecaughtmonnick, //0xF3 - Cmd_unused_0xf4, //0xF4 - Cmd_removeattackerstatus1, //0xF5 - Cmd_finishaction, //0xF6 - Cmd_finishturn, //0xF7 - Cmd_trainerslideout, //0xF8 - Cmd_settelekinesis, //0xF9 - Cmd_swapstatstages, //0xFA - Cmd_averagestats, //0xFB - Cmd_jumpifcaptivateaffected, //0xFC - Cmd_setnonvolatilestatus, //0xFD - Cmd_tryoverwriteability, //0xFE - Cmd_callnative, //0xFF + [B_SCR_OP_ATTACKCANCELER] = Cmd_attackcanceler, + [B_SCR_OP_ACCURACYCHECK] = Cmd_accuracycheck, + [B_SCR_OP_PRINTATTACKSTRING] = Cmd_printattackstring, + [B_SCR_OP_UNUSED_0x3] = Cmd_unused_0x3, + [B_SCR_OP_CRITCALC] = Cmd_critcalc, + [B_SCR_OP_DAMAGECALC] = Cmd_damagecalc, + [B_SCR_OP_TYPECALC] = Cmd_typecalc, + [B_SCR_OP_ADJUSTDAMAGE] = Cmd_adjustdamage, + [B_SCR_OP_MULTIHITRESULTMESSAGE] = Cmd_multihitresultmessage, + [B_SCR_OP_ATTACKANIMATION] = Cmd_attackanimation, + [B_SCR_OP_WAITANIMATION] = Cmd_waitanimation, + [B_SCR_OP_HEALTHBARUPDATE] = Cmd_healthbarupdate, + [B_SCR_OP_DATAHPUPDATE] = Cmd_datahpupdate, + [B_SCR_OP_CRITMESSAGE] = Cmd_critmessage, + [B_SCR_OP_EFFECTIVENESSSOUND] = Cmd_effectivenesssound, + [B_SCR_OP_RESULTMESSAGE] = Cmd_resultmessage, + [B_SCR_OP_PRINTSTRING] = Cmd_printstring, + [B_SCR_OP_PRINTSELECTIONSTRING] = Cmd_printselectionstring, + [B_SCR_OP_WAITMESSAGE] = Cmd_waitmessage, + [B_SCR_OP_PRINTFROMTABLE] = Cmd_printfromtable, + [B_SCR_OP_PRINTSELECTIONSTRINGFROMTABLE] = Cmd_printselectionstringfromtable, + [B_SCR_OP_SETADDITIONALEFFECTS] = Cmd_setadditionaleffects, + [B_SCR_OP_SETEFFECTPRIMARY] = Cmd_seteffectprimary, + [B_SCR_OP_SETEFFECTSECONDARY] = Cmd_seteffectsecondary, + [B_SCR_OP_CLEARVOLATILE] = Cmd_clearvolatile, + [B_SCR_OP_TRYFAINTMON] = Cmd_tryfaintmon, + [B_SCR_OP_DOFAINTANIMATION] = Cmd_dofaintanimation, + [B_SCR_OP_CLEAREFFECTSONFAINT] = Cmd_cleareffectsonfaint, + [B_SCR_OP_JUMPIFSTATUS] = Cmd_jumpifstatus, + [B_SCR_OP_JUMPIFVOLATILE] = Cmd_jumpifvolatile, + [B_SCR_OP_JUMPIFABILITY] = Cmd_jumpifability, + [B_SCR_OP_JUMPIFSIDEAFFECTING] = Cmd_jumpifsideaffecting, + [B_SCR_OP_JUMPIFSTAT] = Cmd_jumpifstat, + [B_SCR_OP_JUMPIFSTATIGNORECONTRARY] = Cmd_jumpifstatignorecontrary, + [B_SCR_OP_JUMPBASEDONTYPE] = Cmd_jumpbasedontype, + [B_SCR_OP_GETEXP] = Cmd_getexp, + [B_SCR_OP_CHECKTEAMSLOST] = Cmd_checkteamslost, + [B_SCR_OP_MOVEVALUESCLEANUP] = Cmd_movevaluescleanup, + [B_SCR_OP_SETMULTIHIT] = Cmd_setmultihit, + [B_SCR_OP_DECREMENTMULTIHIT] = Cmd_decrementmultihit, + [B_SCR_OP_GOTO] = Cmd_goto, + [B_SCR_OP_JUMPIFBYTE] = Cmd_jumpifbyte, + [B_SCR_OP_JUMPIFHALFWORD] = Cmd_jumpifhalfword, + [B_SCR_OP_JUMPIFWORD] = Cmd_jumpifword, + [B_SCR_OP_JUMPIFARRAYEQUAL] = Cmd_jumpifarrayequal, + [B_SCR_OP_JUMPIFARRAYNOTEQUAL] = Cmd_jumpifarraynotequal, + [B_SCR_OP_SETBYTE] = Cmd_setbyte, + [B_SCR_OP_ADDBYTE] = Cmd_addbyte, + [B_SCR_OP_SUBBYTE] = Cmd_subbyte, + [B_SCR_OP_COPYARRAY] = Cmd_copyarray, + [B_SCR_OP_COPYARRAYWITHINDEX] = Cmd_copyarraywithindex, + [B_SCR_OP_ORBYTE] = Cmd_orbyte, + [B_SCR_OP_ORHALFWORD] = Cmd_orhalfword, + [B_SCR_OP_ORWORD] = Cmd_orword, + [B_SCR_OP_BICBYTE] = Cmd_bicbyte, + [B_SCR_OP_BICHALFWORD] = Cmd_bichalfword, + [B_SCR_OP_BICWORD] = Cmd_bicword, + [B_SCR_OP_PAUSE] = Cmd_pause, + [B_SCR_OP_WAITSTATE] = Cmd_waitstate, + [B_SCR_OP_ISDMGBLOCKEDBYDISGUISE] = Cmd_isdmgblockedbydisguise, + [B_SCR_OP_RETURN] = Cmd_return, + [B_SCR_OP_END] = Cmd_end, + [B_SCR_OP_END2] = Cmd_end2, + [B_SCR_OP_END3] = Cmd_end3, + [B_SCR_OP_SETCHARGINGTURN] = Cmd_setchargingturn, + [B_SCR_OP_CALL] = Cmd_call, + [B_SCR_OP_SETROOST] = Cmd_setroost, + [B_SCR_OP_JUMPIFABILITYPRESENT] = Cmd_jumpifabilitypresent, + [B_SCR_OP_ENDSELECTIONSCRIPT] = Cmd_endselectionscript, + [B_SCR_OP_PLAYANIMATION] = Cmd_playanimation, + [B_SCR_OP_PLAYANIMATION_VAR] = Cmd_playanimation_var, + [B_SCR_OP_JUMPFIFSEMIINVULNERABLE] = Cmd_jumpfifsemiinvulnerable, + [B_SCR_OP_UNUSED_0x48] = Cmd_unused_0x48, + [B_SCR_OP_MOVEEND] = Cmd_moveend, + [B_SCR_OP_SETHEALBLOCK] = Cmd_sethealblock, + [B_SCR_OP_RETURNATKTOBALL] = Cmd_returnatktoball, + [B_SCR_OP_GETSWITCHEDMONDATA] = Cmd_getswitchedmondata, + [B_SCR_OP_SWITCHINDATAUPDATE] = Cmd_switchindataupdate, + [B_SCR_OP_SWITCHINANIM] = Cmd_switchinanim, + [B_SCR_OP_JUMPIFCANTSWITCH] = Cmd_jumpifcantswitch, + [B_SCR_OP_OPENPARTYSCREEN] = Cmd_openpartyscreen, + [B_SCR_OP_SWITCHHANDLEORDER] = Cmd_switchhandleorder, + [B_SCR_OP_SWITCHINEFFECTS] = Cmd_switchineffects, + [B_SCR_OP_TRAINERSLIDEIN] = Cmd_trainerslidein, + [B_SCR_OP_PLAYSE] = Cmd_playse, + [B_SCR_OP_FANFARE] = Cmd_fanfare, + [B_SCR_OP_PLAYFAINTCRY] = Cmd_playfaintcry, + [B_SCR_OP_ENDLINKBATTLE] = Cmd_endlinkbattle, + [B_SCR_OP_RETURNTOBALL] = Cmd_returntoball, + [B_SCR_OP_HANDLELEARNNEWMOVE] = Cmd_handlelearnnewmove, + [B_SCR_OP_YESNOBOXLEARNMOVE] = Cmd_yesnoboxlearnmove, + [B_SCR_OP_YESNOBOXSTOPLEARNINGMOVE] = Cmd_yesnoboxstoplearningmove, + [B_SCR_OP_HITANIMATION] = Cmd_hitanimation, + [B_SCR_OP_GETMONEYREWARD] = Cmd_getmoneyreward, + [B_SCR_OP_UPDATEBATTLERMOVES] = Cmd_updatebattlermoves, + [B_SCR_OP_SWAPATTACKERWITHTARGET] = Cmd_swapattackerwithtarget, + [B_SCR_OP_INCREMENTGAMESTAT] = Cmd_incrementgamestat, + [B_SCR_OP_DRAWPARTYSTATUSSUMMARY] = Cmd_drawpartystatussummary, + [B_SCR_OP_HIDEPARTYSTATUSSUMMARY] = Cmd_hidepartystatussummary, + [B_SCR_OP_JUMPTOCALLEDMOVE] = Cmd_jumptocalledmove, + [B_SCR_OP_STATUSANIMATION] = Cmd_statusanimation, + [B_SCR_OP_UNUSED_0x65] = Cmd_unused_0x65, + [B_SCR_OP_UNUSED_0x66] = Cmd_unused_0x66, + [B_SCR_OP_YESNOBOX] = Cmd_yesnobox, + [B_SCR_OP_CANCELALLACTIONS] = Cmd_cancelallactions, + [B_SCR_OP_SETGRAVITY] = Cmd_setgravity, + [B_SCR_OP_REMOVEITEM] = Cmd_removeitem, + [B_SCR_OP_ATKNAMEINBUFF1] = Cmd_atknameinbuff1, + [B_SCR_OP_DRAWLVLUPBOX] = Cmd_drawlvlupbox, + [B_SCR_OP_RESETSENTMONSVALUE] = Cmd_resetsentmonsvalue, + [B_SCR_OP_SETATKTOPLAYER0] = Cmd_setatktoplayer0, + [B_SCR_OP_MAKEVISIBLE] = Cmd_makevisible, + [B_SCR_OP_RECORDABILITY] = Cmd_recordability, + [B_SCR_OP_BUFFERMOVETOLEARN] = Cmd_buffermovetolearn, + [B_SCR_OP_JUMPIFPLAYERRAN] = Cmd_jumpifplayerran, + [B_SCR_OP_HPTHRESHOLDS] = Cmd_hpthresholds, + [B_SCR_OP_HPTHRESHOLDS2] = Cmd_hpthresholds2, + [B_SCR_OP_USEITEMONOPPONENT] = Cmd_useitemonopponent, + [B_SCR_OP_UNUSED_0x78] = Cmd_unused_0x78, + [B_SCR_OP_SETPROTECTLIKE] = Cmd_setprotectlike, + [B_SCR_OP_TRYEXPLOSION] = Cmd_tryexplosion, + [B_SCR_OP_SETATKHPTOZERO] = Cmd_setatkhptozero, + [B_SCR_OP_JUMPIFNEXTTARGETVALID] = Cmd_jumpifnexttargetvalid, + [B_SCR_OP_TRYHEALHALFHEALTH] = Cmd_tryhealhalfhealth, + [B_SCR_OP_UNUSED_0x7E] = Cmd_unused_0x7e, + [B_SCR_OP_SETFIELDWEATHER] = Cmd_setfieldweather, + [B_SCR_OP_SETREFLECT] = Cmd_setreflect, + [B_SCR_OP_SETSEEDED] = Cmd_setseeded, + [B_SCR_OP_MANIPULATEDAMAGE] = Cmd_manipulatedamage, + [B_SCR_OP_TRYSETREST] = Cmd_trysetrest, + [B_SCR_OP_UNUSED_0x82] = Cmd_unused_0x82, + [B_SCR_OP_UNUSED_0x83] = Cmd_unused_0x83, + [B_SCR_OP_JUMPIFUPROARWAKES] = Cmd_jumpifuproarwakes, + [B_SCR_OP_STOCKPILE] = Cmd_stockpile, + [B_SCR_OP_STOCKPILETOBASEDAMAGE] = Cmd_stockpiletobasedamage, + [B_SCR_OP_STOCKPILETOHPHEAL] = Cmd_stockpiletohpheal, + [B_SCR_OP_UNUSED_0x88] = Cmd_unused_0x88, + [B_SCR_OP_STATBUFFCHANGE] = Cmd_statbuffchange, + [B_SCR_OP_NORMALISEBUFFS] = Cmd_normalisebuffs, + [B_SCR_OP_SETBIDE] = Cmd_setbide, + [B_SCR_OP_TWOTURNMOVESCHARGESTRINGANDANIMATION] = Cmd_twoturnmoveschargestringandanimation, + [B_SCR_OP_TRYNONVOLATILESTATUS] = Cmd_trynonvolatilestatus, + [B_SCR_OP_INITMULTIHITSTRING] = Cmd_initmultihitstring, + [B_SCR_OP_FORCERANDOMSWITCH] = Cmd_forcerandomswitch, + [B_SCR_OP_TRYCONVERSIONTYPECHANGE] = Cmd_tryconversiontypechange, + [B_SCR_OP_GIVEPAYDAYMONEY] = Cmd_givepaydaymoney, + [B_SCR_OP_SETLIGHTSCREEN] = Cmd_setlightscreen, + [B_SCR_OP_TRYKO] = Cmd_tryKO, + [B_SCR_OP_CHECKNONVOLATILETRIGGER] = Cmd_checknonvolatiletrigger, + [B_SCR_OP_COPYBIDEDMG] = Cmd_copybidedmg, + [B_SCR_OP_ANIMATEWILDPOKEMONAFTERFAILEDPOKEBALL] = Cmd_animatewildpokemonafterfailedpokeball, + [B_SCR_OP_TRYINFATUATING] = Cmd_tryinfatuating, + [B_SCR_OP_UPDATESTATUSICON] = Cmd_updatestatusicon, + [B_SCR_OP_SETMIST] = Cmd_setmist, + [B_SCR_OP_SETFOCUSENERGY] = Cmd_setfocusenergy, + [B_SCR_OP_TRANSFORMDATAEXECUTION] = Cmd_transformdataexecution, + [B_SCR_OP_SETSUBSTITUTE] = Cmd_setsubstitute, + [B_SCR_OP_MIMICATTACKCOPY] = Cmd_mimicattackcopy, + [B_SCR_OP_SETCALLEDMOVE] = Cmd_setcalledmove, + [B_SCR_OP_UNUSED_0x9F] = Cmd_unused_0x9f, + [B_SCR_OP_UNUSED_0xA0] = Cmd_unused_0xA0, + [B_SCR_OP_COUNTERDAMAGECALCULATOR] = Cmd_counterdamagecalculator, + [B_SCR_OP_MIRRORCOATDAMAGECALCULATOR] = Cmd_mirrorcoatdamagecalculator, + [B_SCR_OP_DISABLELASTUSEDATTACK] = Cmd_disablelastusedattack, + [B_SCR_OP_TRYSETENCORE] = Cmd_trysetencore, + [B_SCR_OP_PAINSPLITDMGCALC] = Cmd_painsplitdmgcalc, + [B_SCR_OP_SETTYPETORANDOMRESISTANCE] = Cmd_settypetorandomresistance, + [B_SCR_OP_SETALWAYSHITFLAG] = Cmd_setalwayshitflag, + [B_SCR_OP_COPYMOVEPERMANENTLY] = Cmd_copymovepermanently, + [B_SCR_OP_UNUSED_0xA9] = Cmd_unused_0xA9, + [B_SCR_OP_UNUSED_AA] = Cmd_unused_AA, + [B_SCR_OP_UNUSED_0xAB] = Cmd_unused_0xab, + [B_SCR_OP_SETTAILWIND] = Cmd_settailwind, + [B_SCR_OP_TRYSPITEPPREDUCE] = Cmd_tryspiteppreduce, + [B_SCR_OP_HEALPARTYSTATUS] = Cmd_healpartystatus, + [B_SCR_OP_CURSETARGET] = Cmd_cursetarget, + [B_SCR_OP_TRYSETSPIKES] = Cmd_trysetspikes, + [B_SCR_OP_SETVOLATILE] = Cmd_setvolatile, + [B_SCR_OP_TRYSETPERISHSONG] = Cmd_trysetperishsong, + [B_SCR_OP_HANDLEROLLOUT] = Cmd_handlerollout, + [B_SCR_OP_JUMPIFCONFUSEDANDSTATMAXED] = Cmd_jumpifconfusedandstatmaxed, + [B_SCR_OP_HANDLEFURYCUTTER] = Cmd_handlefurycutter, + [B_SCR_OP_SETEMBARGO] = Cmd_setembargo, + [B_SCR_OP_PRESENTDAMAGECALCULATION] = Cmd_presentdamagecalculation, + [B_SCR_OP_SETSAFEGUARD] = Cmd_setsafeguard, + [B_SCR_OP_MAGNITUDEDAMAGECALCULATION] = Cmd_magnitudedamagecalculation, + [B_SCR_OP_JUMPIFNOPURSUITSWITCHDMG] = Cmd_jumpifnopursuitswitchdmg, + [B_SCR_OP_TRYACTIVATEITEM] = Cmd_tryactivateitem, + [B_SCR_OP_HALVEHP] = Cmd_halvehp, + [B_SCR_OP_COPYFOESTATS] = Cmd_copyfoestats, + [B_SCR_OP_RAPIDSPINFREE] = Cmd_rapidspinfree, + [B_SCR_OP_UNUSED_0xBF] = Cmd_unused_0xBF, + [B_SCR_OP_RECOVERBASEDONSUNLIGHT] = Cmd_recoverbasedonsunlight, + [B_SCR_OP_SETSTICKYWEB] = Cmd_setstickyweb, + [B_SCR_OP_SELECTFIRSTVALIDTARGET] = Cmd_selectfirstvalidtarget, + [B_SCR_OP_SETFUTUREATTACK] = Cmd_setfutureattack, + [B_SCR_OP_TRYDOBEATUP] = Cmd_trydobeatup, + [B_SCR_OP_SETSEMIINVULNERABLEBIT] = Cmd_setsemiinvulnerablebit, + [B_SCR_OP_TRYFIRETWOTURNMOVENOWBYEFFECT] = Cmd_tryfiretwoturnmovenowbyeffect, + [B_SCR_OP_UNUSED_0xC7] = Cmd_unused_0xC7, + [B_SCR_OP_UNUSED_C8] = Cmd_unused_c8, + [B_SCR_OP_TRYMEMENTO] = Cmd_trymemento, + [B_SCR_OP_SETFORCEDTARGET] = Cmd_setforcedtarget, + [B_SCR_OP_UNUSED_0xCB] = Cmd_unused_0xcb, + [B_SCR_OP_UNUSED_0xCC] = Cmd_unused_0xCC, + [B_SCR_OP_CURESTATUSWITHMOVE] = Cmd_curestatuswithmove, + [B_SCR_OP_SETTORMENT] = Cmd_settorment, + [B_SCR_OP_JUMPIFNODAMAGE] = Cmd_jumpifnodamage, + [B_SCR_OP_SETTAUNT] = Cmd_settaunt, + [B_SCR_OP_TRYSETHELPINGHAND] = Cmd_trysethelpinghand, + [B_SCR_OP_TRYSWAPITEMS] = Cmd_tryswapitems, + [B_SCR_OP_TRYCOPYABILITY] = Cmd_trycopyability, + [B_SCR_OP_TRYWISH] = Cmd_trywish, + [B_SCR_OP_SETTOXICSPIKES] = Cmd_settoxicspikes, + [B_SCR_OP_SETGASTROACID] = Cmd_setgastroacid, + [B_SCR_OP_SETYAWN] = Cmd_setyawn, + [B_SCR_OP_SETDAMAGETOHEALTHDIFFERENCE] = Cmd_setdamagetohealthdifference, + [B_SCR_OP_SETROOM] = Cmd_setroom, + [B_SCR_OP_TRYSWAPABILITIES] = Cmd_tryswapabilities, + [B_SCR_OP_TRYIMPRISON] = Cmd_tryimprison, + [B_SCR_OP_SETSTEALTHROCK] = Cmd_setstealthrock, + [B_SCR_OP_TRYSETVOLATILE] = Cmd_trysetvolatile, + [B_SCR_OP_UNUSED_0xDE] = Cmd_unused_0xde, + [B_SCR_OP_TRYSETMAGICCOAT] = Cmd_trysetmagiccoat, + [B_SCR_OP_TRYSETSNATCH] = Cmd_trysetsnatch, + [B_SCR_OP_UNUSED2] = Cmd_unused2, + [B_SCR_OP_SWITCHOUTABILITIES] = Cmd_switchoutabilities, + [B_SCR_OP_JUMPIFHASNOHP] = Cmd_jumpifhasnohp, + [B_SCR_OP_UNUSED_0xE4] = Cmd_unused_0xE4, + [B_SCR_OP_PICKUP] = Cmd_pickup, + [B_SCR_OP_UNUSED_0xE6] = Cmd_unused_0xE6, + [B_SCR_OP_UNUSED_0xE7] = Cmd_unused_0xE7, + [B_SCR_OP_SETTYPEBASEDHALVERS] = Cmd_settypebasedhalvers, + [B_SCR_OP_JUMPIFSUBSTITUTEBLOCKS] = Cmd_jumpifsubstituteblocks, + [B_SCR_OP_TRYRECYCLEITEM] = Cmd_tryrecycleitem, + [B_SCR_OP_SETTYPETOENVIRONMENT] = Cmd_settypetoenvironment, + [B_SCR_OP_PURSUITDOUBLES] = Cmd_pursuitdoubles, + [B_SCR_OP_SNATCHSETBATTLERS] = Cmd_snatchsetbattlers, + [B_SCR_OP_REMOVESCREENS] = Cmd_removescreens, + [B_SCR_OP_HANDLEBALLTHROW] = Cmd_handleballthrow, + [B_SCR_OP_GIVECAUGHTMON] = Cmd_givecaughtmon, + [B_SCR_OP_TRYSETCAUGHTMONDEXFLAGS] = Cmd_trysetcaughtmondexflags, + [B_SCR_OP_DISPLAYDEXINFO] = Cmd_displaydexinfo, + [B_SCR_OP_TRYGIVECAUGHTMONNICK] = Cmd_trygivecaughtmonnick, + [B_SCR_OP_UNUSED_0xF4] = Cmd_unused_0xf4, + [B_SCR_OP_REMOVEATTACKERSTATUS1] = Cmd_removeattackerstatus1, + [B_SCR_OP_FINISHACTION] = Cmd_finishaction, + [B_SCR_OP_FINISHTURN] = Cmd_finishturn, + [B_SCR_OP_TRAINERSLIDEOUT] = Cmd_trainerslideout, + [B_SCR_OP_SETTELEKINESIS] = Cmd_settelekinesis, + [B_SCR_OP_SWAPSTATSTAGES] = Cmd_swapstatstages, + [B_SCR_OP_AVERAGESTATS] = Cmd_averagestats, + [B_SCR_OP_JUMPIFCAPTIVATEAFFECTED] = Cmd_jumpifcaptivateaffected, + [B_SCR_OP_SETNONVOLATILESTATUS] = Cmd_setnonvolatilestatus, + [B_SCR_OP_TRYOVERWRITEABILITY] = Cmd_tryoverwriteability, + [B_SCR_OP_CALLNATIVE] = Cmd_callnative, }; const struct StatFractions gAccuracyStageRatios[] = From 9be5a2aa779c0402d2f33a064a61ed3a5b7eda39 Mon Sep 17 00:00:00 2001 From: Kildemal <206095739+izrofid@users.noreply.github.com> Date: Sat, 3 Jan 2026 20:31:04 +0530 Subject: [PATCH 41/54] Add inverse battle type matchup test (#8779) --- test/battle/inverse_battle.c | 124 +++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 test/battle/inverse_battle.c diff --git a/test/battle/inverse_battle.c b/test/battle/inverse_battle.c new file mode 100644 index 0000000000..afa1ff23b0 --- /dev/null +++ b/test/battle/inverse_battle.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "test/battle.h" + +static bool32 IsSpeciesMonotypeOf(u32 species, enum Type type) +{ + return GetSpeciesType(species, 0) == type && GetSpeciesType(species, 1) == type; +} + +ASSUMPTIONS +{ + // Pokemon Types + ASSUME(IsSpeciesMonotypeOf(SPECIES_EEVEE, TYPE_NORMAL)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_MACHAMP, TYPE_FIGHTING)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_TORNADUS, TYPE_FLYING)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_ARBOK, TYPE_POISON)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_DUGTRIO, TYPE_GROUND)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_SUDOWOODO,TYPE_ROCK)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_PINSIR, TYPE_BUG)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_DUSKULL, TYPE_GHOST)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_REGISTEEL,TYPE_STEEL)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_FLAREON, TYPE_FIRE)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_VAPOREON, TYPE_WATER)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_LEAFEON, TYPE_GRASS)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_JOLTEON, TYPE_ELECTRIC)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_ESPEON, TYPE_PSYCHIC)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_GLACEON, TYPE_ICE)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_DRUDDIGON,TYPE_DRAGON)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_UMBREON, TYPE_DARK)); + ASSUME(IsSpeciesMonotypeOf(SPECIES_SYLVEON, TYPE_FAIRY)); + + // Move types + ASSUME(GetMoveType(MOVE_TACKLE) == TYPE_NORMAL); + ASSUME(GetMoveType(MOVE_KARATE_CHOP) == TYPE_FIGHTING); + ASSUME(GetMoveType(MOVE_GUST) == TYPE_FLYING); + ASSUME(GetMoveType(MOVE_POISON_STING) == TYPE_POISON); + ASSUME(GetMoveType(MOVE_MUD_SLAP) == TYPE_GROUND); + ASSUME(GetMoveType(MOVE_ROCK_THROW) == TYPE_ROCK); + ASSUME(GetMoveType(MOVE_BUG_BITE) == TYPE_BUG); + ASSUME(GetMoveType(MOVE_SHADOW_BALL) == TYPE_GHOST); + ASSUME(GetMoveType(MOVE_METAL_CLAW) == TYPE_STEEL); + ASSUME(GetMoveType(MOVE_EMBER) == TYPE_FIRE); + ASSUME(GetMoveType(MOVE_WATER_GUN) == TYPE_WATER); + ASSUME(GetMoveType(MOVE_VINE_WHIP) == TYPE_GRASS); + ASSUME(GetMoveType(MOVE_THUNDER_SHOCK) == TYPE_ELECTRIC); + ASSUME(GetMoveType(MOVE_CONFUSION) == TYPE_PSYCHIC); + ASSUME(GetMoveType(MOVE_ICE_BEAM) == TYPE_ICE); + ASSUME(GetMoveType(MOVE_DRAGON_BREATH) == TYPE_DRAGON); + ASSUME(GetMoveType(MOVE_BITE) == TYPE_DARK); + ASSUME(GetMoveType(MOVE_FAIRY_WIND) == TYPE_FAIRY); +} + +SINGLE_BATTLE_TEST("Inverse battle reverses type matchups") +{ + u32 species = SPECIES_NONE, move = MOVE_NONE; + + static const u16 monotypeMons[] = { + SPECIES_EEVEE, + SPECIES_MACHAMP, + SPECIES_TORNADUS, + SPECIES_ARBOK, + SPECIES_DUGTRIO, + SPECIES_SUDOWOODO, + SPECIES_PINSIR, + SPECIES_DUSKULL, + SPECIES_REGISTEEL, + SPECIES_FLAREON, + SPECIES_VAPOREON, + SPECIES_LEAFEON, + SPECIES_JOLTEON, + SPECIES_ESPEON, + SPECIES_GLACEON, + SPECIES_DRUDDIGON, + SPECIES_UMBREON, + SPECIES_SYLVEON, + }; + + static const u16 typeMoves[] = { + MOVE_TACKLE, + MOVE_KARATE_CHOP, + MOVE_GUST, + MOVE_POISON_STING, + MOVE_MUD_SLAP, + MOVE_ROCK_THROW, + MOVE_BUG_BITE, + MOVE_SHADOW_BALL, + MOVE_METAL_CLAW, + MOVE_EMBER, + MOVE_WATER_GUN, + MOVE_VINE_WHIP, + MOVE_THUNDER_SHOCK, + MOVE_CONFUSION, + MOVE_ICE_BEAM, + MOVE_DRAGON_BREATH, + MOVE_BITE, + MOVE_FAIRY_WIND, + }; + + for (u32 i = 0; i < ARRAY_COUNT(monotypeMons); i++) + { + for (u32 j = 0; j < ARRAY_COUNT(typeMoves); j++) + { + PARAMETRIZE { species = monotypeMons[i]; move = typeMoves[j]; } + } + } + + GIVEN { + FLAG_SET(B_FLAG_INVERSE_BATTLE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species); + } + WHEN { + TURN { MOVE(player, MOVE_WORRY_SEED); } + TURN { MOVE(player, move); } + } + SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + if (gTypeEffectivenessTable[GetMoveType(move)][GetSpeciesType(species, 0)] == Q_4_12(2)) + MESSAGE("It's not very effective…"); + if (gTypeEffectivenessTable[GetMoveType(move)][GetSpeciesType(species, 0)] == Q_4_12(0.5)) + MESSAGE("It's super effective!"); + } +} + From aec673ac985e0070dfa5e1aec25891008d5795df Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 3 Jan 2026 16:04:24 +0100 Subject: [PATCH 42/54] add izrofid as a contributor for code (#8781) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 43e388d6f2..0ae622c756 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -579,6 +579,15 @@ "contributions": [ "code" ] + }, + { + "login": "izrofid", + "name": "Kildemal", + "avatar_url": "https://avatars.githubusercontent.com/u/206095739?v=4", + "profile": "https://github.com/izrofid", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index d67931ff34..cbfa5fa21d 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -93,6 +93,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Gamer2020
Gamer2020

💻 SonikkuA-DatH
SonikkuA-DatH

🎨 Jaizu
Jaizu

💻 + Kildemal
Kildemal

💻 From ee584217adfee4a3340dd24f5ba99ee22dd93f94 Mon Sep 17 00:00:00 2001 From: GGbond Date: Sun, 4 Jan 2026 00:08:06 +0800 Subject: [PATCH 43/54] Fix Cheek Pouch not activating for Bug Bite, Pluck, and Fling berry effects (#8782) --- src/battle_script_commands.c | 16 ++- test/battle/ability/cheek_pouch.c | 179 ++++++++++++++++++++++++++++-- 2 files changed, 181 insertions(+), 14 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9dd71d4733..c9b6066547 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -8773,7 +8773,7 @@ static void Cmd_setgravity(void) } } -static bool32 TryCheekPouch(u32 battler, u32 itemId) +static bool32 TryCheekPouch(u32 battler, u32 itemId, const u8 *nextInstr) { if (GetItemPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battler) == ABILITY_CHEEK_POUCH @@ -8783,7 +8783,7 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) { gBattlerAbility = battler; SetHealAmount(battler, GetNonDynamaxMaxHP(battler) / 3); - BattleScriptPush(gBattlescriptCurrInstr + 2); + BattleScriptPush(nextInstr); gBattlescriptCurrInstr = BattleScript_CheekPouchActivates; return TRUE; } @@ -8863,7 +8863,7 @@ static void Cmd_removeitem(void) MarkBattlerForControllerExec(battler); ClearBattlerItemEffectHistory(battler); - if (!TryCheekPouch(battler, itemId) && !TrySymbiosis(battler, itemId, FALSE)) + if (!TryCheekPouch(battler, itemId, cmd->nextInstr) && !TrySymbiosis(battler, itemId, FALSE)) gBattlescriptCurrInstr = cmd->nextInstr; } @@ -17894,7 +17894,15 @@ void BS_ConsumeBerry(void) if (cmd->fromBattler) gLastUsedItem = gBattleMons[battler].item; - if (GetItemPocket(gLastUsedItem) != POCKET_BERRIES || gBattleScripting.overrideBerryRequirements == 2) + if (gBattleScripting.overrideBerryRequirements == 2) + { + gBattleScripting.overrideBerryRequirements = 0; + if (!cmd->fromBattler && TryCheekPouch(battler, gLastUsedItem, cmd->nextInstr)) + return; + gBattlescriptCurrInstr = cmd->nextInstr; + return; + } + if (GetItemPocket(gLastUsedItem) != POCKET_BERRIES) { gBattleScripting.overrideBerryRequirements = 0; gBattlescriptCurrInstr = cmd->nextInstr; diff --git a/test/battle/ability/cheek_pouch.c b/test/battle/ability/cheek_pouch.c index ffd1c8416e..0e52ca3fe3 100644 --- a/test/battle/ability/cheek_pouch.c +++ b/test/battle/ability/cheek_pouch.c @@ -1,19 +1,178 @@ #include "global.h" #include "test/battle.h" -TO_DO_BATTLE_TEST("Cheek Pouch restores 33% max HP") -TO_DO_BATTLE_TEST("Cheek Pouch restores HP after the berry's effect") -TO_DO_BATTLE_TEST("Cheek Pouch activates via Bug Bite/Pluck if it would trigger an effect") -TO_DO_BATTLE_TEST("Cheek Pouch activates when receiving from Fling if it would trigger an effect") -TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using Natural Gift") -TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using Fling") -TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate when using a berry from the bag") -TO_DO_BATTLE_TEST("Cheek Pouch doesn't activate under Heal Block's effect") +SINGLE_BATTLE_TEST("Cheek Pouch restores 33% max HP") +{ + s16 berryHeal, cheekPouchHeal; + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(31); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUPER_FANG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + HP_BAR(player, captureDamage: &berryHeal); + ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + HP_BAR(player, captureDamage: &cheekPouchHeal); + } THEN { + EXPECT_LT(berryHeal, 0); + EXPECT_EQ(cheekPouchHeal, -(player->maxHP / 3)); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch restores HP after the berry's effect") +{ + u16 hpAfterBerry, hpAfterCheekPouch; + + GIVEN { + ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(31); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SUPER_FANG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent); + HP_BAR(player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + HP_BAR(player, captureHP: &hpAfterBerry); + ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + HP_BAR(player, captureHP: &hpAfterCheekPouch); + } THEN { + EXPECT_GT(hpAfterCheekPouch, hpAfterBerry); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch activates via Bug Bite/Pluck if it would trigger an effect") +{ + u16 move; + s16 berryHeal, cheekPouchHeal; + + PARAMETRIZE { move = MOVE_BUG_BITE; } + PARAMETRIZE { move = MOVE_PLUCK; } + + GIVEN { + ASSUME(MoveHasAdditionalEffect(move, MOVE_EFFECT_BUG_BITE)); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(30); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ORAN_BERRY); } + } WHEN { + TURN { MOVE(player, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent); + HP_BAR(player, captureDamage: &berryHeal); + ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + HP_BAR(player, captureDamage: &cheekPouchHeal); + } THEN { + EXPECT_LT(berryHeal, 0); + EXPECT_EQ(cheekPouchHeal, -(player->maxHP / 3)); + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch activates when receiving from Fling if it would trigger an effect") +{ + s16 berryHeal, cheekPouchHeal; + + GIVEN { + ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10); + PLAYER(SPECIES_WOBBUFFET) { Attack(1); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(30); } + } WHEN { + TURN { MOVE(player, MOVE_FLING); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, player); + HP_BAR(opponent); + HP_BAR(opponent, captureDamage: &berryHeal); + ABILITY_POPUP(opponent, ABILITY_CHEEK_POUCH); + HP_BAR(opponent, captureDamage: &cheekPouchHeal); + } THEN { + EXPECT_LT(berryHeal, 0); + EXPECT_EQ(cheekPouchHeal, -(opponent->maxHP / 3)); + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using Natural Gift") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_NATURAL_GIFT) == EFFECT_NATURAL_GIFT); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(40); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_NATURAL_GIFT); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using Fling") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_FLING) == EFFECT_FLING); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(40); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_FLING); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate when using a berry from the bag") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(20); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { USE_ITEM(player, ITEM_ORAN_BERRY, partyIndex: 0); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + } +} + +SINGLE_BATTLE_TEST("Cheek Pouch doesn't activate under Heal Block's effect") +{ + GIVEN { + ASSUME(GetMoveEffect(MOVE_HEAL_BLOCK) == EFFECT_HEAL_BLOCK); + ASSUME(GetMoveEffect(MOVE_SUPER_FANG) == EFFECT_FIXED_PERCENT_DAMAGE); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffectParam == 10); + PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); MaxHP(60); HP(31); Item(ITEM_ORAN_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_HEAL_BLOCK); } + TURN { MOVE(opponent, MOVE_SUPER_FANG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BLOCK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPER_FANG, opponent); + HP_BAR(player); + NOT ABILITY_POPUP(player, ABILITY_CHEEK_POUCH); + } THEN { + EXPECT_EQ(player->item, ITEM_ORAN_BERRY); + } +} SINGLE_BATTLE_TEST("Cheek Pouch activation doesn't mutate damage when restoring HP mid battle") { - s16 damage; - s16 healing; + s16 damage, healing; GIVEN { PLAYER(SPECIES_GREEDENT) { Ability(ABILITY_CHEEK_POUCH); Item(ITEM_CHOPLE_BERRY); HP(100); } From 7d291d9b017ed4bf11e9b460ee1fad0f07537f7f Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 3 Jan 2026 17:11:38 +0100 Subject: [PATCH 44/54] Port old list of credits to modern system (#7887) --- CREDITS.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/CREDITS.md b/CREDITS.md index cbfa5fa21d..1f0669610b 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -1,13 +1,3 @@ - - - - - - - - - - ## Credits ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): From c506d52d32c6f7779b9332599080977a1cd5c584 Mon Sep 17 00:00:00 2001 From: amiosi <44352097+amiosi@users.noreply.github.com> Date: Sat, 3 Jan 2026 11:34:30 -0500 Subject: [PATCH 45/54] Miscellaneous fixes to configs and other values (#8662) --- include/config/battle.h | 26 +++++++++++++------------- src/battle_ai_switch_items.c | 4 ++-- src/battle_end_turn.c | 10 ++++++---- src/battle_main.c | 2 +- src/battle_script_commands.c | 8 ++++++-- src/battle_util.c | 16 ++++++++++++++-- src/data/moves_info.h | 15 ++++++++------- test/battle/move_effect/dream_eater.c | 2 +- test/battle/move_effect/encore.c | 2 +- test/battle/status1/burn.c | 2 +- 10 files changed, 53 insertions(+), 34 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index dd72cdbf1b..8fdc39d029 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -36,7 +36,7 @@ #define B_SPORT_DMG_REDUCTION GEN_LATEST // In Gen5+, Water/Mud Sport reduce Fire/Electric Damage by 67% instead of 50%. #define B_EXPLOSION_DEFENSE GEN_LATEST // In Gen5+, Self-Destruct and Explosion don't halve the targets' defense. #define B_PARENTAL_BOND_DMG GEN_LATEST // In Gen7+, Parental Bond's second hit does 25% of the initial hits damage. Before, it did 50%. -#define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. Before, it was 50%. +#define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. In Gen3, it was 50%, unless the move hit the entire field, in which case there was no reduction. // Type settings #define B_GHOSTS_ESCAPE GEN_LATEST // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle. @@ -54,18 +54,18 @@ #define B_UPROAR_IGNORE_SOUNDPROOF GEN_LATEST // In Gen5+, Uproar status ignores Soundproof. #define B_DISABLE_TURNS GEN_LATEST // Disable's turns. See Cmd_disablelastusedattack. #define B_TAILWIND_TURNS GEN_LATEST // In Gen5+, Tailwind lasts 4 turns instead of 3. -#define B_SLEEP_TURNS GEN_LATEST // In Gen5+, sleep lasts for 1-3 turns instead of 2-5 turns. +#define B_SLEEP_TURNS GEN_LATEST // In Gen5+, sleep lasts for 2-4 turns instead of 2-5 turns. #define B_TAUNT_TURNS GEN_LATEST // In Gen5+, Taunt lasts 3 turns if the user acts before the target, or 4 turns if the target acted before the user. In Gen3, taunt lasts 2 turns and in Gen 4, 3-5 turns. #define B_SPORT_TURNS GEN_LATEST // In Gen6+, Water/Mud Sport last 5 turns, even if the user switches out. #define B_MEGA_EVO_TURN_ORDER GEN_LATEST // In Gen7, a Pokémon's Speed after Mega Evolution is used to determine turn order, not its Speed before. -#define B_RECALC_TURN_AFTER_ACTIONS GEN_LATEST // In Gen8, switching/using a move affects the current turn's order of actions, better known as dynamic speed. +#define B_RECALC_TURN_AFTER_ACTIONS GEN_LATEST // In Gen8+, switching/using a move affects the current turn's order of actions, better known as dynamic speed. #define B_FAINT_SWITCH_IN GEN_LATEST // In Gen4+, sending out a new Pokémon after the previous one fainted happens at the end of the turn. Before, it would happen after each action. // Move data settings #define B_UPDATED_MOVE_DATA GEN_LATEST // Updates move data in gMovesInfo, including Power, Accuracy, PP, stat changes, targets and chances of secondary effects. #define B_UPDATED_MOVE_TYPES GEN_LATEST // Updates move types. #define B_UPDATED_MOVE_FLAGS GEN_LATEST // Updates move flags. -#define B_PHYSICAL_SPECIAL_SPLIT GEN_LATEST // In Gen3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this. +#define B_PHYSICAL_SPECIAL_SPLIT GEN_LATEST // In Gens1-3, the move's type determines if it will do physical or special damage. The split icon in the summary will reflect this. #define B_RECOIL_IF_MISS_DMG GEN_LATEST // In Gen5+, Jump Kick and High Jump Kick will always do half of the user's max HP when missing. #define B_KLUTZ_FLING_INTERACTION GEN_LATEST // In Gen5+, Pokémon with the Klutz ability can't use Fling. #define B_UPDATED_CONVERSION GEN_LATEST // In Gen6+, Conversion changes the user's type to match their first move's. Before, it would choose a move at random. @@ -85,7 +85,7 @@ // Move stat change settings #define B_FELL_STINGER_STAT_RAISE GEN_LATEST // In Gen7+, it raises Atk by 3 stages instead of 2 if it causes the target to faint. #define B_KINGS_SHIELD_LOWER_ATK GEN_LATEST // In Gen8+, it lowers Atk by 1 stage instead of 2 of opponents that hit it. -#define B_SPEED_BUFFING_RAPID_SPIN GEN_LATEST // In Gen8, Rapid Spin raises the user's Speed by 1 stage. +#define B_SPEED_BUFFING_RAPID_SPIN GEN_LATEST // In Gen8+, Rapid Spin raises the user's Speed by 1 stage. #define B_CHARGE_SPDEF_RAISE GEN_LATEST // In Gen5+, Charge raises the user's Special Defense by 1 stage. #define B_MINIMIZE_EVASION GEN_LATEST // In Gen5+, Minimize raises evasion by 2 stages instead of 1. #define B_GROWTH_STAT_RAISE GEN_LATEST // In Gen5+, Growth raises Attack in addition to Special Attack by 1 stage each. Under the effects of the sun, it raises them by 2 stages each instead. @@ -118,11 +118,11 @@ #define B_WIDE_GUARD GEN_LATEST // In Gen5 only, Wide Guard has a chance to fail if used consecutively. #define B_QUICK_GUARD GEN_LATEST // In Gen5 only, Quick Guard has a chance to fail if used consecutively. #define B_IMPRISON GEN_LATEST // In Gen5+, Imprison doesn't fail if opposing pokemon don't have any moves the user knows. -#define B_ALLY_SWITCH_FAIL_CHANCE GEN_LATEST // In Gen9, using Ally Switch consecutively decreases the chance of success for each consecutive use. +#define B_ALLY_SWITCH_FAIL_CHANCE GEN_LATEST // In Gen9+, using Ally Switch consecutively decreases the chance of success for each consecutive use. #define B_SKETCH_BANS GEN_LATEST // In Gen9+, Sketch is unable to copy more moves than in previous generations. #define B_KNOCK_OFF_REMOVAL GEN_LATEST // In Gen5+, Knock Off removes the foe's item instead of rendering it unusable. #define B_HEAL_BELL_SOUNDPROOF GEN_LATEST // In Gen5, Heal Bell affects all mons with Soundproof. In Gen6-8 it affects inactive mons, but not battlers. In Gen9 it always affects the user. -#define B_CHARGE GEN_LATEST // In Gen8-, Charge status is lost regardless of the typing of the next move. +#define B_CHARGE GEN_LATEST // In Gens3-7, Charge status is lost regardless of the typing of the next move. #define B_POWDER_RAIN GEN_LATEST // In Gen7+, Powder doesn't damage the user of a Fire type move in heavy rain. #define B_AFTER_YOU_TURN_ORDER GEN_LATEST // In Gen8+, After You doesn't fail if the turn order wouldn't change after use. #define B_QUASH_TURN_ORDER GEN_LATEST // In Gen8+, Quash-affected battlers move according to speed order. Before Gen8, Quash-affected battlers move in the order they were affected by Quash. @@ -139,10 +139,10 @@ #define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger. #define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't. #define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation. -#define B_MOODY_ACC_EVASION GEN_LATEST // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore. +#define B_MOODY_ACC_EVASION GEN_LATEST // In Gen8+, Moody CANNOT raise Accuracy and Evasion anymore. #define B_FLASH_FIRE_FROZEN GEN_LATEST // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before. #define B_SYNCHRONIZE_TOXIC GEN_LATEST // In Gen5+, if a Pokémon with Synchronize is badly poisoned, the opponent will also become badly poisoned. Previously, the opponent would become regular poisoned. -#define B_UPDATED_INTIMIDATE GEN_LATEST // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled. +#define B_UPDATED_INTIMIDATE GEN_LATEST // In Gen8+, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled. #define B_OBLIVIOUS_TAUNT GEN_LATEST // In Gen6+, Pokémon with Oblivious can't be taunted. #define B_STURDY GEN_LATEST // In Gen5+, Sturdy causes the Pokémon to have 1 HP remaining if another Pokémon's attack or confusion damage would have brought it from full health to 0 HP. #define B_PLUS_MINUS_INTERACTION GEN_LATEST // In Gen5+, Plus and Minus can be activated with themselves and the opposite ability. Before, only the opposing ability could activate it. @@ -170,13 +170,13 @@ #define B_POWDER_OVERCOAT GEN_LATEST // In Gen6+, Overcoat blocks powder and spore moves from affecting the user. // Item settings -#define B_CONFUSE_BERRIES_HEAL GEN_LATEST // Before Gen7, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. +#define B_CONFUSE_BERRIES_HEAL GEN_LATEST // In Gens3-6, Figy and similar berries restore 1/8th of HP and trigger at half HP. In Gen7 they restore half HP, triggering at 25% HP. In Gen8 they heal 1/3rd of HP. #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_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 outside of facilities. #define B_RETURN_STOLEN_NPC_ITEMS GEN_LATEST // In Gen5+, Thief and Covet no longer steal items from NPCs. -#define B_STEAL_WILD_ITEMS GEN_LATEST // In Gen9, Thief and Covet steal a wild pokemon's item and send it to the bag. Before Gen9, the stolen item would be held by the Thief/Covet user. -#define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9, all non-berry items are restored after battle. +#define B_STEAL_WILD_ITEMS GEN_LATEST // In Gen9+, Thief and Covet steal a wild pokemon's item and send it to the bag. In Gens2-8, the stolen item would be held by the Thief/Covet user. +#define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9+, all non-berry items are restored after battle. #define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Latis' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead. #define B_NET_BALL_MODIFIER GEN_LATEST // In Gen7+, Net Ball's catch multiplier is x5 instead of x3. #define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by x3.5 when Surfing or Fishing. diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index fab12b2df4..80d05b12df 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1758,7 +1758,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) { if (status & STATUS1_BURN) { - if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7) + if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) statusDamage = maxHP / 16; else statusDamage = maxHP / 8; @@ -1769,7 +1769,7 @@ static u32 GetSwitchinStatusDamage(u32 battler) } else if (status & STATUS1_FROSTBITE) { - if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7) + if (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) statusDamage = maxHP / 16; else statusDamage = maxHP / 8; diff --git a/src/battle_end_turn.c b/src/battle_end_turn.c index ef5539ebbf..2e6c7159ee 100644 --- a/src/battle_end_turn.c +++ b/src/battle_end_turn.c @@ -531,7 +531,7 @@ static bool32 HandleEndTurnBurn(u32 battler) && IsBattlerAlive(battler) && !IsAbilityAndRecord(battler, ability, ABILITY_MAGIC_GUARD)) { - s32 burnDamage = GetNonDynamaxMaxHP(battler) / (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 ? 16 : 8); + s32 burnDamage = GetNonDynamaxMaxHP(battler) / ((GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) ? 16 : 8); if (ability == ABILITY_HEATPROOF) { if (burnDamage > (burnDamage / 2) + 1) // Record ability if the burn takes less damage than it normally would. @@ -556,7 +556,7 @@ static bool32 HandleEndTurnFrostbite(u32 battler) && IsBattlerAlive(battler) && !IsAbilityAndRecord(battler, GetBattlerAbility(battler), ABILITY_MAGIC_GUARD)) { - SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / (GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 ? 16 : 8)); + SetPassiveDamageAmount(battler, GetNonDynamaxMaxHP(battler) / ((GetConfig(CONFIG_BURN_DAMAGE) >= GEN_7 || GetConfig(CONFIG_BURN_DAMAGE) == GEN_1) ? 16 : 8)); BattleScriptExecute(BattleScript_FrostbiteTurnDmg); effect = TRUE; } @@ -908,9 +908,11 @@ static bool32 HandleEndTurnYawn(u32 battler) else { if (B_SLEEP_TURNS >= GEN_5) - gBattleMons[battler].status1 |= ((Random() % 3) + 2); + gBattleMons[battler].status1 |= (RandomUniform(RNG_SLEEP_TURNS, 2, 4)); + else if (B_SLEEP_TURNS >= GEN_3) + gBattleMons[battler].status1 |= (RandomUniform(RNG_SLEEP_TURNS, 2, 5)); else - gBattleMons[battler].status1 |= ((Random() % 4) + 3); + gBattleMons[battler].status1 |= (RandomUniform(RNG_SLEEP_TURNS, 2, 8)); CancelMultiTurnMoves(battler, SKY_DROP_STATUS_YAWN); TryActivateSleepClause(battler, gBattlerPartyIndexes[battler]); diff --git a/src/battle_main.c b/src/battle_main.c index a51caa2d5f..b10e506499 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -361,7 +361,7 @@ const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = [TRAINER_CLASS_YOUNG_COUPLE] = { _("YOUNG COUPLE"), 8 }, [TRAINER_CLASS_OLD_COUPLE] = { _("OLD COUPLE"), 10 }, [TRAINER_CLASS_SIS_AND_BRO] = { _("SIS AND BRO"), 3 }, - [TRAINER_CLASS_SALON_MAIDEN] = { _("SALON MAIDEN"), 0, BALL_ULTRA }, + [TRAINER_CLASS_SALON_MAIDEN] = { _("SALON MAIDEN"), 5, BALL_ULTRA }, [TRAINER_CLASS_DOME_ACE] = { _("DOME ACE") }, [TRAINER_CLASS_PALACE_MAVEN] = { _("PALACE MAVEN") }, [TRAINER_CLASS_ARENA_TYCOON] = { _("ARENA TYCOON") }, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index c9b6066547..6813de0268 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2952,9 +2952,11 @@ static void SetNonVolatileStatus(u32 effectBattler, enum MoveEffect effect, cons { case MOVE_EFFECT_SLEEP: if (B_SLEEP_TURNS >= GEN_5) - gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 1, 3)); + gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(RandomUniform(RNG_SLEEP_TURNS, 2, 4)); + else if (B_SLEEP_TURNS >= GEN_3) + gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(RandomUniform(RNG_SLEEP_TURNS, 2, 5)); else - gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(1 + RandomUniform(RNG_SLEEP_TURNS, 2, 5)); + gBattleMons[effectBattler].status1 |= STATUS1_SLEEP_TURN(RandomUniform(RNG_SLEEP_TURNS, 2, 8)); TryActivateSleepClause(effectBattler, gBattlerPartyIndexes[effectBattler]); gBattlescriptCurrInstr = BattleScript_MoveEffectSleep; break; @@ -13578,6 +13580,8 @@ static void Cmd_handleballthrow(void) case BALL_SAFARI: if (B_SAFARI_BALL_MODIFIER <= GEN_7) ballMultiplier = 150; + else if (B_SAFARI_BALL_MODIFIER == GEN_1) + ballMultiplier = 200; break; case BALL_NET: if (IS_BATTLER_ANY_TYPE(gBattlerTarget, TYPE_WATER, TYPE_BUG)) diff --git a/src/battle_util.c b/src/battle_util.c index 7209ae17c8..79b786b944 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8523,8 +8523,20 @@ s32 DoFixedDamageMoveCalc(struct DamageContext *ctx) dmg = gBattleMons[ctx->battlerAtk].level; break; case EFFECT_PSYWAVE: - randDamage = B_PSYWAVE_DMG >= GEN_5 ? (Random() % 101) : ((Random() % 11) * 10); - dmg = gBattleMons[ctx->battlerAtk].level * (randDamage + 50) / 100; + if (B_PSYWAVE_DMG >= GEN_5) + { + randDamage = Random() % 101; + dmg = gBattleMons[ctx->battlerAtk].level * (randDamage + 50) / 100; + } + else if (B_PSYWAVE_DMG >= GEN_3) + { + randDamage = Random() % 11; + dmg = gBattleMons[ctx->battlerAtk].level * ((randDamage * 10) + 50) / 100; + } + else + { + dmg = Random() % ((gBattleMons[ctx->battlerAtk].level + (gBattleMons[ctx->battlerAtk].level / 2)) + 1); + } break; case EFFECT_FIXED_HP_DAMAGE: dmg = GetMoveFixedHPDamage(ctx->move); diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 375441b2fa..3f9e0abedf 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -3226,7 +3226,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .copycatBanned = TRUE, .sleepTalkBanned = B_UPDATED_MOVE_FLAGS >= GEN_3, .instructBanned = TRUE, - .encoreBanned = TRUE, + .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3), .assistBanned = TRUE, .contestEffect = C_UPDATED_MOVE_EFFECTS >= GEN_6 ? CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING : CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, @@ -5802,7 +5802,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .sleepTalkBanned = TRUE, .instructBanned = TRUE, .mimicBanned = TRUE, - .encoreBanned = TRUE, + .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3), .assistBanned = TRUE, .contestEffect = C_UPDATED_MOVE_EFFECTS >= GEN_6 ? CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING : CONTEST_EFFECT_REPETITION_NOT_BORING, .contestCategory = CONTEST_CATEGORY_CUTE, @@ -7208,7 +7208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, - .encoreBanned = TRUE, + .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3), .assistBanned = B_UPDATED_MOVE_FLAGS >= GEN_6, .mimicBanned = TRUE, .contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED, @@ -7394,7 +7394,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .ignoresProtect = TRUE, - .mirrorMoveBanned = TRUE, + .mirrorMoveBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3), .metronomeBanned = B_UPDATED_MOVE_FLAGS >= GEN_4, .copycatBanned = TRUE, .sleepTalkBanned = TRUE, @@ -8959,7 +8959,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .zMove = { .effect = Z_EFFECT_DEF_UP_1 }, - .ignoresProtect = B_UPDATED_MOVE_FLAGS >= GEN_6, + .ignoresProtect = (B_UPDATED_MOVE_FLAGS >= GEN_6 || B_UPDATED_MOVE_FLAGS < GEN_3), .magicCoatAffected = TRUE, .contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS, .contestCategory = CONTEST_CATEGORY_CUTE, @@ -10127,7 +10127,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, - .encoreBanned = TRUE, + .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3), .assistBanned = TRUE, .mimicBanned = TRUE, .contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER, @@ -10158,7 +10158,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .copycatBanned = TRUE, .sleepTalkBanned = TRUE, .instructBanned = TRUE, - .encoreBanned = TRUE, + .encoreBanned = (B_UPDATED_MOVE_FLAGS >= GEN_7 || B_UPDATED_MOVE_FLAGS < GEN_3), .assistBanned = TRUE, .mimicBanned = TRUE, .contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE, @@ -11756,6 +11756,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = .sleepTalkBanned = TRUE, .instructBanned = TRUE, .assistBanned = TRUE, + .sketchBanned = TRUE, .additionalEffects = ADDITIONAL_EFFECTS({ .moveEffect = MOVE_EFFECT_CONFUSION, #if B_UPDATED_MOVE_DATA >= GEN_6 diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index 0460f594ef..d65064c923 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Dream Eater works if the target is behind a Substitute (Gen { s16 damage; s16 healed; - KNOWN_FAILING; + KNOWN_FAILING; // Dream Eater can hit and drain from a Substitute, but not bypass it. GIVEN { ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); ASSUME(GetMoveEffect(MOVE_SUBSTITUTE) == EFFECT_SUBSTITUTE); diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index 6e169c6b43..e98f00df3e 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -126,6 +126,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after TO_DO_BATTLE_TEST("Encore's effect ends if the encored move runs out of PP"); TO_DO_BATTLE_TEST("Encore lasts for 2-6 turns (Gen 2-3)"); -TO_DO_BATTLE_TEST("Encore lasts for 4-8 turns (Gen 4)"); +TO_DO_BATTLE_TEST("Encore lasts for 3-7 turns (Gen 4)"); TO_DO_BATTLE_TEST("Encore lasts for 3 turns (Gen 5+)"); TO_DO_BATTLE_TEST("Encore randomly chooses an opponent target"); diff --git a/test/battle/status1/burn.c b/test/battle/status1/burn.c index 33eae7bd85..d283307590 100644 --- a/test/battle/status1/burn.c +++ b/test/battle/status1/burn.c @@ -7,7 +7,7 @@ ASSUMPTIONS ASSUME(GetMoveNonVolatileStatus(MOVE_WILL_O_WISP) == MOVE_EFFECT_BURN); } -SINGLE_BATTLE_TEST("Burn deals 1/8th damage (Gen1-6) or 1/16th (Gen7+) per turn") +SINGLE_BATTLE_TEST("Burn deals 1/8th damage (Gen2-6) or 1/16th (Gen1 and Gen7+) per turn") { u32 j, config, value; PARAMETRIZE { config = GEN_7; value = 16; } From 6f36f5569633effdb3a7e143ed3b9b8b46b8d28f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sat, 3 Jan 2026 18:18:13 +0100 Subject: [PATCH 46/54] add Skeli789 as a contributor for design (#8785) Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ CREDITS.md | 1 + 2 files changed, 10 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0ae622c756..e2bb282730 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -588,6 +588,15 @@ "contributions": [ "code" ] + }, + { + "login": "Skeli789", + "name": "Skeli", + "avatar_url": "https://avatars.githubusercontent.com/u/17243618?v=4", + "profile": "https://github.com/Skeli789", + "contributions": [ + "design" + ] } ], "contributorsPerLine": 7, diff --git a/CREDITS.md b/CREDITS.md index 1f0669610b..38d03ba139 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -84,6 +84,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d SonikkuA-DatH
SonikkuA-DatH

🎨 Jaizu
Jaizu

💻 Kildemal
Kildemal

💻 + Skeli
Skeli

🎨 From eba17e6860b0c4513e4e76251b44f19b21658bbe Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sat, 3 Jan 2026 18:21:13 +0100 Subject: [PATCH 47/54] Remove credits from code (#8748) --- data/battle_anim_scripts.s | 63 --------------------------------- src/battle_anim_new.c | 1 - src/debug.c | 9 ----- src/decompress_asm.s | 3 -- src/pokemon_sprite_visualizer.c | 1 - 5 files changed, 77 deletions(-) diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 5623654048..7344b2d3e6 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -341,7 +341,6 @@ gBattleAnimMove_MetalBurst:: waitforvisualfinish end -@Credits: Skeli gBattleAnimMove_UTurn:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_RAZOR_LEAF @@ -1979,7 +1978,6 @@ SnowSlide1: delay 2 return -@Credits to Skeli gBattleAnimMove_IceShard:: monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -2419,7 +2417,6 @@ InitRoomAnimation: createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, ANIM_TARGET, 1 return -@ Credits to Skeli gBattleAnimMove_DracoMeteor:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour @@ -5606,7 +5603,6 @@ GrassPledgeMiddleFountain: delay 4 return -@Credits to Skeli gBattleAnimMove_VoltSwitch:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_IONS @@ -14105,7 +14101,6 @@ SmallAppleShower: delay 2 return -@ credits to Skeli gBattleAnimMove_SpiritBreak:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_TEAL_ALERT @@ -14212,7 +14207,6 @@ gBattleAnimMove_Obstruct:: clearmonbg ANIM_ATK_PARTNER end -@Credits to Skeli gBattleAnimMove_FalseSurrender:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_CROSS_IMPACT @@ -14435,7 +14429,6 @@ SetSteelBeamBgPlayer: fadetobg BG_STEEL_BEAM_PLAYER goto SetHighSpeedBgFade -@Credits to Skeli gBattleAnimMove_ExpandingForce:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_EXPLOSION_2 @@ -14546,7 +14539,6 @@ MaxKnuckleExplosionGeyser: return -@Credits to Skeli gBattleAnimMove_SteelRoller:: loadspritegfx ANIM_TAG_STEAMROLLER loadspritegfx ANIM_TAG_IMPACT @@ -14569,7 +14561,6 @@ SteelRollerRocks: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xc, 0x19, 0x4, 0x4 return -@Credits to Skeli gBattleAnimMove_ScaleShot:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_IMPACT @@ -14586,7 +14577,6 @@ gBattleAnimMove_ScaleShot:: waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_MeteorBeam:: loadspritegfx ANIM_TAG_ROCKS fadetobg BG_COSMIC @@ -14692,7 +14682,6 @@ gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_MistyExplosion:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(27, 18, 30), 8, RGB_BLACK, 8 @@ -14709,7 +14698,6 @@ gBattleAnimMove_MistyExplosion:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 16, 0, RGB(31, 27, 31) @;White Pink end -@Credits to Skeli gBattleAnimMove_GrassyGlide:: loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_IMPACT @hits @@ -14725,7 +14713,6 @@ gBattleAnimMove_GrassyGlide:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x0, 0x2 end -@Credits to Skeli gBattleAnimMove_RisingVoltage:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -14929,7 +14916,6 @@ gBattleAnimMove_SkitterSmack:: waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_BurningJealousy:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -14982,7 +14968,6 @@ BurningJealousyFlames: return -@Credits to Skeli gBattleAnimMove_LashOut:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color @@ -15063,7 +15048,6 @@ gBattleAnimMove_Poltergeist:: unloadspritegfx ANIM_TAG_ITEM_BAG end -@Credits to Skeli gBattleAnimMove_CorrosiveGas:: loadspritegfx ANIM_TAG_PINK_CLOUD @Fumes createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PINK_CLOUD, 0, 14, 14, RGB(15, 15, 6) @;Garbage green @@ -15089,7 +15073,6 @@ gBattleAnimMove_CorrosiveGas:: clearmonbg ANIM_ATTACKER end -@Credits to Skeli gBattleAnimMove_Coaching:: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 1 @@ -15100,7 +15083,6 @@ gBattleAnimMove_Coaching:: waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_FlipTurn:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @;Bubbles loadspritegfx ANIM_TAG_HYDRO_PUMP @@ -15124,7 +15106,6 @@ gBattleAnimMove_FlipTurn:: end -@Credits to Skeli gBattleAnimMove_TripleAxel:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -15169,7 +15150,6 @@ TripleAxelEnd: blendoff end -@Credits to Skeli gBattleAnimMove_DualWingbeat:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_FEATHER @@ -15226,7 +15206,6 @@ DualWingbeatFeatherScatterRight: createsprite gDualWingbeatFeatherSpriteTemplate, ANIM_TARGET, 1, 0, 0xfff8, 0xfe80, 0xffe1 return -@ credits to Skeli gBattleAnimMove_ScorchingSands:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_SMALL_EMBER @@ -15251,7 +15230,6 @@ gBattleAnimMove_ScorchingSands:: blendoff end -@ credits to skeli gBattleAnimMove_JungleHealing:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS @@ -15289,7 +15267,6 @@ gBattleAnimMove_JungleHealing:: waitbgfadein end -@ credits to ghoulslash gBattleAnimMove_SilkTrap:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_SPIDER_WEB @@ -15305,7 +15282,6 @@ gBattleAnimMove_SilkTrap:: clearmonbg ANIM_ATK_PARTNER end -@ Also used by Snow weather. Credits to Dat.H A gBattleAnimMove_Snowscape:: loadspritegfx ANIM_TAG_SNOWFLAKES playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER @@ -15322,7 +15298,6 @@ gBattleAnimMove_Snowscape:: waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_WickedBlow:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -15385,7 +15360,6 @@ WickedBlowBuffEffect: -@Credits to Skeli gBattleAnimMove_SurgingStrikes:: loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_WATER_IMPACT @@ -15432,7 +15406,6 @@ SURGING_STRIKES_2: end -@Credits to Skeli gBattleAnimMove_ThunderCage:: loadspritegfx ANIM_TAG_SHOCK_3 @Thunderbolt Ball loadspritegfx ANIM_TAG_SPARK @Electric lines @@ -15471,7 +15444,6 @@ ThunderCageBolts: return -@Credits to Skeli gBattleAnimMove_DragonEnergy:: loadspritegfx ANIM_TAG_HYDRO_PUMP createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_HYDRO_PUMP, 0, 12, 12, RGB(30, 2, 11) @;Regidrago Reddish Reddish, Purple @@ -15530,7 +15502,6 @@ DragonEnergyShot: return -@Credits to Skeli gBattleAnimMove_FreezingGlare:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE @@ -15549,7 +15520,6 @@ gBattleAnimMove_FreezingGlare:: end -@Credits to Skeli gBattleAnimMove_FieryWrath:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_PURPLE_RING @@ -15629,7 +15599,6 @@ FieryWrathGeyser: return -@Credits to Skeli gBattleAnimMove_ThunderousKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -15666,7 +15635,6 @@ gBattleAnimMove_ThunderousKick:: end -@Credits to Skeli gBattleAnimMove_GlacialLance:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_ICE_CUBE @@ -15821,7 +15789,6 @@ AstralBarrageFlames5: return -@Credits to Skeli gBattleAnimMove_EerieSpell:: loadspritegfx ANIM_TAG_PURPLE_FLAME call SetPsychicBackground @@ -15864,7 +15831,6 @@ EerieSpellConvergingFlames: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@@@@@@@@@@@@ -@ credits to Skeli gBattleAnimMove_DireClaw:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -15885,7 +15851,6 @@ gBattleAnimMove_DireClaw:: end -@ credits to Skeli gBattleAnimMove_PsyshieldBash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WATER_GUN @Blue colour @@ -15914,7 +15879,6 @@ gBattleAnimMove_PsyshieldBash:: blendoff end -@ credits to skeli gBattleAnimMove_PowerShift:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB loadspritegfx ANIM_TAG_RED_HEART @Red colour for orb @@ -15930,7 +15894,6 @@ gBattleAnimMove_PowerShift:: end -@ credits to skeli gBattleAnimMove_StoneAxe:: loadspritegfx ANIM_TAG_SLAM_HIT_2 @Cut loadspritegfx ANIM_TAG_ROCKS @@ -15960,7 +15923,6 @@ StoneAxeRockFragments: return -@Credits to Skeli gBattleAnimMove_SpringtideStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_RED_HEART @@ -15999,7 +15961,6 @@ SpringtideStormHeartSwirl: return -@Credits to Skeli gBattleAnimMove_MysticalPower:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour @@ -16054,7 +16015,6 @@ MysticalPowerFoeTwoRingsOnly: return -@Credits to Skeli gBattleAnimMove_RagingFury:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 0x8, 0x3 @@ -16071,7 +16031,6 @@ gBattleAnimMove_RagingFury:: waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_WaveCrash:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES @@ -16092,7 +16051,6 @@ gBattleAnimMove_WaveCrash:: end -@Credits to Skeli gBattleAnimMove_Chloroblast:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_HYDRO_PUMP @@ -16153,7 +16111,6 @@ ChloroblastShot: delay 2 return -@Credits to Skeli gBattleAnimMove_MountainGale:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @White Rock Colour @@ -16186,7 +16143,6 @@ MountainGaleIceRock: -@Credits to Skeli gBattleAnimMove_VictoryDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 40, 6, 3, 3 @@ -16206,7 +16162,6 @@ gBattleAnimMove_VictoryDance:: waitforvisualfinish end -@Credits to Skeli gBattleAnimMove_HeadlongRush:: loadspritegfx ANIM_TAG_MUD_SAND @Dig loadspritegfx ANIM_TAG_IMPACT @@ -16293,7 +16248,6 @@ MaxQuake_DirtGeyser: return -@Credits to Skeli gBattleAnimMove_BarbBarrage:: loadspritegfx ANIM_TAG_SPIKES loadspritegfx ANIM_TAG_SHADOW_BALL @Spikes colour @@ -16326,7 +16280,6 @@ BarbBarrageSpikeShoot: -@Credits to Skeli gBattleAnimMove_EsperWing:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade loadspritegfx ANIM_TAG_WHITE_FEATHER @@ -16363,7 +16316,6 @@ WingAttackFeatherScatter: return -@Credits to Skeli gBattleAnimMove_BitterMalice:: loadspritegfx ANIM_TAG_PURPLE_RING loadspritegfx ANIM_TAG_EYE_SPARKLE @@ -16397,7 +16349,6 @@ BitterMaliceSwirl: delay 2 return -@ credits to Skeli gBattleAnimMove_Shelter:: loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_SHELL_RIGHT @@ -16413,7 +16364,6 @@ gBattleAnimMove_Shelter:: end -@Credits to Skeli gBattleAnimMove_TripleArrows:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -16447,7 +16397,6 @@ TripleArrowsOnOpponent: -@Credits to Skeli gBattleAnimMove_InfernalParade:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_WISP_FIRE @@ -16493,7 +16442,6 @@ InfernalFlames: -@Credits to Skeli gBattleAnimMove_CeaselessEdge:: loadspritegfx ANIM_TAG_SLASH playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -16531,7 +16479,6 @@ CeaselessEdgeSlashes: return -@Credits to Skeli gBattleAnimMove_BleakwindStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -16571,7 +16518,6 @@ BleakwindStormIceSwirl: return -@Credits to Skeli gBattleAnimMove_WildboltStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SPARK_2 @@ -16617,7 +16563,6 @@ WildboltStormSparkSwirl: return -@Credits to Skeli gBattleAnimMove_SandsearStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SMALL_EMBER @@ -16659,7 +16604,6 @@ SandsearStormFireSpin: return -@Credits to Skeli gBattleAnimMove_LunarBlessing:: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_MOON @@ -16693,7 +16637,6 @@ gBattleAnimMove_LunarBlessing:: end -@Credits to Skeli gBattleAnimMove_TakeHeart:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_SPARKLE_2 @@ -16796,7 +16739,6 @@ gBattleAnimMove_SyrupBomb:: jumpargeq 0x0, FALSE, gBattleAnimMove_SyrupBombRed jumpargeq 0x0, TRUE, gBattleAnimMove_SyrupBombYellow -@ Credits to Dat.H A gBattleAnimMove_SyrupBombRed:: loadspritegfx ANIM_TAG_SYRUP_BLOB_RED loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED @@ -17015,7 +16957,6 @@ gBattleAnimMove_AlluringVoice:: waitforvisualfinish end -@ Credits to Z-nogyroP gBattleAnimMove_AquaCutter:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_SMALL_BUBBLES @@ -17054,7 +16995,6 @@ gBattleAnimMove_AquaCutter:: waitforvisualfinish end -@ Credits to Z-nogyroP gBattleAnimMove_GigatonHammer:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER @@ -17083,7 +17023,6 @@ GigatonHammerImpact: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 0xc, 0x1e, 0x4, 0x3 return -@ Credits to Z-nogyroP gBattleAnimMove_IceSpinner:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN @@ -17126,7 +17065,6 @@ IceCrystalSpinEffect: delay 2 return -@ Credits to Z-nogyroP gBattleAnimMove_RagingBull:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER @@ -17213,7 +17151,6 @@ RagingBullShatteredWall: clearmonbg ANIM_TARGET end -@ Credits to Z-nogyroP. Simple anim that combines Force Palm + Fake Out gBattleAnimMove_UpperHand:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index fff35b4073..cc8338b687 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -9629,7 +9629,6 @@ void AnimTask_RandomBool(u8 taskId) DestroyAnimVisualTask(taskId); } -// Credit to Skeli #define PRIMAL_PULSE_SCALE_SIZE 16 #define PRIMAL_PULSE_FRAME_COUNT 4 static const union AffineAnimCmd sSpriteAffineAnim_PrimalSymbol[] = diff --git a/src/debug.c b/src/debug.c index 718ec46c5e..fdeaa8813e 100644 --- a/src/debug.c +++ b/src/debug.c @@ -1,12 +1,3 @@ -//CREDITS -//TheXaman: https://github.com/TheXaman/pokeemerald/tree/tx_debug_system -//CODE USED FROM: -//ketsuban: https://github.com/pret/pokeemerald/wiki/Add-a-debug-menu -//Pyredrid: https://github.com/Pyredrid/pokeemerald/tree/debugmenu -//AsparagusEduardo: https://github.com/AsparagusEduardo/pokeemerald/tree/InfusedEmerald_v2 -//Ghoulslash: https://github.com/ghoulslash/pokeemerald -//Jaizu: https://jaizu.moe/ -//AND OTHER RHH POKEEMERALD-EXPANSION CONTRIBUTORS #include "global.h" #include "battle.h" #include "battle_setup.h" diff --git a/src/decompress_asm.s b/src/decompress_asm.s index 4ab6060a0c..758a5fa7a0 100644 --- a/src/decompress_asm.s +++ b/src/decompress_asm.s @@ -19,9 +19,6 @@ FastUnsafeCopy32: pop {r4-r10} bx lr - -@ Credit to: luckytyphlosion as it's his implementation - .section .text @Copied to stack on run-time .align 2 diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index cc51b2dfc7..44515a54e3 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -1,4 +1,3 @@ -//Credits: Gamer2020, AsparagusEduardo, TheXaman, ShinyDragonHunter #include "global.h" #include "battle.h" #include "battle_anim.h" From a15d51083ae8ee61c38dd982b6871ba91d3cfb1d Mon Sep 17 00:00:00 2001 From: John Cooper McDonald Date: Sat, 3 Jan 2026 11:21:36 -0600 Subject: [PATCH 48/54] Various sprite visualizer fixes if configs disabled (#8697) Co-authored-by: Bassoonian --- src/pokemon_sprite_visualizer.c | 154 +++++++++++++++----------------- 1 file changed, 73 insertions(+), 81 deletions(-) diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index 44515a54e3..d4a17d7a69 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -471,7 +471,7 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) { AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textL, 30, 0, 0, NULL); AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textR, 30, 12, 0, NULL); - if (GetSpeciesFormTable(data->currentmonId) != NULL) + if (GetSpeciesFormTable(species) != NULL) AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomForms, 0, 0, 0, NULL); else AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottom, 0, 0, 0, NULL); @@ -722,7 +722,7 @@ static void BattleLoadOpponentMonSpriteGfxCustom(u16 species, bool8 isFemale, bo static void SetConstSpriteValues(struct PokemonSpriteVisualizer *data) { - u16 species = data->currentmonId; + u16 species = SanitizeSpeciesId(data->currentmonId); data->constSpriteValues.frontPicCoords = gSpeciesInfo[species].frontPicYOffset; data->constSpriteValues.frontElevation = gSpeciesInfo[species].enemyMonElevation; data->constSpriteValues.backPicCoords = gSpeciesInfo[species].backPicYOffset; @@ -735,11 +735,11 @@ static void ResetOffsetSpriteValues(struct PokemonSpriteVisualizer *data) data->offsetsSpriteValues.offset_front_elevation = 0; } -static void ResetShadowSettings(struct PokemonSpriteVisualizer *data, u16 species) +static void ResetShadowSettings(struct PokemonSpriteVisualizer *data) { if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 || P_GBA_STYLE_SPECIES_GFX == TRUE) return; - + u16 species = SanitizeSpeciesId(data->currentmonId); data->shadowSettings.definedX = gSpeciesInfo[species].enemyShadowXOffset; data->shadowSettings.definedY = gSpeciesInfo[species].enemyShadowYOffset; data->shadowSettings.definedSize = gSpeciesInfo[species].enemyShadowSize; @@ -836,10 +836,10 @@ static void SpriteCB_Follower(struct Sprite *sprite) } } -static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species) +static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data) { bool8 invisible = FALSE; - species = SanitizeSpeciesId(species); + u16 species = SanitizeSpeciesId(data->currentmonId); if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) { @@ -1038,6 +1038,32 @@ static void UpdateBattleBg(u8 taskId, bool8 increment) LoadBattleBg(data->battleBgType, data->battleEnvironment); } +static void DrawFollowerSprite(struct PokemonSpriteVisualizer *data) +{ + if (!OW_POKEMON_OBJECT_EVENTS) + return; + + u16 species = SanitizeSpeciesId(data->currentmonId); + u16 graphicsId = species + OBJ_EVENT_MON; + if (data->isShiny) + graphicsId += OBJ_EVENT_MON_SHINY; + if (data->isFemale) + graphicsId += OBJ_EVENT_MON_FEMALE; + data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, + SpriteCB_Follower, + VISUALIZER_FOLLOWER_X, + VISUALIZER_FOLLOWER_Y, + 0); + gSprites[data->followerspriteId].oam.priority = 0; + + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale); + gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape; + gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size; + gSprites[data->followerspriteId].images = graphicsInfo->images; + gSprites[data->followerspriteId].anims = graphicsInfo->anims; + gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables; +} + // ******************************* // Main functions static void UpdateMonAnimNames(u8 taskId) @@ -1245,7 +1271,7 @@ void CB2_Pokemon_Sprite_Visualizer(void) SetStructPtr(taskId, data); data->currentmonId = SPECIES_BULBASAUR; - species = data->currentmonId; + species = SanitizeSpeciesId(data->currentmonId); //Print instructions PrintInstructionsOnWindow(data); @@ -1255,8 +1281,6 @@ void CB2_Pokemon_Sprite_Visualizer(void) LoadSpritePaletteWithTag(palette, species); //Front HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->spritesGfx[1], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); - data->isShiny = FALSE; - data->isFemale = FALSE; BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 1); SetMultiuseSpriteTemplateToPokemon(species, 1); gMultiuseSpriteTemplate.paletteTag = species; @@ -1266,15 +1290,15 @@ void CB2_Pokemon_Sprite_Visualizer(void) gSprites[data->frontspriteId].callback = SpriteCallbackDummy; gSprites[data->frontspriteId].oam.priority = 0; //Front Shadow - LoadAndCreateEnemyShadowSpriteCustom(data, species); + LoadAndCreateEnemyShadowSpriteCustom(data); //Back HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->spritesGfx[2], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); - BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 4); + BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 5); SetMultiuseSpriteTemplateToPokemon(species, 2); offset_y = gSpeciesInfo[species].backPicYOffset; data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, VISUALIZER_MON_BACK_X, VISUALIZER_MON_BACK_Y + offset_y, 0); - gSprites[data->backspriteId].oam.paletteNum = 4; + gSprites[data->backspriteId].oam.paletteNum = 5; gSprites[data->backspriteId].callback = SpriteCallbackDummy; gSprites[data->backspriteId].oam.priority = 0; @@ -1283,26 +1307,7 @@ void CB2_Pokemon_Sprite_Visualizer(void) gSprites[data->iconspriteId].oam.priority = 0; //Follower Sprite - u16 graphicsId = species + OBJ_EVENT_MON; - if (data->isShiny) - graphicsId += OBJ_EVENT_MON_SHINY; - if (data->isFemale) - graphicsId += OBJ_EVENT_MON_FEMALE; - data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, - SpriteCB_Follower, - VISUALIZER_FOLLOWER_X, - VISUALIZER_FOLLOWER_Y, - 0); - gSprites[data->followerspriteId].oam.priority = 0; - const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale); - if (graphicsInfo != NULL) - { - gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape; - gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size; - gSprites[data->followerspriteId].images = graphicsInfo->images; - gSprites[data->followerspriteId].anims = graphicsInfo->anims; - gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables; - } + DrawFollowerSprite(data); //Modify Arrows SetUpModifyArrows(data); @@ -1316,7 +1321,7 @@ void CB2_Pokemon_Sprite_Visualizer(void) //Anim names data->animIdBack = GetSpeciesBackAnimSet(species) + 1; - data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; + data->animIdFront = gSpeciesInfo[species].frontAnimId; UpdateMonAnimNames(taskId); //BattleNg Name @@ -1386,7 +1391,7 @@ static void ResetBGs_PokemonSpriteVisualizer(u16 a) static void ApplyOffsetSpriteValues(struct PokemonSpriteVisualizer *data) { - u16 species = data->currentmonId; + u16 species = SanitizeSpeciesId(data->currentmonId); //Back gSprites[data->backspriteId].y = VISUALIZER_MON_BACK_Y + gSpeciesInfo[species].backPicYOffset + data->offsetsSpriteValues.offset_back_picCoords; //Front @@ -1399,6 +1404,7 @@ static void ApplyOffsetSpriteValues(struct PokemonSpriteVisualizer *data) static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) { struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); + u16 species = SanitizeSpeciesId(data->currentmonId); u8 option = data->submenuYpos[1]; switch (option) @@ -1441,15 +1447,15 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) UpdateBattleBg(taskId, increment); break; case 3: - if (GetSpeciesFormTable(data->currentmonId) != NULL) + if (GetSpeciesFormTable(species) != NULL) { struct PokemonSpriteVisualizerModifyArrows *modArrows = &data->modifyArrows; - u8 formId = GetFormIdFromFormSpeciesId(data->currentmonId); - const u16 *formTable = GetSpeciesFormTable(data->currentmonId); + u8 formId = GetFormIdFromFormSpeciesId(species); + const u16 *formTable = GetSpeciesFormTable(species); if (increment) { if (formTable[formId + 1] != FORM_SPECIES_END) - modArrows->currValue = GetFormSpeciesId(data->currentmonId, formId + 1); + modArrows->currValue = GetFormSpeciesId(species, formId + 1); else modArrows->currValue = formTable[0]; } @@ -1466,13 +1472,13 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) modArrows->currValue = formTable[lastForm]; } else - modArrows->currValue = GetFormSpeciesId(data->currentmonId, formId - 1); + modArrows->currValue = GetFormSpeciesId(species, formId - 1); } data->animIdBack = GetSpeciesBackAnimSet(modArrows->currValue) + 1; data->animIdFront = gSpeciesInfo[modArrows->currValue].frontAnimId; UpdateMonAnimNames(taskId); ResetOffsetSpriteValues(data); - ResetShadowSettings(data, modArrows->currValue); + ResetShadowSettings(data); UpdateBattlerValue(data); ReloadPokemonSprites(data); @@ -1488,7 +1494,7 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment) { struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); - u16 species = data->currentmonId; + u16 species = SanitizeSpeciesId(data->currentmonId); u8 option = data->submenuYpos[2]; s8 offset; u8 y; @@ -1659,27 +1665,28 @@ static void Task_AnimateAfterDelay(u8 taskId) static void HandleInput_PokemonSpriteVisualizer(u8 taskId) { struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); + u16 species = SanitizeSpeciesId(data->currentmonId); struct Sprite *Frontsprite = &gSprites[data->frontspriteId]; struct Sprite *Backsprite = &gSprites[data->backspriteId]; if (JOY_NEW(L_BUTTON) && (Backsprite->callback == SpriteCallbackDummy)) { - PlayCryInternal(data->currentmonId, 0, 120, 10, CRY_MODE_NORMAL); + PlayCryInternal(species, 0, 120, 10, CRY_MODE_NORMAL); LaunchAnimationTaskForBackSprite(Backsprite, data->animIdBack-1); } if (JOY_NEW(R_BUTTON) && (Frontsprite->callback == SpriteCallbackDummy)) { - PlayCryInternal(data->currentmonId, 0, 120, 10, CRY_MODE_NORMAL); - if (HasTwoFramesAnimation(data->currentmonId)) + PlayCryInternal(species, 0, 120, 10, CRY_MODE_NORMAL); + if (HasTwoFramesAnimation(species)) StartSpriteAnim(Frontsprite, 1); - if (gSpeciesInfo[data->currentmonId].frontAnimDelay != 0) + if (gSpeciesInfo[species].frontAnimDelay != 0) { // Animation has delay, start delay task u8 taskId = CreateTask(Task_AnimateAfterDelay, 0); STORE_PTR_IN_TASK(Frontsprite, taskId, 0); gTasks[taskId].sAnimId = data->animIdFront; - gTasks[taskId].sAnimDelay = gSpeciesInfo[data->currentmonId].frontAnimDelay; + gTasks[taskId].sAnimDelay = gSpeciesInfo[species].frontAnimDelay; } else { @@ -1698,7 +1705,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) ReloadPokemonSprites(data); ApplyOffsetSpriteValues(data); } - if (JOY_NEW(SELECT_BUTTON) && SpeciesHasGenderDifferences(data->currentmonId)) + if (JOY_NEW(SELECT_BUTTON) && SpeciesHasGenderDifferences(species)) { data->isFemale = !data->isFemale; PrintDigitChars(data); @@ -1729,10 +1736,10 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->isFemale = FALSE; PrintDigitChars(data); UpdateBattlerValue(data); - ResetShadowSettings(data, data->currentmonId); + ResetShadowSettings(data); ReloadPokemonSprites(data); - data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; - data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; + data->animIdBack = GetSpeciesBackAnimSet(species) + 1; + data->animIdFront = gSpeciesInfo[species].frontAnimId; UpdateMonAnimNames(taskId); ResetOffsetSpriteValues(data); } @@ -1746,10 +1753,10 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->isFemale = FALSE; PrintDigitChars(data); UpdateBattlerValue(data); - ResetShadowSettings(data, data->currentmonId); + ResetShadowSettings(data); ReloadPokemonSprites(data); - data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; - data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; + data->animIdBack = GetSpeciesBackAnimSet(species) + 1; + data->animIdFront = gSpeciesInfo[species].frontAnimId; UpdateMonAnimNames(taskId); ResetOffsetSpriteValues(data); } @@ -1786,7 +1793,8 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) SetConstSpriteValues(data); UpdateYPosOffsetText(data); - gSprites[data->followerspriteId].invisible = TRUE; + if (data->followerspriteId != 0) + gSprites[data->followerspriteId].invisible = TRUE; } else if (JOY_NEW(B_BUTTON)) { @@ -1805,7 +1813,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->submenuYpos[1] += 1; if (data->submenuYpos[1] >= 3) { - if ((GetSpeciesFormTable(data->currentmonId) == NULL) || (data->submenuYpos[1] >= 4)) + if ((GetSpeciesFormTable(species) == NULL) || (data->submenuYpos[1] >= 4)) data->submenuYpos[1] = 0; } data->optionArrows.currentDigit = data->submenuYpos[1]; @@ -1815,7 +1823,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) { if (data->submenuYpos[1] == 0) { - if (GetSpeciesFormTable(data->currentmonId) != NULL) + if (GetSpeciesFormTable(species) != NULL) data->submenuYpos[1] = 3; else data->submenuYpos[1] = 2; @@ -1851,8 +1859,9 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) SetArrowInvisibility(data); PrintInstructionsOnWindow(data); UpdateMonAnimNames(taskId); - - gSprites[data->followerspriteId].invisible = FALSE; + + if (data->followerspriteId != 0) + gSprites[data->followerspriteId].invisible = FALSE; } else if (JOY_NEW(DPAD_DOWN)) { @@ -1933,7 +1942,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) { const u16 *palette; - u16 species = data->currentmonId; + u16 species = SanitizeSpeciesId(data->currentmonId); s16 offset_y; u8 front_x = sBattlerCoords[0][1].x; u8 front_y; @@ -1941,7 +1950,9 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) DestroySprite(&gSprites[data->frontspriteId]); DestroySprite(&gSprites[data->backspriteId]); DestroySprite(&gSprites[data->iconspriteId]); - DestroySprite(&gSprites[data->followerspriteId]); + + if (data->followerspriteId != 0) + DestroySprite(&gSprites[data->followerspriteId]); DestroySprite(&gSprites[data->frontShadowSpriteIdPrimary]); if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4 && P_GBA_STYLE_SPECIES_GFX == FALSE) @@ -1974,7 +1985,7 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) gSprites[data->frontspriteId].callback = SpriteCallbackDummy; gSprites[data->frontspriteId].oam.priority = 0; //Front Shadow - LoadAndCreateEnemyShadowSpriteCustom(data, species); + LoadAndCreateEnemyShadowSpriteCustom(data); //Back HandleLoadSpecialPokePic(FALSE, gMonSpritesGfxPtr->spritesGfx[2], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY)); @@ -1991,26 +2002,7 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) gSprites[data->iconspriteId].oam.priority = 0; //Follower Sprite - u16 graphicsId = species + OBJ_EVENT_MON; - if (data->isShiny) - graphicsId += OBJ_EVENT_MON_SHINY; - if (data->isFemale) - graphicsId += OBJ_EVENT_MON_FEMALE; - data->followerspriteId = CreateObjectGraphicsSprite(graphicsId, - SpriteCB_Follower, - VISUALIZER_FOLLOWER_X, - VISUALIZER_FOLLOWER_Y, - 0); - gSprites[data->followerspriteId].oam.priority = 0; - const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, data->isShiny, data->isFemale); - if (graphicsInfo != NULL) - { - gSprites[data->followerspriteId].oam.shape = graphicsInfo->oam->shape; - gSprites[data->followerspriteId].oam.size = graphicsInfo->oam->size; - gSprites[data->followerspriteId].images = graphicsInfo->images; - gSprites[data->followerspriteId].anims = graphicsInfo->anims; - gSprites[data->followerspriteId].subspriteTables = graphicsInfo->subspriteTables; - } + DrawFollowerSprite(data); //Modify Arrows LoadSpritePalette(&gSpritePalette_Arrow); From c39eb48b04090a6ed02ddbc4b6343aaca7efc265 Mon Sep 17 00:00:00 2001 From: bassforte123 <130828119+bassforte123@users.noreply.github.com> Date: Sat, 3 Jan 2026 13:59:44 -0500 Subject: [PATCH 49/54] Updating IsNonVolatileStatusBlocked (#8728) --- 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 79b786b944..3380420310 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -64,7 +64,7 @@ static bool32 TryRemoveScreens(u32 battler); static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler); static u32 GetFlingPowerFromItemId(u32 itemId); static void SetRandomMultiHitCounter(); -static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, enum Ability abilityAffected, const u8 *battleScript, enum FunctionCallOption option); +static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, bool32 abilityAffected, const u8 *battleScript, enum FunctionCallOption option); static bool32 CanSleepDueToSleepClause(u32 battlerAtk, u32 battlerDef, enum FunctionCallOption option); static bool32 IsOpposingSideEmpty(u32 battler); static void ResetParadoxWeatherStat(u32 battler); @@ -6251,7 +6251,7 @@ bool32 CanSetNonVolatileStatus(u32 battlerAtk, u32 battlerDef, enum Ability abil return TRUE; } -static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, enum Ability abilityAffected, const u8 *battleScript, enum FunctionCallOption option) +static bool32 IsNonVolatileStatusBlocked(u32 battlerDef, enum Ability abilityDef, bool32 abilityAffected, const u8 *battleScript, enum FunctionCallOption option) { if (battleScript != NULL) { From 0bed4761a11cae3db9ed387713331d89ba521b6b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Sun, 4 Jan 2026 12:46:00 +0100 Subject: [PATCH 50/54] Fix wrongly getting a battler position in the type effectiveness functions (#8787) --- src/battle_controller_player.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 00f88a74a5..4f39139dcb 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -2394,7 +2394,7 @@ static u32 CheckTypeEffectiveness(u32 battlerAtk, u32 battlerDef) static u32 CheckTargetTypeEffectiveness(u32 battler) { - u32 battlerFoe = BATTLE_OPPOSITE(GetBattlerPosition(battler)); + u32 battlerFoe = BATTLE_OPPOSITE(battler); u32 foeEffectiveness = CheckTypeEffectiveness(battler, battlerFoe); if (IsDoubleBattle()) From 126100c0272bd77d9545dd4274e95e1c502ad570 Mon Sep 17 00:00:00 2001 From: amiosi <44352097+amiosi@users.noreply.github.com> Date: Mon, 5 Jan 2026 18:18:46 -0500 Subject: [PATCH 51/54] fix crash damage implementation and incorrect memento generation (#8804) Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com> --- include/config/battle.h | 4 ++-- src/battle_script_commands.c | 27 ++++++++++++++++++++------- src/data/moves_info.h | 4 ++-- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/include/config/battle.h b/include/config/battle.h index 8fdc39d029..b5d11a9b3e 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -94,8 +94,8 @@ // Other move settings #define B_INCINERATE_GEMS GEN_LATEST // In Gen6+, Incinerate can destroy Gems. #define B_CAN_SPITE_FAIL GEN_LATEST // In Gen4+, Spite can no longer fail if the foe's last move only has 1 remaining PP. -#define B_CRASH_IF_TARGET_IMMUNE GEN_LATEST // In Gen4+, The user of Jump Kick or High Jump Kick will "keep going and crash" if it attacks a target that is immune to the move. -#define B_MEMENTO_FAIL GEN_LATEST // In Gen4+, Memento fails if there is no target or if the target is protected or behind substitute. But not if Atk/Sp. Atk are at -6. +#define B_CRASH_IF_TARGET_IMMUNE GEN_LATEST // In Gen4+, moves with crash damage will crash if the user attacks a target that is immune due to their typing. +#define B_MEMENTO_FAIL GEN_LATEST // In Gen4+, Memento no longer fails if the target already has -6 Attack and Special Attack. Additionally, in Gen5+, it fails if there is no target, or if the target is protected or behind a Substitute. #define B_GLARE_GHOST GEN_LATEST // In Gen4+, Glare can hit Ghost-type Pokémon normally. #define B_SKILL_SWAP GEN_LATEST // In Gen4+, Skill Swap triggers switch-in abilities after use. #define B_BRICK_BREAK GEN_LATEST // In Gen4+, you can destroy your own side's screens. In Gen 5+, screens are not removed if the target is immune. diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 6813de0268..e053aa31f5 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -5907,16 +5907,29 @@ static bool32 HandleMoveEndMoveBlock(u32 moveEffect) && !gBattleStruct->noTargetPresent) { s32 recoil = 0; - if (B_RECOIL_IF_MISS_DMG >= GEN_5 || (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE)) + if (B_CRASH_IF_TARGET_IMMUNE == GEN_4 && gBattleStruct->moveResultFlags[gBattlerTarget] & MOVE_RESULT_DOESNT_AFFECT_FOE) + { + recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + } + if (B_RECOIL_IF_MISS_DMG >= GEN_5) + { recoil = GetNonDynamaxMaxHP(gBattlerAttacker) / 2; - else if (B_RECOIL_IF_MISS_DMG == GEN_4 && (GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget]) - recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2; - else if (B_RECOIL_IF_MISS_DMG == GEN_3) - recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + } + else if (B_RECOIL_IF_MISS_DMG >= GEN_3) + { + if ((GetNonDynamaxMaxHP(gBattlerTarget) / 2) < gBattleStruct->moveDamage[gBattlerTarget]) + recoil = gBattleStruct->moveDamage[gBattlerTarget]; + else + recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 2; + } else if (B_RECOIL_IF_MISS_DMG == GEN_2) - recoil = GetNonDynamaxMaxHP(gBattlerTarget) / 8; + { + recoil = gBattleStruct->moveDamage[gBattlerTarget] / 8; + } else + { recoil = 1; + } SetPassiveDamageAmount(gBattlerAttacker, recoil); BattleScriptCall(BattleScript_RecoilIfMiss); effect = TRUE; @@ -12499,7 +12512,7 @@ static void Cmd_trymemento(void) { CMD_ARGS(const u8 *failInstr); - if (B_MEMENTO_FAIL >= GEN_4 + if (B_MEMENTO_FAIL >= GEN_5 && (gBattleCommunication[MISS_TYPE] == B_MSG_PROTECTED || IsSemiInvulnerable(gBattlerTarget, CHECK_ALL) || IsBattlerProtected(gBattlerAttacker, gBattlerTarget, gCurrentMove) diff --git a/src/data/moves_info.h b/src/data/moves_info.h index 3f9e0abedf..dd0a5897df 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -442,7 +442,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = #if B_UPDATED_MOVE_DATA == GEN_3 .description = COMPOUND_STRING( "A 2-turn move that strikes\n" - "the foe on the 2nd turn."); + "the foe on the 2nd turn."), #else .description = COMPOUND_STRING( "A 2-turn move with a high\n" @@ -4367,7 +4367,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_ALL] = #else .description = COMPOUND_STRING( "A triangular field of energy\n" - "is created and launched."); + "is created and launched."), #endif .effect = EFFECT_HIT, .power = 80, From 45295d9544120a889c849f902b13950e539cb5fe Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 6 Jan 2026 11:53:29 -0300 Subject: [PATCH 52/54] `B_ABILITY_TRIGGER_CHANCE` config tests (#8594) --- include/constants/generational_changes.h | 2 +- src/battle_util.c | 14 ++++----- test/battle/ability/cute_charm.c | 11 +++---- test/battle/ability/effect_spore.c | 38 +++++++++++++++++------- test/battle/ability/flame_body.c | 9 ++++-- test/battle/ability/poison_point.c | 9 ++++-- test/battle/ability/shed_skin.c | 13 ++++---- test/battle/ability/static.c | 9 ++++-- test/battle/sleep_clause.c | 32 ++++++++++++-------- 9 files changed, 86 insertions(+), 51 deletions(-) diff --git a/include/constants/generational_changes.h b/include/constants/generational_changes.h index 8cabad41ea..81ff4bece6 100644 --- a/include/constants/generational_changes.h +++ b/include/constants/generational_changes.h @@ -147,7 +147,7 @@ F(INTREPID_SWORD, intrepidSword, (u32, GEN_COUNT - 1)) \ F(DAUNTLESS_SHIELD, dauntlessShield, (u32, GEN_COUNT - 1)) \ F(DISGUISE_HP_LOSS, disguiseHpLoss, (u32, GEN_COUNT - 1)) \ - F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ + F(ABILITY_TRIGGER_CHANCE, abilityTriggerChance, (u32, GEN_COUNT - 1)) \ F(PICKUP_WILD, pickupWild, (u32, GEN_COUNT - 1)) \ F(MAGIC_GUARD, magicGuard, (u32, GEN_COUNT - 1)) /* TODO: use in tests */ \ F(BATTLE_BOND, battleBond, (u32, GEN_COUNT - 1)) \ diff --git a/src/battle_util.c b/src/battle_util.c index 3380420310..5493354f0c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -4686,7 +4686,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab break; case ABILITY_SHED_SKIN: if ((gBattleMons[battler].status1 & STATUS1_ANY) - && (B_ABILITY_TRIGGER_CHANCE == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3))) + && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) == GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3))) { ABILITY_HEAL_MON_STATUS: if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON)) @@ -5110,7 +5110,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab { u32 poison, paralysis, sleep; - if (B_ABILITY_TRIGGER_CHANCE >= GEN_5) + if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_5) { poison = 9; paralysis = 19; @@ -5122,7 +5122,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } sleep = 30; - i = RandomUniform(RNG_EFFECT_SPORE, 0, B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? 99 : 299); + i = RandomUniform(RNG_EFFECT_SPORE, 0, GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? 99 : 299); if (i < poison) goto POISON_POINT; if (i < paralysis) @@ -5148,7 +5148,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } break; case ABILITY_POISON_POINT: - if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) + if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3)) { POISON_POINT: { @@ -5170,7 +5170,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab } break; case ABILITY_STATIC: - if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3)) + if (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3)) { STATIC: { @@ -5197,7 +5197,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab && !CanBattlerAvoidContactEffects(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerAttacker), GetBattlerHoldEffect(gBattlerAttacker), move) && IsBattlerTurnDamaged(gBattlerTarget) && CanBeBurned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker)) - && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3))) + && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3))) { gEffectBattler = gBattlerAttacker; gBattleScripting.battler = gBattlerTarget; @@ -5212,7 +5212,7 @@ u32 AbilityBattleEffects(enum AbilityEffect caseID, u32 battler, enum Ability ab && !gProtectStructs[gBattlerAttacker].confusionSelfDmg && IsBattlerTurnDamaged(gBattlerTarget) && IsBattlerAlive(gBattlerTarget) - && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3)) + && (GetConfig(CONFIG_ABILITY_TRIGGER_CHANCE) >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3)) && !(gBattleMons[gBattlerAttacker].volatiles.infatuation) && AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget) && !IsAbilityAndRecord(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker), ABILITY_OBLIVIOUS) diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c index 0813296a2e..d2395fda17 100644 --- a/test/battle/ability/cute_charm.c +++ b/test/battle/ability/cute_charm.c @@ -48,13 +48,14 @@ SINGLE_BATTLE_TEST("Cute Charm cannot infatuate same gender") TO_DO_BATTLE_TEST("Cute Charm cannot infatuate if either Pokémon are Gender-unknown") -TO_DO_BATTLE_TEST("Cute Charm triggers 1/3 of the time (Gen 3)") - -SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time (Gen 4+)") +SINGLE_BATTLE_TEST("Cute Charm triggers 1/3 times (Gen3) or 30% (Gen 4+) of the time") { - PASSES_RANDOMLY(3, 10, RNG_CUTE_CHARM); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3% + PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% + PASSES_RANDOMLY(passes, trials, RNG_CUTE_CHARM); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); } OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); } diff --git a/test/battle/ability/effect_spore.c b/test/battle/ability/effect_spore.c index ff61683b54..59b680f422 100644 --- a/test/battle/ability/effect_spore.c +++ b/test/battle/ability/effect_spore.c @@ -32,11 +32,15 @@ SINGLE_BATTLE_TEST("Effect Spore only inflicts status on contact") } } -SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time") +SINGLE_BATTLE_TEST("Effect Spore causes poison 3.3% (Gen3), 10% (Gen4) and 9% (Gen5+) of the time") { - PASSES_RANDOMLY(9, 100, RNG_EFFECT_SPORE); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3% + PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10% + PARAMETRIZE { config = GEN_5; passes = 9; trials = 100; } // 9% + PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -51,11 +55,15 @@ SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time") } } -SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time") +SINGLE_BATTLE_TEST("Effect Spore causes paralysis 3.3% (Gen3) and 10% (Gen4+) of the time") { - PASSES_RANDOMLY(10, 100, RNG_EFFECT_SPORE); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3% + PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10% + PARAMETRIZE { config = GEN_5; passes = 1; trials = 10; } // 10% + PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -70,11 +78,15 @@ SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time") } } -SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time") +SINGLE_BATTLE_TEST("Effect Spore causes sleep 3.3% (Gen3), 10% (Gen4) and 11% (Gen5+) of the time") { - PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3% + PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10% + PARAMETRIZE { config = GEN_5; passes = 11; trials = 100; } // 11% + PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); } @@ -91,9 +103,13 @@ SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time") SINGLE_BATTLE_TEST("Effect Spore will check if it can inflict status onto attacker, not itself") { - PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 30; } // 3.3% + PARAMETRIZE { config = GEN_4; passes = 1; trials = 10; } // 10% + PARAMETRIZE { config = GEN_5; passes = 11; trials = 100; } // 11% + PASSES_RANDOMLY(passes, trials, RNG_EFFECT_SPORE); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_BRELOOM) { Status1(STATUS1_BURN); Ability(ABILITY_EFFECT_SPORE); } diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c index 6120af0c20..8db6f2c142 100644 --- a/test/battle/ability/flame_body.c +++ b/test/battle/ability/flame_body.c @@ -30,11 +30,14 @@ SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact") } } -SINGLE_BATTLE_TEST("Flame Body triggers 30% of the time") +SINGLE_BATTLE_TEST("Flame Body triggers 1/3 times (Gen3) or 30% (Gen 4+) of the time") { - PASSES_RANDOMLY(3, 10, RNG_FLAME_BODY); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3% + PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% + PASSES_RANDOMLY(passes, trials, RNG_FLAME_BODY); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_MAGMAR) { Ability(ABILITY_FLAME_BODY); } diff --git a/test/battle/ability/poison_point.c b/test/battle/ability/poison_point.c index 243ed51bb5..2b6c4aa19f 100644 --- a/test/battle/ability/poison_point.c +++ b/test/battle/ability/poison_point.c @@ -31,11 +31,14 @@ SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact") } } -SINGLE_BATTLE_TEST("Poison Point triggers 30% of the time") +SINGLE_BATTLE_TEST("Poison Point triggers 1/3 times (Gen3) or 30% (Gen 4+) of the time") { - PASSES_RANDOMLY(3, 10, RNG_POISON_POINT); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3% + PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% + PASSES_RANDOMLY(passes, trials, RNG_POISON_POINT); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_NIDORAN_M) { Ability(ABILITY_POISON_POINT); } diff --git a/test/battle/ability/shed_skin.c b/test/battle/ability/shed_skin.c index 60554f921e..73f09bc9e9 100644 --- a/test/battle/ability/shed_skin.c +++ b/test/battle/ability/shed_skin.c @@ -1,13 +1,16 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Shed Skin triggers 33% of the time") +SINGLE_BATTLE_TEST("Shed Skin triggers 33% (Gen3, Gen5+) or 30% (Gen 4) of the time") { - if (B_ABILITY_TRIGGER_CHANCE == GEN_4) - PASSES_RANDOMLY(30, 100, RNG_SHED_SKIN); - else - PASSES_RANDOMLY(33, 100, RNG_SHED_SKIN); + u32 config, passes; + PARAMETRIZE { config = GEN_3; passes = 33; } + PARAMETRIZE { config = GEN_4; passes = 30; } + PARAMETRIZE { config = GEN_5; passes = 33; } + + PASSES_RANDOMLY(passes, 100, RNG_SHED_SKIN); GIVEN { + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ARBOK) { Status1(STATUS1_POISON); Ability(ABILITY_SHED_SKIN); } diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c index 110cfbaa0e..c40197e742 100644 --- a/test/battle/ability/static.c +++ b/test/battle/ability/static.c @@ -30,11 +30,14 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact") } } -SINGLE_BATTLE_TEST("Static triggers 30% of the time") +SINGLE_BATTLE_TEST("Static triggers 1/3 times (Gen3) or 30% (Gen4+) of the time") { - PASSES_RANDOMLY(3, 10, RNG_STATIC); + u32 config, passes, trials; + PARAMETRIZE { config = GEN_3; passes = 1; trials = 3; } // 33.3% + PARAMETRIZE { config = GEN_4; passes = 3; trials = 10; } // 30% + PASSES_RANDOMLY(passes, trials, RNG_STATIC); GIVEN { - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); ASSUME(MoveMakesContact(MOVE_SCRATCH)); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_STATIC); } diff --git a/test/battle/sleep_clause.c b/test/battle/sleep_clause.c index 14ee7f052f..ba14671b43 100644 --- a/test/battle/sleep_clause.c +++ b/test/battle/sleep_clause.c @@ -302,12 +302,12 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn will fail when sleep clause is active") } } -SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with sleep clause active") +SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% (Gen5+) of the time with sleep clause active") { PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -327,12 +327,12 @@ SINGLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with } } -DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% of the time with sleep clause active (Doubles)") +DOUBLE_BATTLE_TEST("Sleep Clause: Effect Spore causes sleep 11% (Gen5+) of the time with sleep clause active (Doubles)") { PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -360,7 +360,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -388,7 +388,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Sleep from Effect Spore will not activate slee PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(MoveMakesContact(MOVE_SCRATCH)); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -834,11 +834,14 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mo SINGLE_BATTLE_TEST("Sleep Clause: Sleep clause is deactivated when a sleeping mon is woken up by Shed Skin") { - if (B_ABILITY_TRIGGER_CHANCE == GEN_4) - PASSES_RANDOMLY(30, 100, RNG_SHED_SKIN); - else - PASSES_RANDOMLY(33, 100, RNG_SHED_SKIN); + u32 config, passes; + PARAMETRIZE { config = GEN_3; passes = 33; } + PARAMETRIZE { config = GEN_4; passes = 30; } + PARAMETRIZE { config = GEN_5; passes = 33; } + + PASSES_RANDOMLY(passes, 100, RNG_SHED_SKIN); GIVEN { + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, config); FLAG_SET(B_FLAG_SLEEP_CLAUSE); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); @@ -1216,7 +1219,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Sleep caused by Effect Spore does not prevent PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); @@ -1253,7 +1256,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(MoveMakesContact(MOVE_SCRATCH)); @@ -1265,6 +1268,8 @@ SINGLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat TURN {} TURN {} TURN {} + TURN {} + TURN {} TURN { MOVE(opponent, MOVE_SPORE); } TURN { SWITCH(player, 1); MOVE(opponent, MOVE_SPORE); } } SCENE { @@ -1291,7 +1296,7 @@ DOUBLE_BATTLE_TEST("Sleep Clause: Waking up after Effect Spore doesn't deactivat PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); - ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_AROMATHERAPY) == EFFECT_HEAL_BELL); @@ -1468,6 +1473,7 @@ SINGLE_BATTLE_TEST("Sleep Clause: Yawn'd Pokémon slept due to Effect Spore befo PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE); GIVEN { FLAG_SET(B_FLAG_SLEEP_CLAUSE); + WITH_CONFIG(CONFIG_ABILITY_TRIGGER_CHANCE, GEN_5); ASSUME(GetMoveEffect(MOVE_SPORE) == EFFECT_NON_VOLATILE_STATUS); ASSUME(GetMoveNonVolatileStatus(MOVE_SPORE) == MOVE_EFFECT_SLEEP); ASSUME(GetMoveEffect(MOVE_YAWN) == EFFECT_YAWN); From dc128c608b2f40aeed940195062c308d7b1608e3 Mon Sep 17 00:00:00 2001 From: amiosi <44352097+amiosi@users.noreply.github.com> Date: Thu, 8 Jan 2026 05:35:21 -0500 Subject: [PATCH 53/54] add the type boost value for gen 3 sea incense (#8826) --- include/config/item.h | 2 +- src/data/items.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/config/item.h b/include/config/item.h index 8a5a0009dd..f260d76708 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -12,7 +12,7 @@ #define I_GRISEOUS_ORB_FORM_CHANGE GEN_LATEST // In Gen9+, the Griseous Orb no longer changes Giratina's form when held. #define I_GEM_BOOST_POWER GEN_LATEST // In Gen6+, the Gem boost power was reduced from 50% to 30%. #define I_USE_EVO_HELD_ITEMS_FROM_BAG FALSE // If TRUE, items such as Razor Claw or Electirizer will be usable from the bag to evolve a Pokémon just like in LA. -#define I_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, all regular type boosting held items had their power increased from 10% to 20%. eg. Charcoal +#define I_TYPE_BOOST_POWER GEN_LATEST // In Gen4+, type-enhancing held items (such as Charcoal) had their multiplier increased from 1.1x to 1.2x. Sea Incense was changed from 1.05x to 1.2x. #define I_SELL_VALUE_FRACTION GEN_LATEST // In Gen9+, items sell for 1/4 of their value instead of 1/2. #define I_PRICE GEN_LATEST // Some items have varied in value across generations. #define I_BERRY_PRICE GEN_7 // Since Berries have become unplantable (Gen8+), their price has gone up. diff --git a/src/data/items.h b/src/data/items.h index 6d69de9c89..ad019fdbd9 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -8134,7 +8134,7 @@ const struct Item gItemsInfo[] = .name = ITEM_NAME("Sea Incense"), .price = (I_PRICE >= GEN_7) ? 2000 : 9600, .holdEffect = HOLD_EFFECT_TYPE_POWER, - .holdEffectParam = 20, + .holdEffectParam = I_TYPE_BOOST_POWER >= GEN_4 ? 20 : 5, .description = sSeaIncenseDesc, .pocket = POCKET_ITEMS, .sortType = ITEM_TYPE_INCENSE, From 85b5dac4d070772ac502e90835dd598de8e242cb Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Thu, 8 Jan 2026 20:09:44 -0300 Subject: [PATCH 54/54] Support end-of-battle party data check in tests (#8831) --- src/battle_main.c | 16 +- test/battle/ability/ice_face.c | 10 + test/battle/ability/stance_change.c | 1 - test/battle/ability/zen_mode.c | 2 +- test/battle/form_change/begin_battle.c | 4 +- test/battle/form_change/end_battle.c | 288 ++++++++++++++++++ .../form_change/end_battle_environment.c | 33 ++ test/battle/form_change/faint.c | 24 +- test/battle/form_change/gigantamax.c | 45 +++ test/battle/form_change/mega_evolution.c | 30 +- test/battle/form_change/primal_reversion.c | 15 + test/battle/form_change/status.c | 1 - test/battle/form_change/ultra_burst.c | 18 +- test/battle/gimmick/dynamax.c | 31 -- 14 files changed, 462 insertions(+), 56 deletions(-) create mode 100644 test/battle/form_change/end_battle.c create mode 100644 test/battle/form_change/end_battle_environment.c create mode 100644 test/battle/form_change/gigantamax.c diff --git a/src/battle_main.c b/src/battle_main.c index b10e506499..c54323c826 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1799,7 +1799,8 @@ void CB2_QuitRecordedBattle(void) if (taskId != TASK_NONE) DestroyTask(taskId); - TestRunner_Battle_AfterLastTurn(); + gCurrentActionFuncId = B_ACTION_FINISHED; + sEndTurnFuncsTable[gBattleOutcome & 0x7F](); // Contains TestRunner_Battle_AfterLastTurn } FreeRestoreBattleData(); FreeAllWindowBuffers(); @@ -5624,21 +5625,11 @@ static void HandleEndTurn_FinishBattle(void) TryPutBreakingNewsOnAir(); } - RecordedBattle_SetPlaybackFinished(); - if (gTestRunnerEnabled) - TestRunner_Battle_AfterLastTurn(); BeginFastPaletteFade(3); FadeOutMapMusic(5); if (B_TRAINERS_KNOCK_OFF_ITEMS == TRUE || B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9) TryRestoreHeldItems(); - // Undo Dynamax HP multiplier before recalculating stats. - for (battler = 0; battler < gBattlersCount; ++battler) - { - if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX) - UndoDynamax(battler); - } - for (i = 0; i < PARTY_SIZE; i++) { bool32 changedForm = TryRevertPartyMonFormChange(i); @@ -5647,6 +5638,9 @@ static void HandleEndTurn_FinishBattle(void) if (!changedForm && B_RECALCULATE_STATS >= GEN_5) CalculateMonStats(&gPlayerParty[i]); } + RecordedBattle_SetPlaybackFinished(); + if (gTestRunnerEnabled) + TestRunner_Battle_AfterLastTurn(); // Clear battle mon species to avoid a bug on the next battle that causes // healthboxes loading incorrectly due to it trying to create a Mega Indicator // if the previous battler would've had it. diff --git a/test/battle/ability/ice_face.c b/test/battle/ability/ice_face.c index c3df84baeb..4abb9a9baf 100644 --- a/test/battle/ability/ice_face.c +++ b/test/battle/ability/ice_face.c @@ -11,7 +11,10 @@ SINGLE_BATTLE_TEST("Ice Face blocks physical moves, changing Eiscue into its Noi TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { ABILITY_POPUP(player, ABILITY_ICE_FACE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Eiscue transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_EISCUE_NOICE); } } @@ -26,6 +29,8 @@ SINGLE_BATTLE_TEST("Ice Face does not block special moves, Eiscue stays in Ice F TURN { MOVE(opponent, MOVE_EMBER); } } SCENE { NOT ABILITY_POPUP(player, ABILITY_ICE_FACE); + } THEN { + EXPECT_EQ(player->species, SPECIES_EISCUE_ICE); } } @@ -46,11 +51,16 @@ SINGLE_BATTLE_TEST("Ice Face is restored if hail or snow begins while Noice Face TURN { MOVE(opponent, MOVE_SCRATCH); } } SCENE { ABILITY_POPUP(player, ABILITY_ICE_FACE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Eiscue transformed!"); ABILITY_POPUP(player, ABILITY_ICE_FACE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Eiscue transformed!"); ABILITY_POPUP(player, ABILITY_ICE_FACE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Eiscue transformed!"); + } THEN { + EXPECT_EQ(player->species, SPECIES_EISCUE_NOICE); } } diff --git a/test/battle/ability/stance_change.c b/test/battle/ability/stance_change.c index 0c82c93177..ebddb8a884 100644 --- a/test/battle/ability/stance_change.c +++ b/test/battle/ability/stance_change.c @@ -1,7 +1,6 @@ #include "global.h" #include "test/battle.h" - SINGLE_BATTLE_TEST("Stance Change changes Aegislash from Shield to Blade when using a damaging move") { u16 move; diff --git a/test/battle/ability/zen_mode.c b/test/battle/ability/zen_mode.c index 1e73961cda..96f47a3180 100644 --- a/test/battle/ability/zen_mode.c +++ b/test/battle/ability/zen_mode.c @@ -25,7 +25,7 @@ SINGLE_BATTLE_TEST("Zen Mode switches Darmanitan's form when HP is half or less ABILITY_POPUP(player, ABILITY_ZEN_MODE); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); } THEN { - ASSUME(player->hp <= player->maxHP / 2); + EXPECT_LT(player->hp, player->maxHP / 2); EXPECT_EQ(player->species, zenSpecies); } } diff --git a/test/battle/form_change/begin_battle.c b/test/battle/form_change/begin_battle.c index bee9c4fe6b..a133d321a3 100644 --- a/test/battle/form_change/begin_battle.c +++ b/test/battle/form_change/begin_battle.c @@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Zacian's Iron Head becomes Behemoth Blade upon form change") } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { - ASSUME(player->species == SPECIES_ZACIAN_CROWNED); // Assumes form change worked. + EXPECT_EQ(player->species, SPECIES_ZACIAN_CROWNED); EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BLADE); } } @@ -70,7 +70,7 @@ SINGLE_BATTLE_TEST("Zamazenta's Iron Head becomes Behemoth Bash upon form change } WHEN { TURN { MOVE(player, MOVE_CELEBRATE); } } THEN { - ASSUME(player->species == SPECIES_ZAMAZENTA_CROWNED); // Assumes form change worked. + EXPECT_EQ(player->species, SPECIES_ZAMAZENTA_CROWNED); EXPECT_EQ(player->moves[0], MOVE_BEHEMOTH_BASH); } } diff --git a/test/battle/form_change/end_battle.c b/test/battle/form_change/end_battle.c new file mode 100644 index 0000000000..9de52a83f2 --- /dev/null +++ b/test/battle/form_change/end_battle.c @@ -0,0 +1,288 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Xerneas returns its Neutral Form upon battle end") +{ + GIVEN { + PLAYER(SPECIES_XERNEAS_NEUTRAL); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_XERNEAS_NEUTRAL); + } +} + +SINGLE_BATTLE_TEST("Zacian returns its Hero Form upon battle end") +{ + GIVEN { + PLAYER(SPECIES_ZACIAN_HERO) { Item(ITEM_RUSTED_SWORD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZACIAN_HERO); + } +} + +SINGLE_BATTLE_TEST("Zacian returns its Hero Form upon battle end") +{ + GIVEN { + ASSUME(GetMovePP(MOVE_BEHEMOTH_BLADE) == 5); + PLAYER(SPECIES_ZACIAN_HERO) { Item(ITEM_RUSTED_SWORD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZACIAN_HERO); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_MOVE1), MOVE_IRON_HEAD); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_PP1), 5); // Behemoth Blade's PP + } +} + +SINGLE_BATTLE_TEST("Zamazenta returns its Hero Form upon battle end") +{ + GIVEN { + PLAYER(SPECIES_ZAMAZENTA_HERO) { Item(ITEM_RUSTED_SHIELD); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZAMAZENTA_HERO); + } +} + +SINGLE_BATTLE_TEST("Zamazenta returns its Hero Form upon battle end") +{ + GIVEN { + ASSUME(GetMovePP(MOVE_BEHEMOTH_BASH) == 5); + PLAYER(SPECIES_ZAMAZENTA_HERO) { Item(ITEM_RUSTED_SHIELD); Moves(MOVE_IRON_HEAD, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_ZAMAZENTA_HERO); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_MOVE1), MOVE_IRON_HEAD); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_PP1), 5); // Behemoth Bash's PP + } +} + +SINGLE_BATTLE_TEST("Palafin returns to Zero form upon battle end") +{ + GIVEN { + PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } SCENE { + SWITCH_OUT_MESSAGE("Palafin"); + SEND_IN_MESSAGE("Wobbuffet"); + SWITCH_OUT_MESSAGE("Wobbuffet"); + SEND_IN_MESSAGE("Palafin"); + ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO); + MESSAGE("Palafin underwent a heroic transformation!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_PALAFIN_ZERO); + } +} + +SINGLE_BATTLE_TEST("Shaymin retains Land form if it was frozen or frostbitten in battle") +{ + KNOWN_FAILING; // changedSpecies is forcing the return to Sky Form + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE)); + PLAYER(SPECIES_SHAYMIN_SKY); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_POWDER_SNOW); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, opponent); + FREEZE_OR_FROSTBURN_STATUS(player, TRUE); + NOT HP_BAR(player); // Regression caused by Mimikyu form change + MESSAGE("Shaymin transformed!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_SHAYMIN_LAND); + } +} + +SINGLE_BATTLE_TEST("Meloetta returns to Aria form upon battle end after using Relic Song") +{ + GIVEN { + PLAYER(SPECIES_MELOETTA_ARIA); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_RELIC_SONG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_RELIC_SONG, player); + HP_BAR(opponent); + MESSAGE("Meloetta transformed!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_MELOETTA_ARIA); + } +} + +SINGLE_BATTLE_TEST("Battle Bond Greninja returns to base form upon battle end after knocking out an opponent") +{ + GIVEN { + WITH_CONFIG(CONFIG_BATTLE_BOND, GEN_8); + PLAYER(SPECIES_GRENINJA_BATTLE_BOND); + OPPONENT(SPECIES_WOBBUFFET) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN); SEND_OUT(opponent, 1); } + } SCENE { + HP_BAR(opponent); + MESSAGE("The opposing Wobbuffet fainted!"); + ABILITY_POPUP(player, ABILITY_BATTLE_BOND); + MESSAGE("Greninja became fully charged due to its bond with its trainer!"); + MESSAGE("Greninja became Ash-Greninja!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_GRENINJA_BATTLE_BOND); + } +} + +SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon battle end after using an attack") +{ + GIVEN { + PLAYER(SPECIES_AEGISLASH_SHIELD); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCRATCH, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD); + } +} + +SINGLE_BATTLE_TEST("Wishiwashi reverts to Solo form upon battle end after changing form at the beginning of the battle") +{ + GIVEN { + PLAYER(SPECIES_WISHIWASHI_SOLO) { Level(100); Ability(ABILITY_SCHOOLING); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { } + } SCENE { + ABILITY_POPUP(player, ABILITY_SCHOOLING); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_WISHIWASHI_SOLO); + } +} + +SINGLE_BATTLE_TEST("Minior Meteor reverts to Core form upon battle end after changing form at the beginning of the battle") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(1); } + PLAYER(SPECIES_MINIOR_CORE) { Ability(ABILITY_SHIELDS_DOWN); HP(51); MaxHP(101); } + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponent, MOVE_SCRATCH); SEND_OUT(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_SHIELDS_DOWN); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[1], MON_DATA_SPECIES), SPECIES_MINIOR_CORE); + } +} + +SINGLE_BATTLE_TEST("Mimikyu Busted reverts to Disguised form upon battle end after busting its Disguise in battle") +{ + u32 species; + PARAMETRIZE { species = SPECIES_MIMIKYU_DISGUISED; } + PARAMETRIZE { species = SPECIES_MIMIKYU_TOTEM_DISGUISED; } + GIVEN { + WITH_CONFIG(CONFIG_DISGUISE_HP_LOSS, GEN_7); + PLAYER(species) { Ability(ABILITY_DISGUISE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_AERIAL_ACE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_AERIAL_ACE, opponent); + ABILITY_POPUP(player, ABILITY_DISGUISE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species); + } +} + +SINGLE_BATTLE_TEST("Cramorant reverts to base Form upon battle end after using Surf in battle") +{ + GIVEN { + PLAYER(SPECIES_CRAMORANT) { Ability(ABILITY_GULP_MISSILE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SURF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SURF, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CRAMORANT); + } +} + +SINGLE_BATTLE_TEST("Eiscue Noice reverts to Ice Form upon battle end after being hit by a physical move in battle") +{ + GIVEN { + ASSUME(GetMoveCategory(MOVE_SCRATCH) == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_EISCUE_ICE); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SCRATCH); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + MESSAGE("Eiscue transformed!"); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_EISCUE_ICE); + } +} + +SINGLE_BATTLE_TEST("Morpeko Hangry reverts to Full Belly Form upon battle end after changing forms at the end of the turn") +{ + GIVEN { + PLAYER(SPECIES_MORPEKO_FULL_BELLY) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Morpeko used Celebrate!"); + MESSAGE("The opposing Wobbuffet used Celebrate!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_MORPEKO_FULL_BELLY); + } +} + +SINGLE_BATTLE_TEST("Ogerpon reverts to the correct form upon battle end after terastallizing") +{ + u32 species; + PARAMETRIZE { species = SPECIES_OGERPON_TEAL; } + PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING; } + PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME; } + PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE; } + GIVEN { + PLAYER(species); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species); + } +} + +SINGLE_BATTLE_TEST("Terapagos reverts to the correct form upon battle end after terastallizing") +{ + GIVEN { + PLAYER(SPECIES_TERAPAGOS_NORMAL); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_TERAPAGOS_NORMAL); + } +} diff --git a/test/battle/form_change/end_battle_environment.c b/test/battle/form_change/end_battle_environment.c new file mode 100644 index 0000000000..d4dfee3f5e --- /dev/null +++ b/test/battle/form_change/end_battle_environment.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Burmy changes form based on the environment it appeared in-battle") +{ + u32 currentForm = 0, newForm = 0, environment = 0; + + static u32 sBurmyForms[] = { + SPECIES_BURMY_PLANT, + SPECIES_BURMY_SANDY, + SPECIES_BURMY_TRASH, + }; + + for (u32 j = 0; j < ARRAY_COUNT(sBurmyForms); j++) { + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_GRASS; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_LONG_GRASS; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_POND; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_MOUNTAIN; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_PLANT; environment = BATTLE_ENVIRONMENT_PLAIN; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_SANDY; environment = BATTLE_ENVIRONMENT_CAVE; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_SANDY; environment = BATTLE_ENVIRONMENT_SAND; } + PARAMETRIZE { currentForm = sBurmyForms[j]; newForm = SPECIES_BURMY_TRASH; environment = BATTLE_ENVIRONMENT_BUILDING; } + } + GIVEN { + PLAYER(currentForm); + OPPONENT(SPECIES_WOBBUFFET); + Environment(environment); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), newForm); + } +} diff --git a/test/battle/form_change/faint.c b/test/battle/form_change/faint.c index 316ecca0bf..4f66dc84c1 100644 --- a/test/battle/form_change/faint.c +++ b/test/battle/form_change/faint.c @@ -8,12 +8,19 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting (start as Shi PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_SCRATCH); MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } + TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_REVIVE, 0); } + TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("The opposing Wobbuffet used Gust!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); + HP_BAR(player); MESSAGE("Aegislash fainted!"); + SEND_IN_MESSAGE("Wobbuffet"); + SWITCH_OUT_MESSAGE("Wobbuffet") + SEND_IN_MESSAGE("Aegislash"); } THEN { - EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD); + // We do not check gPlayerParty data to avoid triggering FORM_CHANGE_END_BATTLE. + EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); } } @@ -25,11 +32,18 @@ SINGLE_BATTLE_TEST("Aegislash reverts to Shield Form upon fainting (start as Bla OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_GUST); SEND_OUT(player, 1); } + TURN { USE_ITEM(player, ITEM_REVIVE, 0); } + TURN { SWITCH(player, 0); } } SCENE { - MESSAGE("The opposing Wobbuffet used Gust!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, opponent); + HP_BAR(player); MESSAGE("Aegislash fainted!"); + SEND_IN_MESSAGE("Wobbuffet"); + SWITCH_OUT_MESSAGE("Wobbuffet") + SEND_IN_MESSAGE("Aegislash"); } THEN { - EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_AEGISLASH_SHIELD); + // We do not check gPlayerParty data to avoid triggering FORM_CHANGE_END_BATTLE. + EXPECT_EQ(player->species, SPECIES_AEGISLASH_SHIELD); } } diff --git a/test/battle/form_change/gigantamax.c b/test/battle/form_change/gigantamax.c new file mode 100644 index 0000000000..92e2b49224 --- /dev/null +++ b/test/battle/form_change/gigantamax.c @@ -0,0 +1,45 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms change upon Dynamaxing") +{ + u32 species; + bool32 gigantamaxFactor; + PARAMETRIZE { gigantamaxFactor = FALSE; species = SPECIES_VENUSAUR; } + PARAMETRIZE { gigantamaxFactor = TRUE; species = SPECIES_VENUSAUR_GMAX; } + GIVEN { + PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } + } THEN { + EXPECT_EQ(player->species, species); + } +} + +SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms revert upon switching") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } + TURN { SWITCH(player, 1); } + TURN { SWITCH(player, 0); } + } THEN { + EXPECT_EQ(player->species, SPECIES_VENUSAUR); + } +} + +SINGLE_BATTLE_TEST("Dynamax: Venusaur returns its base Form upon battle end after Gigantamaxing") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(TRUE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_VENUSAUR); + } +} diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c index 7cb3d2b783..f246cf1cc6 100644 --- a/test/battle/form_change/mega_evolution.c +++ b/test/battle/form_change/mega_evolution.c @@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Mega Evolution doesn't affect turn order (Gen6)") MESSAGE("The opposing Wobbuffet used Celebrate!"); MESSAGE("Gardevoir used Celebrate!"); } THEN { - ASSUME(player->speed == 205); + EXPECT_EQ(player->speed, 205); } } @@ -99,7 +99,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order (Gen7+)") MESSAGE("Gardevoir used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { - ASSUME(player->speed == 205); + EXPECT_EQ(player->speed, 205); } } @@ -117,7 +117,7 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde MESSAGE("Sableye used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { - ASSUME(player->speed == 105); + EXPECT_EQ(player->speed, 105); } } @@ -192,3 +192,27 @@ SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting" } } } + +SINGLE_BATTLE_TEST("Venusaur returns its base Form upon battle end after Mega Evolving") +{ + GIVEN { + PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_VENUSAUR); + } +} + +SINGLE_BATTLE_TEST("Rayquaza returns its base Form upon battle end after Mega Evolving") +{ + GIVEN { + PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_RAYQUAZA); + } +} diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c index 3addb2afdb..c6bab2f77a 100644 --- a/test/battle/form_change/primal_reversion.c +++ b/test/battle/form_change/primal_reversion.c @@ -332,3 +332,18 @@ DOUBLE_BATTLE_TEST("Primal reversion and other switch-in effects trigger for all EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE - 1); } } + +SINGLE_BATTLE_TEST("Primal reversion is reverted upon battle end") +{ + u32 species, item; + PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; } + PARAMETRIZE { species = SPECIES_KYOGRE; item = ITEM_BLUE_ORB; } + GIVEN { + PLAYER(species) { Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } THEN { + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species); + } +} diff --git a/test/battle/form_change/status.c b/test/battle/form_change/status.c index 612c125497..02e346ed6e 100644 --- a/test/battle/form_change/status.c +++ b/test/battle/form_change/status.c @@ -35,6 +35,5 @@ SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitt EXPECT_EQ(player->species, SPECIES_SHAYMIN_LAND); else EXPECT_EQ(player->species, SPECIES_SHAYMIN_SKY); - } } diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c index edaf391d43..fcb0efded5 100644 --- a/test/battle/form_change/ultra_burst.c +++ b/test/battle/form_change/ultra_burst.c @@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order") MESSAGE("Necrozma used Celebrate!"); MESSAGE("The opposing Wobbuffet used Celebrate!"); } THEN { - ASSUME(player->speed == 263); + EXPECT_EQ(player->speed, 263); } } @@ -119,3 +119,19 @@ SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn") EXPECT_EQ(opponent->species, SPECIES_GARDEVOIR_MEGA); } } + +SINGLE_BATTLE_TEST("Necrozma returns its proper Form upon battle end after Ultra Bursting") +{ + u32 species; + PARAMETRIZE { species = SPECIES_NECROZMA_DUSK_MANE; } + PARAMETRIZE { species = SPECIES_NECROZMA_DAWN_WINGS; } + GIVEN { + PLAYER(species) { Item(ITEM_ULTRANECROZIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); } + } THEN { + EXPECT_EQ(player->species, SPECIES_NECROZMA_ULTRA); + EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), species); + } +} diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index f1683df156..e47cd2ca86 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -532,37 +532,6 @@ DOUBLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are immune to Instruct") } } -SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms change upon Dynamaxing") -{ - u32 species; - bool32 gigantamaxFactor; - PARAMETRIZE { gigantamaxFactor = FALSE; species = SPECIES_VENUSAUR; } - PARAMETRIZE { gigantamaxFactor = TRUE; species = SPECIES_VENUSAUR_GMAX; } - GIVEN { - PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } - } THEN { - EXPECT_EQ(player->species, species); - } -} - -SINGLE_BATTLE_TEST("Dynamax: Pokemon with Gigantamax forms revert upon switching") -{ - GIVEN { - PLAYER(SPECIES_VENUSAUR); - PLAYER(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_SCRATCH, gimmick: GIMMICK_DYNAMAX); } - TURN { SWITCH(player, 1); } - TURN { SWITCH(player, 0); } - } THEN { - EXPECT_EQ(player->species, SPECIES_VENUSAUR); - } -} - SINGLE_BATTLE_TEST("Dynamax: Dynamaxed Pokemon are not affected by Choice items", s16 damage) { u16 item;