Add flips sprite oam macros

This commit is contained in:
DizzyEggg
2025-06-29 15:19:34 +02:00
parent e7bc5a9e64
commit df851221fa
6 changed files with 53 additions and 42 deletions

View File

@@ -230,13 +230,22 @@ typedef struct SpriteOAM
(spritePtr)->attrib2 |= _matrixNumVal; \
}
// Needed for TryCreateModeArrows. No difference to SpriteSetMatrixNum other than not creating one additional local variable.
#define SpriteSetMatrixNum_UseLocalVar(spritePtr, _matrixNum) \
#define SPRITEOAM_SHIFT_H_FLIP_MATRIXNUM (3)
#define SPRITEOAM_SHIFT_V_FLIP_MATRIXNUM (4)
// Horizontal flip shares the same bits as matrixNum.
#define SpriteSetVFlip(spritePtr, _flip) \
{ \
_matrixNum &= SPRITEOAM_MAX_MATRIXNUM; \
_matrixNum <<= SPRITEOAM_SHIFT_MATRIXNUM; \
SpriteSetMatrixNum(spritePtr, (_flip << SPRITEOAM_SHIFT_V_FLIP_MATRIXNUM)) \
}
// Needed for TryCreateModeArrows. No difference to SpriteSetMatrixNum other than not creating one additional local variable.
#define SpriteSetMatrixNumFlips(spritePtr, _flips) \
{ \
_flips &= SPRITEOAM_MAX_MATRIXNUM; \
_flips <<= SPRITEOAM_SHIFT_MATRIXNUM; \
(spritePtr)->attrib2 &= ~SPRITEOAM_MASK_MATRIXNUM; \
(spritePtr)->attrib2 |= _matrixNum; \
(spritePtr)->attrib2 |= _flips; \
}
#define SpriteSetSize(spritePtr, _size) \

View File

@@ -604,8 +604,8 @@ struct DiagonalArrowInfo
{
s16 x;
s16 y;
bool8 unk4;
bool8 unk5;
bool8 hFlip;
bool8 vFlip;
};
static const struct DiagonalArrowInfo sDiagonalArrowsInfo[] =
@@ -621,8 +621,8 @@ struct RotateArrowInfo
s16 x;
s16 y;
u32 tilemapNum;
bool8 unk8;
bool8 unk9;
bool8 hFlip;
bool8 vFlip;
};
static const struct RotateArrowInfo sRotateArrowsInfo[] =
@@ -647,7 +647,7 @@ static void TryCreateModeArrows(Entity *leader)
SpriteOAM sprite;
for (i = 0; i < 4; i++) {
u32 matrixNum;
u32 flips;
s32 x, xMul, x2;
s32 y, yMul, y2;
@@ -658,12 +658,13 @@ static void TryCreateModeArrows(Entity *leader)
SpriteSetBpp(&sprite, 0);
SpriteSetShape(&sprite, 0);
matrixNum = (sDiagonalArrowsInfo[i].unk4) ? 8 : 0;
flips = 0;
if (sDiagonalArrowsInfo[i].hFlip)
flips += (1 << SPRITEOAM_SHIFT_H_FLIP_MATRIXNUM);
if (sDiagonalArrowsInfo[i].vFlip)
flips += (1 << SPRITEOAM_SHIFT_V_FLIP_MATRIXNUM);
if (sDiagonalArrowsInfo[i].unk5)
matrixNum += 16;
SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum);
SpriteSetMatrixNumFlips(&sprite, flips);
SpriteSetSize(&sprite, 0);
SpriteSetTileNum(&sprite, 0x213);
@@ -705,7 +706,7 @@ static void TryCreateModeArrows(Entity *leader)
y2 = (sArrowsFrames / 2) & 7;
y = (y2 * sRotateArrowsInfo[direction].y) + yMul + 82;
for (i = 0; i < to; i++) {
u32 matrixNum;
u32 flips;
SpriteSetAffine1(&sprite, 0);
SpriteSetAffine2(&sprite, 0);
@@ -714,12 +715,13 @@ static void TryCreateModeArrows(Entity *leader)
SpriteSetBpp(&sprite, 0);
SpriteSetShape(&sprite, 0);
matrixNum = (sRotateArrowsInfo[direction].unk8 != 0) ? 8 : 0;
flips = 0;
if (sRotateArrowsInfo[direction].hFlip)
flips += (1 << SPRITEOAM_SHIFT_H_FLIP_MATRIXNUM);
if (sRotateArrowsInfo[direction].vFlip)
flips += (1 << SPRITEOAM_SHIFT_V_FLIP_MATRIXNUM);
if (sRotateArrowsInfo[direction].unk9)
matrixNum += 16;
SpriteSetMatrixNum_UseLocalVar(&sprite, matrixNum);
SpriteSetMatrixNumFlips(&sprite, flips);
SpriteSetSize(&sprite, 0);
SpriteSetTileNum(&sprite, sRotateArrowsInfo[direction].tilemapNum);

View File

@@ -270,7 +270,7 @@ static void CreateScrollingArrow(bool8 upArrow, s32 y)
SpriteSetObjMode(&sScrollingArrowOAM, 0);
SpriteSetMosaic(&sScrollingArrowOAM, 0);
SpriteSetBpp(&sScrollingArrowOAM, 0);
SpriteSetMatrixNum(&sScrollingArrowOAM, (upArrow != FALSE) ? (16) : 0);
SpriteSetVFlip(&sScrollingArrowOAM, (upArrow != FALSE));
SpriteSetPalNum(&sScrollingArrowOAM, 15);
SpriteSetY(&sScrollingArrowOAM, (window->y * 8) + y);
SpriteSetX(&sScrollingArrowOAM, (window->x * 8) + 64);

View File

@@ -129,7 +129,7 @@ extern const u8 *const gWhichTextPtr2;
EWRAM_DATA s32 gTeamMenuChosenId = 0;
static UNUSED EWRAM_DATA u8 sUnused[4] = {0};
EWRAM_DATA static SpriteOAM gUnknown_202F268 = {0};
EWRAM_DATA static SpriteOAM sOAMStatusDescriptionArrow = {0};
EWRAM_DATA static WindowHeader sTeamWindowHeader = {0};
struct UnkFieldTeamMenuStruct
@@ -1177,7 +1177,7 @@ static void ShowUpArrowSprite(void)
SpriteSetMosaic(&sprite, 0);
SpriteSetBpp(&sprite, 0);
SpriteSetShape(&sprite, 1);
SpriteSetMatrixNum(&sprite, 16);
SpriteSetVFlip(&sprite, 1);
SpriteSetSize(&sprite, 0);
SpriteSetTileNum(&sprite, 0x3F0);
SpriteSetPriority(&sprite, 0);
@@ -1202,7 +1202,7 @@ static void ShowDownArrowSprite(void)
SpriteSetMosaic(&sprite, 0);
SpriteSetBpp(&sprite, 0);
SpriteSetShape(&sprite, 1);
SpriteSetMatrixNum(&sprite, 0);
SpriteSetVFlip(&sprite, 0);
SpriteSetSize(&sprite, 0);
SpriteSetTileNum(&sprite, 0x3F0);
SpriteSetPriority(&sprite, 0);
@@ -1218,20 +1218,20 @@ void ShowStatusDescriptionMenuArrow(void)
if ((gDungeonFramesCounter & 8) != 0) {
Window *window = &gWindows[0];
SpriteSetAffine1(&gUnknown_202F268, 0);
SpriteSetAffine2(&gUnknown_202F268, 0);
SpriteSetObjMode(&gUnknown_202F268, 0);
SpriteSetMosaic(&gUnknown_202F268, 0);
SpriteSetBpp(&gUnknown_202F268, 0);
SpriteSetShape(&gUnknown_202F268, 1);
SpriteSetMatrixNum(&gUnknown_202F268, 0);
SpriteSetSize(&gUnknown_202F268, 0);
SpriteSetTileNum(&gUnknown_202F268, 0x3F0);
SpriteSetPriority(&gUnknown_202F268, 0);
SpriteSetPalNum(&gUnknown_202F268, 15);
SpriteSetY(&gUnknown_202F268, (window->y * 8) + 0x60);
SpriteSetX(&gUnknown_202F268, 0x70);
AddSprite(&gUnknown_202F268,0x100,NULL,NULL);
SpriteSetAffine1(&sOAMStatusDescriptionArrow, 0);
SpriteSetAffine2(&sOAMStatusDescriptionArrow, 0);
SpriteSetObjMode(&sOAMStatusDescriptionArrow, 0);
SpriteSetMosaic(&sOAMStatusDescriptionArrow, 0);
SpriteSetBpp(&sOAMStatusDescriptionArrow, 0);
SpriteSetShape(&sOAMStatusDescriptionArrow, 1);
SpriteSetVFlip(&sOAMStatusDescriptionArrow, 0);
SpriteSetSize(&sOAMStatusDescriptionArrow, 0);
SpriteSetTileNum(&sOAMStatusDescriptionArrow, 0x3F0);
SpriteSetPriority(&sOAMStatusDescriptionArrow, 0);
SpriteSetPalNum(&sOAMStatusDescriptionArrow, 15);
SpriteSetY(&sOAMStatusDescriptionArrow, (window->y * 8) + 0x60);
SpriteSetX(&sOAMStatusDescriptionArrow, 0x70);
AddSprite(&sOAMStatusDescriptionArrow,0x100,NULL,NULL);
}
}

View File

@@ -384,13 +384,13 @@ u32 NamingScreen_Init(u32 type, u8 *defaultText)
SpriteSetY((SpriteOAM *) &sNamingScreen->spriteLetterCursor, DISPLAY_WIDTH);
if (sNamingScreen->isPassword) {
SpriteSetMatrixNum((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 0);
SpriteSetVFlip((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 0);
SpriteSetTileNum((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 0x3F6);
SpriteSetSize((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 0);
SpriteSetShape((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 1);
}
else {
SpriteSetMatrixNum((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 16);
SpriteSetVFlip((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 1);
SpriteSetTileNum((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 0x3F0);
SpriteSetSize((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 0);
SpriteSetShape((SpriteOAM *) &sNamingScreen->spriteLetterCursor, 1);

View File

@@ -201,7 +201,7 @@ void AddAxSprite(ax_pose *a0, axdata1 *a1, UnkSpriteMem *a2, unkStruct_2039DB0 *
spPtr->unk0 = a0->sprite;
spPtr->unk2 = a0->unk2;
spPtr->oam.attrib1 = a0->flags1 & ~(0x100 | 0x200);
spPtr->oam.attrib1 = a0->flags1 & ~((1 << SPRITEOAM_SHIFT_AFFINEMODE1) | (1 << SPRITEOAM_SHIFT_AFFINEMODE2));
spPtr->oam.attrib2 = a0->flags2 & ~(0x200 | 0x400 | 0x800);
spPtr->oam.attrib3 = a0->flags3;
spPtr->oam.unk6 = ((a0->flags2 & (0x200 | 0x400 | 0x800)) >> 9) | ((a0->flags1 & (0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80 | 0x100 | 0x200)) << 4);