diff options
-rw-r--r-- | asm/pokedex.s | 378 | ||||
-rw-r--r-- | src/pokedex.c | 159 |
2 files changed, 159 insertions, 378 deletions
diff --git a/asm/pokedex.s b/asm/pokedex.s index b0ea039dc..dbd827286 100644 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -6,384 +6,6 @@ .text - thumb_func_start sub_8092508 -sub_8092508: @ 8092508 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r2, r4, 0 - ldr r0, _08092570 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080925A4 - ldr r5, _08092574 @ =gPokedexView - ldr r1, [r5] - ldr r3, _08092578 @ =0x0000060c - adds r0, r1, r3 - ldrh r0, [r0] - cmp r0, 0 - beq _08092590 - ldr r0, _0809257C @ =0x0000064f - adds r1, r0 - movs r0, 0x1 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x5 - bl sub_8092E10 - ldr r1, [r5] - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08092580 @ =0x00000612 - adds r1, r2 - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0x4 - bl sub_8092E10 - ldr r1, [r5] - lsls r0, 24 - lsrs r0, 24 - ldr r3, _08092584 @ =0x00000616 - adds r1, r3 - strh r0, [r1] - ldr r1, _08092588 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809258C @ =sub_80927B8 - str r1, [r0] - movs r0, 0x3 - bl PlaySE - b _080925A4 - .align 2, 0 -_08092570: .4byte gMain -_08092574: .4byte gPokedexView -_08092578: .4byte 0x0000060c -_0809257C: .4byte 0x0000064f -_08092580: .4byte 0x00000612 -_08092584: .4byte 0x00000616 -_08092588: .4byte gTasks -_0809258C: .4byte sub_80927B8 -_08092590: - ldr r0, _080925AC @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080925B0 @ =sub_809217C - str r0, [r1] - movs r0, 0x17 - bl PlaySE -_080925A4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080925AC: .4byte gTasks -_080925B0: .4byte sub_809217C - thumb_func_end sub_8092508 - - thumb_func_start sub_80925B4 -sub_80925B4: @ 80925B4 - push {lr} - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 15 - adds r1, 0x1 - lsls r1, 27 - lsrs r1, 24 - movs r0, 0x90 - bl sub_814AD7C - pop {r0} - bx r0 - thumb_func_end sub_80925B4 - - thumb_func_start sub_80925CC -sub_80925CC: @ 80925CC - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - bl sub_8092C8C - ldr r2, _08092630 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r6, r1, r2 - ldrb r0, [r6, 0xA] - adds r2, 0x8 - adds r1, r2 - ldr r2, _08092634 @ =gUnknown_083B5A7C - lsls r0, 3 - adds r0, r2 - ldrb r5, [r0, 0x4] - lsls r5, 1 - adds r5, r1, r5 - ldrb r0, [r0, 0x5] - lsls r0, 1 - adds r1, r0 - ldrh r0, [r5] - strh r0, [r6, 0x24] - ldrh r0, [r1] - strh r0, [r6, 0x26] - adds r0, r4, 0 - bl sub_8092D78 - ldr r1, _08092638 @ =0x0000ffff - ldr r3, _0809263C @ =0x00002d9f - movs r0, 0xB - str r0, [sp] - movs r0, 0x10 - movs r2, 0xC - bl CreateBlendedOutlineCursor - ldrh r0, [r5] - movs r1, 0x1 - bl sub_80925B4 - ldr r0, _08092640 @ =sub_8092644 - str r0, [r6] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08092630: .4byte gTasks -_08092634: .4byte gUnknown_083B5A7C -_08092638: .4byte 0x0000ffff -_0809263C: .4byte 0x00002d9f -_08092640: .4byte sub_8092644 - thumb_func_end sub_80925CC - - thumb_func_start sub_8092644 -sub_8092644: @ 8092644 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r3, _080926A8 @ =gTasks - lsls r2, r7, 2 - adds r2, r7 - lsls r2, 3 - adds r6, r2, r3 - ldrb r1, [r6, 0xA] - ldr r0, _080926AC @ =gUnknown_083B5A7C - lsls r1, 3 - adds r1, r0 - ldr r0, [r1] - mov r8, r0 - adds r3, 0x8 - adds r2, r3 - ldrb r0, [r1, 0x4] - lsls r0, 1 - adds r4, r2, r0 - ldrb r0, [r1, 0x5] - lsls r0, 1 - adds r5, r2, r0 - ldrh r0, [r1, 0x6] - subs r0, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _080926B0 @ =gMain - mov r12, r0 - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080926B4 - bl sub_814ADC8 - movs r0, 0x15 - bl PlaySE - movs r0, 0x12 - movs r1, 0x1 - movs r2, 0x1C - movs r3, 0xC - bl MenuZeroFillWindowRect - movs r0, 0x1 - bl sub_8092C8C - b _080926E0 - .align 2, 0 -_080926A8: .4byte gTasks -_080926AC: .4byte gUnknown_083B5A7C -_080926B0: .4byte gMain -_080926B4: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080926EC - bl sub_814ADC8 - movs r0, 0x17 - bl PlaySE - movs r0, 0x12 - movs r1, 0x1 - movs r2, 0x1C - movs r3, 0xC - bl MenuZeroFillWindowRect - movs r0, 0x1 - bl sub_8092C8C - ldrh r0, [r6, 0x24] - strh r0, [r4] - ldrh r0, [r6, 0x26] - strh r0, [r5] -_080926E0: - ldr r0, _080926E8 @ =sub_809217C - str r0, [r6] - b _080927AE - .align 2, 0 -_080926E8: .4byte sub_809217C -_080926EC: - movs r3, 0 - mov r0, r12 - ldrh r1, [r0, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0809274C - ldrh r0, [r4] - cmp r0, 0 - beq _08092716 - movs r1, 0 - bl sub_80925B4 - ldrh r0, [r4] - subs r0, 0x1 - strh r0, [r4] - ldrh r0, [r4] - movs r1, 0x1 - bl sub_80925B4 - b _08092734 -_08092716: - ldrh r0, [r5] - cmp r0, 0 - beq _08092730 - subs r0, 0x1 - strh r0, [r5] - adds r0, r7, 0 - bl sub_8092D78 - ldrh r0, [r4] - movs r1, 0x1 - bl sub_80925B4 - movs r3, 0x1 -_08092730: - cmp r3, 0 - beq _080927AE -_08092734: - movs r0, 0x5 - bl PlaySE - ldrh r0, [r4] - ldrh r1, [r5] - adds r0, r1 - lsls r0, 3 - add r0, r8 - ldr r0, [r0] - bl sub_8091E20 - b _080927AE -_0809274C: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080927AE - ldrh r0, [r4] - cmp r0, 0x4 - bhi _08092774 - cmp r0, r2 - bcs _08092774 - movs r1, 0 - bl sub_80925B4 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - ldrh r0, [r4] - movs r1, 0x1 - bl sub_80925B4 - b _08092798 -_08092774: - cmp r2, 0x5 - bls _08092794 - ldrh r1, [r5] - subs r0, r2, 0x5 - cmp r1, r0 - bge _08092794 - adds r0, r1, 0x1 - strh r0, [r5] - adds r0, r7, 0 - bl sub_8092D78 - movs r0, 0x5 - movs r1, 0x1 - bl sub_80925B4 - movs r3, 0x1 -_08092794: - cmp r3, 0 - beq _080927AE -_08092798: - movs r0, 0x5 - bl PlaySE - ldrh r0, [r4] - ldrh r1, [r5] - adds r0, r1 - lsls r0, 3 - add r0, r8 - ldr r0, [r0] - bl sub_8091E20 -_080927AE: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8092644 - - thumb_func_start sub_80927B8 -sub_80927B8: @ 80927B8 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _080927E8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080927EC @ =sub_80927F0 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080927E8: .4byte gTasks -_080927EC: .4byte sub_80927F0 - thumb_func_end sub_80927B8 - - thumb_func_start sub_80927F0 -sub_80927F0: @ 80927F0 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _0809280C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08092808 - adds r0, r2, 0 - bl DestroyTask -_08092808: - pop {r0} - bx r0 - .align 2, 0 -_0809280C: .4byte gPaletteFade - thumb_func_end sub_80927F0 - thumb_func_start sub_8092810 sub_8092810: @ 8092810 push {r4-r7,lr} diff --git a/src/pokedex.c b/src/pokedex.c index 5738db841..d88252aa8 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -8,6 +8,7 @@ #include "m4a.h" #include "main.h" #include "menu.h" +#include "menu_cursor.h" #include "palette.h" #include "rng.h" #include "songs.h" @@ -55,6 +56,20 @@ struct PokedexEntry /*0x20*/ u16 trainerOffset; }; /*size = 0x24*/ +struct UnknownStruct2 +{ + const u8 *text1; + const u8 *text2; +}; + +struct UnknownStruct1 +{ + const struct UnknownStruct2 *unk0; + u8 unk4; + u8 unk5; + u16 unk6; +}; + extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gReservedSpritePaletteCount; extern struct PokedexView *gPokedexView; @@ -97,6 +112,7 @@ extern const u8 gUnknown_083B5850[][4]; extern const u8 gUnknown_083B586C[][4]; extern const u8 gUnknown_083B5888[][4]; extern const u8 gUnknown_083B58A4[][4]; +extern const struct UnknownStruct1 gUnknown_083B5A7C[]; extern u8 gUnknown_08D00524[]; extern u8 gUnknown_08E96BD4[]; extern u8 gUnknown_08E96ACC[]; @@ -112,6 +128,7 @@ extern const u8 gPokedexMenuSearch_Gfx[]; extern const u8 gUnknown_08E96D2C[]; extern const u16 gPokedexMenuSearch_Pal[]; +extern void sub_814AD7C(u8, u8); extern void sub_800D74C(); extern const u16 *species_and_otid_get_pal(u16, u32, u32); extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); @@ -138,10 +155,14 @@ void sub_80923FC(u8); void sub_80924A4(u8); void sub_8092508(u8); void sub_80925CC(u8); +void sub_8092644(u8); void sub_80927B8(u8); +void sub_80927F0(u8); void sub_8092AB0(u8); void sub_8092AD4(u8, u8); void sub_8092B68(); +void sub_8092C8C(); +void sub_8092D78(); u8 sub_8092E10(); void sub_8092EB0(); void sub_809308C(); @@ -4468,3 +4489,141 @@ void sub_80924A4(u8 taskId) gTasks[taskId].func = sub_8092508; } } + +void sub_8092508(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + if (gPokedexView->unk60C != 0) + { + gPokedexView->unk64F = 1; + gPokedexView->unk612 = sub_8092E10(taskId, 5); + gPokedexView->unk616 = sub_8092E10(taskId, 4); + gTasks[taskId].func = sub_80927B8; + PlaySE(SE_PC_OFF); + } + else + { + gTasks[taskId].func = sub_809217C; + PlaySE(SE_BOWA); + } + } +} + +void sub_80925B4(u16 a, int unused) +{ + sub_814AD7C(0x90, (a * 2 + 1) * 8); +} + +void sub_80925CC(u8 taskId) +{ + u8 r0; + u16 *p1; + u16 *p2; + + sub_8092C8C(0); + r0 = gTasks[taskId].data[1]; + p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk4]; + p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r0].unk5]; + gTasks[taskId].data[14] = *p1; + gTasks[taskId].data[15] = *p2; + sub_8092D78(taskId); + CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 11); + sub_80925B4(*p1, 1); + gTasks[taskId].func = sub_8092644; +} + +void sub_8092644(u8 taskId) +{ + u8 r1; + const struct UnknownStruct2 *r8; + u16 *p1; + u16 *p2; + u16 r2; + bool8 r3; + + r1 = gTasks[taskId].data[1]; + r8 = gUnknown_083B5A7C[r1].unk0; + p1 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk4]; + p2 = &gTasks[taskId].data[gUnknown_083B5A7C[r1].unk5]; + r2 = gUnknown_083B5A7C[r1].unk6 - 1; + if (gMain.newKeys & A_BUTTON) + { + sub_814ADC8(); + PlaySE(SE_PIN); + MenuZeroFillWindowRect(18, 1, 28, 12); + sub_8092C8C(1); + gTasks[taskId].func = sub_809217C; + return; + } + if (gMain.newKeys & B_BUTTON) + { + sub_814ADC8(); + PlaySE(SE_BOWA); + MenuZeroFillWindowRect(18, 1, 28, 12); + sub_8092C8C(1); + *p1 = gTasks[taskId].data[14]; + *p2 = gTasks[taskId].data[15]; + gTasks[taskId].func = sub_809217C; + return; + } + r3 = FALSE; + if (gMain.newAndRepeatedKeys & 0x40) + { + if (*p1 != 0) + { + sub_80925B4(*p1, 0); + (*p1)--; + sub_80925B4(*p1, 1); + r3 = TRUE; + } + else if (*p2 != 0) + { + (*p2)--; + sub_8092D78(taskId); + sub_80925B4(*p1, 1); + r3 = TRUE; + } + if (r3) + { + PlaySE(SE_SELECT); + sub_8091E20(r8[*p1 + *p2].text1); + } + return; + } + if (gMain.newAndRepeatedKeys & 0x80) + { + if (*p1 < 5 && *p1 < r2) + { + sub_80925B4(*p1, 0); + (*p1)++; + sub_80925B4(*p1, 1); + r3 = TRUE; + } + else if (r2 > 5 && *p2 < r2 - 5) + { + (*p2)++; + sub_8092D78(taskId); + sub_80925B4(5, 1); + r3 = TRUE; + } + if (r3) + { + PlaySE(SE_SELECT); + sub_8091E20(r8[*p1 + *p2].text1); + } + return; + } +} + +void sub_80927B8(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_80927F0; +} + +void sub_80927F0(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyTask(taskId); +} |