mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 07:28:17 -05:00
match sub_8083568
This commit is contained in:
parent
f8bb665a92
commit
c3547222ef
|
|
@ -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
|
||||
|
|
|
|||
13
include/structs/str_202ED28.h
Normal file
13
include/structs/str_202ED28.h
Normal 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
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user