mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-28 03:34:22 -05:00
Add flips sprite oam macros
This commit is contained in:
@@ -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) \
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user