Separate out axPokemon subobject

This commit is contained in:
Mateon1
2024-09-20 19:33:26 +02:00
parent 03126263bf
commit ac5136a2da
3 changed files with 56 additions and 50 deletions

View File

@@ -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
#endif // GUARD_AXDATA_H

View File

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

View File

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