Document intro functions

This commit is contained in:
GriffinR
2022-09-23 15:42:53 -04:00
parent 27b2b0b24a
commit fa9808f79d
6 changed files with 1168 additions and 916 deletions
+92 -92
View File
@@ -600,58 +600,58 @@ u32 ChangeBgX(u8 bg, u32 value, u8 op)
switch (op)
{
case 0:
default:
sGpuBgConfigs2[bg].bg_x = value;
break;
case 1:
sGpuBgConfigs2[bg].bg_x += value;
break;
case 2:
sGpuBgConfigs2[bg].bg_x -= value;
break;
case BG_COORD_SET:
default:
sGpuBgConfigs2[bg].bg_x = value;
break;
case BG_COORD_ADD:
sGpuBgConfigs2[bg].bg_x += value;
break;
case BG_COORD_SUB:
sGpuBgConfigs2[bg].bg_x -= value;
break;
}
mode = GetBgMode();
switch (bg)
{
case 0:
temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2X_H, temp1);
SetGpuReg(REG_OFFSET_BG2X_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3X_H, temp1);
SetGpuReg(REG_OFFSET_BG3X_L, temp2);
}
break;
case 0:
temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2X_H, temp1);
SetGpuReg(REG_OFFSET_BG2X_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3X_H, temp1);
SetGpuReg(REG_OFFSET_BG3X_L, temp2);
}
break;
}
return sGpuBgConfigs2[bg].bg_x;
@@ -679,58 +679,58 @@ u32 ChangeBgY(u8 bg, u32 value, u8 op)
switch (op)
{
case 0:
default:
sGpuBgConfigs2[bg].bg_y = value;
break;
case 1:
sGpuBgConfigs2[bg].bg_y += value;
break;
case 2:
sGpuBgConfigs2[bg].bg_y -= value;
break;
case BG_COORD_SET:
default:
sGpuBgConfigs2[bg].bg_y = value;
break;
case BG_COORD_ADD:
sGpuBgConfigs2[bg].bg_y += value;
break;
case BG_COORD_SUB:
sGpuBgConfigs2[bg].bg_y -= value;
break;
}
mode = GetBgMode();
switch (bg)
{
case 0:
temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
}
break;
case 0:
temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
break;
case 1:
temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
break;
case 2:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
}
else
{
temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
}
break;
case 3:
if (mode == 0)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
}
else if (mode == 2)
{
temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
}
break;
}
return sGpuBgConfigs2[bg].bg_y;
+1041 -771
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -80,8 +80,7 @@ static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId)
switch (sprite->data[0])
{
case 0:
// some sort of affine transform; x transform disabled
obj_pos2_update_enable(sprite, 0x800, 0x1A);
SetSpriteMatrixAnchor(sprite, NO_ANCHOR, 26);
sprite->data[0]++;
// fallthrough
case 1:
+21 -48
View File
@@ -5,6 +5,9 @@
#define OAM_MATRIX_COUNT 32
#define sAnchorX data[6]
#define sAnchorY data[7]
#define SET_SPRITE_TILE_RANGE(index, start, count) \
{ \
sSpriteTileRanges[index * 2] = start; \
@@ -83,7 +86,7 @@ static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameC
static u8 IndexOfSpriteTileTag(u16 tag);
static void AllocSpriteTileRange(u16 tag, u16 start, u16 count);
static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset);
static void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2);
static void UpdateSpriteMatrixAnchorPos(struct Sprite* sprite, s32 a1, s32 a2);
typedef void (*AnimFunc)(struct Sprite *);
typedef void (*AnimCmdFunc)(struct Sprite *);
@@ -161,41 +164,11 @@ static const struct Sprite sDummySprite =
{
.oam = DUMMY_OAM_DATA,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.template = &gDummySpriteTemplate,
.subspriteTables = NULL,
.callback = SpriteCallbackDummy,
.x = 304, .y = 160,
.x2 = 0, .y2 = 0,
.centerToCornerVecX = 0,
.centerToCornerVecY = 0,
.animNum = 0,
.animCmdIndex = 0,
.animDelayCounter = 0,
.animPaused = 0,
.affineAnimPaused = 0,
.animLoopCounter = 0,
.data = {0, 0, 0, 0, 0, 0, 0},
.inUse = 0,
.coordOffsetEnabled = 0,
.invisible = 0,
.flags_3 = 0,
.flags_4 = 0,
.flags_5 = 0,
.flags_6 = 0,
.flags_7 = 0,
.hFlip = 0,
.vFlip = 0,
.animBeginning = 0,
.affineAnimBeginning = 0,
.animEnded = 0,
.affineAnimEnded = 0,
.usingSheet = 0,
.flags_f = 0,
.sheetTileStart = 0,
.subspriteTableNum = 0,
.subspriteMode = 0,
.x = DISPLAY_WIDTH + 64,
.y = DISPLAY_HEIGHT,
.subpriority = 0xFF
};
@@ -212,7 +185,7 @@ const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffin
const struct SpriteTemplate gDummySpriteTemplate =
{
.tileTag = 0,
.paletteTag = 0xFFFF,
.paletteTag = TAG_NONE,
.oam = &gDummyOamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
@@ -1099,8 +1072,8 @@ void BeginAffineAnim(struct Sprite *sprite)
sprite->affineAnimEnded = FALSE;
ApplyAffineAnimFrame(matrixNum, &frameCmd);
sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration;
if (sprite->flags_f)
obj_update_pos2(sprite, sprite->data[6], sprite->data[7]);
if (sprite->anchored)
UpdateSpriteMatrixAnchorPos(sprite, sprite->sAnchorX, sprite->sAnchorY);
}
}
@@ -1125,8 +1098,8 @@ void ContinueAffineAnim(struct Sprite *sprite)
funcIndex = type - 32765;
sAffineAnimCmdFuncs[funcIndex](matrixNum, sprite);
}
if (sprite->flags_f)
obj_update_pos2(sprite, sprite->data[6], sprite->data[7]);
if (sprite->anchored)
UpdateSpriteMatrixAnchorPos(sprite, sprite->sAnchorX, sprite->sAnchorY);
}
}
@@ -1220,14 +1193,14 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite)
return matrixNum;
}
void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod)
void SetSpriteMatrixAnchor(struct Sprite* sprite, s16 x, s16 y)
{
sprite->data[6] = xmod;
sprite->data[7] = ymod;
sprite->flags_f = 1;
sprite->sAnchorX = x;
sprite->sAnchorY = y;
sprite->anchored = TRUE;
}
static s32 affine_get_new_pos2(s32 baseDim, s32 xformed, s32 modifier)
static s32 GetAnchorCoord(s32 baseDim, s32 xformed, s32 modifier)
{
s32 subResult, shiftResult;
@@ -1239,24 +1212,24 @@ static s32 affine_get_new_pos2(s32 baseDim, s32 xformed, s32 modifier)
return modifier - ((u32)(modifier * xformed) / (u32)(baseDim) + shiftResult);
}
static void obj_update_pos2(struct Sprite *sprite, s32 xmod, s32 ymod)
static void UpdateSpriteMatrixAnchorPos(struct Sprite *sprite, s32 x, s32 y)
{
s32 dim, baseDim, xFormed;
u32 matrixNum = sprite->oam.matrixNum;
if (xmod != 0x800)
if (x != NO_ANCHOR)
{
dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][0];
baseDim = dim << 8;
xFormed = (dim << 16) / gOamMatrices[matrixNum].a;
sprite->x2 = affine_get_new_pos2(baseDim, xFormed, xmod);
sprite->x2 = GetAnchorCoord(baseDim, xFormed, x);
}
if (ymod != 0x800)
if (y != NO_ANCHOR)
{
dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][1];
baseDim = dim << 8;
xFormed = (dim << 16) / gOamMatrices[matrixNum].d;
sprite->y2 = affine_get_new_pos2(baseDim, xFormed, ymod);
sprite->y2 = GetAnchorCoord(baseDim, xFormed, y);
}
}