diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-02 17:50:42 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-02 17:53:00 -0400 |
commit | f13e1c78b23c5b9bccb8288ff1ba575f66e53afc (patch) | |
tree | 8d585642794a2dab3e6ce2007825113692b7839f /src | |
parent | a14162eb9fdc0ac4f196b078b05be7ca6b7c73f9 (diff) |
through sub_81CA0EC
Diffstat (limited to 'src')
-rw-r--r-- | src/pokenav_unk_2.c | 128 |
1 files changed, 127 insertions, 1 deletions
diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 71870e5d6..048742ef7 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -1,5 +1,6 @@ #include "global.h" #include "alloc.h" +#include "decompress.h" #include "bg.h" #include "menu.h" #include "window.h" @@ -20,7 +21,9 @@ struct Pokenav2Struct u8 field_00b; u8 field_00c; u8 field_00d; - u8 filler_00e[0x7E]; + bool32 field_010[6]; + u8 filler_028[4]; + struct Sprite * field_02c[6][4]; u8 field_08c[0x800]; }; @@ -38,12 +41,15 @@ u32 sub_81C9F28(int state); void sub_81C9FC4(void); void sub_81C9FEC(void); void sub_81CA02C(void); +void sub_81CA094(void); void sub_81CA0C8(void); +void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); void sub_81CA20C(void); void sub_81CA278(void); void sub_81CA2DC(void); bool32 sub_81CA324(void); void sub_81CA640(void); +void sub_81CA698(void); void sub_81CA6E0(void); void sub_81CA714(void); void sub_81CA770(void); @@ -109,6 +115,32 @@ const LoopedTask gUnknown_086201A0[] = { sub_81C9F28 }; +const struct CompressedSpriteSheet gUnknown_086201C4[] = { + {gPokenavOptions_Gfx, 0x3400, 0x0003}, + {gUnknown_08620124, 0x0100, 0x0001} +}; + +const struct SpritePalette gUnknown_086201D4[] = { + {gPokenavOptions_Pal + 0x00, 4}, + {gPokenavOptions_Pal + 0x10, 5}, + {gPokenavOptions_Pal + 0x20, 6}, + {gPokenavOptions_Pal + 0x30, 7}, + {gPokenavOptions_Pal + 0x40, 8}, + {gUnknown_08620104, 3}, + {NULL, 0} +}; + +struct UnkStruct_08620240 +{ + u16 field_0; + u16 field_2; + const u16 *field_4[6]; +}; + +extern const struct UnkStruct_08620240 gUnknown_08620240[]; + +extern const struct SpriteTemplate gUnknown_0862034C; + bool32 sub_81C98D4(void) { s32 i; @@ -535,3 +567,97 @@ u32 sub_81C9F28(int state) } return 4; } + +void sub_81C9FC4(void) +{ + u32 i; + + for (i = 0; i < 2; i++) + LoadCompressedSpriteSheet(&gUnknown_086201C4[i]); + Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); +} + +void sub_81C9FEC(void) +{ + FreeSpriteTilesByTag(3); + FreeSpriteTilesByTag(1); + FreeSpritePaletteByTag(4); + FreeSpritePaletteByTag(5); + FreeSpritePaletteByTag(6); + FreeSpritePaletteByTag(7); + FreeSpritePaletteByTag(8); + FreeSpritePaletteByTag(3); + sub_81CA094(); + sub_81CA698(); +} + +void sub_81CA02C(void) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) + { + u8 spriteId = CreateSprite(&gUnknown_0862034C, 0x8c, 20 * i + 40, 3); + unk->field_02c[i][j] = &gSprites[spriteId]; + gSprites[spriteId].pos2.x = 32 * j; + } + } +} + +void sub_81CA094(void) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) + { + FreeSpriteOamMatrix(unk->field_02c[i][j]); + DestroySprite(unk->field_02c[i][j]); + } + } +} + +void sub_81CA0C8(void) +{ + s32 r0 = sub_81C9894(); + sub_81CA0EC(gUnknown_08620240[r0].field_4, gUnknown_08620240[r0].field_0, gUnknown_08620240[r0].field_2); +} + +void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 sp04 = GetSpriteTileStartByTag(3); + + for (i = 0; i < 6; i++) + { + if (*a0 != NULL) + { + for (j = 0; j < 4; j++) + { + unk->field_02c[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; + unk->field_02c[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); + unk->field_02c[i][j]->invisible = TRUE; + unk->field_02c[i][j]->pos1.y = a1; + unk->field_02c[i][j]->pos1.x = 0x8c; + unk->field_02c[i][j]->pos2.x = 32 * j; + } + unk->field_010[i] = TRUE; + } + else + { + for (j = 0; j < 4; j++) + { + unk->field_02c[i][j]->invisible = TRUE; + } + unk->field_010[i] = FALSE; + } + a0++; + a1 += a2; + } +} |