match sub_8083568

This commit is contained in:
DizzyEggg 2024-11-26 14:02:23 +01:00
parent f8bb665a92
commit c3547222ef
4 changed files with 38 additions and 62 deletions

View File

@ -358,9 +358,9 @@ typedef struct Entity
/* 0x14 */ PixelPos prevPixelPos;
s32 unk1C;
/* 0x20 */ bool8 isVisible; // Turned off when a Pokémon faints.
u8 fill21;
u8 unk21;
u8 unk22;
u8 fill23;
u8 unk23;
u8 unk24;
/* 0x25 */ u8 room;
// The global spawn index counter starts at 10. Each Pokémon that spawns increments the counter and

View File

@ -0,0 +1,13 @@
#ifndef GUARD_STR_202ED28_H
#define GUARD_STR_202ED28_H
struct unkStruct_202ED28
{
SpriteOAM sprite;
s16 x;
s16 y;
};
extern struct unkStruct_202ED28 gUnknown_202ED28[][6];
#endif

View File

@ -39,6 +39,7 @@
#include "dungeon_ai_movement.h"
#include "constants/iq_skill.h"
#include "structs/str_806B7F8.h"
#include "structs/str_202ED28.h"
struct unkStruct_80F520C
{
@ -2053,15 +2054,6 @@ void UpdateDungeonPokemonSprite(int id, short species, int status, char visible)
extern void sub_8042EC8(Entity *a0, s32 a1);
void DoAxFrame_800558C(struct axObject *a0, s32 spriteX, s32 spriteY, u32 a3, u32 paletteNum, u16 *spriteMasks);
struct unkStruct_202ED28
{
SpriteOAM sprite;
s16 unk8;
s16 unkA;
};
extern struct unkStruct_202ED28 gUnknown_202ED28[][6];
static inline u16 GetUnkFlag(Entity *entity)
{
if ((entity->axObj.axdata.flags & 0x2000))
@ -2105,14 +2097,14 @@ void sub_806C51C(Entity *entity)
if (r2) {
s32 r0;
s32 r3 = sub_806CEBC(entity);
entity->fill21 = 1;
entity->unk21 = 1;
if (entInfo->unkFE == 99) {
if (entity->axObj.unk43_animId2 <= 12) {
s32 r2;
if (entInfo->bideClassStatus.status == STATUS_BIDE) {
r2 = 2;
}
else if (entity->fill23 < 3) {
else if (entity->unk23 < 3) {
r2 = 0;
}
else {
@ -2202,12 +2194,12 @@ void sub_806C51C(Entity *entity)
}
if (entity->pixelPos.x == entity->prevPixelPos.x && entity->pixelPos.y == entity->prevPixelPos.y) {
if (entity->fill23 < 10) {
entity->fill23++;
if (entity->unk23 < 10) {
entity->unk23++;
}
}
else {
entity->fill23 = 0;
entity->unk23 = 0;
}
entity->prevPixelPos.x = entity->pixelPos.x;
@ -2324,12 +2316,12 @@ void sub_806C51C(Entity *entity)
if (entInfo->unk156 != 0) {
u32 finalXSprite, finalYSprite;
finalXSprite = xSprite + spriteStructPtr->unk8;
finalXSprite = xSprite + spriteStructPtr->x;
finalXSprite &= SPRITEOAM_MASK_X;
spriteStructPtr->sprite.attrib2 &= ~SPRITEOAM_MASK_X;
spriteStructPtr->sprite.attrib2 |= finalXSprite;
finalYSprite = ySprite + spriteStructPtr->unkA;
finalYSprite = ySprite + spriteStructPtr->y;
finalYSprite &= SPRITEOAM_MAX_UNK6_4;
finalYSprite <<= SPRITEOAM_SHIFT_UNK6_4;
spriteStructPtr->sprite.unk6 &= 0xF;

View File

@ -1,57 +1,28 @@
#include "global.h"
#include "structs/str_dungeon.h"
#include "structs/str_202ED28.h"
struct unkStruct_202ED28
bool8 sub_8083568(s32 inX, s32 inY, u8 index)
{
SpriteOAM sp;
s16 unk8;
s16 unkA;
};
struct unkStruct_202ED28 gUnknown_202ED28[4]; // seeing index 3 used a lot
bool8 sub_8083568(s32 inX, s32 inY, u8 index) {
s32 x;
s32 y;
SpriteOAM *sp;
s32 tmp2;
#ifdef NONMATCHING
s32 tmp;
#else
register s32 tmp asm("r2");
#endif
x = inX - gDungeon->unk181e8.cameraPixelPos.x;
y = inY - gDungeon->unk181e8.cameraPixelPos.y;
s32 x = inX - gDungeon->unk181e8.cameraPixelPos.x;
s32 y = inY - gDungeon->unk181e8.cameraPixelPos.y;
if (x >= -16 && y >= -16 && x <= 255 && y <= 175)
{
struct unkStruct_202ED28 *ptr = gUnknown_202ED28;
sp = &ptr[index].sp;
u32 finalXSprite, finalYSprite;
tmp = ptr[index].unk8;
tmp = x + ptr[index].unk8;
tmp &= SPRITEOAM_MASK_X;
finalXSprite = x + gUnknown_202ED28[0][index].x;
finalXSprite &= SPRITEOAM_MASK_X;
gUnknown_202ED28[0][index].sprite.attrib2 &= ~SPRITEOAM_MASK_X;
gUnknown_202ED28[0][index].sprite.attrib2 |= finalXSprite;
x = sp->attrib2;
tmp2 = (0xFE00);
tmp2 &= x;
tmp2 |= tmp;
sp->attrib2 = tmp2;
finalYSprite = y + gUnknown_202ED28[0][index].y;
finalYSprite &= SPRITEOAM_MAX_UNK6_4;
finalYSprite <<= SPRITEOAM_SHIFT_UNK6_4;
gUnknown_202ED28[0][index].sprite.unk6 &= 0xF;
gUnknown_202ED28[0][index].sprite.unk6 |= finalYSprite;
tmp = ptr[index].unkA;
tmp = y + ptr[index].unkA;
tmp &= SPRITEOAM_MAX_UNK6_4;
tmp <<= SPRITEOAM_SHIFT_UNK6_4;
x = sp->unk6;
tmp2 = 0xF;
tmp2 &= x;
tmp2 |= tmp;
sp->unk6 = tmp2;
AddSprite(sp, 0, NULL, NULL);
AddSprite(&gUnknown_202ED28[0][index].sprite, 0, NULL, NULL);
return TRUE;
}
else