From ac5136a2da7aabf792616eaead987a08be27ad1c Mon Sep 17 00:00:00 2001 From: Mateon1 Date: Fri, 20 Sep 2024 19:33:26 +0200 Subject: [PATCH] Separate out axPokemon subobject --- include/axdata.h | 12 +++++++++--- src/code_800558C.c | 46 ++++++++++++++++++++++---------------------- src/sprite.c | 48 +++++++++++++++++++++++----------------------- 3 files changed, 56 insertions(+), 50 deletions(-) diff --git a/include/axdata.h b/include/axdata.h index 05c9eb88f..c1227e991 100644 --- a/include/axdata.h +++ b/include/axdata.h @@ -76,8 +76,8 @@ typedef struct axmain /* 0x10 */ void *palettes; // ? } axmain; -// size: ? -struct axPokemon +// size: 0x4C +struct axObject { /* 0x0 */ axdata axdata; /* 0x3C */ OpenedFile *spriteFile; // This might be a unkStruct_202EE8C instead and unkStruct_202EE8C.unk0 might be a OpenedFile* etc. See sub_8010F28 @@ -90,6 +90,12 @@ struct axPokemon u8 unk47; u8 unk48; u8 fill49[0x4C - 0x49]; +}; + +// size: ? +struct axPokemon +{ + struct axObject obj; /* 0x4C */ axmain *axmain; u8 flags_0x50; u8 fill51; @@ -104,4 +110,4 @@ struct axPokemon s32 unk7C; }; -#endif // GUARD_AXDATA_H \ No newline at end of file +#endif // GUARD_AXDATA_H diff --git a/src/code_800558C.c b/src/code_800558C.c index db1ce36c3..07ee0ed27 100644 --- a/src/code_800558C.c +++ b/src/code_800558C.c @@ -36,24 +36,24 @@ s32 *sub_8005674(struct unkStructFor800561C *, s32); void DoAxFrame_800558C(struct axPokemon *a0, s32 spriteX, s32 spriteY, u32 a3, u32 paletteNum, u16 *spriteMasks) { - if (!(a0->axdata.flags >> 15)) + if (!(a0->obj.axdata.flags >> 15)) return; - if (a0->axdata.sub1.poseId < 0) + if (a0->obj.axdata.sub1.poseId < 0) RunAxAnimationFrame(a0); - if (!(a0->axdata.flags >> 15)) + if (!(a0->obj.axdata.flags >> 15)) return; - a0->axdata.sub1.xPos = a0->axdata.sub1.xOffset + spriteX; - a0->axdata.sub1.yPos = a0->axdata.sub1.yOffset + spriteY; - a0->axdata.sub1.paletteNum = paletteNum; - a0->axdata.sub1.unk16 = a3; - sub_800533C(a0->axdata.poseData, a0->axdata.spriteData, &a0->axdata.sub1, spriteMasks, !!(a0->axdata.sub1.lastPoseId ^ a0->axdata.sub1.poseId)); - a0->axdata.sub1.lastPoseId = a0->axdata.sub1.poseId; + a0->obj.axdata.sub1.xPos = a0->obj.axdata.sub1.xOffset + spriteX; + a0->obj.axdata.sub1.yPos = a0->obj.axdata.sub1.yOffset + spriteY; + a0->obj.axdata.sub1.paletteNum = paletteNum; + a0->obj.axdata.sub1.unk16 = a3; + sub_800533C(a0->obj.axdata.poseData, a0->obj.axdata.spriteData, &a0->obj.axdata.sub1, spriteMasks, !!(a0->obj.axdata.sub1.lastPoseId ^ a0->obj.axdata.sub1.poseId)); + a0->obj.axdata.sub1.lastPoseId = a0->obj.axdata.sub1.poseId; - if (a0->axdata.flags & 0x800) - a0->axdata.flags &= 0xF7FF; + if (a0->obj.axdata.flags & 0x800) + a0->obj.axdata.flags &= 0xF7FF; } void sub_8005610(OpenedFile *a0, s32 a1, s32 a2, u8 *a3) @@ -97,12 +97,12 @@ void sub_800569C(s16 *a0, struct axPokemon *a1, u8 a2) a0[0] = 0; a0[1] = 0; - if (!(a1->axdata.flags >> 15) || a2 >= 4) + if (!(a1->obj.axdata.flags >> 15) || a2 >= 4) return; - if (a1->axdata.paletteData != NULL) { - ptr = (s16 *)a1->axdata.paletteData; - ptr += a1->axdata.sub1.poseId * 8; + if (a1->obj.axdata.paletteData != NULL) { + ptr = (s16 *)a1->obj.axdata.paletteData; + ptr += a1->obj.axdata.sub1.poseId * 8; ptr2 = ptr + (a2 * 2); if (ptr2[0] == 99 && ptr2[1] == 99) { a0[0] = 99; @@ -110,8 +110,8 @@ void sub_800569C(s16 *a0, struct axPokemon *a1, u8 a2) } else { ptr3 = ptr + (a2 * 2); - a0[0] = a1->axdata.sub1.xOffset + ptr3[0]; - a0[1] = a1->axdata.sub1.yOffset + ptr3[1]; + a0[0] = a1->obj.axdata.sub1.xOffset + ptr3[0]; + a0[1] = a1->obj.axdata.sub1.yOffset + ptr3[1]; } } else { @@ -126,20 +126,20 @@ void sub_8005700(s16 *a0, struct axPokemon *a1) s32 i; s16 *ptr; - if (!(a1->axdata.flags >> 15)) + if (!(a1->obj.axdata.flags >> 15)) return; - if (a1->axdata.paletteData != NULL) { - ptr = (s16 *)a1->axdata.paletteData; - ptr += a1->axdata.sub1.poseId * 8; + if (a1->obj.axdata.paletteData != NULL) { + ptr = (s16 *)a1->obj.axdata.paletteData; + ptr += a1->obj.axdata.sub1.poseId * 8; for (i = 0; i <= 6; i += 2) { if (ptr[i] == 99 && ptr[i + 1] == 99) { a0[0] = 99; a0[1] = 99; } else { - a0[0] = a1->axdata.sub1.xOffset + ptr[i]; - a0[1] = a1->axdata.sub1.yOffset + ptr[i + 1]; + a0[0] = a1->obj.axdata.sub1.xOffset + ptr[i]; + a0[1] = a1->obj.axdata.sub1.yOffset + ptr[i + 1]; } a0 += 2; } diff --git a/src/sprite.c b/src/sprite.c index 93e49bd8c..b41da3349 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -968,45 +968,45 @@ void RunAxAnimationFrame(struct axPokemon *a0) { ax_anim *aData; - if (!check_flag_for_80054BC(a0->axdata.flags)) + if (!check_flag_for_80054BC(a0->obj.axdata.flags)) return; - if (a0->axdata.sub1.poseId >= 0) { - if (a0->axdata.flags & 0x4000) + if (a0->obj.axdata.sub1.poseId >= 0) { + if (a0->obj.axdata.flags & 0x4000) return; - if (a0->axdata.totalFrames < 30000) - a0->axdata.totalFrames++; + if (a0->obj.axdata.totalFrames < 30000) + a0->obj.axdata.totalFrames++; - if (a0->axdata.animWaitFrames != 0) { - a0->axdata.animWaitFrames--; + if (a0->obj.axdata.animWaitFrames != 0) { + a0->obj.axdata.animWaitFrames--; return; } - if (a0->axdata.animFrames != 0 && --a0->axdata.animFrames > 0) + if (a0->obj.axdata.animFrames != 0 && --a0->obj.axdata.animFrames > 0) return; } - if (a0->axdata.activeAnimData->frames == 0) { - if (!(a0->axdata.flags & 0x1000)) { - a0->axdata.flags |= 0x2000; + if (a0->obj.axdata.activeAnimData->frames == 0) { + if (!(a0->obj.axdata.flags & 0x1000)) { + a0->obj.axdata.flags |= 0x2000; return; } - a0->axdata.activeAnimData = a0->axdata.nextAnimData; - a0->axdata.animWaitFrames = Rand32Bit() & 1; + a0->obj.axdata.activeAnimData = a0->obj.axdata.nextAnimData; + a0->obj.axdata.animWaitFrames = Rand32Bit() & 1; } - a0->axdata.flags |= 0x800; + a0->obj.axdata.flags |= 0x800; - aData = a0->axdata.activeAnimData; - a0->axdata.animFrames = aData->frames; - a0->axdata.sub1.poseId = aData->poseId; - a0->axdata.sub1.xOffset = aData->xOffset; - a0->axdata.sub1.yOffset = aData->yOffset; - a0->axdata.sub1.xShadow = aData->xShadow; - a0->axdata.sub1.yShadow = aData->yShadow; - a0->axdata.sub1.unkC = aData->unkFlags; - a0->axdata.sub1.unk10 |= aData->unkFlags; - a0->axdata.activeAnimData = aData + 1; + aData = a0->obj.axdata.activeAnimData; + a0->obj.axdata.animFrames = aData->frames; + a0->obj.axdata.sub1.poseId = aData->poseId; + a0->obj.axdata.sub1.xOffset = aData->xOffset; + a0->obj.axdata.sub1.yOffset = aData->yOffset; + a0->obj.axdata.sub1.xShadow = aData->xShadow; + a0->obj.axdata.sub1.yShadow = aData->yShadow; + a0->obj.axdata.sub1.unkC = aData->unkFlags; + a0->obj.axdata.sub1.unk10 |= aData->unkFlags; + a0->obj.axdata.activeAnimData = aData + 1; }