diff options
author | Diegoisawesome <Diegoisawesome@users.noreply.github.com> | 2018-05-19 23:23:45 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-19 23:23:45 -0500 |
commit | ecfe49ec6147fec75969b769605ec09b4a87c66a (patch) | |
tree | e43fd78fc4f83d8345b1938e87f08d59454682a5 /src | |
parent | 0c1f85f2002e911f64a3b188fa30d8f465c0fc7e (diff) | |
parent | 9385036ff7cfe1941f3fcdbc3a76cbf06b95d67d (diff) |
Merge pull request #254 from DizzyEggg/decompile_menu_indicators
Decompile menu indicators
Diffstat (limited to 'src')
-rw-r--r-- | src/daycare.c | 3 | ||||
-rw-r--r-- | src/decoration.c | 1 | ||||
-rwxr-xr-x | src/item_menu.c | 5 | ||||
-rw-r--r-- | src/list_menu.c | 832 | ||||
-rw-r--r-- | src/main_menu.c | 2 | ||||
-rw-r--r-- | src/mon_markings.c | 3 | ||||
-rw-r--r-- | src/player_pc.c | 4 | ||||
-rw-r--r-- | src/pokeblock.c | 1 | ||||
-rw-r--r-- | src/secret_base.c | 1 |
9 files changed, 833 insertions, 19 deletions
diff --git a/src/daycare.c b/src/daycare.c index d567ff79a..17928324f 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1,5 +1,6 @@ #include "global.h" #include "pokemon.h" +#include "battle.h" #include "daycare.h" #include "string_util.h" #include "constants/species.h" @@ -22,8 +23,6 @@ #define EGG_MOVES_ARRAY_COUNT 10 #define EGG_LVL_UP_MOVES_ARRAY_COUNT 50 -extern u16 gMoveToLearn; - // text extern const u8 gText_MaleSymbol4[]; extern const u8 gText_FemaleSymbol4[]; diff --git a/src/decoration.c b/src/decoration.c index 1fc94c80e..08287a3cc 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -21,7 +21,6 @@ #include "list_menu.h" #include "menu_helpers.h" #include "menu.h" -#include "menu_indicators.h" #include "sound.h" #include "event_scripts.h" #include "event_data.h" diff --git a/src/item_menu.c b/src/item_menu.c index 4742d07a1..c4b4b15b1 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -26,7 +26,6 @@ #include "malloc.h" #include "map_name_popup.h" #include "menu.h" -#include "menu_indicators.h" #include "money.h" #include "overworld.h" #include "palette.h" @@ -265,7 +264,7 @@ struct TempWallyStruct { }; EWRAM_DATA struct UnkBagStruct *gUnknown_0203CE54 = 0; -EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0, 0, 0, {0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}; +EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0}; EWRAM_DATA struct ListBuffer1 *gUnknown_0203CE74 = 0; EWRAM_DATA struct ListBuffer2 *gUnknown_0203CE78 = 0; EWRAM_DATA u16 gSpecialVar_ItemId = 0; @@ -750,7 +749,7 @@ void sub_81AB824(void) void bag_menu_add_list_scroll_arrow_indicators_maybe(void) { if (gUnknown_0203CE54->unk81B != 1 && gUnknown_0203CE54->unk81F == 0xFF) - gUnknown_0203CE54->unk81F = AddScrollIndicatorArrowPair(&gUnknown_08614094, gUnknown_0203CE58.unk6); + gUnknown_0203CE54->unk81F = AddScrollIndicatorArrowPair(&gUnknown_08614094, &gUnknown_0203CE58.unk6); } void sub_81AB89C(void) diff --git a/src/list_menu.c b/src/list_menu.c index c78d32bb3..de7de8269 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -5,11 +5,16 @@ #include "text_window.h" #include "main.h" #include "task.h" -#include "menu_indicators.h" +#include "trig.h" +#include "decompress.h" +#include "palette.h" +#include "malloc.h" #include "strings.h" #include "sound.h" #include "constants/songs.h" +// This file needs better labels and function names. + struct UnknownMysteryGiftLinkMenuStruct { s32 field_0; @@ -29,7 +34,71 @@ struct UnknownListMenuPals u8 field_3_7:1; }; -extern struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84; +struct UnkIndicatorsStruct +{ + u8 field_0; + u16 *field_4; + u16 field_8; + u16 field_A; + u16 field_C; + u16 field_E; + u8 field_10; + u8 field_11; + u8 field_12; + u8 field_13; + u8 field_14_0:4; + u8 field_14_1:4; + u8 field_15_0:4; + u8 field_15_1:4; + u8 field_16_0:3; + u8 field_16_1:3; + u8 field_16_2:2; + u8 field_17_0:6; + u8 field_17_1:2; +}; + +struct UnkIndicatorsStruct2 +{ + u8 field_0; + u16 *field_4; + u16 field_8; + u16 field_A; + u8 field_C; + u8 field_D; + u16 tileTag; + u16 palTag; + u16 field_12; + u16 field_14; + u16 field_16; + u16 field_18; + u16 field_1A; + u16 field_1C; + s16 field_1E; +}; + +struct UnkIndicatorsStruct3 +{ + struct SubspriteTable subspriteTable; + struct Subsprite *subspritesPtr; // not a const pointer + u8 spriteId; + u16 tileTag; + u16 palTag; +}; + +struct UnkIndicatorsStruct4 +{ + u8 field_0; + u16 tileTag; + u16 palTag; +}; + +struct UnkSmallIndicatorsStruct +{ + u8 field_0_0:4; + u8 field_0_1:4; + u8 field_1; + u16 field_2; +}; // this file's functions static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow); @@ -38,11 +107,220 @@ static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOff static void ListMenuDrawCursor(struct ListMenu *list); static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2); static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind); +static void Task_ScrollIndicatorArrowPair(u8 taskId); +static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor); +static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor); +static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y); +static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y); +static void ListMenuRemoveRedOutlineCursorObject(u8 taskId); +static void ListMenuRemoveRedArrowCursorObject(u8 taskId); +static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind); +static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind); +static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind); +static void sub_81AF264(struct Sprite *sprite); +static void ObjectCB_RedArrowCursor(struct Sprite *sprite); + +// EWRAM vars + EWRAM_DATA struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84 = {0}; + EWRAM_DATA struct ArrowStruct gUnknown_0203CE8C = {0}; // IWRAM common struct UnknownListMenuPals gUnknown_03006300; struct ListMenuTemplate gMultiuseListMenuTemplate; +// const rom data +static const struct UnkSmallIndicatorsStruct gUnknown_086141FC[] = +{ + {0, 0, 2, 8}, + {1, 0, 2, -8}, + {2, 1, 2, 8}, + {3, 1, 2, -8}, +}; + +static const struct OamData sOamData_861420C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_8614214[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_861421C[] = +{ + ANIMCMD_FRAME(0, 30, 1, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8614224[] = +{ + ANIMCMD_FRAME(4, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_861422C[] = +{ + ANIMCMD_FRAME(4, 30, 0, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_8614234[] = +{ + sSpriteAnim_8614214, + sSpriteAnim_861421C, + sSpriteAnim_8614224, + sSpriteAnim_861422C +}; + +static const struct SpriteTemplate gUnknown_08614244 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_861420C, + .anims = sSpriteAnimTable_8614234, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81AF264, +}; + +static const struct Subsprite sSubsprite_861425C = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 0, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614260 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 1, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614264 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 2, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614268 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 3, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_861426C = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 4, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614270 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 5, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614274 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 6, + .priority = 0, +}; + +static const struct Subsprite sSubsprite_8614278 = +{ + .x = 0, + .y = 0, + .shape = 0, + .size = 0, + .tileOffset = 7, + .priority = 0, +}; + +static const struct OamData sOamData_861427C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_8614284[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_861428C[] = +{ + sSpriteAnim_8614284 +}; + +static const struct SpriteTemplate gUnknown_08614290 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_861427C, + .anims = sSpriteAnimTable_861428C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = ObjectCB_RedArrowCursor, +}; + +static const u16 gUnknown_086142A8[] = INCBIN_U16("graphics/interface/red_arrow.gbapal"); +static const u8 gUnknown_086142C8[] = INCBIN_U8("graphics/interface/red_arrow_other.4bpp.lz"); +static const u8 gUnknown_08614338[] = INCBIN_U8("graphics/interface/selector_outline.4bpp.lz"); +static const u8 gUnknown_08614378[] = INCBIN_U8("graphics/interface/red_arrow.4bpp.lz"); + // code static void ListMenuDummyTask(u8 taskId) { @@ -415,9 +693,9 @@ static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind) cursor.unk1 = 0xA0; cursor.unk2 = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2; cursor.unk4 = GetFontAttribute(list->template.fontId, 1) + 2; - cursor.unk6 = 0x4000; - cursor.unk8 = 0xFFFF; - cursor.unkA = 0xF; + cursor.tileTag = 0x4000; + cursor.palTag = 0xFFFF; + cursor.palNum = 0xF; return ListMenuAddCursorObjectInternal(&cursor, cursorKind); } @@ -631,3 +909,547 @@ void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list) if (!arg1) PlaySE(SE_SELECT); } + +// unused +s32 sub_81AF08C(u8 taskId, u8 field) +{ + struct UnkIndicatorsStruct *data = (void*) gTasks[taskId].data; + + switch (field) + { + case 0: + case 1: + return (s32)(data->field_4); + case 2: + return data->field_C; + case 3: + return data->field_E; + case 4: + return data->field_10; + case 5: + return data->field_11; + case 6: + return data->field_12; + case 7: + return data->field_13; + case 8: + return data->field_14_0; + case 9: + return data->field_14_1; + case 10: + return data->field_15_0; + case 11: + return data->field_15_1; + case 12: + return data->field_16_0; + case 13: + return data->field_16_1; + case 14: + return data->field_16_2; + case 15: + return data->field_17_0; + case 16: + return data->field_17_1; + default: + return -1; + } +} + +// unused +void sub_81AF15C(u8 taskId, u8 field, s32 value) +{ + struct UnkIndicatorsStruct *data = (void*) &gTasks[taskId].data; + + switch (field) + { + case 0: + case 1: + data->field_4 = (void*)(value); + break; + case 2: + data->field_C = value; + break; + case 3: + data->field_E = value; + break; + case 4: + data->field_10 = value; + break; + case 5: + data->field_11 = value; + break; + case 6: + data->field_12 = value; + break; + case 7: + data->field_13 = value; + break; + case 8: + data->field_14_0 = value; + break; + case 9: + data->field_14_1 = value; + break; + case 10: + data->field_15_0 = value; + break; + case 11: + data->field_15_1 = value; + break; + case 12: + data->field_16_0 = value; + break; + case 13: + data->field_16_1 = value; + break; + case 14: + data->field_16_2 = value; + break; + case 15: + data->field_17_0 = value; + break; + case 16: + data->field_17_1 = value; + break; + } +} + +static void sub_81AF264(struct Sprite *sprite) +{ + s32 multiplier; + + switch (sprite->data[0]) + { + case 0: + StartSpriteAnim(sprite, sprite->data[1]); + sprite->data[0]++; + break; + case 1: + switch (sprite->data[2]) + { + case 0: + multiplier = sprite->data[3]; + sprite->pos2.x = (gSineTable[(u8)(sprite->data[5])] * multiplier) / 256; + break; + case 1: + multiplier = sprite->data[3]; + sprite->pos2.y = (gSineTable[(u8)(sprite->data[5])] * multiplier) / 256; + break; + } + sprite->data[5] += sprite->data[4]; + break; + } +} + +static u8 AddScrollIndicatorArrowObject(u8 arg0, u8 x, u8 y, u16 tileTag, u16 palTag) +{ + u8 spriteId; + struct SpriteTemplate spriteTemplate; + + spriteTemplate = gUnknown_08614244; + spriteTemplate.tileTag = tileTag; + spriteTemplate.paletteTag = palTag; + + spriteId = CreateSprite(&spriteTemplate, x, y, 0); + gSprites[spriteId].invisible = 1; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].data[1] = gUnknown_086141FC[arg0].field_0_0; + gSprites[spriteId].data[2] = gUnknown_086141FC[arg0].field_0_1; + gSprites[spriteId].data[3] = gUnknown_086141FC[arg0].field_1; + gSprites[spriteId].data[4] = gUnknown_086141FC[arg0].field_2; + gSprites[spriteId].data[5] = 0; + + return spriteId; +} + +u8 AddScrollIndicatorArrowPair(const struct ArrowStruct *arrowInfo, u16 *arg1) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct UnkIndicatorsStruct2 *data; + u8 taskId; + + spriteSheet.data = gUnknown_086142C8; + spriteSheet.size = 0x100; + spriteSheet.tag = arrowInfo->tileTag; + LoadCompressedObjectPic(&spriteSheet); + + if (arrowInfo->palTag == 0xFFFF) + { + LoadPalette(gUnknown_086142A8, (16 * arrowInfo->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = gUnknown_086142A8; + spritePal.tag = arrowInfo->palTag; + LoadSpritePalette(&spritePal); + } + + taskId = CreateTask(Task_ScrollIndicatorArrowPair, 0); + data = (void*) gTasks[taskId].data; + + data->field_0 = 0; + data->field_4 = arg1; + data->field_8 = arrowInfo->unk6; + data->field_A = arrowInfo->unk8; + data->tileTag = arrowInfo->tileTag; + data->palTag = arrowInfo->palTag; + data->field_C = AddScrollIndicatorArrowObject(arrowInfo->unk0, arrowInfo->unk1, arrowInfo->unk2, arrowInfo->tileTag, arrowInfo->palTag); + data->field_D = AddScrollIndicatorArrowObject(arrowInfo->unk3, arrowInfo->unk4, arrowInfo->unk5, arrowInfo->tileTag, arrowInfo->palTag); + + if (arrowInfo->palTag == 0xFFFF) + { + gSprites[data->field_C].oam.paletteNum = arrowInfo->palNum; + gSprites[data->field_D].oam.paletteNum = arrowInfo->palNum; + } + + return taskId; +} + +u8 AddScrollIndicatorArrowPairParametrized(u32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 tileTag, s32 palTag, void *arg7) +{ + if (arg0 == 2 || arg0 == 3) + { + gUnknown_0203CE8C.unk0 = 2; + gUnknown_0203CE8C.unk1 = arg1; + gUnknown_0203CE8C.unk2 = arg2; + gUnknown_0203CE8C.unk3 = 3; + gUnknown_0203CE8C.unk4 = arg1; + gUnknown_0203CE8C.unk5 = arg3; + } + else + { + gUnknown_0203CE8C.unk0 = 0; + gUnknown_0203CE8C.unk1 = arg2; + gUnknown_0203CE8C.unk2 = arg1; + gUnknown_0203CE8C.unk3 = 1; + gUnknown_0203CE8C.unk4 = arg3; + gUnknown_0203CE8C.unk5 = arg1; + } + + gUnknown_0203CE8C.unk6 = 0; + gUnknown_0203CE8C.unk8 = arg4; + gUnknown_0203CE8C.tileTag = tileTag; + gUnknown_0203CE8C.palTag = palTag; + gUnknown_0203CE8C.palNum = 0; + + return AddScrollIndicatorArrowPair(&gUnknown_0203CE8C, arg7); +} + +static void Task_ScrollIndicatorArrowPair(u8 taskId) +{ + struct UnkIndicatorsStruct2 *data = (void*) gTasks[taskId].data; + u16 var = (*data->field_4); + + if (var == data->field_8 && var != 0xFFFF) + gSprites[data->field_C].invisible = 1; + else + gSprites[data->field_C].invisible = 0; + + if (var == data->field_A) + gSprites[data->field_D].invisible = 1; + else + gSprites[data->field_D].invisible = 0; +} + +void Task_ScrollIndicatorArrowPairOnMainMenu(u8 taskId) +{ + struct UnkIndicatorsStruct2 *data = (void*) gTasks[taskId].data; + + if (data->field_1E != 0) + { + gSprites[data->field_C].invisible = 0; + gSprites[data->field_D].invisible = 1; + } + else + { + gSprites[data->field_C].invisible = 1; + gSprites[data->field_D].invisible = 0; + } +} + +void RemoveScrollIndicatorArrowPair(u8 taskId) +{ + struct UnkIndicatorsStruct2 *data = (void*) gTasks[taskId].data; + + if (data->tileTag != 0xFFFF) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != 0xFFFF) + FreeSpritePaletteByTag(data->palTag); + + DestroySprite(&gSprites[data->field_C]); + DestroySprite(&gSprites[data->field_D]); + + DestroyTask(taskId); +} + +static u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + default: + return ListMenuAddRedOutlineCursorObject(cursor); + case 1: + return ListMenuAddRedArrowCursorObject(cursor); + } +} + +static void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + ListMenuUpdateRedOutlineCursorObject(taskId, x, y); + break; + case 1: + ListMenuUpdateRedArrowCursorObject(taskId, x, y); + break; + } +} + +static void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind) +{ + switch (cursorKind) + { + case 0: + ListMenuRemoveRedOutlineCursorObject(taskId); + break; + case 1: + ListMenuRemoveRedArrowCursorObject(taskId); + break; + } +} + +static void Task_RedOutlineCursor(u8 taskId) +{ + +} + +u8 ListMenuGetRedOutlineCursorSpriteCount(u16 arg0, u16 arg1) +{ + s32 i; + s32 count = 4; + + if (arg0 > 16) + { + for (i = 8; i < (arg0 - 8); i += 8) + count += 2; + } + if (arg1 > 16) + { + for (i = 8; i < (arg1 - 8); i += 8) + count += 2; + } + + return count; +} + +void ListMenuSetUpRedOutlineCursorSpriteOamTable(u16 arg0, u16 arg1, struct Subsprite *subsprites) +{ + s32 i, j, id = 0; + + subsprites[id] = sSubsprite_861425C; + subsprites[id].x = 136; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_8614260; + subsprites[id].x = arg0 + 128; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_8614274; + subsprites[id].x = 136; + subsprites[id].y = arg1 + 128; + id++; + + subsprites[id] = sSubsprite_8614278; + subsprites[id].x = arg0 + 128; + subsprites[id].y = arg1 + 128; + id++; + + if (arg0 > 16) + { + for (i = 8; i < arg0 - 8; i += 8) + { + subsprites[id] = sSubsprite_8614264; + subsprites[id].x = i - 120; + subsprites[id].y = 136; + id++; + + subsprites[id] = sSubsprite_8614270; + subsprites[id].x = i - 120; + subsprites[id].y = arg1 + 128; + id++; + } + } + + if (arg1 > 16) + { + for (j = 8; j < arg1 - 8; j += 8) + { + subsprites[id] = sSubsprite_8614268; + subsprites[id].x = 136; + subsprites[id].y = j - 120; + id++; + + subsprites[id] = sSubsprite_861426C; + subsprites[id].x = arg0 + 128; + subsprites[id].y = j - 120; + id++; + } + } +} + +static u8 ListMenuAddRedOutlineCursorObject(struct CursorStruct *cursor) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct UnkIndicatorsStruct3 *data; + struct SpriteTemplate spriteTemplate; + u8 taskId; + + spriteSheet.data = gUnknown_08614338; + spriteSheet.size = 0x100; + spriteSheet.tag = cursor->tileTag; + LoadCompressedObjectPic(&spriteSheet); + + if (cursor->palTag == 0xFFFF) + { + LoadPalette(gUnknown_086142A8, (16 * cursor->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = gUnknown_086142A8; + spritePal.tag = cursor->palTag; + LoadSpritePalette(&spritePal); + } + + taskId = CreateTask(Task_RedOutlineCursor, 0); + data = (void*) gTasks[taskId].data; + + data->tileTag = cursor->tileTag; + data->palTag = cursor->palTag; + data->subspriteTable.subspriteCount = ListMenuGetRedOutlineCursorSpriteCount(cursor->unk2, cursor->unk4); + data->subspriteTable.subsprites = data->subspritesPtr = Alloc(data->subspriteTable.subspriteCount * 4); + ListMenuSetUpRedOutlineCursorSpriteOamTable(cursor->unk2, cursor->unk4, data->subspritesPtr); + + spriteTemplate = gDummySpriteTemplate; + spriteTemplate.tileTag = cursor->tileTag; + spriteTemplate.paletteTag = cursor->palTag; + + data->spriteId = CreateSprite(&spriteTemplate, cursor->unk0 + 120, cursor->unk1 + 120, 0); + SetSubspriteTables(&gSprites[data->spriteId], &data->subspriteTable); + gSprites[data->spriteId].oam.priority = 0; + gSprites[data->spriteId].subpriority = 0; + gSprites[data->spriteId].subspriteTableNum = 0; + + if (cursor->palTag == 0xFFFF) + { + gSprites[data->spriteId].oam.paletteNum = cursor->palNum; + } + + return taskId; +} + +static void ListMenuUpdateRedOutlineCursorObject(u8 taskId, u16 x, u16 y) +{ + struct UnkIndicatorsStruct3 *data = (void*) gTasks[taskId].data; + + gSprites[data->spriteId].pos1.x = x + 120; + gSprites[data->spriteId].pos1.y = y + 120; +} + +static void ListMenuRemoveRedOutlineCursorObject(u8 taskId) +{ + struct UnkIndicatorsStruct3 *data = (void*) gTasks[taskId].data; + + Free(data->subspritesPtr); + + if (data->tileTag != 0xFFFF) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != 0xFFFF) + FreeSpritePaletteByTag(data->palTag); + + DestroySprite(&gSprites[data->spriteId]); + DestroyTask(taskId); +} + +static void ObjectCB_RedArrowCursor(struct Sprite *sprite) +{ + sprite->pos2.x = gSineTable[(u8)(sprite->data[0])] / 64; + sprite->data[0] += 8; +} + +static void Task_RedArrowCursor(u8 taskId) +{ + +} + +static u8 ListMenuAddRedArrowCursorObject(struct CursorStruct *cursor) +{ + struct CompressedSpriteSheet spriteSheet; + struct SpritePalette spritePal; + struct UnkIndicatorsStruct4 *data; + struct SpriteTemplate spriteTemplate; + u8 taskId; + + spriteSheet.data = gUnknown_08614378; + spriteSheet.size = 0x80; + spriteSheet.tag = cursor->tileTag; + LoadCompressedObjectPic(&spriteSheet); + + if (cursor->palTag == 0xFFFF) + { + LoadPalette(gUnknown_086142A8, (16 * cursor->palNum) + 0x100, 0x20); + } + else + { + spritePal.data = gUnknown_086142A8; + spritePal.tag = cursor->palTag; + LoadSpritePalette(&spritePal); + } + + taskId = CreateTask(Task_RedArrowCursor, 0); + data = (void*) gTasks[taskId].data; + + data->tileTag = cursor->tileTag; + data->palTag = cursor->palTag; + + spriteTemplate = gUnknown_08614290; + spriteTemplate.tileTag = cursor->tileTag; + spriteTemplate.paletteTag = cursor->palTag; + + data->field_0 = CreateSprite(&spriteTemplate, cursor->unk0, cursor->unk1, 0); + gSprites[data->field_0].pos2.x = 8; + gSprites[data->field_0].pos2.y = 8; + + if (cursor->palTag == 0xFFFF) + { + gSprites[data->field_0].oam.paletteNum = cursor->palNum; + } + + return taskId; +} + +static void ListMenuUpdateRedArrowCursorObject(u8 taskId, u16 x, u16 y) +{ + struct UnkIndicatorsStruct4 *data = (void*) gTasks[taskId].data; + + gSprites[data->field_0].pos1.x = x; + gSprites[data->field_0].pos1.y = y; +} + +static void ListMenuRemoveRedArrowCursorObject(u8 taskId) +{ + struct UnkIndicatorsStruct4 *data = (void*) gTasks[taskId].data; + + if (data->tileTag != 0xFFFF) + FreeSpriteTilesByTag(data->tileTag); + if (data->palTag != 0xFFFF) + FreeSpritePaletteByTag(data->palTag); + + DestroySprite(&gSprites[data->field_0]); + DestroyTask(taskId); +} diff --git a/src/main_menu.c b/src/main_menu.c index 3d6c1df76..3490424af 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -16,7 +16,7 @@ #include "link.h" #include "main.h" #include "menu.h" -#include "menu_indicators.h" +#include "list_menu.h" #include "mystery_event_menu.h" #include "naming_screen.h" #include "option_menu.h" diff --git a/src/mon_markings.c b/src/mon_markings.c index 147872ab6..7f320002d 100644 --- a/src/mon_markings.c +++ b/src/mon_markings.c @@ -2,7 +2,8 @@ #include "dma3.h" #include "graphics.h" #include "main.h" -#include "menu_indicators.h" +#include "window.h" +#include "list_menu.h" #include "mon_markings.h" #include "constants/songs.h" #include "sound.h" diff --git a/src/player_pc.c b/src/player_pc.c index 2bdf527e7..c10c63dda 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -18,7 +18,6 @@ #include "malloc.h" #include "menu.h" #include "menu_helpers.h" -#include "menu_indicators.h" #include "overworld.h" #include "palette.h" #include "party_menu.h" @@ -43,9 +42,6 @@ struct Struct203BCC4 u8 spriteIds[7]; }; -// extern offset -void (*gFieldCallback)(void); - // static functions static void InitPlayerPCMenu(u8 taskId); static void PlayerPCProcessMenuInput(u8 taskId); diff --git a/src/pokeblock.c b/src/pokeblock.c index f57b2f0c2..216c9e2c5 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -24,7 +24,6 @@ #include "constants/songs.h" #include "sound.h" #include "berry.h" -#include "menu_indicators.h" #include "event_data.h" #include "battle_message.h" #include "safari_zone.h" diff --git a/src/secret_base.c b/src/secret_base.c index e2b7e20f1..66af4d4a2 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -10,7 +10,6 @@ #include "list_menu.h" #include "menu.h" #include "menu_helpers.h" -#include "menu_indicators.h" #include "constants/maps.h" #include "constants/songs.h" #include "constants/species.h" |