diff --git a/include/overlay012/ov12_02225864.h b/include/overlay012/ov12_02225864.h index 501e4fdcb0..393d694528 100644 --- a/include/overlay012/ov12_02225864.h +++ b/include/overlay012/ov12_02225864.h @@ -188,7 +188,7 @@ BOOL ScaleLerpContext_UpdateAndApplyToMon(XYTransformContext *param0, PokemonSpr BOOL ScaleLerpContext_UpdateXYAndApplyToMon(XYTransformContext *param0, PokemonSprite *param1); void ShakeContext_Init(XYTransformContext *ctx, s16 extentX, s16 extentY, u32 interval, u32 amount); BOOL ShakeContext_Update(XYTransformContext *param0); -BOOL ShakeContext_UpdateAndApply(XYTransformContext *param0, s16 param1, s16 param2, PokemonSprite *param3); +BOOL ShakeContext_UpdateAndApplyToMon(XYTransformContext *param0, s16 param1, s16 param2, PokemonSprite *param3); void Afterimage_Init(AfterimageContext *ctx, XYTransformContext *transformCtx, XYTransformFunc transformFunc, s16 x, s16 y, u16 delay, u8 count, u8 mode, ManagedSprite *sprite0, ManagedSprite *sprite1, ManagedSprite *sprite2, ManagedSprite *sprite3); BOOL Afterimage_Update(AfterimageContext *param0); void RevolutionContext_InitOvalRevolutions(XYTransformContext *param0, int param1, int param2); diff --git a/include/overlay012/ov12_0222F700.h b/include/overlay012/ov12_0222F700.h index 4b10354aa9..8841c43dc4 100644 --- a/include/overlay012/ov12_0222F700.h +++ b/include/overlay012/ov12_0222F700.h @@ -32,9 +32,9 @@ void ov12_02233454(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager void ov12_02233734(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3); void ov12_022339C4(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3); void BattleAnimScriptFunc_Extrasensory(BattleAnimSystem *param0); -void BattleAnimScriptFunc_FakeOut(BattleAnimSystem *param0); +void BattleAnimScriptFunc_FakeOutCurtain(BattleAnimSystem *param0); void ov12_02234008(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3); -void ov12_02234214(BattleAnimSystem *param0); +void BattleAnimScriptFunc_FakeOut(BattleAnimSystem *param0); void ov12_022342C4(BattleAnimSystem *param0); void ov12_022344D0(BattleAnimSystem *param0); void ov12_0223464C(BattleAnimSystem *param0); diff --git a/src/overlay012/ov12_02225864.c b/src/overlay012/ov12_02225864.c index a447e00492..6a1f64a02c 100644 --- a/src/overlay012/ov12_02225864.c +++ b/src/overlay012/ov12_02225864.c @@ -662,7 +662,7 @@ BOOL ShakeContext_Update(XYTransformContext *ctx) return FALSE; } -BOOL ShakeContext_UpdateAndApply(XYTransformContext *ctx, s16 cx, s16 cy, PokemonSprite *sprite) +BOOL ShakeContext_UpdateAndApplyToMon(XYTransformContext *ctx, s16 cx, s16 cy, PokemonSprite *sprite) { if (ShakeContext_Update(ctx)) { XYTransformContext_ApplyPosOffsetToMon(ctx, sprite, cx, cy); diff --git a/src/overlay012/ov12_02226998.c b/src/overlay012/ov12_02226998.c index 39cf77c7c3..972d5694ec 100644 --- a/src/overlay012/ov12_02226998.c +++ b/src/overlay012/ov12_02226998.c @@ -58,9 +58,9 @@ static const BattleAnimScriptFunc sBattleAnimScriptFuncs[] = { BattleAnimScriptFunc_AlphaFadePokemonSprite, BattleAnimScriptFunc_OdorSleuth, BattleAnimScriptFunc_HideBattler, - BattleAnimScriptFunc_FakeOut, + BattleAnimScriptFunc_FakeOutCurtain, BattleAnimScriptFunc_ScaleBattlerSprite, - ov12_02234214, + BattleAnimScriptFunc_FakeOut, ov12_02226EB0, ov12_022271D8, ov12_022342C4, diff --git a/src/overlay012/ov12_0222AC70.c b/src/overlay012/ov12_0222AC70.c index 9fe9a4558a..96a998dd27 100644 --- a/src/overlay012/ov12_0222AC70.c +++ b/src/overlay012/ov12_0222AC70.c @@ -2088,7 +2088,7 @@ static void BattleAnimTask_FlailDefenderMode(SysTask *task, void *param) Point2D pos; BattleAnimUtil_GetMonSpritePos(ctx->battlerSprites[BATTLER_TYPE_DEFENDER], &pos); - if (ShakeContext_UpdateAndApply(&ctx->shake, pos.x, pos.y, ctx->battlerSprites[BATTLER_TYPE_DEFENDER]) == FALSE) { + if (ShakeContext_UpdateAndApplyToMon(&ctx->shake, pos.x, pos.y, ctx->battlerSprites[BATTLER_TYPE_DEFENDER]) == FALSE) { ctx->common.state++; } } break; diff --git a/src/overlay012/ov12_0222F700.c b/src/overlay012/ov12_0222F700.c index 3720381a1b..7058bc47c9 100644 --- a/src/overlay012/ov12_0222F700.c +++ b/src/overlay012/ov12_0222F700.c @@ -757,22 +757,22 @@ enum ExtrasensoryState { #define EXTRASENSORY_DISTORTION_COUNT 3 // ------------------------------------------------------------------- -// Fake Out +// Fake Out Curtain // ------------------------------------------------------------------- -typedef struct FakeOutContext { +typedef struct FakeOutCurtainContext { BattleAnimSystem *battleAnimSys; int state; int delay; XYTransformContext curtainPos; -} FakeOutContext; +} FakeOutCurtainContext; -enum FakeOutState { - FAKE_OUT_STATE_INIT = 0, - FAKE_OUT_STATE_WAIT, - FAKE_OUT_STATE_MOVE_CURTAIN, - FAKE_OUT_STATE_HIDE_CURTAIN, - FAKE_OUT_STATE_WAIT_FOR_FADE, - FAKE_OUT_STATE_CLEANUP, +enum FakeOutCurtainState { + FAKE_OUT_CURTAIN_STATE_INIT = 0, + FAKE_OUT_CURTAIN_STATE_WAIT, + FAKE_OUT_CURTAIN_STATE_MOVE_CURTAIN, + FAKE_OUT_CURTAIN_STATE_HIDE_CURTAIN, + FAKE_OUT_CURTAIN_STATE_WAIT_FOR_FADE, + FAKE_OUT_CURTAIN_STATE_CLEANUP, }; #define FAKE_OUT_CURTAIN_START_X 127 @@ -791,23 +791,46 @@ typedef struct { AlphaFadeContext unk_14; } UnkStruct_ov12_02233F4C; -typedef struct { - BattleAnimSystem *unk_00; - int unk_04; - s16 unk_08; - s16 unk_0A; - s16 unk_0C; - PokemonSprite *unk_10; - XYTransformContext unk_14; - XYTransformContext unk_38; - int unk_5C; - int unk_60; - int unk_64; - int unk_68; - int unk_6C; - int unk_70; - int unk_74; -} UnkStruct_ov12_02234044; +// ------------------------------------------------------------------- +// Fake Out +// ------------------------------------------------------------------- +typedef struct FakeOutContext { + BattleAnimSystem *battleAnimSys; + int state; + s16 defenderY; + s16 defenderX; + s16 defenderHeight; + PokemonSprite *defenderSprite; + XYTransformContext scale; + XYTransformContext shake; + int sx; + int ex; + int sy; + int ey; + int refScale; + int cycles; + int frames; +} FakeOutContext; + +enum FakeOutState { + FAKE_OUT_STATE_INIT_SCALE = 0, + FAKE_OUT_STATE_SCALE, + FAKE_OUT_STATE_INIT_RESTORE, + FAKE_OUT_STATE_RESTORE, + FAKE_OUT_STATE_CLEANUP, +}; + +#define FAKE_OUT_SCALE_START_X 10 +#define FAKE_OUT_SCALE_START_Y 10 +#define FAKE_OUT_SCALE_END_X 7 +#define FAKE_OUT_SCALE_END_Y 30 +#define FAKE_OUT_SCALE_REF 10 +#define FAKE_OUT_SCALE_CYCLES 1 +#define FAKE_OUT_SHAKE_FRAMES SCALE_POKEMON_SPRITE_FRAMES(4, 3) +#define FAKE_OUT_SHAKE_EXTENT_X 2 +#define FAKE_OUT_SHAKE_EXTENT_Y 0 +#define FAKE_OUT_SHAKE_INTERVAL 1 +#define FAKE_OUT_SHAKE_AMOUNT 2 typedef struct { BattleAnimSystem *unk_00; @@ -2038,7 +2061,7 @@ static void ov12_02230F3C(SysTask *param0, void *param1) v0->unk_10++; break; case 1: - if (ShakeContext_UpdateAndApply(&v0->unk_20, v0->unk_1C, v0->unk_1E, v0->unk_18) == 0) { + if (ShakeContext_UpdateAndApplyToMon(&v0->unk_20, v0->unk_1C, v0->unk_1E, v0->unk_18) == 0) { v0->unk_0C++; } break; @@ -3870,7 +3893,7 @@ static void ov12_02233394(SysTask *param0, void *param1) } break; case 2: - if (ShakeContext_UpdateAndApply(&v0->unk_14, v0->unk_38, v0->unk_3A, v0->unk_10) == 0) { + if (ShakeContext_UpdateAndApplyToMon(&v0->unk_14, v0->unk_38, v0->unk_3A, v0->unk_10) == 0) { v0->unk_0C++; ov12_02233338(v0); } @@ -4327,12 +4350,12 @@ void BattleAnimScriptFunc_Extrasensory(BattleAnimSystem *system) BattleAnimSystem_StartAnimTask(ctx->battleAnimSys, BattleAnimTask_Extrasensory, ctx); } -static void BattleAnimTask_FakeOut(SysTask *task, void *param) +static void BattleAnimTask_FakeOutCurtain(SysTask *task, void *param) { - FakeOutContext *ctx = param; + FakeOutCurtainContext *ctx = param; switch (ctx->state) { - case FAKE_OUT_STATE_INIT: + case FAKE_OUT_CURTAIN_STATE_INIT: PosLerpContext_Init( &ctx->curtainPos, FAKE_OUT_CURTAIN_START_X, @@ -4346,7 +4369,7 @@ static void BattleAnimTask_FakeOut(SysTask *task, void *param) ctx->delay = FAKE_OUT_CURTAIN_DELAY; ctx->state++; break; - case FAKE_OUT_STATE_WAIT: + case FAKE_OUT_CURTAIN_STATE_WAIT: ctx->delay--; if (ctx->delay < 0) { @@ -4361,7 +4384,7 @@ static void BattleAnimTask_FakeOut(SysTask *task, void *param) ctx->state++; } break; - case FAKE_OUT_STATE_MOVE_CURTAIN: + case FAKE_OUT_CURTAIN_STATE_MOVE_CURTAIN: if (PosLerpContext_Update(&ctx->curtainPos)) { G2_SetWnd0Position( (HW_LCD_WIDTH / 2 - 1) - ctx->curtainPos.x, @@ -4372,7 +4395,7 @@ static void BattleAnimTask_FakeOut(SysTask *task, void *param) ctx->state++; } break; - case FAKE_OUT_STATE_HIDE_CURTAIN: + case FAKE_OUT_CURTAIN_STATE_HIDE_CURTAIN: if (PaletteData_GetSelectedBuffersMask(BattleAnimSystem_GetPaletteData(ctx->battleAnimSys)) == 0) { ctx->state++; GX_SetVisibleWnd(GX_WNDMASK_NONE); @@ -4386,25 +4409,25 @@ static void BattleAnimTask_FakeOut(SysTask *task, void *param) FAKE_OUT_CURTAIN_COLOR); } break; - case FAKE_OUT_STATE_WAIT_FOR_FADE: + case FAKE_OUT_CURTAIN_STATE_WAIT_FOR_FADE: if (PaletteData_GetSelectedBuffersMask(BattleAnimSystem_GetPaletteData(ctx->battleAnimSys)) == 0) { ctx->state++; } break; - case FAKE_OUT_STATE_CLEANUP: + case FAKE_OUT_CURTAIN_STATE_CLEANUP: Heap_Free(ctx); BattleAnimSystem_EndAnimTask(ctx->battleAnimSys, task); break; } } -void BattleAnimScriptFunc_FakeOut(BattleAnimSystem *system) +void BattleAnimScriptFunc_FakeOutCurtain(BattleAnimSystem *system) { - // BUG: Should be sizeof(FakeOutContext), but since sizeof(ExtrasensoryContext) is larger, it works anyway. - FakeOutContext *ctx = BattleAnimUtil_Alloc(system, sizeof(ExtrasensoryContext)); + // BUG: Should be sizeof(FakeOutCurtainContext), but since sizeof(ExtrasensoryContext) is larger, it works anyway. + FakeOutCurtainContext *ctx = BattleAnimUtil_Alloc(system, sizeof(ExtrasensoryContext)); ctx->battleAnimSys = system; - BattleAnimSystem_StartAnimTask(ctx->battleAnimSys, BattleAnimTask_FakeOut, ctx); + BattleAnimSystem_StartAnimTask(ctx->battleAnimSys, BattleAnimTask_FakeOutCurtain, ctx); } static void ov12_02233F4C(SysTask *param0, void *param1) @@ -4458,82 +4481,121 @@ void ov12_02234008(BattleAnimSystem *param0, SpriteSystem *param1, SpriteManager BattleAnimSystem_StartAnimTask(v0->unk_00, ov12_02233F4C, v0); } -static void ov12_02234044(SysTask *param0, void *param1) +static void BattleAnimTask_FakeOut(SysTask *task, void *param) { - UnkStruct_ov12_02234044 *v0 = param1; - BOOL v1; + FakeOutContext *ctx = param; + BOOL active; - switch (v0->unk_04) { - case 0: - ScaleLerpContext_InitXY(&v0->unk_14, v0->unk_5C, v0->unk_60, v0->unk_64, v0->unk_68, v0->unk_6C, v0->unk_74 >> 16); - ShakeContext_UpdateAndApply(&v0->unk_38, v0->unk_0A, v0->unk_08, v0->unk_10); - ScaleLerpContext_UpdateXYAndApplyToMon(&v0->unk_14, v0->unk_10); - BattleAnimUtil_SetPokemonSpriteAnchoredPosition(v0->unk_10, v0->unk_08, v0->unk_0C, v0->unk_14.data[4], 0); - v0->unk_04++; + switch (ctx->state) { + case FAKE_OUT_STATE_INIT_SCALE: + ScaleLerpContext_InitXY( + &ctx->scale, + ctx->sx, + ctx->ex, + ctx->sy, + ctx->ey, + ctx->refScale, + SCALE_POKEMON_SPRITE_SCALE_FRAMES(ctx->frames)); + ShakeContext_UpdateAndApplyToMon(&ctx->shake, ctx->defenderX, ctx->defenderY, ctx->defenderSprite); + ScaleLerpContext_UpdateXYAndApplyToMon(&ctx->scale, ctx->defenderSprite); + BattleAnimUtil_SetPokemonSpriteAnchoredPosition( + ctx->defenderSprite, + ctx->defenderY, + ctx->defenderHeight, + ctx->scale.data[XY_PARAM_CUR_Y], + BATTLE_ANIM_ANCHOR_BOTTOM); + ctx->state++; break; - case 1: - ShakeContext_UpdateAndApply(&v0->unk_38, v0->unk_0A, v0->unk_08, v0->unk_10); - v1 = ScaleLerpContext_UpdateXYAndApplyToMon(&v0->unk_14, v0->unk_10); - BattleAnimUtil_SetPokemonSpriteAnchoredPosition(v0->unk_10, v0->unk_08, v0->unk_0C, v0->unk_14.data[4], 0); + case FAKE_OUT_STATE_SCALE: + ShakeContext_UpdateAndApplyToMon(&ctx->shake, ctx->defenderX, ctx->defenderY, ctx->defenderSprite); + active = ScaleLerpContext_UpdateXYAndApplyToMon(&ctx->scale, ctx->defenderSprite); + BattleAnimUtil_SetPokemonSpriteAnchoredPosition( + ctx->defenderSprite, + ctx->defenderY, + ctx->defenderHeight, + ctx->scale.data[XY_PARAM_CUR_Y], + BATTLE_ANIM_ANCHOR_BOTTOM); - if (v1 == 0) { - v0->unk_04++; + if (active == FALSE) { + ctx->state++; } break; - case 2: - ScaleLerpContext_InitXY(&v0->unk_14, v0->unk_60, v0->unk_5C, v0->unk_68, v0->unk_64, v0->unk_6C, v0->unk_74 & 0xffff); - ShakeContext_UpdateAndApply(&v0->unk_38, v0->unk_0A, v0->unk_08, v0->unk_10); - ScaleLerpContext_UpdateXYAndApplyToMon(&v0->unk_14, v0->unk_10); - BattleAnimUtil_SetPokemonSpriteAnchoredPosition(v0->unk_10, v0->unk_08, v0->unk_0C, v0->unk_14.data[4], 0); - v0->unk_04++; + case FAKE_OUT_STATE_INIT_RESTORE: + ScaleLerpContext_InitXY( + &ctx->scale, + ctx->ex, + ctx->sx, + ctx->ey, + ctx->sy, + ctx->refScale, + SCALE_POKEMON_SPRITE_RESTORE_FRAMES(ctx->frames)); + ShakeContext_UpdateAndApplyToMon(&ctx->shake, ctx->defenderX, ctx->defenderY, ctx->defenderSprite); + ScaleLerpContext_UpdateXYAndApplyToMon(&ctx->scale, ctx->defenderSprite); + BattleAnimUtil_SetPokemonSpriteAnchoredPosition( + ctx->defenderSprite, + ctx->defenderY, + ctx->defenderHeight, + ctx->scale.data[XY_PARAM_CUR_Y], + BATTLE_ANIM_ANCHOR_BOTTOM); + ctx->state++; break; - case 3: - ShakeContext_UpdateAndApply(&v0->unk_38, v0->unk_0A, v0->unk_08, v0->unk_10); - v1 = ScaleLerpContext_UpdateXYAndApplyToMon(&v0->unk_14, v0->unk_10); - BattleAnimUtil_SetPokemonSpriteAnchoredPosition(v0->unk_10, v0->unk_08, v0->unk_0C, v0->unk_14.data[4], 0); + case FAKE_OUT_STATE_RESTORE: + ShakeContext_UpdateAndApplyToMon(&ctx->shake, ctx->defenderX, ctx->defenderY, ctx->defenderSprite); + active = ScaleLerpContext_UpdateXYAndApplyToMon(&ctx->scale, ctx->defenderSprite); + BattleAnimUtil_SetPokemonSpriteAnchoredPosition( + ctx->defenderSprite, + ctx->defenderY, + ctx->defenderHeight, + ctx->scale.data[XY_PARAM_CUR_Y], + BATTLE_ANIM_ANCHOR_BOTTOM); - if (v1 == 0) { - v0->unk_70--; + if (active == FALSE) { + ctx->cycles--; - if (v0->unk_70 <= 0) { - v0->unk_04++; + if (ctx->cycles <= 0) { + ctx->state++; } else { - v0->unk_04 = 0; + ctx->state = 0; } } break; - case 4: - PokemonSprite_SetAttribute(v0->unk_10, MON_SPRITE_X_CENTER, v0->unk_0A); - PokemonSprite_SetAttribute(v0->unk_10, MON_SPRITE_Y_CENTER, v0->unk_08); + case FAKE_OUT_STATE_CLEANUP: + PokemonSprite_SetAttribute(ctx->defenderSprite, MON_SPRITE_X_CENTER, ctx->defenderX); + PokemonSprite_SetAttribute(ctx->defenderSprite, MON_SPRITE_Y_CENTER, ctx->defenderY); - PokemonSprite_SetAttribute(v0->unk_10, MON_SPRITE_SCALE_X, 0x100); - PokemonSprite_SetAttribute(v0->unk_10, MON_SPRITE_SCALE_Y, 0x100); + PokemonSprite_SetAttribute(ctx->defenderSprite, MON_SPRITE_SCALE_X, MON_AFFINE_SCALE(1)); + PokemonSprite_SetAttribute(ctx->defenderSprite, MON_SPRITE_SCALE_Y, MON_AFFINE_SCALE(1)); - Heap_Free(v0); - BattleAnimSystem_EndAnimTask(v0->unk_00, param0); + Heap_Free(ctx); + BattleAnimSystem_EndAnimTask(ctx->battleAnimSys, task); return; } } -void ov12_02234214(BattleAnimSystem *param0) +void BattleAnimScriptFunc_FakeOut(BattleAnimSystem *system) { - UnkStruct_ov12_02234044 *v0 = BattleAnimUtil_Alloc(param0, sizeof(UnkStruct_ov12_02234044)); + FakeOutContext *ctx = BattleAnimUtil_Alloc(system, sizeof(FakeOutContext)); - v0->unk_00 = param0; - v0->unk_0C = BattleAnimSystem_GetBattlerSpriteHeight(v0->unk_00, BattleAnimSystem_GetDefender(v0->unk_00)); - v0->unk_10 = BattleAnimSystem_GetBattlerSprite(v0->unk_00, BattleAnimSystem_GetDefender(v0->unk_00)); - v0->unk_08 = PokemonSprite_GetAttribute(v0->unk_10, MON_SPRITE_Y_CENTER); - v0->unk_0A = PokemonSprite_GetAttribute(v0->unk_10, MON_SPRITE_X_CENTER); - v0->unk_5C = 10; - v0->unk_60 = 7; - v0->unk_64 = 10; - v0->unk_68 = 30; - v0->unk_6C = 10; - v0->unk_70 = 1; - v0->unk_74 = ((4 << 16) | 3); + ctx->battleAnimSys = system; + ctx->defenderHeight = BattleAnimSystem_GetBattlerSpriteHeight(ctx->battleAnimSys, BattleAnimSystem_GetDefender(ctx->battleAnimSys)); + ctx->defenderSprite = BattleAnimSystem_GetBattlerSprite(ctx->battleAnimSys, BattleAnimSystem_GetDefender(ctx->battleAnimSys)); + ctx->defenderY = PokemonSprite_GetAttribute(ctx->defenderSprite, MON_SPRITE_Y_CENTER); + ctx->defenderX = PokemonSprite_GetAttribute(ctx->defenderSprite, MON_SPRITE_X_CENTER); + ctx->sx = FAKE_OUT_SCALE_START_X; + ctx->ex = FAKE_OUT_SCALE_END_X; + ctx->sy = FAKE_OUT_SCALE_START_Y; + ctx->ey = FAKE_OUT_SCALE_END_Y; + ctx->refScale = FAKE_OUT_SCALE_REF; + ctx->cycles = FAKE_OUT_SCALE_CYCLES; + ctx->frames = FAKE_OUT_SHAKE_FRAMES; - ShakeContext_Init(&v0->unk_38, 2, 0, 1, 2); - BattleAnimSystem_StartAnimTask(v0->unk_00, ov12_02234044, v0); + ShakeContext_Init( + &ctx->shake, + FAKE_OUT_SHAKE_EXTENT_X, + FAKE_OUT_SHAKE_EXTENT_Y, + FAKE_OUT_SHAKE_INTERVAL, + FAKE_OUT_SHAKE_AMOUNT); + BattleAnimSystem_StartAnimTask(ctx->battleAnimSys, BattleAnimTask_FakeOut, ctx); } static void ov12_02234290(SysTask *param0, void *param1) @@ -4596,7 +4658,7 @@ static void ov12_022343A0(SysTask *param0, void *param1) v0->unk_04++; break; case 1: - if (ShakeContext_UpdateAndApply(&v0->unk_40, v0->unk_18, v0->unk_1A, v0->unk_14) == 0) { + if (ShakeContext_UpdateAndApplyToMon(&v0->unk_40, v0->unk_18, v0->unk_1A, v0->unk_14) == 0) { v0->unk_04++; PosLerpContext_Init(&v0->unk_1C, v0->unk_18, v0->unk_18 + (40 * v0->unk_0C), v0->unk_1A, v0->unk_1A + (-7 * v0->unk_10), 4); } @@ -4668,7 +4730,7 @@ static void ov12_02234528(SysTask *param0, void *param1) v1 = PokemonSprite_GetAttribute(v0->unk_10, MON_SPRITE_X_CENTER); v2 = PokemonSprite_GetAttribute(v0->unk_10, MON_SPRITE_Y_CENTER); - if (ShakeContext_UpdateAndApply(&v0->unk_3C, v1, v2, v0->unk_10) == 0) { + if (ShakeContext_UpdateAndApplyToMon(&v0->unk_3C, v1, v2, v0->unk_10) == 0) { v0->unk_04++; PosLerpContext_Init(&v0->unk_18, v0->unk_14 + (-40 * v0->unk_08), v0->unk_14, v0->unk_16 + (16 * v0->unk_0C), v0->unk_16, 4); }