Sprite OAM clean-up

This commit is contained in:
DizzyEggg 2024-12-21 15:53:40 +01:00
parent 3bed5dacd3
commit 5a18f5af52
8 changed files with 265 additions and 366 deletions

View File

@ -114,4 +114,151 @@ typedef struct SpriteOAM
#define SPRITEOAM_SHIFT_UNK6_4 4
#define SPRITEOAM_MASK_UNK6_4 (SPRITEOAM_MAX_UNK6_4 << SPRITEOAM_SHIFT_UNK6_4) // ~ 0xF
// These seems to work most of the time when dealing with sprite pointers. However, these DO NOT match when dealing with local variables, for example a Sprite struct on the stack.
// These have to be macros, because static inlines WON'T match.
#define SpriteSetAffine1(spritePtr, _affine1) \
{ \
u32 affine1 = _affine1; \
affine1 &= SPRITEOAM_MAX_AFFINEMODE1; \
affine1 <<= SPRITEOAM_SHIFT_AFFINEMODE1; \
(spritePtr)->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1; \
(spritePtr)->attrib1 |= affine1; \
}
#define SpriteSetAffine2(spritePtr, _affine2) \
{ \
u32 affine2 = _affine2; \
affine2 &= SPRITEOAM_MAX_AFFINEMODE2; \
affine2 <<= SPRITEOAM_SHIFT_AFFINEMODE2; \
(spritePtr)->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2; \
(spritePtr)->attrib1 |= affine2; \
}
#define SpriteSetObjMode(spritePtr, _objMode) \
{ \
u32 objMode = _objMode; \
objMode &= SPRITEOAM_MAX_OBJMODE; \
objMode <<= SPRITEOAM_SHIFT_OBJMODE; \
(spritePtr)->attrib1 &= ~SPRITEOAM_MASK_OBJMODE; \
(spritePtr)->attrib1 |= objMode; \
}
#define SpriteSetMosaic(spritePtr, _mosaic) \
{ \
u32 mosaic = _mosaic; \
mosaic &= SPRITEOAM_MAX_MOSAIC; \
mosaic <<= SPRITEOAM_SHIFT_MOSAIC; \
(spritePtr)->attrib1 &= ~SPRITEOAM_MASK_MOSAIC; \
(spritePtr)->attrib1 |= mosaic; \
}
#define SpriteSetBpp(spritePtr, _bpp) \
{ \
u32 bpp = _bpp; \
bpp &= SPRITEOAM_MAX_BPP; \
bpp <<= SPRITEOAM_SHIFT_BPP; \
(spritePtr)->attrib1 &= ~SPRITEOAM_MASK_BPP; \
(spritePtr)->attrib1 |= bpp; \
}
#define SpriteSetShape(spritePtr, _shape) \
{ \
u32 shape = _shape; \
shape &= SPRITEOAM_MAX_SHAPE; \
shape <<= SPRITEOAM_SHIFT_SHAPE; \
(spritePtr)->attrib1 &= ~SPRITEOAM_MASK_SHAPE; \
(spritePtr)->attrib1 |= shape; \
}
#define SpriteSetTileNum(spritePtr, _tileNum) \
{ \
u32 tileNum = _tileNum; \
tileNum &= SPRITEOAM_MAX_TILENUM; \
tileNum <<= SPRITEOAM_SHIFT_TILENUM; \
(spritePtr)->attrib3 &= ~SPRITEOAM_MASK_TILENUM; \
(spritePtr)->attrib3 |= tileNum; \
}
#define SpriteSetPriority(spritePtr, _priority) \
{ \
u32 priority = _priority; \
priority &= SPRITEOAM_MAX_PRIORITY; \
priority <<= SPRITEOAM_SHIFT_PRIORITY; \
(spritePtr)->attrib3 &= ~SPRITEOAM_MASK_PRIORITY; \
(spritePtr)->attrib3 |= priority; \
}
#define SpriteSetPalNum(spritePtr, _palNum) \
{ \
u32 palNum = _palNum; \
palNum &= SPRITEOAM_MAX_PALETTENUM; \
palNum <<= SPRITEOAM_SHIFT_PALETTENUM; \
(spritePtr)->attrib3 &= ~SPRITEOAM_MASK_PALETTENUM; \
(spritePtr)->attrib3 |= palNum; \
}
#define SpriteSetMatrixNum(spritePtr, _matrixNum) \
{ \
u32 matrixNum = _matrixNum; \
matrixNum &= SPRITEOAM_MAX_MATRIXNUM; \
matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM; \
(spritePtr)->attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; \
(spritePtr)->attrib2 |= matrixNum; \
}
#define SpriteSetSize(spritePtr, _size) \
{ \
u32 size = _size; \
size &= SPRITEOAM_MAX_SIZE; \
size <<= SPRITEOAM_SHIFT_SIZE; \
(spritePtr)->attrib2 &= ~SPRITEOAM_MASK_SIZE; \
(spritePtr)->attrib2 |= size; \
}
#define SpriteSetX(spritePtr, _x) \
{ \
u32 xSpriteVal = _x; \
xSpriteVal &= SPRITEOAM_MAX_X; \
xSpriteVal <<= SPRITEOAM_SHIFT_X; \
(spritePtr)->attrib2 &= ~SPRITEOAM_MASK_X; \
(spritePtr)->attrib2 |= xSpriteVal; \
}
#define SpriteSetY(spritePtr, _y) \
{ \
u32 ySpriteVal = _y; \
ySpriteVal &= SPRITEOAM_MAX_UNK6_4; \
ySpriteVal <<= SPRITEOAM_SHIFT_UNK6_4; \
(spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_4; \
(spritePtr)->unk6 |= ySpriteVal; \
}
#define SpriteSetUnk6_0(spritePtr, _unk6_0) \
{ \
u32 unk6_0 = _unk6_0; \
unk6_0 &= SPRITEOAM_MAX_UNK6_0; \
unk6_0 <<= SPRITEOAM_SHIFT_UNK6_0; \
(spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_0; \
(spritePtr)->unk6 |= unk6_0; \
}
#define SpriteSetUnk6_1(spritePtr, _unk6_1) \
{ \
u32 unk6_1 = _unk6_1; \
unk6_1 &= SPRITEOAM_MAX_UNK6_1; \
unk6_1 <<= SPRITEOAM_SHIFT_UNK6_1; \
(spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_1; \
(spritePtr)->unk6 |= unk6_1; \
}
#define SpriteSetUnk6_2(spritePtr, _unk6_2) \
{ \
u32 unk6_2 = _unk6_2; \
unk6_2 &= SPRITEOAM_MAX_UNK6_2; \
unk6_2 <<= SPRITEOAM_SHIFT_UNK6_2; \
(spritePtr)->unk6 &= ~SPRITEOAM_MASK_UNK6_2; \
(spritePtr)->unk6 |= unk6_2; \
}
#endif // GUARD_SPRITE_OAM_H

View File

@ -367,52 +367,23 @@ void sub_803EDF0(void)
// sprite oam memes strike again
if (x >= -32 && y >= -8 && x < 240 && y < 160) {
u32 r9;
u32 unk6;
u32 shape, spriteX, palNum, prio, tileNum;
SpriteSetY(&gUnknown_202EDDC, y);
SpriteSetAffine1(&gUnknown_202EDDC, 0);
SpriteSetAffine2(&gUnknown_202EDDC, 0);
SpriteSetObjMode(&gUnknown_202EDDC, 0);
SpriteSetMosaic(&gUnknown_202EDDC, 0);
SpriteSetBpp(&gUnknown_202EDDC, 0);
SpriteSetShape(&gUnknown_202EDDC, 1);
SpriteSetX(&gUnknown_202EDDC, x);
SpriteSetMatrixNum(&gUnknown_202EDDC, 0);
SpriteSetSize(&gUnknown_202EDDC, 1);
SpriteSetTileNum(&gUnknown_202EDDC, 0x216);
SpriteSetPriority(&gUnknown_202EDDC, gDungeon->unk181e8.unk18208);
SpriteSetPalNum(&gUnknown_202EDDC, gUnknown_202EDE8.unk2);
unk6 = y & SPRITEOAM_MAX_UNK6_4;
unk6 <<= SPRITEOAM_SHIFT_UNK6_4;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
gUnknown_202EDDC.unk6 |= unk6;
gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
r9 = 3;
gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_BPP;
shape = 1 << SPRITEOAM_SHIFT_SHAPE;
gUnknown_202EDDC.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
gUnknown_202EDDC.attrib1 |= shape;
spriteX = x & SPRITEOAM_MAX_X;
gUnknown_202EDDC.attrib2 &= ~SPRITEOAM_MASK_X;
gUnknown_202EDDC.attrib2 |= spriteX;
gUnknown_202EDDC.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
gUnknown_202EDDC.attrib2 &= ~SPRITEOAM_MASK_SIZE;
gUnknown_202EDDC.attrib2 |= 1 << SPRITEOAM_SHIFT_SIZE;
tileNum = 0x216 << SPRITEOAM_SHIFT_TILENUM;
gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_TILENUM;
gUnknown_202EDDC.attrib3 |= tileNum;
prio = gDungeon->unk181e8.unk18208 & r9;
prio <<= SPRITEOAM_SHIFT_PRIORITY;
gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
gUnknown_202EDDC.attrib3 |= prio;
palNum = gUnknown_202EDE8.unk2;
palNum &= 0xF;
palNum <<= SPRITEOAM_SHIFT_PALETTENUM;
gUnknown_202EDDC.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
gUnknown_202EDDC.attrib3 |= palNum;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_0;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_1;
gUnknown_202EDDC.unk6 &= ~SPRITEOAM_MASK_UNK6_2;
SpriteSetUnk6_0(&gUnknown_202EDDC, 0);
SpriteSetUnk6_1(&gUnknown_202EDDC, 0);
SpriteSetUnk6_2(&gUnknown_202EDDC, 0);
AddSprite(&gUnknown_202EDDC, 0x100, NULL, NULL);
}

View File

@ -763,41 +763,19 @@ void sub_8052FB8(const u8 *str)
else {
r9++;
if (r9 & 8) {
u32 shape, tileNum, unk6, spriteX, mask, palNum;
sUnknown_202F1F0.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
sUnknown_202F1F0.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
sUnknown_202F1F0.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
sUnknown_202F1F0.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
sUnknown_202F1F0.attrib1 &= ~SPRITEOAM_MASK_BPP;
sUnknown_202F1F0.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
shape = 1;
shape <<= SPRITEOAM_SHIFT_SHAPE;
ASM_MATCH_TRICK(shape);
sUnknown_202F1F0.attrib1 |= shape;
tileNum = 0x3F0 << SPRITEOAM_SHIFT_TILENUM;
sUnknown_202F1F0.attrib3 &= ~SPRITEOAM_MASK_TILENUM;
sUnknown_202F1F0.attrib3 |= tileNum;
sUnknown_202F1F0.attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
mask = 0xF;
palNum = (15 & SPRITEOAM_MAX_PALETTENUM) << SPRITEOAM_SHIFT_PALETTENUM;
sUnknown_202F1F0.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
sUnknown_202F1F0.attrib3 |= palNum;
unk6 = 0x78 << SPRITEOAM_SHIFT_UNK6_4;
sUnknown_202F1F0.unk6 &= mask; // ~SPRITEOAM_MASK_UNK6_4
sUnknown_202F1F0.unk6 |= unk6;
sUnknown_202F1F0.attrib2 &= ~SPRITEOAM_MASK_X;
sUnknown_202F1F0.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
spriteX = 0x70 & SPRITEOAM_MAX_X;
sUnknown_202F1F0.attrib2 &= ~SPRITEOAM_MASK_SIZE;
sUnknown_202F1F0.attrib2 |= spriteX;
SpriteSetAffine1(&sUnknown_202F1F0, 0);
SpriteSetAffine2(&sUnknown_202F1F0, 0);
SpriteSetObjMode(&sUnknown_202F1F0, 0);
SpriteSetMosaic(&sUnknown_202F1F0, 0);
SpriteSetBpp(&sUnknown_202F1F0, 0);
SpriteSetShape(&sUnknown_202F1F0, 1);
SpriteSetTileNum(&sUnknown_202F1F0, 0x3F0);
SpriteSetPriority(&sUnknown_202F1F0, 0);
SpriteSetPalNum(&sUnknown_202F1F0, 15);
SpriteSetY(&sUnknown_202F1F0, 120);
SpriteSetMatrixNum(&sUnknown_202F1F0, 0);
SpriteSetSize(&sUnknown_202F1F0, 0);
SpriteSetX(&sUnknown_202F1F0, 112);
AddSprite(&sUnknown_202F1F0, 0x100, NULL, NULL);
}
@ -1081,39 +1059,20 @@ static void CreateMessageLogArrow(bool8 upArrow, s32 y)
{
struct UnkTextStruct1 *unkStr = &gUnknown_2027370[0];
if (!(gUnknown_202EDCC & 8)) {
u32 matrixNum, xSprite, mask, ySprite, shape, yMask;
sMessageLogArrowSpriteOAM.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
sMessageLogArrowSpriteOAM.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
sMessageLogArrowSpriteOAM.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
sMessageLogArrowSpriteOAM.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
sMessageLogArrowSpriteOAM.attrib1 &= ~SPRITEOAM_MASK_BPP;
matrixNum = (upArrow != FALSE) ? (16) : 0;
// You may be thinking what is this empty loop doing here, but the better question is: Why do these unholy sprite macros exist?
do {} while (0);
matrixNum <<= 9;
sMessageLogArrowSpriteOAM.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
sMessageLogArrowSpriteOAM.attrib2 |= matrixNum;
mask = 0xF; // ~SPRITEOAM_MASK_UNK6_4
yMask = SPRITEOAM_MAX_UNK6_4;
ySprite = (yMask & (unkStr->unk2 * 8 + y)) << 4;
sMessageLogArrowSpriteOAM.unk6 &= mask;
sMessageLogArrowSpriteOAM.unk6 |= ySprite;
xSprite = SPRITEOAM_MAX_X & ((unkStr->unk0 * 8) + 92);
sMessageLogArrowSpriteOAM.attrib2 &= ~SPRITEOAM_MASK_X;
sMessageLogArrowSpriteOAM.attrib2 |= xSprite;
shape = 1;
shape <<= SPRITEOAM_SHIFT_SHAPE;
sMessageLogArrowSpriteOAM.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
sMessageLogArrowSpriteOAM.attrib1 |= shape;
sMessageLogArrowSpriteOAM.attrib2 &= ~SPRITEOAM_MASK_SIZE;
sMessageLogArrowSpriteOAM.attrib3 = 0xF3F0;
SpriteSetAffine1(&sMessageLogArrowSpriteOAM, 0);
SpriteSetAffine2(&sMessageLogArrowSpriteOAM, 0);
SpriteSetObjMode(&sMessageLogArrowSpriteOAM, 0);
SpriteSetMosaic(&sMessageLogArrowSpriteOAM, 0);
SpriteSetBpp(&sMessageLogArrowSpriteOAM, 0);
SpriteSetMatrixNum(&sMessageLogArrowSpriteOAM, (upArrow != FALSE) ? (16) : 0);
SpriteSetPalNum(&sMessageLogArrowSpriteOAM, 15);
SpriteSetY(&sMessageLogArrowSpriteOAM, (unkStr->unk2 * 8) + y);
SpriteSetX(&sMessageLogArrowSpriteOAM, (unkStr->unk0 * 8) + 92);
SpriteSetShape(&sMessageLogArrowSpriteOAM, 1);
SpriteSetSize(&sMessageLogArrowSpriteOAM, 0);
SpriteSetPriority(&sMessageLogArrowSpriteOAM, 0);
SpriteSetPalNum(&sMessageLogArrowSpriteOAM, 15);
SpriteSetTileNum(&sMessageLogArrowSpriteOAM, 0x3f0);
AddSprite(&sMessageLogArrowSpriteOAM, 127, NULL, NULL);
}

View File

@ -1410,52 +1410,21 @@ void InitShadowSprites(s32 param_1, s32 param_2)
CloseFile(file);
for (spriteIndex = 0; spriteIndex < 3; spriteIndex++) {
u32 objMode, shape, size, tileNum, priority;
SpriteOAM *sprite = &gShadowSprites[spriteIndex];
sprite->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
sprite->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
objMode = 0;
objMode &= SPRITEOAM_MAX_OBJMODE;
objMode <<= SPRITEOAM_SHIFT_OBJMODE;
sprite->attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
sprite->attrib1 |= objMode;
sprite->attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
sprite->attrib1 &= ~SPRITEOAM_MASK_BPP;
shape = gShadowSpriteSizeFlags_8107698[spriteIndex].shape;
shape &= SPRITEOAM_MAX_SHAPE;
shape <<= SPRITEOAM_SHIFT_SHAPE;
sprite->attrib1 &= ~SPRITEOAM_MASK_SHAPE;
sprite->attrib1 |= shape;
sprite->attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
size = gShadowSpriteSizeFlags_8107698[spriteIndex].size;
size &= SPRITEOAM_MAX_SIZE;
size <<= SPRITEOAM_SHIFT_SIZE;
sprite->attrib2 &= ~SPRITEOAM_MASK_SIZE;
sprite->attrib2 |= size;
tileNum = gShadowSpriteSizeFlags_8107698[spriteIndex].tileNum + param_1;
tileNum &= SPRITEOAM_MAX_TILENUM;
tileNum <<= SPRITEOAM_SHIFT_TILENUM;
sprite->attrib3 &= ~SPRITEOAM_MASK_TILENUM;
sprite->attrib3 |= tileNum;
priority = param_2;
priority &= SPRITEOAM_MAX_PRIORITY;
priority <<= SPRITEOAM_SHIFT_PRIORITY;
sprite->attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
sprite->attrib3 |= priority;
sprite->attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
sprite->unk6 &= ~SPRITEOAM_MASK_UNK6_0;
sprite->unk6 &= ~SPRITEOAM_MASK_UNK6_1;
SpriteSetAffine1(sprite, 0);
SpriteSetAffine2(sprite, 0);
SpriteSetObjMode(sprite, 0);
SpriteSetMosaic(sprite, 0);
SpriteSetBpp(sprite, 0);
SpriteSetShape(sprite, gShadowSpriteSizeFlags_8107698[spriteIndex].shape);
SpriteSetMatrixNum(sprite, 0);
SpriteSetSize(sprite, gShadowSpriteSizeFlags_8107698[spriteIndex].size);
SpriteSetTileNum(sprite, gShadowSpriteSizeFlags_8107698[spriteIndex].tileNum + param_1);
SpriteSetPriority(sprite, param_2);
SpriteSetPalNum(sprite, 0);
SpriteSetUnk6_0(sprite, 0);
SpriteSetUnk6_1(sprite, 0);
}
}
@ -1466,24 +1435,16 @@ bool8 AddShadowSprite(s16 species, s16* a2, s16* a3)
if (species != MONSTER_DIGLETT && species != MONSTER_DUGTRIO) {
s32 shadowSize = GetShadowSize(species);
s32 x, y;
SpriteOAM* spr;
x = a2[0] + a3[8];
y = a2[1] + a3[9];
x += gUnknown_81076C4[shadowSize];
y -= 4;
x &= SPRITEOAM_MAX_X;
x <<= SPRITEOAM_SHIFT_X;
spr = &gShadowSprites[shadowSize];
spr->attrib2 &= ~SPRITEOAM_MASK_X;
spr->attrib2 |= x;
SpriteSetX(&gShadowSprites[shadowSize], x);
SpriteSetY(&gShadowSprites[shadowSize], y);
y &= SPRITEOAM_MAX_UNK6_4;
y <<= SPRITEOAM_SHIFT_UNK6_4;
spr->unk6 &= ~SPRITEOAM_MASK_UNK6_4;
spr->unk6 |= y;
AddSprite(spr, 0, NULL, NULL);
AddSprite(&gShadowSprites[shadowSize], 0, NULL, NULL);
}
return TRUE;

View File

@ -679,67 +679,29 @@ u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, unkStruct_203B480 *param_3)
void sub_8039174(void)
{
struct SpriteOAM* spr;
s16 earlyF;
SpriteSetAffine1(&gRescuePasswordMenu->unk208, 0);
SpriteSetAffine2(&gRescuePasswordMenu->unk208, 0);
SpriteSetObjMode(&gRescuePasswordMenu->unk208, 0);
SpriteSetMosaic(&gRescuePasswordMenu->unk208, 0);
SpriteSetBpp(&gRescuePasswordMenu->unk208, 0);
SpriteSetShape(&gRescuePasswordMenu->unk208, 1);
SpriteSetTileNum(&gRescuePasswordMenu->unk208, 0x3F0);
SpriteSetPriority(&gRescuePasswordMenu->unk208, 0);
SpriteSetPalNum(&gRescuePasswordMenu->unk208, 15);
SpriteSetMatrixNum(&gRescuePasswordMenu->unk208, 0);
SpriteSetSize(&gRescuePasswordMenu->unk208, 0);
spr = &gRescuePasswordMenu->unk208;
spr->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
spr->attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
spr->attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
spr->attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
spr->attrib1 &= ~SPRITEOAM_MASK_BPP;
{
s32 temp = 1 << SPRITEOAM_SHIFT_SHAPE;
spr->attrib1 &= ~SPRITEOAM_MASK_SHAPE;
spr->attrib1 |= temp;
} while(0);
{
s32 temp = 0x3F0 << SPRITEOAM_SHIFT_TILENUM;
spr->attrib3 &= ~SPRITEOAM_MASK_TILENUM;
spr->attrib3 |= temp;
} while(0);
spr->attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
earlyF = (s16)~SPRITEOAM_MASK_UNK6_4;
{
s32 temp = 15 << SPRITEOAM_SHIFT_PALETTENUM;
spr->attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
spr->attrib3 |= temp;
} while(0);
{
s32 temp = 0;
spr->attrib2 = temp;
} while(0);
{
s32 temp = 192 << SPRITEOAM_SHIFT_UNK6_4;
spr->unk6 &= earlyF;
spr->unk6 |= temp;
} while(0);
SpriteSetX(&gRescuePasswordMenu->unk208, 0);
SpriteSetY(&gRescuePasswordMenu->unk208, 192);
}
void sub_80391F8(void)
{
SpriteOAM *spr;
u32 val;
spr = &gRescuePasswordMenu->unk208;
spr->attrib2 &= ~SPRITEOAM_MASK_X;
spr->attrib2 |= 112;
val = 112 << SPRITEOAM_SHIFT_UNK6_4;
spr->unk6 &= ~SPRITEOAM_MASK_UNK6_4;
spr->unk6 |= val;
SpriteSetX(&gRescuePasswordMenu->unk208, 112);
SpriteSetY(&gRescuePasswordMenu->unk208, 112);
if (gRescuePasswordMenu->unk210 & 8)
AddSprite(spr, 0x100, NULL, NULL);
AddSprite(&gRescuePasswordMenu->unk208, 0x100, NULL, NULL);
DrawDialogueBoxString();
gRescuePasswordMenu->unk210++;

View File

@ -266,61 +266,24 @@ s32 UpdateSaveMenu(void)
void sub_8038830(void)
{
#ifdef NONMATCHING // SpriteOAM memes
u32 r0;
u32 r2;
#else
register u32 r0 asm("r0");
register u32 r2 asm("r2");
#endif
u32 r1;
u32 r4;
u32 r5;
SpriteOAM *sprite;
SpriteSetAffine1(&sUnknown_203B364->unk1A8, 0);
SpriteSetAffine2(&sUnknown_203B364->unk1A8, 0);
SpriteSetObjMode(&sUnknown_203B364->unk1A8, 0);
SpriteSetMosaic(&sUnknown_203B364->unk1A8, 0);
SpriteSetBpp(&sUnknown_203B364->unk1A8, 0);
SpriteSetShape(&sUnknown_203B364->unk1A8, 1);
r5 = 0;
sprite = &sUnknown_203B364->unk1A8;
SpriteSetTileNum(&sUnknown_203B364->unk1A8, 0x3F0);
SpriteSetPriority(&sUnknown_203B364->unk1A8, 0);
SpriteSetPalNum(&sUnknown_203B364->unk1A8, 15);
r1 = sprite->attrib1;
r0 = (u16)~SPRITEOAM_MASK_AFFINEMODE1;
r0 &= r1;
SpriteSetMatrixNum(&sUnknown_203B364->unk1A8, 0);
SpriteSetSize(&sUnknown_203B364->unk1A8, 0);
r0 &= (u16)~SPRITEOAM_MASK_AFFINEMODE2;
SpriteSetX(&sUnknown_203B364->unk1A8, 112);
SpriteSetY(&sUnknown_203B364->unk1A8, 104);
r0 &= (u16)~SPRITEOAM_MASK_OBJMODE;
r0 &= (u16)~SPRITEOAM_MASK_MOSAIC;
r0 &= (u16)~SPRITEOAM_MASK_BPP;
r2 = 1 << SPRITEOAM_SHIFT_SHAPE;
r0 &= (u16)~SPRITEOAM_MASK_SHAPE;
r0 |= r2;
sprite->attrib1 = r0;
r2 = 0x3F0 << SPRITEOAM_SHIFT_TILENUM;
r1 = sprite->attrib3;
r0 = (u16)~SPRITEOAM_MASK_TILENUM;
r0 &= r1;
r0 |= r2;
r0 &= (u16)~SPRITEOAM_MASK_PRIORITY;
r2 = (u16)~SPRITEOAM_MASK_UNK6_4;
r4 = 15 << SPRITEOAM_SHIFT_PALETTENUM;
r0 &= (u16)~SPRITEOAM_MASK_PALETTENUM;
r0 |= r4;
sprite->attrib3 = r0;
sprite->attrib2 = 112; // Set x to 112. Set matrixNum/size to 0
r1 = 104 << SPRITEOAM_SHIFT_UNK6_4;
r2 &= sprite->unk6;
r2 |= r1;
sprite->unk6 = r2;
sUnknown_203B364->unk1B0 = r5;
sUnknown_203B364->unk1B0 = 0;
ResetSprites(FALSE);
}

View File

@ -527,49 +527,25 @@ void DrawDialogueBoxString(void)
if (!buttonPress) {
sArrowFrames++;
if (!(sUnknownTextFlags & 0x2) && sArrowFrames & 8) {
u32 shape, tileNum, palNum, pal;
sDialogueBoxArrowSprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE1;
sDialogueBoxArrowSprite.attrib1 &= ~SPRITEOAM_MASK_AFFINEMODE2;
sDialogueBoxArrowSprite.attrib1 &= ~SPRITEOAM_MASK_OBJMODE;
sDialogueBoxArrowSprite.attrib1 &= ~SPRITEOAM_MASK_MOSAIC;
sDialogueBoxArrowSprite.attrib1 &= ~SPRITEOAM_MASK_BPP;
shape = 1;
shape <<= SPRITEOAM_SHIFT_SHAPE;
sDialogueBoxArrowSprite.attrib1 &= ~SPRITEOAM_MASK_SHAPE;
sDialogueBoxArrowSprite.attrib1 |= shape;
sDialogueBoxArrowSprite.attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM;
sDialogueBoxArrowSprite.attrib2 &= ~SPRITEOAM_MASK_SIZE;
tileNum = 0x3F0 << SPRITEOAM_SHIFT_TILENUM;
sDialogueBoxArrowSprite.attrib3 &= ~SPRITEOAM_MASK_TILENUM;
sDialogueBoxArrowSprite.attrib3 |= tileNum;
sDialogueBoxArrowSprite.attrib3 &= ~SPRITEOAM_MASK_PRIORITY;
pal = 15;
palNum = (pal & SPRITEOAM_MAX_PALETTENUM) << SPRITEOAM_SHIFT_PALETTENUM;
sDialogueBoxArrowSprite.attrib3 &= ~SPRITEOAM_MASK_PALETTENUM;
sDialogueBoxArrowSprite.attrib3 |= palNum;
SpriteSetAffine1(&sDialogueBoxArrowSprite, 0);
SpriteSetAffine2(&sDialogueBoxArrowSprite, 0);
SpriteSetObjMode(&sDialogueBoxArrowSprite, 0);
SpriteSetMosaic(&sDialogueBoxArrowSprite, 0);
SpriteSetBpp(&sDialogueBoxArrowSprite, 0);
SpriteSetShape(&sDialogueBoxArrowSprite, 1);
SpriteSetMatrixNum(&sDialogueBoxArrowSprite, 0);
SpriteSetSize(&sDialogueBoxArrowSprite, 0);
SpriteSetTileNum(&sDialogueBoxArrowSprite, 0x3F0);
SpriteSetPriority(&sDialogueBoxArrowSprite, 0);
SpriteSetPalNum(&sDialogueBoxArrowSprite, 15);
if (sUnknownTextFlags & 0x10) {
u32 var = (0x78 & SPRITEOAM_MAX_UNK6_4) << SPRITEOAM_SHIFT_UNK6_4;
sDialogueBoxArrowSprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
sDialogueBoxArrowSprite.unk6 |= var;
sDialogueBoxArrowSprite.attrib2 &= ~SPRITEOAM_MASK_X;
sDialogueBoxArrowSprite.attrib2 |= (0x70 & SPRITEOAM_MAX_X) << SPRITEOAM_SHIFT_X;
SpriteSetY(&sDialogueBoxArrowSprite, 120);
SpriteSetX(&sDialogueBoxArrowSprite, 112);
}
else {
s16 x;
u32 var = ((gUnknown_202E748.unkA + 1) & SPRITEOAM_MAX_UNK6_4) << SPRITEOAM_SHIFT_UNK6_4;
sDialogueBoxArrowSprite.unk6 &= ~SPRITEOAM_MASK_UNK6_4;
sDialogueBoxArrowSprite.unk6 |= var;
x = gUnknown_202E748.unk8;
sDialogueBoxArrowSprite.attrib2 &= ~SPRITEOAM_MASK_X;
sDialogueBoxArrowSprite.attrib2 |= (x & SPRITEOAM_MAX_X) << SPRITEOAM_SHIFT_X;
SpriteSetY(&sDialogueBoxArrowSprite, gUnknown_202E748.unkA + 1);
SpriteSetX(&sDialogueBoxArrowSprite, gUnknown_202E748.unk8);
}
AddSprite(&sDialogueBoxArrowSprite, 0x100, NULL, NULL);

View File

@ -127,66 +127,26 @@ u32 sub_80383D4(void)
void sub_8038440(void)
{
#ifdef NONMATCHING // SpriteOAM memes
u32 r0;
u32 r2;
#else
register u32 r0 asm("r0");
register u32 r2 asm("r2");
#endif
u32 r1;
u32 r4;
u32 r5;
SpriteOAM *sprite;
SpriteSetAffine1(&sUnknown_203B360->unk1A8, 0);
SpriteSetAffine2(&sUnknown_203B360->unk1A8, 0);
SpriteSetObjMode(&sUnknown_203B360->unk1A8, 0);
SpriteSetMosaic(&sUnknown_203B360->unk1A8, 0);
SpriteSetBpp(&sUnknown_203B360->unk1A8, 0);
SpriteSetShape(&sUnknown_203B360->unk1A8, 1);
r5 = 0;
sprite = &sUnknown_203B360->unk1A8;
SpriteSetTileNum(&sUnknown_203B360->unk1A8, 0x3F0);
SpriteSetPriority(&sUnknown_203B360->unk1A8, 0);
SpriteSetPalNum(&sUnknown_203B360->unk1A8, 15);
r1 = sprite->attrib1;
r0 = (u16)~SPRITEOAM_MASK_AFFINEMODE1;
r0 &= r1;
SpriteSetMatrixNum(&sUnknown_203B360->unk1A8, 0);
SpriteSetSize(&sUnknown_203B360->unk1A8, 0);
r0 &= (u16)~SPRITEOAM_MASK_AFFINEMODE2;
SpriteSetX(&sUnknown_203B360->unk1A8, 112);
SpriteSetY(&sUnknown_203B360->unk1A8, 112);
r0 &= (u16)~SPRITEOAM_MASK_OBJMODE;
r0 &= (u16)~SPRITEOAM_MASK_MOSAIC;
r0 &= (u16)~SPRITEOAM_MASK_BPP;
r2 = 1 << SPRITEOAM_SHIFT_SHAPE;
r0 &= (u16)~SPRITEOAM_MASK_SHAPE;
r0 |= r2;
sprite->attrib1 = r0;
r2 = 0x3F0 << SPRITEOAM_SHIFT_TILENUM;
r1 = sprite->attrib3;
r0 = (u16)~SPRITEOAM_MASK_TILENUM;
r0 &= r1;
r0 |= r2;
r0 &= (u16)~SPRITEOAM_MASK_PRIORITY;
r2 = (u16)~SPRITEOAM_MASK_UNK6_4;
r4 = 15 << SPRITEOAM_SHIFT_PALETTENUM;
r0 &= (u16)~SPRITEOAM_MASK_PALETTENUM;
r0 |= r4;
sprite->attrib3 = r0;
sprite->attrib2 = 112; // Set x to 112. Set matrixNum/size to 0
r1 = 112 << SPRITEOAM_SHIFT_UNK6_4;
r2 &= sprite->unk6;
r2 |= r1;
sprite->unk6 = r2;
sUnknown_203B360->unk1B0 = r5;
sUnknown_203B360->unk1B0 = 0;
}
void sub_80384D0(void)
{
if ((sUnknown_203B360->unk1B0 & 8) != 0) {