mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-19 09:21:31 -05:00
Sprite OAM clean-up
This commit is contained in:
parent
3bed5dacd3
commit
5a18f5af52
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user