diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-02-15 20:16:17 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-15 20:16:17 -0500 |
commit | fee980decd6dfd5dc98c15ba13c9ea8f7b597934 (patch) | |
tree | 813eca906ee23e6ff80dd6ddfb204f6c726afa49 /src/sprite.c | |
parent | 98a79fd72fe681c9d9d227bdc52e63db301a56d9 (diff) | |
parent | b3167d579b903badfd0be67c02d30bdd71fd9ef6 (diff) |
Merge pull request #253 from PikalaxALT/add_arm_agbcc
librfu_intr
Diffstat (limited to 'src/sprite.c')
-rw-r--r-- | src/sprite.c | 120 |
1 files changed, 60 insertions, 60 deletions
diff --git a/src/sprite.c b/src/sprite.c index c1fc89777..fd824494b 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -94,17 +94,17 @@ typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *); #define DUMMY_OAM_DATA \ { \ 160, /* Y (off-screen) */ \ - 0, \ - 0, \ - 0, \ - 0, \ - 0, \ + ST_OAM_AFFINE_OFF, \ + ST_OAM_OBJ_NORMAL, \ + FALSE, \ + ST_OAM_4BPP, \ + ST_OAM_SQUARE, \ 304, /* X */ \ 0, \ - 0, \ - 0, \ + ST_OAM_SIZE_0, \ + 0x000, \ 3, /* lowest priority */ \ - 0, \ + 0x0, \ 0 \ } @@ -250,47 +250,47 @@ static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] = AffineAnimCmd_frame, }; -static const s32 sUnknown_082EC6F4[3][4][2] = +static const s32 sOamDimensionsCopy[3][4][2] = { - { - {8, 8}, - {0x10, 0x10}, - {0x20, 0x20}, - {0x40, 0x40}, + [ST_OAM_SQUARE] = { + [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8 + [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16 + [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32 + [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64 }, - { - {0x10, 8}, - {0x20, 8}, - {0x20, 0x10}, - {0x40, 0x20}, + [ST_OAM_H_RECTANGLE] = { + [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8 + [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8 + [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16 + [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32 }, - { - {8, 0x10}, - {8, 0x20}, - {0x10, 0x20}, - {0x20, 0x40}, + [ST_OAM_V_RECTANGLE] = { + [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16 + [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32 + [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32 + [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64 }, }; static const struct OamDimensions sOamDimensions[3][4] = { - { // square - { 8, 8 }, - { 16, 16 }, - { 32, 32 }, - { 64, 64 }, + [ST_OAM_SQUARE] = { + [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8 + [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16 + [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32 + [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64 }, - { // horizontal rectangle - { 16, 8 }, - { 32, 8 }, - { 32, 16 }, - { 64, 32 }, + [ST_OAM_H_RECTANGLE] = { + [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8 + [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8 + [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16 + [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32 }, - { // vertical rectangle - { 8, 16 }, - { 8, 32 }, - { 16, 32 }, - { 32, 64 }, + [ST_OAM_V_RECTANGLE] = { + [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16 + [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32 + [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32 + [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64 }, }; @@ -1222,43 +1222,43 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite) return matrixNum; } -void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3) +void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod) { - sprite->data[6] = a2; - sprite->data[7] = a3; + sprite->data[6] = xmod; + sprite->data[7] = ymod; sprite->flags_f = 1; } -s32 sub_800800C(s32 a0, s32 a1, s32 a2) +static s32 affine_get_new_pos2(s32 baseDim, s32 xformed, s32 modifier) { - s32 subResult, var1; + s32 subResult, shiftResult; - subResult = a1 - a0; + subResult = xformed - baseDim; if (subResult < 0) - var1 = -(subResult) >> 9; + shiftResult = -(subResult) >> 9; else - var1 = -(subResult >> 9); - return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1); + shiftResult = -(subResult >> 9); + return modifier - ((u32)(modifier * xformed) / (u32)(baseDim) + shiftResult); } -void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2) +static void obj_update_pos2(struct Sprite *sprite, s32 xmod, s32 ymod) { - s32 var0, var1, var2; + s32 dim, baseDim, xFormed; u32 matrixNum = sprite->oam.matrixNum; - if (a1 != 0x800) + if (xmod != 0x800) { - var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][0]; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].a; - sprite->pos2.x = sub_800800C(var1, var2, a1); + dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][0]; + baseDim = dim << 8; + xFormed = (dim << 16) / gOamMatrices[matrixNum].a; + sprite->pos2.x = affine_get_new_pos2(baseDim, xFormed, xmod); } - if (a2 != 0x800) + if (ymod != 0x800) { - var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][1]; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].d; - sprite->pos2.y = sub_800800C(var1, var2, a2); + dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][1]; + baseDim = dim << 8; + xFormed = (dim << 16) / gOamMatrices[matrixNum].d; + sprite->pos2.y = affine_get_new_pos2(baseDim, xFormed, ymod); } } |