mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-14 20:15:55 -05:00
Separate out axPokemon subobject
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
48
src/sprite.c
48
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user