diff options
-rw-r--r-- | asm/fame_checker.s | 345 | ||||
-rw-r--r-- | include/menu_indicators.h | 9 | ||||
-rw-r--r-- | src/fame_checker.c | 103 |
3 files changed, 108 insertions, 349 deletions
diff --git a/asm/fame_checker.s b/asm/fame_checker.s index fc6489bdd..9807f15dc 100644 --- a/asm/fame_checker.s +++ b/asm/fame_checker.s @@ -5,351 +5,6 @@ .text - thumb_func_start sub_812DDF0 -sub_812DDF0: @ 812DDF0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x18 - mov r8, r0 - lsls r5, r1, 24 - lsrs r5, 24 - ldr r7, _0812DE68 @ =gUnknown_203B0FC - ldr r0, [r7] - ldrb r0, [r0, 0x8] - mov r4, sp - adds r4, 0x16 - add r1, sp, 0x14 - adds r2, r4, 0 - bl get_coro_args_x18_x1A - add r1, sp, 0x14 - ldrh r0, [r4] - ldrh r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r6, r0, 16 - ldrh r0, [r4] - lsls r3, r0, 3 - subs r3, r0 - lsls r3, 25 - movs r0, 0x80 - lsls r0, 19 - adds r3, r0 - lsrs r3, 24 - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - ldr r0, _0812DE6C @ =gUnknown_845F5E6 - str r0, [sp, 0x8] - str r1, [sp, 0xC] - ldr r0, _0812DE70 @ =gUnknown_203B100 - ldr r1, [r0] - mov r2, r8 - lsls r0, r2, 3 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x8 - bl AddTextPrinterParametrized2 - cmp r5, 0 - bne _0812DEC0 - add r0, sp, 0x14 - ldr r1, [r7] - ldrh r2, [r0] - ldrb r0, [r1, 0xA] - cmp r2, r0 - bcs _0812DE74 - ldrb r0, [r1, 0xB] - adds r0, 0x1 - b _0812DE86 - .align 2, 0 -_0812DE68: .4byte gUnknown_203B0FC -_0812DE6C: .4byte gUnknown_845F5E6 -_0812DE70: .4byte gUnknown_203B100 -_0812DE74: - cmp r2, r0 - bls _0812DE88 - ldrb r0, [r1, 0x7] - lsrs r0, 2 - subs r0, 0x1 - cmp r6, r0 - beq _0812DE88 - ldrb r0, [r1, 0xB] - subs r0, 0x1 -_0812DE86: - strb r0, [r1, 0xB] -_0812DE88: - ldr r0, _0812DEE4 @ =gUnknown_203B0FC - ldr r2, [r0] - ldrb r0, [r2, 0xB] - lsls r3, r0, 3 - subs r3, r0 - lsls r3, 25 - movs r0, 0x80 - lsls r0, 19 - adds r3, r0 - lsrs r3, 24 - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - ldr r0, _0812DEE8 @ =gUnknown_845F5E3 - str r0, [sp, 0x8] - str r1, [sp, 0xC] - ldrb r0, [r2, 0x9] - ldr r1, _0812DEEC @ =gUnknown_203B100 - ldr r1, [r1] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0] - str r0, [sp, 0x10] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x8 - bl AddTextPrinterParametrized2 -_0812DEC0: - ldr r1, _0812DEE4 @ =gUnknown_203B0FC - ldr r0, [r1] - mov r2, r8 - strb r2, [r0, 0x9] - ldr r2, [r1] - ldrh r0, [r4] - strb r0, [r2, 0xB] - ldr r1, [r1] - add r0, sp, 0x14 - ldrh r0, [r0] - strb r0, [r1, 0xA] - add sp, 0x18 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812DEE4: .4byte gUnknown_203B0FC -_0812DEE8: .4byte gUnknown_845F5E3 -_0812DEEC: .4byte gUnknown_203B100 - thumb_func_end sub_812DDF0 - - thumb_func_start sub_812DEF0 -sub_812DEF0: @ 812DEF0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r4, 0 - movs r6, 0 - ldr r0, _0812DF44 @ =0x0000fdff - mov r8, r0 - ldr r7, _0812DF48 @ =gUnknown_845F60C -_0812DF00: - adds r0, r6, 0 - bl sub_812D0C0 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0812DF4C @ =gSaveBlock1Ptr - ldr r0, [r0] - lsls r1, r5, 2 - adds r0, r1 - ldr r1, _0812DF50 @ =0x00003a54 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 30 - cmp r0, 0 - beq _0812DF88 - ldr r0, _0812DF54 @ =gUnknown_845F5EA - lsls r1, r5, 1 - adds r3, r1, r0 - ldrh r0, [r3] - cmp r0, r8 - bhi _0812DF60 - ldr r0, _0812DF58 @ =gUnknown_203B100 - ldr r0, [r0] - lsls r2, r4, 3 - adds r2, r0 - ldrh r1, [r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0812DF5C @ =gTrainers+0x4 - adds r0, r1 - str r0, [r2] - str r4, [r2, 0x4] - b _0812DF78 - .align 2, 0 -_0812DF44: .4byte 0x0000fdff -_0812DF48: .4byte gUnknown_845F60C -_0812DF4C: .4byte gSaveBlock1Ptr -_0812DF50: .4byte 0x00003a54 -_0812DF54: .4byte gUnknown_845F5EA -_0812DF58: .4byte gUnknown_203B100 -_0812DF5C: .4byte gTrainers+0x4 -_0812DF60: - ldr r0, _0812DFC0 @ =gUnknown_203B100 - ldr r0, [r0] - lsls r1, r4, 3 - adds r1, r0 - ldrh r0, [r3] - ldr r2, _0812DFC4 @ =0xffff0200 - adds r0, r2 - lsls r0, 2 - adds r0, r7 - ldr r0, [r0] - str r0, [r1] - str r4, [r1, 0x4] -_0812DF78: - ldr r0, _0812DFC8 @ =gUnknown_203B0FC - ldr r0, [r0] - adds r0, 0xC - adds r0, r4 - strb r5, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_0812DF88: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0xF - bls _0812DF00 - ldr r0, _0812DFC0 @ =gUnknown_203B100 - ldr r1, [r0] - lsls r0, r4, 3 - adds r0, r1 - ldr r1, _0812DFCC @ =gUnknown_84161C1 - str r1, [r0] - str r4, [r0, 0x4] - ldr r0, _0812DFC8 @ =gUnknown_203B0FC - ldr r0, [r0] - adds r0, 0xC - adds r0, r4 - movs r1, 0xFF - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _0812DFD0 @ =gUnknown_3005EB0 - strh r4, [r1, 0xC] - cmp r4, 0x4 - bhi _0812DFD4 - strh r4, [r1, 0xE] - b _0812DFD8 - .align 2, 0 -_0812DFC0: .4byte gUnknown_203B100 -_0812DFC4: .4byte 0xffff0200 -_0812DFC8: .4byte gUnknown_203B0FC -_0812DFCC: .4byte gUnknown_84161C1 -_0812DFD0: .4byte gUnknown_3005EB0 -_0812DFD4: - movs r0, 0x5 - strh r0, [r1, 0xE] -_0812DFD8: - adds r0, r4, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_812DEF0 - - thumb_func_start sub_812DFE4 -sub_812DFE4: @ 812DFE4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_812DFE4 - - thumb_func_start sub_812E000 -sub_812E000: @ 812E000 - push {r4,lr} - sub sp, 0x10 - mov r1, sp - ldr r0, _0812E040 @ =gUnknown_845FD44 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldr r0, [r0] - str r0, [r1] - ldr r4, _0812E044 @ =gUnknown_203B0FC - ldr r2, [r4] - ldrb r0, [r2, 0x7] - lsrs r0, 2 - cmp r0, 0x5 - bls _0812E036 - mov r1, sp - movs r0, 0 - strh r0, [r1, 0x6] - ldrb r0, [r2, 0x7] - lsrs r0, 2 - subs r0, 0x5 - strh r0, [r1, 0x8] - adds r1, r2, 0x4 - mov r0, sp - bl AddScrollIndicatorArrowPair - ldr r1, [r4] - strb r0, [r1, 0x6] -_0812E036: - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812E040: .4byte gUnknown_845FD44 -_0812E044: .4byte gUnknown_203B0FC - thumb_func_end sub_812E000 - - thumb_func_start sub_812E048 -sub_812E048: @ 812E048 - push {lr} - ldr r0, _0812E060 @ =gUnknown_203B0FC - ldr r1, [r0] - ldrb r0, [r1, 0x7] - lsrs r0, 2 - cmp r0, 0x5 - bls _0812E05C - ldrb r0, [r1, 0x6] - bl RemoveScrollIndicatorArrowPair -_0812E05C: - pop {r0} - bx r0 - .align 2, 0 -_0812E060: .4byte gUnknown_203B0FC - thumb_func_end sub_812E048 - - thumb_func_start sub_812E064 -sub_812E064: @ 812E064 - push {r4,lr} - sub sp, 0x4 - ldr r0, _0812E090 @ =gUnknown_203B0FC - ldr r0, [r0] - ldrb r0, [r0, 0x8] - mov r4, sp - adds r4, 0x2 - mov r1, sp - adds r2, r4, 0 - bl get_coro_args_x18_x1A - mov r1, sp - ldrh r0, [r4] - ldrh r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0812E090: .4byte gUnknown_203B0FC - thumb_func_end sub_812E064 - thumb_func_start sub_812E094 sub_812E094: @ 812E094 push {r4-r6,lr} diff --git a/include/menu_indicators.h b/include/menu_indicators.h index 2350e2502..f88fd5549 100644 --- a/include/menu_indicators.h +++ b/include/menu_indicators.h @@ -7,8 +7,17 @@ // Exported RAM declarations +struct ScrollIndicatorArrowPairTemplate +{ + u8 filler_00[6]; + u16 unk_06; + u16 unk_08; + u8 filler_0a[6]; +}; + // Exported ROM declarations u8 AddScrollIndicatorArrowPairParametrized(u8, u8, u8, u8, s32, u16, u16, u16 *); +u8 AddScrollIndicatorArrowPair(const struct ScrollIndicatorArrowPairTemplate * template, u16 * a1); void RemoveScrollIndicatorArrowPair(u8); #endif //GUARD_MENU_INDICATORS_H diff --git a/src/fame_checker.c b/src/fame_checker.c index 8637f6e86..9535b6556 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -4,6 +4,7 @@ #include "bg.h" #include "event_data.h" #include "graphics.h" +#include "battle.h" #include "battle_setup.h" #include "menu.h" #include "battle_dome_cards.h" @@ -21,6 +22,7 @@ #include "window.h" #include "string_util.h" #include "field_map_obj.h" +#include "menu_indicators.h" #include "text_window.h" #define SPRITETAG_1000 1000 @@ -35,7 +37,7 @@ struct FameCheckerData { MainCallback unk_00; u16 unk_04; - u8 filler_06[1]; + u8 unk_06; u8 unk_07_0:1; u8 unk_07_1:1; u8 unk_07_2:6; @@ -121,6 +123,7 @@ extern const u8 gUnknown_84181E4[]; extern const u8 gUnknown_841E5A4[]; extern const u8 gUnknown_841E5B9[]; extern const u8 gUnknown_841E5D2[]; +extern const u8 gUnknown_84161C1[]; extern const u16 gUnknown_845C600[]; extern const u16 gUnknown_845DD20[]; @@ -130,7 +133,10 @@ extern const u16 gUnknown_845F580[]; extern const u16 gUnknown_845F5C0[]; extern const struct TextColor gUnknown_845F5E0; extern const struct TextColor gUnknown_845F5E3; +extern const struct TextColor gUnknown_845F5E6; +extern const u16 gUnknown_845F5EA[]; extern const u8 gUnknown_845F61C[]; +extern const u8 *const gUnknown_845F60C[]; extern const u8 *const gUnknown_845F63C[]; extern const u8 *const gUnknown_845F6BC[]; extern const u8 *const gUnknown_845F89C[]; @@ -147,6 +153,7 @@ extern const struct SpriteTemplate gUnknown_845FCE4; extern const struct SpriteTemplate gUnknown_845FCFC; extern const struct SpriteTemplate gUnknown_845FD14; extern const struct SpriteTemplate gUnknown_845FD2C; +extern const struct ScrollIndicatorArrowPairTemplate gUnknown_845FD44; void sub_812C380(void) { @@ -981,7 +988,7 @@ void sub_812DB64(void) void sub_812DBC0(s32 itemIndex, bool8 onInit, struct ListMenu *list) { - u16 sp8[2]; + u16 sp8; u8 taskId; u16 r9; gUnknown_203B104 = 0; @@ -993,8 +1000,8 @@ void sub_812DBC0(s32 itemIndex, bool8 onInit, struct ListMenu *list) struct Task *task = &gTasks[taskId]; PlaySE(SE_SELECT); task->data[1] = 0; - get_coro_args_x18_x1A(gUnknown_203B0FC->unk_08, sp8, NULL); - gUnknown_203B0FC->unk_04 = sp8[0]; + get_coro_args_x18_x1A(gUnknown_203B0FC->unk_08, &sp8, NULL); + gUnknown_203B0FC->unk_04 = sp8; if (itemIndex != gUnknown_203B0FC->unk_07_2 - 1) { sub_812D174(); @@ -1056,3 +1063,91 @@ void sub_812DDAC(void) AddTextPrinterParametrized(2, 2, gUnknown_84181C3, 0, NULL, 2, 1, 3); sub_812CEE0(2); } + +void sub_812DDF0(s32 itemIndex, bool8 onInit) +{ + u16 sp14; + u16 sp16; + u16 r6; + get_coro_args_x18_x1A(gUnknown_203B0FC->unk_08, &sp14, &sp16); + r6 = sp14 + sp16; + AddTextPrinterParametrized2(0, 2, 8, 14 * sp16 + 4, 0, 0, &gUnknown_845F5E6, 0, gUnknown_203B100[itemIndex].unk_00); + if (!onInit) + { + if (sp14 < gUnknown_203B0FC->unk_0A) + gUnknown_203B0FC->unk_0B++; + else if (sp14 > gUnknown_203B0FC->unk_0A && r6 != gUnknown_203B0FC->unk_07_2 - 1) + gUnknown_203B0FC->unk_0B--; + AddTextPrinterParametrized2(0, 2, 8, 14 * gUnknown_203B0FC->unk_0B + 4, 0, 0, &gUnknown_845F5E3, 0, gUnknown_203B100[gUnknown_203B0FC->unk_09].unk_00); + + } + gUnknown_203B0FC->unk_09 = itemIndex; + gUnknown_203B0FC->unk_0B = sp16; + gUnknown_203B0FC->unk_0A = sp14; +} + +u8 sub_812DEF0(void) +{ + u8 r4 = 0; + u8 r6; + + for (r6 = 0; r6 < 16; r6++) + { + u8 r5 = sub_812D0C0(r6); + if (gSaveBlock1Ptr->fameChecker[r5].unk_0_0 != 0) + { + if (gUnknown_845F5EA[r5] < 0xFE00) + { + gUnknown_203B100[r4].unk_00 = gTrainers[gUnknown_845F5EA[r5]].trainerName; + gUnknown_203B100[r4].unk_04 = r4; + } + else + { + gUnknown_203B100[r4].unk_00 = gUnknown_845F60C[gUnknown_845F5EA[r5] - 0xFE00]; + gUnknown_203B100[r4].unk_04 = r4; + } + gUnknown_203B0FC->unk_0C[r4] = r5; + r4++; + } + } + gUnknown_203B100[r4].unk_00 = gUnknown_84161C1; + gUnknown_203B100[r4].unk_04 = r4; + gUnknown_203B0FC->unk_0C[r4] = 0xFF; + r4++; + gUnknown_3005EB0.totalItems = r4; + if (r4 < 5) + gUnknown_3005EB0.maxShowed = r4; + else + gUnknown_3005EB0.maxShowed = 5; + return r4; +} + +void sub_812DFE4(u8 windowId) +{ + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); +} + +void sub_812E000(void) +{ + struct ScrollIndicatorArrowPairTemplate sp0 = gUnknown_845FD44; + if (gUnknown_203B0FC->unk_07_2 > 5) + { + sp0.unk_06 = 0; + sp0.unk_08 = gUnknown_203B0FC->unk_07_2 - 5; + gUnknown_203B0FC->unk_06 = AddScrollIndicatorArrowPair(&sp0, &gUnknown_203B0FC->unk_04); + } +} + +void sub_812E048(void) +{ + if (gUnknown_203B0FC->unk_07_2 > 5) + RemoveScrollIndicatorArrowPair(gUnknown_203B0FC->unk_06); +} + +u16 sub_812E064(void) +{ + u16 sp0, sp2; + get_coro_args_x18_x1A(gUnknown_203B0FC->unk_08, &sp0, &sp2); + return sp0 + sp2; +} |