Document second fake out script func

This commit is contained in:
Fexty12573
2025-07-30 13:00:22 +02:00
parent 9760f65f28
commit 5e5afceee7
6 changed files with 166 additions and 104 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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,

View File

@@ -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;

View File

@@ -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);
}