diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-11 13:43:14 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-11 13:43:14 -0500 |
commit | 9ff146b0bcf3e5f2bbb0db9a21a147dde80d81fd (patch) | |
tree | 1c983f6d141765bc5e556abd8c19b67f7aac9305 /src | |
parent | 354d837d6f680b44b7824e95a1363b387717807a (diff) |
document minigame_countdown.c
Diffstat (limited to 'src')
-rw-r--r-- | src/intro.c | 4 | ||||
-rw-r--r-- | src/minigame_countdown.c (renamed from src/unk_815F138.c) | 171 | ||||
-rw-r--r-- | src/sprite.c | 100 |
3 files changed, 143 insertions, 132 deletions
diff --git a/src/intro.c b/src/intro.c index cee1c8fec..837d4f905 100644 --- a/src/intro.c +++ b/src/intro.c @@ -1431,7 +1431,7 @@ static void sub_80EDB70(struct IntroSequenceData * this) { this->field_0018->pos1.x += this->field_0018->pos2.x; this->field_0018->pos1.y += this->field_0018->pos2.y; - sub_8007FFC(this->field_0018, 0, 0x2A); + obj_pos2_update_enable(this->field_0018, 0, 0x2A); this->field_0018->callback = SpriteCallbackDummy; StartSpriteAffineAnim(this->field_0018, 1); } @@ -1448,7 +1448,7 @@ static void sub_80EDBAC(struct IntroSequenceData * this) { StartSpriteAffineAnim(this->field_0028[i], 1); this->field_0028[i]->callback = nullsub_83; - sub_8007FFC(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]); + obj_pos2_update_enable(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]); } } diff --git a/src/unk_815F138.c b/src/minigame_countdown.c index 8aa776bc9..d100caea1 100644 --- a/src/unk_815F138.c +++ b/src/minigame_countdown.c @@ -5,72 +5,83 @@ #include "trig.h" #include "constants/songs.h" -void sub_815F1AC(u8 taskId); -bool32 sub_815F2AC(u8 spriteId); -void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3); -bool32 sub_815F444(u8 spriteId); -void sub_815F470(struct Sprite * sprite); -void sub_815F564(u16 tilesTag, u16 palTag); -u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority); -void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p); +static void Task_MinigameCountdown(u8 taskId); +static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId); +static void StartStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3); +static bool32 IsStartGraphicAnimRunning(u8 spriteId); +static void SpriteCB_Start(struct Sprite * sprite); +static void Load321StartGfx(u16 tilesTag, u16 palTag); +static u8 CreateNumberSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority); +static void CreateStartSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p); -void sub_815F138(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority) +#define tState data[0] +#define tTilesTag data[2] +#define tPalTag data[3] +#define tX data[4] +#define tY data[5] +#define tSubpriority data[6] +#define tSpriteId1 data[7] +#define tSpriteId2 data[8] +#define tSpriteId3 data[9] + +void StartMinigameCountdown(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority) { - u8 taskId = CreateTask(sub_815F1AC, 80); - gTasks[taskId].data[2] = tilesTag; - gTasks[taskId].data[3] = palTag; - gTasks[taskId].data[4] = x; - gTasks[taskId].data[5] = y; - gTasks[taskId].data[6] = subpriority; + u8 taskId = CreateTask(Task_MinigameCountdown, 80); + gTasks[taskId].tTilesTag = tilesTag; + gTasks[taskId].tPalTag = palTag; + gTasks[taskId].tX = x; + gTasks[taskId].tY = y; + gTasks[taskId].tSubpriority = subpriority; } -bool8 sub_815F198(void) +bool8 IsMinigameCountdownRunning(void) { - return FuncIsActiveTask(sub_815F1AC); + return FuncIsActiveTask(Task_MinigameCountdown); } -void sub_815F1AC(u8 taskId) +static void Task_MinigameCountdown(u8 taskId) { s16 * data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - sub_815F564(data[2], data[3]); - data[7] = sub_815F5BC(data[2], data[3], data[4], data[5], data[6]); - sub_815F610(data[2], data[3], data[4], data[5], data[6], &data[8], &data[9]); - data[0]++; + Load321StartGfx(tTilesTag, tPalTag); + tSpriteId1 = CreateNumberSprite(tTilesTag, tPalTag, tX, tY, tSubpriority); + CreateStartSprite(tTilesTag, tPalTag, tX, tY, tSubpriority, &tSpriteId2, &tSpriteId3); + tState++; break; case 1: - if (!sub_815F2AC(data[7])) + if (!RunMinigameCountdownDigitsAnim(tSpriteId1)) { - sub_815F3E0(data[7], data[8], data[9]); - FreeSpriteOamMatrix(&gSprites[data[7]]); - DestroySprite(&gSprites[data[7]]); - data[0]++; + StartStartGraphic(tSpriteId1, tSpriteId2, tSpriteId3); + FreeSpriteOamMatrix(&gSprites[tSpriteId1]); + DestroySprite(&gSprites[tSpriteId1]); + tState++; } break; case 2: - if (!sub_815F444(data[8])) + if (!IsStartGraphicAnimRunning(tSpriteId2)) { - DestroySprite(&gSprites[data[8]]); - DestroySprite(&gSprites[data[9]]); - FreeSpriteTilesByTag(data[2]); - FreeSpritePaletteByTag(data[3]); + DestroySprite(&gSprites[tSpriteId2]); + DestroySprite(&gSprites[tSpriteId3]); + FreeSpriteTilesByTag(tTilesTag); + FreeSpritePaletteByTag(tPalTag); DestroyTask(taskId); } break; } } -bool32 sub_815F2AC(u8 spriteId) +static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId) { struct Sprite * sprite = &gSprites[spriteId]; switch (sprite->data[0]) { case 0: - sub_8007FFC(sprite, 0x800, 0x1A); + // some sort of affine transform; x transform disabled + obj_pos2_update_enable(sprite, 0x800, 0x1A); sprite->data[0]++; // fallthrough case 1: @@ -134,22 +145,22 @@ bool32 sub_815F2AC(u8 spriteId) return TRUE; } -void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3) +static void StartStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3) { gSprites[spriteId2].pos2.y = -40; gSprites[spriteId3].pos2.y = -40; gSprites[spriteId2].invisible = FALSE; gSprites[spriteId3].invisible = FALSE; - gSprites[spriteId2].callback = sub_815F470; - gSprites[spriteId3].callback = sub_815F470; + gSprites[spriteId2].callback = SpriteCB_Start; + gSprites[spriteId3].callback = SpriteCB_Start; } -bool32 sub_815F444(u8 spriteId) +static bool32 IsStartGraphicAnimRunning(u8 spriteId) { - return gSprites[spriteId].callback == sub_815F470; + return gSprites[spriteId].callback == SpriteCB_Start; } -void sub_815F470(struct Sprite * sprite) +static void SpriteCB_Start(struct Sprite * sprite) { s16 * data = sprite->data; s32 y; @@ -200,103 +211,103 @@ void sub_815F470(struct Sprite * sprite) } } -const u16 gUnknown_847A328[] = INCBIN_U16("data/graphics/unk_847a348.gbapal"); -const u16 gUnknown_847A348[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz"); +static const u16 sSpritePal_321Start[] = INCBIN_U16("data/graphics/unk_847a348.gbapal"); +static const u16 sSpriteSheet_321Start[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz"); -void sub_815F564(u16 tilesTag, u16 palTag) +static void Load321StartGfx(u16 tilesTag, u16 palTag) { - struct CompressedSpriteSheet spriteSheet = {(const void *)gUnknown_847A348, 0xE00}; - struct SpritePalette spritePalette = {gUnknown_847A328}; + struct CompressedSpriteSheet spriteSheet = {(const void *)sSpriteSheet_321Start, 0xE00}; + struct SpritePalette spritePalette = {sSpritePal_321Start}; spriteSheet.tag = tilesTag; spritePalette.tag = palTag; LoadCompressedSpriteSheet(&spriteSheet); LoadSpritePalette(&spritePalette); } -const struct OamData gOamData_847A7AC = { +static const struct OamData sOamData_Numbers = { .affineMode = ST_OAM_AFFINE_DOUBLE, - .shape = ST_OAM_SQUARE, - .size = 2 + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32) }; -const struct OamData gOamData_847A7B4 = { +static const struct OamData sOamData_Start = { .affineMode = ST_OAM_AFFINE_OFF, - .shape = ST_OAM_H_RECTANGLE, - .size = 3 + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32) }; -const union AnimCmd gUnknown_847A7BC[] = { +static const union AnimCmd sAnim_Numbers_Three[] = { ANIMCMD_FRAME( 0, 1), ANIMCMD_END }; -const union AnimCmd gUnknown_847A7C4[] = { +static const union AnimCmd sAnim_Numbers_Two[] = { ANIMCMD_FRAME(16, 1), ANIMCMD_END }; -const union AnimCmd gUnknown_847A7CC[] = { +static const union AnimCmd sAnim_Numbers_One[] = { ANIMCMD_FRAME(32, 1), ANIMCMD_END }; -const union AnimCmd *const gUnknown_847A7D4[] = { - gUnknown_847A7BC, - gUnknown_847A7C4, - gUnknown_847A7CC +static const union AnimCmd *const sAnimTable_Numbers[] = { + sAnim_Numbers_Three, + sAnim_Numbers_Two, + sAnim_Numbers_One }; -const union AnimCmd gUnknown_847A7E0[] = { +static const union AnimCmd sAnim_StartLeft[] = { ANIMCMD_FRAME(48, 1), ANIMCMD_END }; -const union AnimCmd gUnknown_847A7E8[] = { +static const union AnimCmd sAnim_StartRight[] = { ANIMCMD_FRAME(80, 1), ANIMCMD_END }; -const union AnimCmd *const gUnknown_847A7F0[] = { - gUnknown_847A7E0, - gUnknown_847A7E8 +static const union AnimCmd *const sAnimTable_Start[] = { + sAnim_StartLeft, + sAnim_StartRight }; -const union AffineAnimCmd gUnknown_847A7F8[] = { +static const union AffineAnimCmd sAffineAnim_Numbers_0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_847A808[] = { +static const union AffineAnimCmd sAffineAnim_Numbers_1[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME( 0x10, -0x10, 0, 8), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_847A820[] = { +static const union AffineAnimCmd sAffineAnim_Numbers_2[] = { AFFINEANIMCMD_FRAME(-0x12, 0x12, 0, 8), AFFINEANIMCMD_END }; -const union AffineAnimCmd gUnknown_847A830[] = { +static const union AffineAnimCmd sAffineAnim_Numbers_3[] = { AFFINEANIMCMD_FRAME( 0x6, -0x6, 0, 8), AFFINEANIMCMD_FRAME( -0x4, 0x4, 0, 8), AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gUnknown_847A850[] = { - gUnknown_847A7F8, - gUnknown_847A808, - gUnknown_847A820, - gUnknown_847A830 +static const union AffineAnimCmd *const sAffineAnimTable_Numbers[] = { + sAffineAnim_Numbers_0, + sAffineAnim_Numbers_1, + sAffineAnim_Numbers_2, + sAffineAnim_Numbers_3 }; -u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority) +static u8 CreateNumberSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority) { struct SpriteTemplate spriteTemplate = { - .oam = &gOamData_847A7AC, - .anims = gUnknown_847A7D4, - .affineAnims = gUnknown_847A850, + .oam = &sOamData_Numbers, + .anims = sAnimTable_Numbers, + .affineAnims = sAffineAnimTable_Numbers, .callback = SpriteCallbackDummy }; spriteTemplate.tileTag = tilesTag; @@ -304,11 +315,11 @@ u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority) return CreateSprite(&spriteTemplate, x, y, subpriority); } -void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p) +static void CreateStartSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p) { struct SpriteTemplate spriteTemplate = { - .oam = &gOamData_847A7B4, - .anims = gUnknown_847A7F0, + .oam = &sOamData_Start, + .anims = sAnimTable_Start, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; diff --git a/src/sprite.c b/src/sprite.c index c1fc89777..d109a8347 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -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 a2, s16 a3) { sprite->data[6] = a2; sprite->data[7] = a3; 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); } } |