#include "global.h" #include "menu_cursor.h" #include "palette.h" #include "sprite.h" EWRAM_DATA u16 gUnknown_0203A360[0x10] = {}; EWRAM_DATA struct Subsprite gMenuCursorSubsprites[10] = {0}; EWRAM_DATA u8 gUnknown_0203A3D0 = 0; EWRAM_DATA u8 gUnknown_0203A3D1 = 0; EWRAM_DATA u8 gUnknown_0203A3D2 = 0; EWRAM_DATA u8 gUnknown_0203A3D3 = 0; EWRAM_DATA u8 gUnknown_0203A3D4 = 0; const u8 OutlineCursorTiles_00[] = INCBIN_U8("graphics/interface/outline_cursor_00.4bpp"); const u8 OutlineCursorTiles_01[] = INCBIN_U8("graphics/interface/outline_cursor_01.4bpp"); const u8 OutlineCursorTiles_02[] = INCBIN_U8("graphics/interface/outline_cursor_02.4bpp"); const u8 OutlineCursorTiles_03[] = INCBIN_U8("graphics/interface/outline_cursor_03.4bpp"); const u8 OutlineCursorTiles_04[] = INCBIN_U8("graphics/interface/outline_cursor_04.4bpp"); const u8 OutlineCursorTiles_05[] = INCBIN_U8("graphics/interface/outline_cursor_05.4bpp"); const u8 OutlineCursorTiles_06[] = INCBIN_U8("graphics/interface/outline_cursor_06.4bpp"); const u8 OutlineCursorTiles_07[] = INCBIN_U8("graphics/interface/outline_cursor_07.4bpp"); const u8 OutlineCursorTiles_08[] = INCBIN_U8("graphics/interface/outline_cursor_08.4bpp"); const u8 OutlineCursorTiles_09[] = INCBIN_U8("graphics/interface/outline_cursor_09.4bpp"); const u8 OutlineCursorTiles_10[] = INCBIN_U8("graphics/interface/outline_cursor_10.4bpp"); const u8 OutlineCursorTiles_11[] = INCBIN_U8("graphics/interface/outline_cursor_11.4bpp"); const u8 OutlineCursorTiles_12[] = INCBIN_U8("graphics/interface/outline_cursor_12.4bpp"); const u8 OutlineCursorTiles_13[] = INCBIN_U8("graphics/interface/outline_cursor_13.4bpp"); const u8 OutlineCursorTiles_14[] = INCBIN_U8("graphics/interface/outline_cursor_14.4bpp"); const u8 OutlineCursorTiles_15[] = INCBIN_U8("graphics/interface/outline_cursor_15.4bpp"); const struct OamData gOamData_842F11C = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_V_RECTANGLE }; const struct OamData gOamData_842F124 = { .objMode = ST_OAM_OBJ_WINDOW, .shape = ST_OAM_V_RECTANGLE }; const struct OamData gOamData_842F12C = { .objMode = ST_OAM_OBJ_NORMAL, .shape = ST_OAM_V_RECTANGLE }; const union AnimCmd gSpriteAnim_842F134[] = { ANIMCMD_FRAME(0, 63), ANIMCMD_END }; const union AnimCmd *const gSpriteAnimTable_842F13C[] = { gSpriteAnim_842F134 }; const struct SpriteSheet gUnknown_0842F140[] = { { OutlineCursorTiles_00, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_01, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_02, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_03, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_04, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_05, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_06, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_07, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_08, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_09, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_10, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_11, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_12, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_13, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_14, 0x1C0, 0xFFF0 }, { OutlineCursorTiles_15, 0x1C0, 0xFFF0 } }; const struct SpriteSheet gUnknown_0842F1C0[] = { { OutlineCursorTiles_00, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_01, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_02, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_03, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_04, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_05, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_06, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_07, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_08, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_09, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_10, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_11, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_12, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_13, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_14, 0x1C0, 0xFFF1 }, { OutlineCursorTiles_15, 0x1C0, 0xFFF1 } }; const struct SpritePalette gUnknown_0842F240 = { gUnknown_0203A360, 0xfff0 }; const struct SpritePalette gUnknown_0842F248 = { gUnknown_0203A360, 0xfff1 }; const struct SpriteTemplate gSpriteTemplate_842F250[] = { { 0xfff0, 0xfff0, &gOamData_842F11C, gSpriteAnimTable_842F13C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, { 0xfff0, 0xffff, &gOamData_842F11C, gSpriteAnimTable_842F13C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, { 0xfff0, 0xffff, &gOamData_842F124, gSpriteAnimTable_842F13C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy } }; const struct SpriteTemplate gSpriteTemplate_842F298[] = { { 0xfff1, 0xfff1, &gOamData_842F12C, gSpriteAnimTable_842F13C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }, { 0xfff1, 0xffff, &gOamData_842F12C, gSpriteAnimTable_842F13C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy } }; const struct Subsprite gSubspriteTable_842F2C8[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F2D8[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 9, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F2F0[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 9, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 17, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F310[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 25, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F328[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F340[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 9, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 41, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F360[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 17, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 49, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F380[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 25, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 57, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F3A0[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 65, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F3C0[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 9, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 41, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 73, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F3E8[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 49, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 81, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F410[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 57, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 89, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F438[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 65, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 97, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F460[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 9, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 41, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 73, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 105, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F490[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 65, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 81, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 113, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F4C0[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 65, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 89, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 121, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F4F0[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 33, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 65, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 97, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 129, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F520[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 1, 0, ST_OAM_V_RECTANGLE, 0, 2, 0 }, { 9, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 41, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 73, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 105, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 137, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite gSubspriteTable_842F558[] = { { -1, 0, ST_OAM_V_RECTANGLE, 0, 0, 0 }, { 7, 0, ST_OAM_H_RECTANGLE, 2, 6, 0 }, { 35, 0, ST_OAM_V_RECTANGLE, 0, 4, 0 } }; const struct Subsprite *const gUnknown_0842F570[] = { gSubspriteTable_842F2C8, gSubspriteTable_842F2C8, gSubspriteTable_842F2D8, gSubspriteTable_842F2F0, gSubspriteTable_842F310, gSubspriteTable_842F328, gSubspriteTable_842F340, gSubspriteTable_842F360, gSubspriteTable_842F380, gSubspriteTable_842F3A0, gSubspriteTable_842F3C0, gSubspriteTable_842F3E8, gSubspriteTable_842F410, gSubspriteTable_842F438, gSubspriteTable_842F460, gSubspriteTable_842F490, gSubspriteTable_842F4C0, gSubspriteTable_842F4F0, gSubspriteTable_842F520 }; const struct Subsprite *const gUnknown_0842F5BC[] = { gSubspriteTable_842F558 }; const struct SubspriteTable gSubspriteTables_842F5C0[] = { {1, gMenuCursorSubsprites}, {1, gMenuCursorSubsprites}, {2, gMenuCursorSubsprites}, {3, gMenuCursorSubsprites}, {4, gMenuCursorSubsprites}, {5, gMenuCursorSubsprites}, {6, gMenuCursorSubsprites}, {7, gMenuCursorSubsprites}, {8, gMenuCursorSubsprites}, {9, gMenuCursorSubsprites}, {10, gMenuCursorSubsprites}, {11, gMenuCursorSubsprites}, {12, gMenuCursorSubsprites}, {13, gMenuCursorSubsprites}, {14, gMenuCursorSubsprites}, {15, gMenuCursorSubsprites}, {1, gMenuCursorSubsprites}, {17, gMenuCursorSubsprites}, {18, gMenuCursorSubsprites}, {19, gMenuCursorSubsprites}, {20, gMenuCursorSubsprites}, {21, gMenuCursorSubsprites}, {22, gMenuCursorSubsprites}, {23, gMenuCursorSubsprites}, {24, gMenuCursorSubsprites}, {25, gMenuCursorSubsprites}, {26, gMenuCursorSubsprites}, {27, gMenuCursorSubsprites}, {28, gMenuCursorSubsprites}, {29, gMenuCursorSubsprites}, {30, gMenuCursorSubsprites}, {31, gMenuCursorSubsprites} }; const struct SubspriteTable gSubspriteTables_842F6C0[] = { {2, gSubspriteTable_842F2C8}, {2, gSubspriteTable_842F2C8}, {3, gSubspriteTable_842F2D8}, {4, gSubspriteTable_842F2F0}, {3, gSubspriteTable_842F310}, {3, gSubspriteTable_842F328}, {4, gSubspriteTable_842F340}, {4, gSubspriteTable_842F360}, {4, gSubspriteTable_842F380}, {4, gSubspriteTable_842F3A0}, {5, gSubspriteTable_842F3C0}, {5, gSubspriteTable_842F3E8}, {5, gSubspriteTable_842F410}, {5, gSubspriteTable_842F438}, {6, gSubspriteTable_842F460}, {6, gSubspriteTable_842F490}, {6, gSubspriteTable_842F4C0}, {6, gSubspriteTable_842F4F0}, {7, gSubspriteTable_842F520} }; const struct SubspriteTable gUnknown_0842F758[] = { {3, gMenuCursorSubsprites} }; const struct Subsprite gUnknown_0842F760 = { .shape = ST_OAM_V_RECTANGLE }; const struct Subsprite gUnknown_0842F768 = { .shape = ST_OAM_V_RECTANGLE, .tileOffset = 4 }; const struct Subsprite gUnknown_0842F770 = { .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 6 }; const struct Subsprite gUnknown_0842F778 = { .shape = ST_OAM_V_RECTANGLE, .tileOffset = 2 }; const struct Subsprite gUnknown_0842F780 = { .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 6 }; const struct Subsprite gUnknown_0842F788 = { .shape = ST_OAM_V_RECTANGLE, .tileOffset = 2 }; const struct Subsprite gUnknown_0842F790 = { .shape = ST_OAM_V_RECTANGLE, .tileOffset = 4 }; void sub_814A590(void) { gUnknown_0203A3D0 = 0x40; gUnknown_0203A3D1 = 0x40; gUnknown_0203A3D2 = 0x40; gUnknown_0203A3D3 = 0; gUnknown_0203A3D4 = 0; } u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) { int v9; struct Sprite *v10; if (gUnknown_0203A3D0 != 0x40 || gUnknown_0203A3D1 != 0x40) DestroyMenuCursor(); v9 = 1; if (a2 == 0xFFFF) { gUnknown_0203A360[a3 & 0xF] = a4; if (LoadSpritePalette(&gUnknown_0842F240) != 0xFF) { a2 = 0xFFF0; v9 = 0; } } LoadSpriteSheetDeferred(&gUnknown_0842F140[a3 & 0xF]); gUnknown_0203A3D0 = CreateSprite(&gSpriteTemplate_842F250[v9], 0, 0xA0, a1); gUnknown_0203A3D1 = CreateSprite(&gSpriteTemplate_842F250[2], 0, 0xA0, a1); if (gUnknown_0203A3D0 != 0x40) { v10 = &gSprites[gUnknown_0203A3D0]; if (a2 == 0xFFFF) v10->oam.paletteNum = 0; else v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); } if (gUnknown_0203A3D1 != 0x40) { v10 = &gSprites[gUnknown_0203A3D1]; if (a2 == 0xFFFF) v10->oam.paletteNum = 0; else v10->oam.paletteNum = IndexOfSpritePaletteTag(a2); if (!(REG_DISPCNT & (DISPCNT_WIN0_ON | DISPCNT_WIN1_ON))) *(u8 *)(REG_ADDR_WINOUT) |= 0x1F; gUnknown_0203A3D3 = REG_DISPCNT >> 0xF; gUnknown_0203A3D4 = *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1); REG_DISPCNT |= DISPCNT_OBJWIN_ON; *(u8 *)(REG_ADDR_WINOUT + 1) = 0x10; } sub_814A958(a5); return gUnknown_0203A3D0; } u8 sub_814A758(u8 a1, u8 a2, u8 a3, u8 a4) { u8 result; struct Sprite *spr; result = sub_814A5C0(a1, 0, a3, 0, a4); if (result != 0x40) { spr = &gSprites[gUnknown_0203A3D0]; spr->oam.paletteNum = a2; } return result; } u8 unref_sub_814A7AC(u8 a1, u16 a2, u8 a3) { u16 i; u8 val1 = 0; u16 val2 = 0xF; for (i = 0; i <= 0xFF; i++) { if (gPlttBufferUnfaded[i] == a2) { val1 = (u8)(i >> 4); val2 = i & 0xF; } } return sub_814A758(a1, val1, val2, a3); } void DestroyMenuCursor(void) { if (gUnknown_0203A3D0 != 0x40) { LoadTilesForSpriteSheet(&gUnknown_0842F140[0]); DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D0]); gUnknown_0203A3D0 = 0x40; } if (gUnknown_0203A3D1 != 0x40) { DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D1]); gUnknown_0203A3D1 = 0x40; if (!gUnknown_0203A3D3) REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; *(u8 *)(REG_BASE + REG_OFFSET_WINOUT + 1) = gUnknown_0203A3D4; } return; } void sub_814A880(u8 a1, u8 a2) { struct Sprite *spr; if (gUnknown_0203A3D0 != 0x40) { spr = &gSprites[gUnknown_0203A3D0]; spr->invisible = 0; spr->centerToCornerVecX = 0; spr->centerToCornerVecY = 0; spr->pos1.x = a1; spr->pos1.y = a2; } if (gUnknown_0203A3D1 != 0x40) { spr = &gSprites[gUnknown_0203A3D1]; spr->invisible = 0; spr->centerToCornerVecX = 0; spr->centerToCornerVecY = 0; spr->pos1.x = a1; spr->pos1.y = a2; } return; } void sub_814A904(void) { struct Sprite *spr; if (gUnknown_0203A3D0 != 0x40) { spr = &gSprites[gUnknown_0203A3D0]; spr->invisible = 1; } if (gUnknown_0203A3D1 != 0x40) { spr = &gSprites[gUnknown_0203A3D1]; spr->invisible = 1; } return; } #if ENGLISH #ifdef NONMATCHING // Fix pls void sub_814A958(u8 a) { u8 r7; struct Subsprite *r4 = &gMenuCursorSubsprites[0]; s16 r2 = -1; s32 _a = a; s16 r5; s16 i; *r4 = (struct Subsprite){.x = 0, .y = 0, .shape = 2, .size = 0, .tileOffset = 0, .priority = 0}; r4->x = r2; r4++; r7 = 1; r2 = 1; r5 = a; i = r5; while ((i -= r2) >= 8) { if (i > 0x1F) { *r4 = gUnknown_0842F780; r4->x = r2; r2 += 32; r5 = a; } //_0814A9D4 else { r5 = a; if (_a > 0x27 && i > 8) { *r4 = gUnknown_0842F780; r4->x = (r2 - 32) + (i & ~7); r2 += i & 0x18; } //_0814AA0A else { *r4 = gUnknown_0842F788; r4->x = r2; r2 += 8; } } //_0814AA20 r4++; r7++; i = r5; } //_0814AA3A *r4 = gUnknown_0842F790; r4->x = r2 - 7 + i; r7++; if (gUnknown_0203A3D0 != 64) SetSubspriteTables(&gSprites[gUnknown_0203A3D0], gSubspriteTables_842F5C0 + r7); if (gUnknown_0203A3D1 != 64) SetSubspriteTables(&gSprites[gUnknown_0203A3D1], gSubspriteTables_842F5C0 + r7); } #else __attribute__((naked)) void sub_814A958(u8 a1) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ mov r5, r8\n\ push {r5-r7}\n\ sub sp, 0x4\n\ lsls r0, 24\n\ ldr r4, _0814A9C4\n\ ldr r2, _0814A9C8\n\ lsrs r0, 24\n\ str r0, [sp]\n\ movs r0, 0\n\ movs r1, 0\n\ movs r1, 0x2\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ strh r2, [r4]\n\ adds r4, 0x8\n\ movs r7, 0x1\n\ movs r2, 0x1\n\ ldr r1, [sp]\n\ subs r0, r1, 0x1\n\ lsls r0, 16\n\ lsrs r3, r0, 16\n\ asrs r0, 16\n\ cmp r0, 0x7\n\ ble _0814AA3A\n\ ldr r0, _0814A9CC\n\ mov r12, r0\n\ mov r8, r1\n\ movs r1, 0x8\n\ negs r1, r1\n\ mov r10, r1\n\ ldr r5, _0814A9D0\n\ mov r9, r5\n\ _0814A99E:\n\ lsls r0, r3, 16\n\ asrs r3, r0, 16\n\ cmp r3, 0x1F\n\ ble _0814A9D4\n\ mov r6, r12\n\ ldr r0, [r6]\n\ ldr r1, [r6, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ strh r2, [r4]\n\ lsls r0, r2, 16\n\ movs r1, 0x80\n\ lsls r1, 14\n\ adds r0, r1\n\ lsrs r2, r0, 16\n\ ldr r3, [sp]\n\ lsls r5, r3, 16\n\ b _0814AA20\n\ .align 2, 0\n\ _0814A9C4: .4byte gMenuCursorSubsprites\n\ _0814A9C8: .4byte 0x0000ffff\n\ _0814A9CC: .4byte gUnknown_0842F780\n\ _0814A9D0: .4byte gUnknown_0842F788\n\ _0814A9D4:\n\ ldr r6, [sp]\n\ lsls r5, r6, 16\n\ mov r0, r8\n\ cmp r0, 0x27\n\ ble _0814AA0A\n\ cmp r3, 0x8\n\ ble _0814AA0A\n\ mov r6, r12\n\ ldr r0, [r6]\n\ ldr r1, [r6, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ lsls r1, r2, 16\n\ asrs r1, 16\n\ adds r2, r1, 0\n\ subs r2, 0x20\n\ adds r0, r3, 0\n\ mov r6, r10\n\ ands r0, r6\n\ adds r2, r0\n\ strh r2, [r4]\n\ movs r0, 0x18\n\ ands r0, r3\n\ adds r1, r0\n\ lsls r1, 16\n\ lsrs r2, r1, 16\n\ b _0814AA20\n\ _0814AA0A:\n\ mov r3, r9\n\ ldr r0, [r3]\n\ ldr r1, [r3, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ strh r2, [r4]\n\ lsls r0, r2, 16\n\ movs r6, 0x80\n\ lsls r6, 12\n\ adds r0, r6\n\ lsrs r2, r0, 16\n\ _0814AA20:\n\ adds r4, 0x8\n\ adds r0, r7, 0x1\n\ lsls r0, 24\n\ lsrs r7, r0, 24\n\ asrs r1, r5, 16\n\ lsls r0, r2, 16\n\ asrs r0, 16\n\ subs r1, r0\n\ lsls r1, 16\n\ lsrs r3, r1, 16\n\ asrs r1, 16\n\ cmp r1, 0x7\n\ bgt _0814A99E\n\ _0814AA3A:\n\ ldr r5, _0814AAA8\n\ ldr r0, [r5]\n\ ldr r1, [r5, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ lsls r1, r2, 16\n\ asrs r1, 16\n\ subs r1, 0x7\n\ lsls r0, r3, 16\n\ asrs r0, 16\n\ adds r0, r1\n\ strh r0, [r4]\n\ adds r0, r7, 0x1\n\ lsls r0, 24\n\ lsrs r7, r0, 24\n\ ldr r6, _0814AAAC\n\ ldrb r0, [r6]\n\ cmp r0, 0x40\n\ beq _0814AA78\n\ adds r1, r0, 0\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ lsls r0, 2\n\ ldr r1, _0814AAB0\n\ adds r2, r0, r1\n\ lsls r1, r7, 3\n\ ldr r0, _0814AAB4\n\ adds r1, r0\n\ adds r0, r2, 0\n\ bl SetSubspriteTables\n\ _0814AA78:\n\ ldr r1, _0814AAB8\n\ ldrb r0, [r1]\n\ cmp r0, 0x40\n\ beq _0814AA98\n\ adds r1, r0, 0\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ lsls r0, 2\n\ ldr r1, _0814AAB0\n\ adds r2, r0, r1\n\ lsls r1, r7, 3\n\ ldr r0, _0814AAB4\n\ adds r1, r0\n\ adds r0, r2, 0\n\ bl SetSubspriteTables\n\ _0814AA98:\n\ add sp, 0x4\n\ pop {r3-r5}\n\ mov r8, r3\n\ mov r9, r4\n\ mov r10, r5\n\ pop {r4-r7}\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ _0814AAA8: .4byte gUnknown_0842F790\n\ _0814AAAC: .4byte gUnknown_0203A3D0\n\ _0814AAB0: .4byte gSprites\n\ _0814AAB4: .4byte gSubspriteTables_842F5C0\n\ _0814AAB8: .4byte gUnknown_0203A3D1\n\ .syntax divided\n"); } #endif #elif GERMAN __attribute__((naked)) void sub_814A958(u8 a1) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ mov r5, r8\n\ push {r5-r7}\n\ sub sp, 0x4\n\ lsls r0, 24\n\ ldr r4, _0814A9C4 @ =gMenuCursorSubsprites\n\ ldr r2, _0814A9C8 @ =0x0000ffff\n\ lsrs r0, 24\n\ str r0, [sp]\n\ ldr r0, _0814A9CC @ =gUnknown_0842F780\n\ ldr r1, [r0, 0x4]\n\ ldr r0, [r0]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ strh r2, [r4]\n\ adds r4, 0x8\n\ movs r7, 0x1\n\ movs r2, 0x1\n\ ldr r1, [sp]\n\ subs r0, r1, 0x1\n\ lsls r0, 16\n\ lsrs r3, r0, 16\n\ asrs r0, 16\n\ cmp r0, 0x7\n\ ble _0814AA3E\n\ ldr r0, _0814A9D0 @ =gUnknown_0842F788\n\ mov r12, r0\n\ mov r8, r1\n\ movs r1, 0x8\n\ negs r1, r1\n\ mov r10, r1\n\ ldr r5, _0814A9D4 @ =gUnknown_0842F790\n\ mov r9, r5\n\ _0814A99E:\n\ lsls r0, r3, 16\n\ asrs r3, r0, 16\n\ cmp r3, 0x1F\n\ ble _0814A9D8\n\ mov r6, r12\n\ ldr r0, [r6]\n\ ldr r1, [r6, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ strh r2, [r4]\n\ lsls r0, r2, 16\n\ movs r1, 0x80\n\ lsls r1, 14\n\ adds r0, r1\n\ lsrs r2, r0, 16\n\ ldr r3, [sp]\n\ lsls r5, r3, 16\n\ b _0814AA24\n\ .align 2, 0\n\ _0814A9C4: .4byte gMenuCursorSubsprites\n\ _0814A9C8: .4byte 0x0000ffff\n\ _0814A9CC: .4byte gUnknown_0842F780\n\ _0814A9D0: .4byte gUnknown_0842F788\n\ _0814A9D4: .4byte gUnknown_0842F790\n\ _0814A9D8:\n\ ldr r6, [sp]\n\ lsls r5, r6, 16\n\ mov r0, r8\n\ cmp r0, 0x27\n\ ble _0814AA0E\n\ cmp r3, 0x8\n\ ble _0814AA0E\n\ mov r6, r12\n\ ldr r0, [r6]\n\ ldr r1, [r6, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ lsls r1, r2, 16\n\ asrs r1, 16\n\ adds r2, r1, 0\n\ subs r2, 0x20\n\ adds r0, r3, 0\n\ mov r6, r10\n\ ands r0, r6\n\ adds r2, r0\n\ strh r2, [r4]\n\ movs r0, 0x18\n\ ands r0, r3\n\ adds r1, r0\n\ lsls r1, 16\n\ lsrs r2, r1, 16\n\ b _0814AA24\n\ _0814AA0E:\n\ mov r3, r9\n\ ldr r0, [r3]\n\ ldr r1, [r3, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ strh r2, [r4]\n\ lsls r0, r2, 16\n\ movs r6, 0x80\n\ lsls r6, 12\n\ adds r0, r6\n\ lsrs r2, r0, 16\n\ _0814AA24:\n\ adds r4, 0x8\n\ adds r0, r7, 0x1\n\ lsls r0, 24\n\ lsrs r7, r0, 24\n\ asrs r1, r5, 16\n\ lsls r0, r2, 16\n\ asrs r0, 16\n\ subs r1, r0\n\ lsls r1, 16\n\ lsrs r3, r1, 16\n\ asrs r1, 16\n\ cmp r1, 0x7\n\ bgt _0814A99E\n\ _0814AA3E:\n\ ldr r5, _0814AAAC @ =gUnknown_0842F798\n\ ldr r0, [r5]\n\ ldr r1, [r5, 0x4]\n\ str r0, [r4]\n\ str r1, [r4, 0x4]\n\ lsls r1, r2, 16\n\ asrs r1, 16\n\ subs r1, 0x7\n\ lsls r0, r3, 16\n\ asrs r0, 16\n\ adds r0, r1\n\ strh r0, [r4]\n\ adds r0, r7, 0x1\n\ lsls r0, 24\n\ lsrs r7, r0, 24\n\ ldr r6, _0814AAB0 @ =gUnknown_0203A3D0\n\ ldrb r0, [r6]\n\ cmp r0, 0x40\n\ beq _0814AA7C\n\ adds r1, r0, 0\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ lsls r0, 2\n\ ldr r1, _0814AAB4 @ =gSprites\n\ adds r2, r0, r1\n\ lsls r1, r7, 3\n\ ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\ adds r1, r0\n\ adds r0, r2, 0\n\ bl SetSubspriteTables\n\ _0814AA7C:\n\ ldr r1, _0814AABC @ =gUnknown_0203A3D1\n\ ldrb r0, [r1]\n\ cmp r0, 0x40\n\ beq _0814AA9C\n\ adds r1, r0, 0\n\ lsls r0, r1, 4\n\ adds r0, r1\n\ lsls r0, 2\n\ ldr r1, _0814AAB4 @ =gSprites\n\ adds r2, r0, r1\n\ lsls r1, r7, 3\n\ ldr r0, _0814AAB8 @ =gSubspriteTables_842F5C0\n\ adds r1, r0\n\ adds r0, r2, 0\n\ bl SetSubspriteTables\n\ _0814AA9C:\n\ add sp, 0x4\n\ pop {r3-r5}\n\ mov r8, r3\n\ mov r9, r4\n\ mov r10, r5\n\ pop {r4-r7}\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ _0814AAAC: .4byte gUnknown_0842F798\n\ _0814AAB0: .4byte gUnknown_0203A3D0\n\ _0814AAB4: .4byte gSprites\n\ _0814AAB8: .4byte gSubspriteTables_842F5C0\n\ _0814AABC: .4byte gUnknown_0203A3D1\n\ .syntax divided\n"); } #endif void sub_814AABC(void (*callback)(struct Sprite *)) { struct Sprite *spr; if (gUnknown_0203A3D0 != 0x40) { spr = &gSprites[gUnknown_0203A3D0]; spr->callback = callback; } if (gUnknown_0203A3D1 != 0x40) { spr = &gSprites[gUnknown_0203A3D1]; spr->callback = callback; } return; } void sub_814AAF8(u16 a1) { struct Sprite *spr; u8 v2; u8 v3; u16 v4; if (gUnknown_0203A3D0 != 0x40) { spr = &gSprites[gUnknown_0203A3D0]; if (spr->template->paletteTag == 0xFFFF) { for (v2 = 0, v3 = 0xF, v4 = 0; v4 <= 0xFF; v4++) { if (gPlttBufferUnfaded[v4] == a1) { v2 = v4 >> 4; v3 = v4 & 0xF; } } spr->oam.paletteNum = v2; RequestSpriteSheetCopy(&gUnknown_0842F140[v3 & 0xF]); } } return; } void sub_814AB84(void) { struct Sprite *spr; if (gUnknown_0203A3D1 != 0x40) { spr = &gSprites[gUnknown_0203A3D1]; FreeSpriteOamMatrix(spr); DestroySprite(spr); gUnknown_0203A3D1 = 0x40; if (!gUnknown_0203A3D3) REG_DISPCNT &= ~DISPCNT_OBJWIN_ON; *(u8 *)(REG_ADDR_WINOUT + 1) = gUnknown_0203A3D4; } return; } void unref_sub_814ABE4(int a1) { struct Sprite *spr; CpuCopy16(gUnknown_0842F5BC[a1], &gMenuCursorSubsprites, 80); if (gUnknown_0203A3D0 != 0x40) { spr = &gSprites[gUnknown_0203A3D0]; SetSubspriteTables(spr, &gUnknown_0842F758[a1]); } if (gUnknown_0203A3D1 != 0x40) { spr = &gSprites[gUnknown_0203A3D1]; SetSubspriteTables(spr, &gUnknown_0842F758[a1]); } return; } u8 CreateBlendedOutlineCursor(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5) { int v8; struct Sprite *spr; u8 var1 = gUnknown_0203A3D2; if (var1 != 0x40) sub_814AD44(); v8 = 1; if (a2 == 0xFFFF) { gUnknown_0203A360[a3 & 0xF] = a4; if (LoadSpritePalette(&gUnknown_0842F248) != 0xFF ) { a2 = 0xFFF1; v8 = 0; } } LoadSpriteSheetDeferred(&gUnknown_0842F1C0[a3 & 0xF]); #if ENGLISH gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 160, a1); #elif GERMAN gUnknown_0203A3D2 = CreateSprite(&gSpriteTemplate_842F298[v8], 0, 161, a1); #endif if (gUnknown_0203A3D2 != 0x40) { spr = &gSprites[gUnknown_0203A3D2]; if (a2 == 0xFFFF) spr->oam.paletteNum = 0; else spr->oam.paletteNum = IndexOfSpritePaletteTag(a2); } sub_814ADF4(a5); return gUnknown_0203A3D2; } void sub_814AD44(void) { if (gUnknown_0203A3D2 != 0x40) { LoadTilesForSpriteSheet(&gUnknown_0842F1C0[0]); DestroySpriteAndFreeResources(&gSprites[gUnknown_0203A3D2]); gUnknown_0203A3D2 = 0x40; } return; } void sub_814AD7C(u8 a1, u8 a2) { struct Sprite *spr; if (gUnknown_0203A3D2 != 0x40) { spr = &gSprites[gUnknown_0203A3D2]; spr->invisible = 0; spr->centerToCornerVecX = 0; spr->centerToCornerVecY = 0; spr->pos1.x = a1; spr->pos1.y = a2; } return; } void sub_814ADC8() { struct Sprite *spr; if (gUnknown_0203A3D2 != 0x40) { spr = &gSprites[gUnknown_0203A3D2]; spr->invisible = 1; } return; } void sub_814ADF4(u8 a1) { if (a1 > 0x12) a1 = 0; if (gUnknown_0203A3D2 != 0x40) SetSubspriteTables(&gSprites[gUnknown_0203A3D2], &gSubspriteTables_842F6C0[a1]); return; } #if GERMAN void nullsub_814B200(void) { } #endif