diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | asm/pokedex.s | 516 | ||||
-rw-r--r-- | src/pokedex.c | 1322 | ||||
-rw-r--r-- | sym_ewram.txt | 2 |
4 files changed, 930 insertions, 911 deletions
diff --git a/.gitignore b/.gitignore index ca6c147c7..61d4c2d7a 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ types_*.taghl *.swo *.s.old *.dump +*.sa* diff --git a/asm/pokedex.s b/asm/pokedex.s index 1d5d3a322..fe069bcf8 100644 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -6,462 +6,6 @@ .text - thumb_func_start sub_80903D0 -sub_80903D0: @ 80903D0 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - ldr r0, _0809041C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08090430 - movs r0, 0x15 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08090420 @ =gUnknown_0202FFB4 - ldr r0, [r0] - ldr r1, _08090424 @ =0x0000064f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r1, _08090428 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0809042C @ =sub_8090498 - str r1, [r0] - movs r0, 0x3 - bl PlaySE - b _0809047A - .align 2, 0 -_0809041C: .4byte gMain -_08090420: .4byte gUnknown_0202FFB4 -_08090424: .4byte 0x0000064f -_08090428: .4byte gTasks -_0809042C: .4byte sub_8090498 -_08090430: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - bne _0809044A - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0809047A - ldr r0, _08090484 @ =gSaveBlock2 - ldrb r0, [r0, 0x13] - cmp r0, 0x1 - bne _0809047A -_0809044A: - movs r0, 0x15 - negs r0, r0 - str r2, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _08090488 @ =gUnknown_0202FFB4 - ldr r0, [r0] - ldr r1, _0809048C @ =0x0000064f - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - ldr r1, _08090490 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08090494 @ =sub_8090498 - str r1, [r0] - movs r0, 0x6D - bl PlaySE -_0809047A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08090484: .4byte gSaveBlock2 -_08090488: .4byte gUnknown_0202FFB4 -_0809048C: .4byte 0x0000064f -_08090490: .4byte gTasks -_08090494: .4byte sub_8090498 - thumb_func_end sub_80903D0 - - thumb_func_start sub_8090498 -sub_8090498: @ 8090498 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080904CC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080904EE - ldr r0, _080904D0 @ =gUnknown_0202FFB4 - ldr r0, [r0] - ldr r1, _080904D4 @ =0x0000064f - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _080904BC - cmp r0, 0x2 - beq _080904E0 -_080904BC: - ldr r0, _080904D8 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080904DC @ =sub_808F2B0 - b _080904EC - .align 2, 0 -_080904CC: .4byte gPaletteFade -_080904D0: .4byte gUnknown_0202FFB4 -_080904D4: .4byte 0x0000064f -_080904D8: .4byte gTasks -_080904DC: .4byte sub_808F2B0 -_080904E0: - ldr r0, _080904F4 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080904F8 @ =sub_808FA64 -_080904EC: - str r0, [r1] -_080904EE: - pop {r0} - bx r0 - .align 2, 0 -_080904F4: .4byte gTasks -_080904F8: .4byte sub_808FA64 - thumb_func_end sub_8090498 - - thumb_func_start sub_80904FC -sub_80904FC: @ 80904FC - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 16 - ldr r0, _08090530 @ =gUnknown_08E96ACC - lsrs r4, 5 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r4, r2 - bl LZ77UnCompVram - ldr r0, _08090534 @ =0x060000c0 - adds r4, r0 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r0, _08090538 @ =0x040000d4 - str r1, [r0] - str r4, [r0, 0x4] - ldr r1, _0809053C @ =0x81000220 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08090530: .4byte gUnknown_08E96ACC -_08090534: .4byte 0x060000c0 -_08090538: .4byte 0x040000d4 -_0809053C: .4byte 0x81000220 - thumb_func_end sub_80904FC - - thumb_func_start sub_8090540 -sub_8090540: @ 8090540 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 16 - ldr r0, _08090574 @ =gUnknown_08E96B58 - lsrs r4, 5 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r4, r2 - bl LZ77UnCompVram - ldr r0, _08090578 @ =0x060000c0 - adds r4, r0 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r0, _0809057C @ =0x040000d4 - str r1, [r0] - str r4, [r0, 0x4] - ldr r1, _08090580 @ =0x81000220 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08090574: .4byte gUnknown_08E96B58 -_08090578: .4byte 0x060000c0 -_0809057C: .4byte 0x040000d4 -_08090580: .4byte 0x81000220 - thumb_func_end sub_8090540 - - thumb_func_start sub_8090584 -sub_8090584: @ 8090584 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - movs r1, 0 -_0809059C: - lsls r0, r1, 2 - adds r0, r1 - adds r0, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0x80 - lsls r6, 7 - cmp r1, r10 - bne _080905B2 - movs r6, 0x80 - lsls r6, 6 -_080905B2: - movs r3, 0 - mov r0, r9 - lsls r0, 11 - mov r12, r0 - adds r1, 0x1 - mov r8, r1 - mov r5, r12 - ldr r4, _08090634 @ =0x00000fff -_080905C2: - adds r0, r7, r3 - lsls r0, 1 - adds r0, r5, r0 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r0, r2 - ldrh r2, [r1] - ands r2, r4 - orrs r2, r6 - strh r2, [r1] - ldr r1, _08090638 @ =0x06000040 - adds r0, r1 - ldrh r2, [r0] - ands r2, r4 - orrs r2, r6 - strh r2, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x4 - bls _080905C2 - mov r2, r8 - lsls r0, r2, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _0809059C - movs r6, 0x80 - lsls r6, 7 - movs r3, 0 - mov r5, r12 - ldr r4, _08090634 @ =0x00000fff -_08090600: - lsls r0, r3, 1 - adds r0, r5, r0 - ldr r2, _0809063C @ =0x06000032 - adds r1, r0, r2 - ldrh r2, [r1] - ands r2, r4 - orrs r2, r6 - strh r2, [r1] - ldr r1, _08090640 @ =0x06000072 - adds r0, r1 - ldrh r2, [r0] - ands r2, r4 - orrs r2, r6 - strh r2, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x4 - bls _08090600 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08090634: .4byte 0x00000fff -_08090638: .4byte 0x06000040 -_0809063C: .4byte 0x06000032 -_08090640: .4byte 0x06000072 - thumb_func_end sub_8090584 - - thumb_func_start sub_8090644 -sub_8090644: @ 8090644 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - movs r1, 0 -_0809065C: - lsls r0, r1, 2 - adds r0, r1 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r1, r10 - beq _08090670 - cmp r1, 0 - bne _08090676 -_08090670: - movs r5, 0x80 - lsls r5, 6 - b _0809067A -_08090676: - movs r5, 0x80 - lsls r5, 7 -_0809067A: - movs r3, 0 - mov r0, r9 - lsls r7, r0, 11 - adds r1, 0x1 - mov r12, r1 - adds r6, r7, 0 - ldr r4, _080906FC @ =0x00000fff -_08090688: - mov r1, r8 - adds r0, r1, r3 - lsls r0, 1 - adds r0, r6, r0 - movs r2, 0xC0 - lsls r2, 19 - adds r1, r0, r2 - ldrh r2, [r1] - ands r2, r4 - orrs r2, r5 - strh r2, [r1] - ldr r1, _08090700 @ =0x06000040 - adds r0, r1 - ldrh r2, [r0] - ands r2, r4 - orrs r2, r5 - strh r2, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x4 - bls _08090688 - mov r2, r12 - lsls r0, r2, 24 - lsrs r1, r0, 24 - cmp r1, 0x3 - bls _0809065C - movs r5, 0x80 - lsls r5, 7 - movs r3, 0 - adds r6, r7, 0 - ldr r4, _080906FC @ =0x00000fff -_080906C8: - lsls r0, r3, 1 - adds r0, r6, r0 - ldr r2, _08090704 @ =0x06000032 - adds r1, r0, r2 - ldrh r2, [r1] - ands r2, r4 - orrs r2, r5 - strh r2, [r1] - ldr r1, _08090708 @ =0x06000072 - adds r0, r1 - ldrh r2, [r0] - ands r2, r4 - orrs r2, r5 - strh r2, [r0] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x4 - bls _080906C8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080906FC: .4byte 0x00000fff -_08090700: .4byte 0x06000040 -_08090704: .4byte 0x06000032 -_08090708: .4byte 0x06000072 - thumb_func_end sub_8090644 - - thumb_func_start sub_809070C -sub_809070C: @ 809070C - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08090748 @ =sub_8090750 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809074C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - strh r2, [r1, 0x8] - strh r4, [r1, 0xA] - strh r5, [r1, 0x20] - lsrs r5, 16 - strh r5, [r1, 0x22] - strh r6, [r1, 0x24] - lsrs r6, 16 - strh r6, [r1, 0x26] - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08090748: .4byte sub_8090750 -_0809074C: .4byte gTasks - thumb_func_end sub_809070C - thumb_func_start sub_8090750 sub_8090750: @ 8090750 push {r4-r7,lr} @@ -1071,7 +615,7 @@ sub_8090C68: @ 8090C68 ands r0, r1 cmp r0, 0 beq _08090D2A - ldr r5, _08090CD4 @ =gUnknown_0202FFB4 + ldr r5, _08090CD4 @ =gPokedexView ldr r0, [r5] ldr r1, _08090CD8 @ =0x0000064e adds r0, r1 @@ -1113,7 +657,7 @@ sub_8090C68: @ 8090C68 b _08090D2A .align 2, 0 _08090CD0: .4byte gUnknown_0202FFBC -_08090CD4: .4byte gUnknown_0202FFB4 +_08090CD4: .4byte gPokedexView _08090CD8: .4byte 0x0000064e _08090CDC: .4byte gPokedexEntries _08090CE0: .4byte 0x06007aca @@ -2989,11 +2533,11 @@ sub_8091AF8: @ 8091AF8 lsls r5, 24 lsrs r5, 24 mov r10, r5 - bl sub_808D690 + bl SortPokedex movs r5, 0 movs r6, 0 ldr r4, _08091D08 @ =0x00000181 - ldr r3, _08091D0C @ =gUnknown_0202FFB4 + ldr r3, _08091D0C @ =gPokedexView _08091B32: ldr r2, [r3] lsls r0, r5, 2 @@ -3015,7 +2559,7 @@ _08091B4E: lsrs r5, r0, 16 cmp r5, r4 bls _08091B32 - ldr r1, _08091D0C @ =gUnknown_0202FFB4 + ldr r1, _08091D0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091D10 @ =0x0000060c adds r0, r2 @@ -3037,7 +2581,7 @@ _08091B4E: adds r0, r7 mov r9, r0 _08091B82: - ldr r1, _08091D0C @ =gUnknown_0202FFB4 + ldr r1, _08091D0C @ =gPokedexView ldr r0, [r1] lsls r4, r5, 2 adds r0, r4 @@ -3078,7 +2622,7 @@ _08091BBA: cmp r3, r1 bge _08091BE6 _08091BD2: - ldr r2, _08091D0C @ =gUnknown_0202FFB4 + ldr r2, _08091D0C @ =gPokedexView ldr r0, [r2] lsls r1, r6, 2 adds r1, r0, r1 @@ -3092,7 +2636,7 @@ _08091BE6: adds r0, r5, 0x1 lsls r0, 16 lsrs r5, r0, 16 - ldr r1, _08091D0C @ =gUnknown_0202FFB4 + ldr r1, _08091D0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091D10 @ =0x0000060c adds r0, r2 @@ -3100,7 +2644,7 @@ _08091BE6: cmp r5, r0 bcc _08091B82 _08091BFA: - ldr r1, _08091D0C @ =gUnknown_0202FFB4 + ldr r1, _08091D0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091D10 @ =0x0000060c adds r0, r2 @@ -3111,7 +2655,7 @@ _08091C04: beq _08091C74 movs r5, 0 movs r6, 0 - ldr r1, _08091D0C @ =gUnknown_0202FFB4 + ldr r1, _08091D0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091D10 @ =0x0000060c adds r0, r2 @@ -3159,7 +2703,7 @@ _08091C58: cmp r5, r0 bcc _08091C22 _08091C6A: - ldr r1, _08091D0C @ =gUnknown_0202FFB4 + ldr r1, _08091D0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091D10 @ =0x0000060c adds r0, r2 @@ -3183,7 +2727,7 @@ _08091C8A: bne _08091D20 movs r5, 0 movs r6, 0 - ldr r2, _08091D0C @ =gUnknown_0202FFB4 + ldr r2, _08091D0C @ =gPokedexView ldr r0, [r2] ldr r1, _08091D10 @ =0x0000060c adds r0, r1 @@ -3245,7 +2789,7 @@ _08091CF2: b _08091D9C .align 2, 0 _08091D08: .4byte 0x00000181 -_08091D0C: .4byte gUnknown_0202FFB4 +_08091D0C: .4byte gPokedexView _08091D10: .4byte 0x0000060c _08091D14: .4byte gUnknown_083B57BC _08091D18: .4byte gSpeciesNames @@ -3253,7 +2797,7 @@ _08091D1C: .4byte gBaseStats _08091D20: movs r5, 0 movs r6, 0 - ldr r1, _08091E0C @ =gUnknown_0202FFB4 + ldr r1, _08091E0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091E10 @ =0x0000060c adds r0, r2 @@ -3295,7 +2839,7 @@ _08091D6A: cmp r0, r1 bne _08091D88 _08091D74: - ldr r2, _08091E0C @ =gUnknown_0202FFB4 + ldr r2, _08091E0C @ =gPokedexView ldr r0, [r2] lsls r1, r6, 2 adds r1, r0, r1 @@ -3309,7 +2853,7 @@ _08091D88: adds r0, r5, 0x1 lsls r0, 16 lsrs r5, r0, 16 - ldr r1, _08091E0C @ =gUnknown_0202FFB4 + ldr r1, _08091E0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091E10 @ =0x0000060c adds r0, r2 @@ -3317,13 +2861,13 @@ _08091D88: cmp r5, r0 bcc _08091D34 _08091D9C: - ldr r1, _08091E0C @ =gUnknown_0202FFB4 + ldr r1, _08091E0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091E10 @ =0x0000060c adds r0, r2 strh r6, [r0] _08091DA6: - ldr r1, _08091E0C @ =gUnknown_0202FFB4 + ldr r1, _08091E0C @ =gPokedexView ldr r0, [r1] ldr r2, _08091E10 @ =0x0000060c adds r1, r0, r2 @@ -3334,7 +2878,7 @@ _08091DA6: ldr r0, _08091E18 @ =0x00000181 cmp r5, r0 bhi _08091DFA - ldr r4, _08091E0C @ =gUnknown_0202FFB4 + ldr r4, _08091E0C @ =gPokedexView movs r1, 0x2 negs r1, r1 mov r10, r1 @@ -3377,7 +2921,7 @@ _08091DFA: pop {r1} bx r1 .align 2, 0 -_08091E0C: .4byte gUnknown_0202FFB4 +_08091E0C: .4byte gPokedexView _08091E10: .4byte 0x0000060c _08091E14: .4byte gBaseStats _08091E18: .4byte 0x00000181 @@ -3455,7 +2999,7 @@ _08091E98: beq _08091EA6 b _08092030 _08091EA6: - ldr r0, _08091F20 @ =gUnknown_0202FFB4 + ldr r0, _08091F20 @ =gPokedexView ldr r0, [r0] ldr r1, _08091F24 @ =0x0000064a adds r0, r1 @@ -3513,7 +3057,7 @@ _08091F10: b _08092030 .align 2, 0 _08091F1C: .4byte gPaletteFade -_08091F20: .4byte gUnknown_0202FFB4 +_08091F20: .4byte gPokedexView _08091F24: .4byte 0x0000064a _08091F28: .4byte gPokedexMenuSearch_Gfx _08091F2C: .4byte gUnknown_08E96D2C @@ -3897,7 +3441,7 @@ _08092230: ldr r1, _080922B8 @ =gUnknown_0202FFBA movs r0, 0x40 strb r0, [r1] - ldr r7, _080922BC @ =gUnknown_0202FFB4 + ldr r7, _080922BC @ =gPokedexView ldr r1, [r7] ldr r0, _080922C0 @ =0x0000062a adds r2, r1, r0 @@ -3943,7 +3487,7 @@ _08092288: .align 2, 0 _080922B4: .4byte gTasks _080922B8: .4byte gUnknown_0202FFBA -_080922BC: .4byte gUnknown_0202FFB4 +_080922BC: .4byte gPokedexView _080922C0: .4byte 0x0000062a _080922C4: .4byte gUnknown_0202FFB8 _080922C8: .4byte gSaveBlock2 @@ -4179,7 +3723,7 @@ sub_80924A4: @ 80924A4 lsls r0, 24 cmp r0, 0 bne _080924F6 - ldr r0, _080924D0 @ =gUnknown_0202FFB4 + ldr r0, _080924D0 @ =gPokedexView ldr r0, [r0] ldr r1, _080924D4 @ =0x0000060c adds r0, r1 @@ -4192,7 +3736,7 @@ sub_80924A4: @ 80924A4 bl sub_8091E20 b _080924E8 .align 2, 0 -_080924D0: .4byte gUnknown_0202FFB4 +_080924D0: .4byte gPokedexView _080924D4: .4byte 0x0000060c _080924D8: .4byte gDexText_SearchComplete _080924DC: @@ -4230,7 +3774,7 @@ sub_8092508: @ 8092508 ands r0, r1 cmp r0, 0 beq _080925A4 - ldr r5, _08092574 @ =gUnknown_0202FFB4 + ldr r5, _08092574 @ =gPokedexView ldr r1, [r5] ldr r3, _08092578 @ =0x0000060c adds r0, r1, r3 @@ -4271,7 +3815,7 @@ sub_8092508: @ 8092508 b _080925A4 .align 2, 0 _08092570: .4byte gMain -_08092574: .4byte gUnknown_0202FFB4 +_08092574: .4byte gPokedexView _08092578: .4byte 0x0000060c _0809257C: .4byte 0x0000064f _08092580: .4byte 0x00000612 @@ -5430,7 +4974,7 @@ sub_8092EB0: @ 8092EB0 push {r4,r5,lr} lsls r0, 24 lsrs r4, r0, 24 - ldr r1, _08092ED0 @ =gUnknown_0202FFB4 + ldr r1, _08092ED0 @ =gPokedexView ldr r0, [r1] ldr r2, _08092ED4 @ =0x00000614 adds r0, r2 @@ -5444,7 +4988,7 @@ _08092ECA: movs r3, 0 b _08092EDA .align 2, 0 -_08092ED0: .4byte gUnknown_0202FFB4 +_08092ED0: .4byte gPokedexView _08092ED4: .4byte 0x00000614 _08092ED8: movs r3, 0x1 diff --git a/src/pokedex.c b/src/pokedex.c index 51fce03aa..876e1d737 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -9,30 +9,31 @@ #include "task.h" #include "text.h" -struct PokedexListItem { - u16 a; +struct PokedexListItem +{ + u16 dexNum; u16 seen:1; u16 owned:1; - //u8 c; }; -struct PokedexView { - struct PokedexListItem unk0[386]; //data on the 386 different Pokemon +struct PokedexView +{ + struct PokedexListItem unk0[386]; u16 unk608; u8 unk60A_1:1; u8 unk60A_2:1; u8 unk60B; u16 unk60C; - u16 unk60E; //selected Pokemon (index of unk0) + u16 selectedPokemon; u16 unk610; - u16 unk612; + u16 dexMode; //National or Hoenn u16 unk614; - u16 unk616; //order + u16 dexOrder; u16 unk618; u16 unk61A; u16 unk61C; u16 unk61E[4]; - u16 unk626; //some sprite id + u16 unk626; //sprite id of selected Pokemon u16 unk628; u16 unk62A; u8 unk62C; @@ -49,17 +50,40 @@ struct PokedexView { u8 unk64A; u8 unk64B; u8 unk64C_1:1; - u8 unk64D; + u8 selectedScreen; u8 unk64E; u8 unk64F; - u8 unk650; //menuIsOpen + u8 menuIsOpen; //menuIsOpen u8 unk651; - u16 unk652; //Menu cursor position - s16 unk654; //Menu Y position (inverted because we use REG_BG0VOFS for this) + u16 menuCursorPos; //Menu cursor position + s16 menuY; //Menu Y position (inverted because we use REG_BG0VOFS for this) u8 unk656[8]; u8 unk65E[8]; }; +// I'm #define-ing these just for now so I can keep using the old unkXXX member names +#define unk60E selectedPokemon +#define unk612 dexMode +#define unk616 dexOrder +#define unk64D selectedScreen +#define unk650 menuIsOpen +#define unk652 menuCursorPos +#define unk654 menuY + +enum +{ + DEX_MODE_HOENN, + DEX_MODE_NATIONAL +}; + +enum +{ + PAGE_SCREEN, + AREA_SCREEN, + CRY_SCREEN, + SIZE_SCREEN +}; + struct PokedexEntry { /*0x00*/ u8 categoryName[12]; @@ -85,7 +109,7 @@ struct CryRelatedStruct extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gReservedSpritePaletteCount; -extern struct PokedexView *gUnknown_0202FFB4; +extern struct PokedexView *gPokedexView; extern u16 gUnknown_0202FFB8; extern u8 gUnknown_0202FFBA; extern u8 gUnknown_03005CE8; @@ -118,6 +142,8 @@ extern u8 gUnknown_0839F8A0[]; extern u8 gUnknown_0839F988[]; extern u8 gUnknown_03005E98; extern u8 gUnknown_083B4EC4[]; +extern u8 gUnknown_08E96ACC[]; +extern u8 gUnknown_08E96B58[]; extern struct PokedexEntry gPokedexEntries[]; extern u8 gDexText_UnknownPoke[]; @@ -125,6 +151,7 @@ extern u8 gDexText_UnknownHeight[]; extern u8 gDexText_UnknownWeight[]; extern u8 gDexText_CryOf[]; extern u8 gDexText_SizeComparedTo[]; +extern u8 gDexText_RegisterComplete[]; extern void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume); extern bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16); @@ -169,7 +196,7 @@ bool8 sub_808F250(u8); bool8 sub_808E71C(void); void sub_808CCC4(u8 taskId); u16 GetHoennPokedexCount(u8); -void sub_808D690(u8, u8); +void SortPokedex(u8, u8); void Task_PokedexResultsScreen(u8 taskId); void sub_808D118(u8 taskId); void Task_PokedexResultsScreenMenu(u8 taskId); @@ -188,19 +215,25 @@ u32 sub_808E8C8(u16, u16, u16); void sub_808EE28(struct Sprite *sprite); u16 sub_8091818(u8, u16, u16, u16); u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); //Not sure of return type -void sub_808F2B0(u8 taskId); -void sub_808F6CC(u8 taskId); -void sub_808FA64(u8 taskId); -void sub_808F8D8(u8 taskId); -void sub_808F8B8(u8 taskId); +void Task_InitPageScreenMultistep(u8 taskId); +void Task_PageScreenProcessInput(u8 taskId); +void Task_InitCryScreenMultistep(u8 taskId); +void Task_InitAreaScreenMultistep(u8 taskId); +void Task_ClosePageScreen(u8 taskId); void sub_808F888(u8 taskId); -void sub_8090070(u8 taskId); -void sub_808F9C8(u8 taskId); +void Task_InitSizeScreenMultistep(u8 taskId); +void Task_AreaScreenProcessInput(u8 taskId); void sub_808FA00(u8 taskId); -void sub_808FDF8(u8 taskId); +void Task_CryScreenProcessInput(u8 taskId); void sub_808FFBC(u8 taskId); -void sub_80903D0(u8 taskId); +void Task_SizeScreenProcessInput(u8 taskId); void sub_8090040(u8); +void sub_8090498(u8 taskId); +void sub_80904FC(u16); +void sub_8090540(u16); +void sub_8090750(u8); +void sub_8090A3C(u8); +void sub_8091738(u16, u16, u16); u16 NationalPokedexNumToSpecies(u16); u8 sub_8119E3C(struct CryRelatedStruct *, u8); u8 ShowPokedexCryScreen(struct CryRelatedStruct *, u8); @@ -249,7 +282,7 @@ void ClearPokedexView(struct PokedexView *pokedexView) for(i = 0; i <= 385; i++) { - pokedexView->unk0[i].a |= 0x0000FFFF; + pokedexView->unk0[i].dexNum |= 0xFFFF; pokedexView->unk0[i].seen = 0; pokedexView->unk0[i].owned = 0; } @@ -257,11 +290,11 @@ void ClearPokedexView(struct PokedexView *pokedexView) pokedexView->unk60A_1 = 0; pokedexView->unk60A_2 = 0; pokedexView->unk60C = 0; - pokedexView->unk60E = 0; + pokedexView->selectedPokemon = 0; pokedexView->unk610 = 0; - pokedexView->unk612 = 0; + pokedexView->dexMode = 0; pokedexView->unk614 = 0; - pokedexView->unk616 = 0; + pokedexView->dexOrder = 0; pokedexView->unk618 = 0; pokedexView->unk61A = 0; pokedexView->unk61C = 0; @@ -283,11 +316,11 @@ void ClearPokedexView(struct PokedexView *pokedexView) pokedexView->unk64A = 0; pokedexView->unk64B = 0; pokedexView->unk64C_1 = 0; - pokedexView->unk64D = 0; + pokedexView->selectedScreen = 0; pokedexView->unk64F = 0; - pokedexView->unk650 = 0; - pokedexView->unk652 = 0; - pokedexView->unk654 = 0; + pokedexView->menuIsOpen = 0; + pokedexView->menuCursorPos = 0; + pokedexView->menuY = 0; for(i = 0; i <= 7; i++) pokedexView->unk656[i] = 0; for(i = 0; i <= 7; i++) @@ -340,39 +373,39 @@ void CB2_InitPokedex(void) { case 0: default: - gUnknown_0202FFB4 = (struct PokedexView *)0x02018000; + gPokedexView = (struct PokedexView *)0x02018000; break; case 1: - gUnknown_0202FFB4 = (struct PokedexView *)0x02018800; + gPokedexView = (struct PokedexView *)0x02018800; break; case 2: - gUnknown_0202FFB4 = (struct PokedexView *)0x02019000; + gPokedexView = (struct PokedexView *)0x02019000; break; case 3: - gUnknown_0202FFB4 = (struct PokedexView *)0x02019800; + gPokedexView = (struct PokedexView *)0x02019800; break; } - ClearPokedexView(gUnknown_0202FFB4); + ClearPokedexView(gPokedexView); CreateTask(Task_PokedexShowMainScreen, 0); - gUnknown_0202FFB4->unk612 = gSaveBlock2.pokedex.unknown1; + gPokedexView->dexMode = gSaveBlock2.pokedex.unknown1; if(!IsNationalPokedex()) - gUnknown_0202FFB4->unk612 = 0; - gUnknown_0202FFB4->unk616 = gSaveBlock2.pokedex.order; - gUnknown_0202FFB4->unk60E = gUnknown_0202FFB8; - gUnknown_0202FFB4->unk62C = gUnknown_0202FFBA; - gUnknown_0202FFB4->unk64D = 0; - gUnknown_0202FFB4->unk64E = 0; + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gSaveBlock2.pokedex.order; + gPokedexView->selectedPokemon = gUnknown_0202FFB8; + gPokedexView->unk62C = gUnknown_0202FFBA; + gPokedexView->selectedScreen = PAGE_SCREEN; + gPokedexView->unk64E = 0; if(!IsNationalPokedex()) { - gUnknown_0202FFB4->unk61A = GetHoennPokedexCount(0); - gUnknown_0202FFB4->unk61C = GetHoennPokedexCount(1); + gPokedexView->unk61A = GetHoennPokedexCount(0); + gPokedexView->unk61C = GetHoennPokedexCount(1); } else { - gUnknown_0202FFB4->unk61A = GetNationalPokedexCount(0); - gUnknown_0202FFB4->unk61C = GetNationalPokedexCount(1); + gPokedexView->unk61A = GetNationalPokedexCount(0); + gPokedexView->unk61C = GetNationalPokedexCount(1); } - gUnknown_0202FFB4->unk62D = 8; + gPokedexView->unk62D = 8; gMain.state++; break; case 3: @@ -386,7 +419,7 @@ void CB2_InitPokedex(void) REG_DISPSTAT |= 8; SetVBlankCallback(sub_808C0B8); SetMainCallback2(MainCB); - sub_808D690(gUnknown_0202FFB4->unk612, gUnknown_0202FFB4->unk616); + SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x80); } } @@ -409,7 +442,7 @@ u8 unref_sub_808C540(void (*func)(u8)) REG_DISPSTAT |= 0x8; SetVBlankCallback(sub_808C0B8); SetMainCallback2(MainCB); - if(!gUnknown_0202FFB4->unk64B) + if(!gPokedexView->unk64B) taskId = CreateTask(sub_808CAE4, 0); else taskId = CreateTask(sub_808D198, 0); @@ -427,7 +460,7 @@ void MainCB(void) void Task_PokedexShowMainScreen(u8 taskId) { - gUnknown_0202FFB4->unk64C_1 = 0; + gPokedexView->unk64C_1 = 0; if(sub_808D344(0)) { gTasks[taskId].func = Task_PokedexMainScreen; @@ -437,29 +470,29 @@ void Task_PokedexShowMainScreen(u8 taskId) //Hide menu and process input on main screen void Task_PokedexMainScreen(u8 taskId) { - REG_BG0VOFS = gUnknown_0202FFB4->unk654; + REG_BG0VOFS = gPokedexView->menuY; //If menu is open, slide it down, off screen - if(gUnknown_0202FFB4->unk654) - gUnknown_0202FFB4->unk654 -= 8; + if(gPokedexView->menuY) + gPokedexView->menuY -= 8; else { - if((gMain.newKeys & A_BUTTON) && gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60E].seen) + if((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) { sub_808E6BC(); BeginNormalPaletteFade( - ~(1 << (gSprites[gUnknown_0202FFB4->unk626].oam.paletteNum + 16)), + ~(1 << (gSprites[gPokedexView->unk626].oam.paletteNum + 16)), 0, 0, 0x10, 0); - gSprites[gUnknown_0202FFB4->unk626].callback = sub_808EDB8; + gSprites[gPokedexView->unk626].callback = sub_808EDB8; gTasks[taskId].func = sub_808CA64; PlaySE(SE_PIN); } else if(gMain.newKeys & START_BUTTON) { //Open menu - gUnknown_0202FFB4->unk654 = 0; - gUnknown_0202FFB4->unk650 = 1; - gUnknown_0202FFB4->unk652 = 0; + gPokedexView->menuY = 0; + gPokedexView->menuIsOpen = 1; + gPokedexView->menuCursorPos = 0; gTasks[taskId].func = Task_PokedexMainScreenMenu; PlaySE(SE_SELECT); } @@ -468,11 +501,11 @@ void Task_PokedexMainScreen(u8 taskId) PlaySE(SE_SELECT); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskId].data[0] = sub_8091E3C(); - gUnknown_0202FFB4->unk64F = 0; - gUnknown_0202FFB4->unk62A = gUnknown_0202FFB4->unk62C; - gUnknown_0202FFB4->unk610 = gUnknown_0202FFB4->unk60E; - gUnknown_0202FFB4->unk614 = gUnknown_0202FFB4->unk612; - gUnknown_0202FFB4->unk618 = gUnknown_0202FFB4->unk616; + gPokedexView->unk64F = 0; + gPokedexView->unk62A = gPokedexView->unk62C; + gPokedexView->unk610 = gPokedexView->selectedPokemon; + gPokedexView->unk614 = gPokedexView->dexMode; + gPokedexView->unk618 = gPokedexView->dexOrder; gTasks[taskId].func = sub_808CB8C; PlaySE(SE_PC_LOGON); } @@ -485,8 +518,8 @@ void Task_PokedexMainScreen(u8 taskId) else { //Handle D-pad - gUnknown_0202FFB4->unk60E = sub_808E48C(gUnknown_0202FFB4->unk60E, 0xE); - if(gUnknown_0202FFB4->unk62E) + gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); + if(gPokedexView->unk62E) gTasks[taskId].func = sub_808C898; } } @@ -494,7 +527,7 @@ void Task_PokedexMainScreen(u8 taskId) void sub_808C898(u8 taskId) { - if(sub_808E208(gUnknown_0202FFB4->unk62F, gUnknown_0202FFB4->unk634, gUnknown_0202FFB4->unk636)) + if(sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) { gTasks[taskId].func = Task_PokedexMainScreen; } @@ -503,33 +536,33 @@ void sub_808C898(u8 taskId) //Bring up menu and process menu input void Task_PokedexMainScreenMenu(u8 taskId) { - REG_BG0VOFS = gUnknown_0202FFB4->unk654; + REG_BG0VOFS = gPokedexView->menuY; //If menu is not open, slide it up, on screen - if(gUnknown_0202FFB4->unk654 != 80) - gUnknown_0202FFB4->unk654 += 8; + if(gPokedexView->menuY != 80) + gPokedexView->menuY += 8; else { if(gMain.newKeys & A_BUTTON) { - switch(gUnknown_0202FFB4->unk652) + switch(gPokedexView->menuCursorPos) { case 0: //BACK TO LIST default: gMain.newKeys |= START_BUTTON; //Exit menu break; case 1: //LIST TOP - gUnknown_0202FFB4->unk60E = 0; - gUnknown_0202FFB4->unk62C = 0x40; + gPokedexView->selectedPokemon = 0; + gPokedexView->unk62C = 0x40; sub_808E82C(); - sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; case 2: //LIST BOTTOM - gUnknown_0202FFB4->unk60E = gUnknown_0202FFB4->unk60C - 1; - gUnknown_0202FFB4->unk62C = gUnknown_0202FFB4->unk60C * 16 + 0x30; + gPokedexView->selectedPokemon = gPokedexView->unk60C - 1; + gPokedexView->unk62C = gPokedexView->unk60C * 16 + 0x30; sub_808E82C(); - sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; //Exit menu break; case 3: //CLOSE POKEDEX @@ -543,18 +576,18 @@ void Task_PokedexMainScreenMenu(u8 taskId) //Exit menu when Start or B is pressed if(gMain.newKeys & (START_BUTTON | B_BUTTON)) { - gUnknown_0202FFB4->unk650 = 0; + gPokedexView->menuIsOpen = 0; gTasks[taskId].func = Task_PokedexMainScreen; PlaySE(SE_SELECT); } - else if((gMain.newAndRepeatedKeys & DPAD_UP) && gUnknown_0202FFB4->unk652 != 0) + else if((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos != 0) { - gUnknown_0202FFB4->unk652--; + gPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if((gMain.newAndRepeatedKeys & DPAD_DOWN) && gUnknown_0202FFB4->unk652 <= 2) + else if((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 2) { - gUnknown_0202FFB4->unk652++; + gPokedexView->menuCursorPos++; PlaySE(SE_SELECT); } } @@ -562,11 +595,11 @@ void Task_PokedexMainScreenMenu(u8 taskId) void sub_808CA64(u8 taskId) { - if(gSprites[gUnknown_0202FFB4->unk626].pos1.x == 0x30 && - gSprites[gUnknown_0202FFB4->unk626].pos1.y == 0x38) + if(gSprites[gPokedexView->unk626].pos1.x == 0x30 && + gSprites[gPokedexView->unk626].pos1.y == 0x38) { - gUnknown_0202FFB4->unk64B = gUnknown_0202FFB4->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60E], gUnknown_0202FFB4->unk626); + gPokedexView->unk64B = gPokedexView->unk64A; + gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->unk626); gTasks[taskId].func = sub_808CAE4; } } @@ -575,17 +608,17 @@ void sub_808CAE4(u8 taskId) { if(gTasks[gTasks[taskId].data[0]].isActive) { - if(gUnknown_0202FFB4->unk64A == 1 && + if(gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) { - sub_808F284(&gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60E], gTasks[taskId].data[0]); + sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); } } else { - gUnknown_0202FFB8 = gUnknown_0202FFB4->unk60E; - gUnknown_0202FFBA = gUnknown_0202FFB4->unk62C; + gUnknown_0202FFB8 = gPokedexView->selectedPokemon; + gUnknown_0202FFBA = gPokedexView->unk62C; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -596,20 +629,20 @@ void sub_808CB8C(u8 taskId) if(!isActive) { - if(gUnknown_0202FFB4->unk64F) + if(gPokedexView->unk64F) { - gUnknown_0202FFB4->unk60E = isActive; - gUnknown_0202FFB4->unk62C = 0x40; + gPokedexView->selectedPokemon = isActive; + gPokedexView->unk62C = 0x40; gTasks[taskId].func = sub_808CCC4; } else { - gUnknown_0202FFB4->unk62C = gUnknown_0202FFB4->unk62A; - gUnknown_0202FFB4->unk60E = gUnknown_0202FFB4->unk610; - gUnknown_0202FFB4->unk612 = gUnknown_0202FFB4->unk614; + gPokedexView->unk62C = gPokedexView->unk62A; + gPokedexView->selectedPokemon = gPokedexView->unk610; + gPokedexView->dexMode = gPokedexView->unk614; if(!IsNationalPokedex()) - gUnknown_0202FFB4->unk612 = 0; - gUnknown_0202FFB4->unk616 = gUnknown_0202FFB4->unk618; + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gPokedexView->unk618; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -619,10 +652,10 @@ void Task_ClosePokedex(u8 taskId) { if(!gPaletteFade.active) { - gSaveBlock2.pokedex.unknown1 = gUnknown_0202FFB4->unk612; + gSaveBlock2.pokedex.unknown1 = gPokedexView->dexMode; if(!IsNationalPokedex()) gSaveBlock2.pokedex.unknown1 = 0; - gSaveBlock2.pokedex.order = gUnknown_0202FFB4->unk616; + gSaveBlock2.pokedex.order = gPokedexView->dexOrder; DestroyTask(taskId); SetMainCallback2(sub_805469C); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); @@ -631,35 +664,35 @@ void Task_ClosePokedex(u8 taskId) void sub_808CCC4(u8 taskId) { - gUnknown_0202FFB4->unk64C_1 = 1; + gPokedexView->unk64C_1 = 1; if(sub_808D344(3)) gTasks[taskId].func = Task_PokedexResultsScreen; } void Task_PokedexResultsScreen(u8 taskId) { - REG_BG0VOFS = gUnknown_0202FFB4->unk654; + REG_BG0VOFS = gPokedexView->menuY; - if(gUnknown_0202FFB4->unk654) - gUnknown_0202FFB4->unk654 -= 8; + if(gPokedexView->menuY) + gPokedexView->menuY -= 8; else { - if((gMain.newKeys & A_BUTTON) && gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60E].seen) + if((gMain.newKeys & A_BUTTON) && gPokedexView->unk0[gPokedexView->selectedPokemon].seen) { u32 a; sub_808E6BC(); - a = (1 << (gSprites[gUnknown_0202FFB4->unk626].oam.paletteNum + 16)); - gSprites[gUnknown_0202FFB4->unk626].callback = sub_808EDB8; + a = (1 << (gSprites[gPokedexView->unk626].oam.paletteNum + 16)); + gSprites[gPokedexView->unk626].callback = sub_808EDB8; BeginNormalPaletteFade(~a, 0, 0, 0x10, 0); gTasks[taskId].func = sub_808D118; PlaySE(SE_PIN); } else if(gMain.newKeys & START_BUTTON) { - gUnknown_0202FFB4->unk654 = 0; - gUnknown_0202FFB4->unk650 = 1; - gUnknown_0202FFB4->unk652 = 0; + gPokedexView->menuY = 0; + gPokedexView->menuIsOpen = 1; + gPokedexView->menuCursorPos = 0; gTasks[taskId].func = Task_PokedexResultsScreenMenu; PlaySE(SE_SELECT); } @@ -667,7 +700,7 @@ void Task_PokedexResultsScreen(u8 taskId) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskId].data[0] = sub_8091E3C(); - gUnknown_0202FFB4->unk64F = 0; + gPokedexView->unk64F = 0; gTasks[taskId].func = sub_808CB8C; PlaySE(SE_PC_LOGON); } @@ -680,8 +713,8 @@ void Task_PokedexResultsScreen(u8 taskId) else { //Handle D-pad - gUnknown_0202FFB4->unk60E = sub_808E48C(gUnknown_0202FFB4->unk60E, 0xE); - if(gUnknown_0202FFB4->unk62E) + gPokedexView->selectedPokemon = sub_808E48C(gPokedexView->selectedPokemon, 0xE); + if(gPokedexView->unk62E) gTasks[taskId].func = sub_808CEF8; } } @@ -689,38 +722,38 @@ void Task_PokedexResultsScreen(u8 taskId) void sub_808CEF8(u8 taskId) { - if(sub_808E208(gUnknown_0202FFB4->unk62F, gUnknown_0202FFB4->unk634, gUnknown_0202FFB4->unk636)) + if(sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636)) gTasks[taskId].func = Task_PokedexResultsScreen; } void Task_PokedexResultsScreenMenu(u8 taskId) { - REG_BG0VOFS = gUnknown_0202FFB4->unk654; + REG_BG0VOFS = gPokedexView->menuY; - if(gUnknown_0202FFB4->unk654 != 0x60) - gUnknown_0202FFB4->unk654 += 8; + if(gPokedexView->menuY != 0x60) + gPokedexView->menuY += 8; else { if(gMain.newKeys & A_BUTTON) { - switch(gUnknown_0202FFB4->unk652) + switch(gPokedexView->menuCursorPos) { case 0: //BACK TO LIST default: gMain.newKeys |= START_BUTTON; break; case 1: //LIST TOP - gUnknown_0202FFB4->unk60E = 0; - gUnknown_0202FFB4->unk62C = 0x40; + gPokedexView->selectedPokemon = 0; + gPokedexView->unk62C = 0x40; sub_808E82C(); - sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; case 2: //LIST BOTTOM - gUnknown_0202FFB4->unk60E = gUnknown_0202FFB4->unk60C - 1; - gUnknown_0202FFB4->unk62C = gUnknown_0202FFB4->unk60C * 16 + 0x30; + gPokedexView->selectedPokemon = gPokedexView->unk60C - 1; + gPokedexView->unk62C = gPokedexView->unk60C * 16 + 0x30; sub_808E82C(); - sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); gMain.newKeys |= START_BUTTON; break; case 3: //BACK TO POKEDEX @@ -739,18 +772,18 @@ void Task_PokedexResultsScreenMenu(u8 taskId) //Exit menu when Start or B is pressed if(gMain.newKeys & (START_BUTTON | B_BUTTON)) { - gUnknown_0202FFB4->unk650 = 0; + gPokedexView->menuIsOpen = 0; gTasks[taskId].func = Task_PokedexResultsScreen; PlaySE(SE_SELECT); } - else if((gMain.newAndRepeatedKeys & DPAD_UP) && gUnknown_0202FFB4->unk652) + else if((gMain.newAndRepeatedKeys & DPAD_UP) && gPokedexView->menuCursorPos) { - gUnknown_0202FFB4->unk652--; + gPokedexView->menuCursorPos--; PlaySE(SE_SELECT); } - else if((gMain.newAndRepeatedKeys & DPAD_DOWN) && gUnknown_0202FFB4->unk652 <= 3) + else if((gMain.newAndRepeatedKeys & DPAD_DOWN) && gPokedexView->menuCursorPos <= 3) { - gUnknown_0202FFB4->unk652++; + gPokedexView->menuCursorPos++; PlaySE(SE_SELECT); } } @@ -758,11 +791,11 @@ void Task_PokedexResultsScreenMenu(u8 taskId) void sub_808D118(u8 taskId) { - if(gSprites[gUnknown_0202FFB4->unk626].pos1.x == 0x30 && - gSprites[gUnknown_0202FFB4->unk626].pos1.y == 0x38) + if(gSprites[gPokedexView->unk626].pos1.x == 0x30 && + gSprites[gPokedexView->unk626].pos1.y == 0x38) { - gUnknown_0202FFB4->unk64B = gUnknown_0202FFB4->unk64A; - gTasks[taskId].data[0] = sub_808F210(&gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60E], gUnknown_0202FFB4->unk626); + gPokedexView->unk64B = gPokedexView->unk64A; + gTasks[taskId].data[0] = sub_808F210(&gPokedexView->unk0[gPokedexView->selectedPokemon], gPokedexView->unk626); gTasks[taskId].func = sub_808D198; } } @@ -771,11 +804,11 @@ void sub_808D198(u8 taskId) { if(gTasks[gTasks[taskId].data[0]].isActive) { - if(gUnknown_0202FFB4->unk64A == 1 && + if(gPokedexView->unk64A == 1 && !sub_808F250(gTasks[taskId].data[0]) && sub_808E71C()) { - sub_808F284(&gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60E], gTasks[taskId].data[0]); + sub_808F284(&gPokedexView->unk0[gPokedexView->selectedPokemon], gTasks[taskId].data[0]); } } else @@ -788,12 +821,12 @@ void Task_PokedexResultsScreenReturnToMainScreen(u8 taskId) { if(!gPaletteFade.active) { - gUnknown_0202FFB4->unk62C = gUnknown_0202FFB4->unk62A; - gUnknown_0202FFB4->unk60E = gUnknown_0202FFB4->unk610; - gUnknown_0202FFB4->unk612 = gUnknown_0202FFB4->unk614; + gPokedexView->unk62C = gPokedexView->unk62A; + gPokedexView->selectedPokemon = gPokedexView->unk610; + gPokedexView->dexMode = gPokedexView->unk614; if(!IsNationalPokedex()) - gUnknown_0202FFB4->unk612 = 0; - gUnknown_0202FFB4->unk616 = gUnknown_0202FFB4->unk618; + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gPokedexView->unk618; gTasks[taskId].func = Task_PokedexShowMainScreen; } } @@ -802,12 +835,12 @@ void Task_PokedexResultsScreenExitPokedex(u8 taskId) { if(!gPaletteFade.active) { - gUnknown_0202FFB4->unk62C = gUnknown_0202FFB4->unk62A; - gUnknown_0202FFB4->unk60E = gUnknown_0202FFB4->unk610; - gUnknown_0202FFB4->unk612 = gUnknown_0202FFB4->unk614; + gPokedexView->unk62C = gPokedexView->unk62A; + gPokedexView->selectedPokemon = gPokedexView->unk610; + gPokedexView->dexMode = gPokedexView->unk614; if(!IsNationalPokedex()) - gUnknown_0202FFB4->unk612 = 0; - gUnknown_0202FFB4->unk616 = gUnknown_0202FFB4->unk618; + gPokedexView->dexMode = DEX_MODE_HOENN; + gPokedexView->dexOrder = gPokedexView->unk618; gTasks[taskId].func = Task_ClosePokedex; } } @@ -823,9 +856,9 @@ bool8 sub_808D344(u8 a) return 0; //_0808D39E SetVBlankCallback(NULL); - gUnknown_0202FFB4->unk64A = a; + gPokedexView->unk64A = a; sub_8091060(0); - REG_BG2VOFS = gUnknown_0202FFB4->unk62D; + REG_BG2VOFS = gPokedexView->unk62D; LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM)); LZ77UnCompVram(gUnknown_08E96738, (void *)(VRAM + 0x6800)); LZ77UnCompVram(gUnknown_08E9C6DC, (void *)(VRAM + 0x7800)); @@ -836,9 +869,9 @@ bool8 sub_808D344(u8 a) LZ77UnCompVram(gUnknown_08E96994, (void *)(VRAM + 0x6500)); ResetPaletteFade(); if(a == 0) - gUnknown_0202FFB4->unk64C_1 = 0; + gPokedexView->unk64C_1 = 0; else - gUnknown_0202FFB4->unk64C_1 = 1; + gPokedexView->unk64C_1 = 1; sub_808D640(); gMain.state = 1; break; @@ -859,10 +892,10 @@ bool8 sub_808D344(u8 a) break; case 3: if(a == 0) - sub_808D690(gUnknown_0202FFB4->unk612, gUnknown_0202FFB4->unk616); - sub_808E0CC(gUnknown_0202FFB4->unk60E, 0xE); - gUnknown_0202FFB4->unk650 = 0; - gUnknown_0202FFB4->unk654 = 0; + SortPokedex(gPokedexView->dexMode, gPokedexView->dexOrder); + sub_808E0CC(gPokedexView->selectedPokemon, 0xE); + gPokedexView->menuIsOpen = 0; + gPokedexView->menuY = 0; gMain.state++; break; case 4: @@ -900,7 +933,7 @@ bool8 sub_808D344(u8 a) void sub_808D640(void) { - if(gUnknown_0202FFB4->unk64C_1) + if(gPokedexView->unk64C_1) LoadPalette(gUnknown_0839F67C + 0x2, 1, 0xBE); else if(!IsNationalPokedex()) LoadPalette(gPokedexMenu_Pal + 0x2, 1, 0xBE); @@ -908,22 +941,21 @@ void sub_808D640(void) LoadPalette(gUnknown_0839F73C + 0x2, 1, 0xBE); } -//Pokedex sorting function -void sub_808D690(u8 a, u8 mode) +void SortPokedex(u8 dexMode, u8 sortMode) { u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever. s16 i; - gUnknown_0202FFB4->unk60C = 0; + gPokedexView->unk60C = 0; - switch(a) + switch(dexMode) { default: - case 0: + case DEX_MODE_HOENN: vars[0] = 202; vars[1] = 1; break; - case 1: + case DEX_MODE_NATIONAL: if(IsNationalPokedex()) { vars[0] = 386; @@ -932,12 +964,12 @@ void sub_808D690(u8 a, u8 mode) else { vars[0] = 202; - vars[1] = a; + vars[1] = 1; } break; } - switch(mode) + switch(sortMode) { case 0: { @@ -946,11 +978,11 @@ void sub_808D690(u8 a, u8 mode) for(i = 0; i < vars[0]; i++) { vars[2] = HoennToNationalOrder(i + 1); - gUnknown_0202FFB4->unk0[i].a = vars[2]; - gUnknown_0202FFB4->unk0[i].seen = sub_8090D90(vars[2], 0); - gUnknown_0202FFB4->unk0[i].owned = sub_8090D90(vars[2], 1); - if(gUnknown_0202FFB4->unk0[i].seen) - gUnknown_0202FFB4->unk60C = i + 1; + gPokedexView->unk0[i].dexNum = vars[2]; + gPokedexView->unk0[i].seen = sub_8090D90(vars[2], 0); + gPokedexView->unk0[i].owned = sub_8090D90(vars[2], 1); + if(gPokedexView->unk0[i].seen) + gPokedexView->unk60C = i + 1; } } else @@ -967,11 +999,11 @@ void sub_808D690(u8 a, u8 mode) if(r10) { asm(""); //Needed to match for some reason - gUnknown_0202FFB4->unk0[r5].a = vars[2]; - gUnknown_0202FFB4->unk0[r5].seen = sub_8090D90(vars[2], 0); - gUnknown_0202FFB4->unk0[r5].owned = sub_8090D90(vars[2], 1); - if(gUnknown_0202FFB4->unk0[r5].seen) - gUnknown_0202FFB4->unk60C = r5 + 1; + gPokedexView->unk0[r5].dexNum = vars[2]; + gPokedexView->unk0[r5].seen = sub_8090D90(vars[2], 0); + gPokedexView->unk0[r5].owned = sub_8090D90(vars[2], 1); + if(gPokedexView->unk0[r5].seen) + gPokedexView->unk60C = r5 + 1; r5++; } } @@ -985,10 +1017,10 @@ void sub_808D690(u8 a, u8 mode) if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 0)) { - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2]; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = sub_8090D90(vars[2], 1); - gUnknown_0202FFB4->unk60C++; + gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->unk60C].seen = 1; + gPokedexView->unk0[gPokedexView->unk60C].owned = sub_8090D90(vars[2], 1); + gPokedexView->unk60C++; } } break; @@ -999,10 +1031,10 @@ void sub_808D690(u8 a, u8 mode) if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1)) { - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2]; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1; - gUnknown_0202FFB4->unk60C++; + gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->unk60C].seen = 1; + gPokedexView->unk0[gPokedexView->unk60C].owned = 1; + gPokedexView->unk60C++; } } break; @@ -1013,10 +1045,10 @@ void sub_808D690(u8 a, u8 mode) if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1)) { - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2]; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1; - gUnknown_0202FFB4->unk60C++; + gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->unk60C].seen = 1; + gPokedexView->unk0[gPokedexView->unk60C].owned = 1; + gPokedexView->unk60C++; } } break; @@ -1027,10 +1059,10 @@ void sub_808D690(u8 a, u8 mode) if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1)) { - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2]; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1; - gUnknown_0202FFB4->unk60C++; + gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->unk60C].seen = 1; + gPokedexView->unk0[gPokedexView->unk60C].owned = 1; + gPokedexView->unk60C++; } } break; @@ -1041,19 +1073,19 @@ void sub_808D690(u8 a, u8 mode) if(NationalToHoennOrder(vars[2]) <= vars[0] && sub_8090D90(vars[2], 1)) { - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].a = vars[2]; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].seen = 1; - gUnknown_0202FFB4->unk0[gUnknown_0202FFB4->unk60C].owned = 1; - gUnknown_0202FFB4->unk60C++; + gPokedexView->unk0[gPokedexView->unk60C].dexNum = vars[2]; + gPokedexView->unk0[gPokedexView->unk60C].seen = 1; + gPokedexView->unk0[gPokedexView->unk60C].owned = 1; + gPokedexView->unk60C++; } } break; } - for(i = gUnknown_0202FFB4->unk60C; i < 386; i++) + for(i = gPokedexView->unk60C; i < 386; i++) { - gUnknown_0202FFB4->unk0[i].a |= 0xFFFF; - gUnknown_0202FFB4->unk0[i].seen = 0; - gUnknown_0202FFB4->unk0[i].owned = 0; + gPokedexView->unk0[i].dexNum |= 0xFFFF; + gPokedexView->unk0[i].seen = 0; + gPokedexView->unk0[i].owned = 0; } } @@ -1069,16 +1101,16 @@ void sub_808DBE8(u8 a, u16 b, u16 c) for(i = 0; i <= 10; i++) { - if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF) + if((u16)_b > 385 || gPokedexView->unk0[_b].dexNum == 0xFFFF) sub_808E090(0x11, i * 2, c); else { sub_808E090(0x11, i * 2, c); - if(gUnknown_0202FFB4->unk0[_b].seen) + if(gPokedexView->unk0[_b].seen) { sub_808DEB0(_b, 0x12, i * 2, c); - sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, i * 2, c); - sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, i * 2); + sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, i * 2, c); + sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, i * 2); } else { @@ -1095,22 +1127,22 @@ void sub_808DBE8(u8 a, u16 b, u16 c) { s16 _b = b - 5; - if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF) - sub_808E090(0x11, gUnknown_0202FFB4->unk630 * 2, c); + if((u16)_b > 385 || gPokedexView->unk0[_b].dexNum == 0xFFFF) + sub_808E090(0x11, gPokedexView->unk630 * 2, c); else { - sub_808E090(0x11, gUnknown_0202FFB4->unk630 * 2, c); - if(gUnknown_0202FFB4->unk0[_b].seen) + sub_808E090(0x11, gPokedexView->unk630 * 2, c); + if(gPokedexView->unk0[_b].seen) { - sub_808DEB0(_b, 0x12, gUnknown_0202FFB4->unk630 * 2, c); - sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, gUnknown_0202FFB4->unk630 * 2, c); - sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, gUnknown_0202FFB4->unk630 * 2); + sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); + sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, gPokedexView->unk630 * 2, c); + sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, gPokedexView->unk630 * 2); } else { - sub_808DEB0(_b, 0x12, gUnknown_0202FFB4->unk630 * 2, c); - sub_808DF88(0, 0x11, gUnknown_0202FFB4->unk630 * 2, c); - sub_808DFE4(0, 0x17, gUnknown_0202FFB4->unk630 * 2); + sub_808DEB0(_b, 0x12, gPokedexView->unk630 * 2, c); + sub_808DF88(0, 0x11, gPokedexView->unk630 * 2, c); + sub_808DFE4(0, 0x17, gPokedexView->unk630 * 2); } } break; @@ -1118,20 +1150,20 @@ void sub_808DBE8(u8 a, u16 b, u16 c) case 2: { s16 _b = b + 5; - u16 r2 = gUnknown_0202FFB4->unk630 + 10; + u16 r2 = gPokedexView->unk630 + 10; if(r2 > 15) r2 -= 16; - if((u16)_b > 385 || gUnknown_0202FFB4->unk0[_b].a == 0xFFFF) + if((u16)_b > 385 || gPokedexView->unk0[_b].dexNum == 0xFFFF) sub_808E090(0x11, r2 * 2, c); else { sub_808E090(0x11, r2 * 2, c); - if(gUnknown_0202FFB4->unk0[_b].seen) + if(gPokedexView->unk0[_b].seen) { sub_808DEB0(_b, 0x12, r2 * 2, c); - sub_808DF88(gUnknown_0202FFB4->unk0[_b].owned, 0x11, r2 * 2, c); - sub_808DFE4(gUnknown_0202FFB4->unk0[_b].a, 0x17, r2 * 2); + sub_808DF88(gPokedexView->unk0[_b].owned, 0x11, r2 * 2, c); + sub_808DFE4(gPokedexView->unk0[_b].dexNum, 0x17, r2 * 2); } else { @@ -1149,9 +1181,9 @@ void sub_808DEB0(u16 a, u8 b, u8 c, u16 d) { u8 text[4]; u16 unk[2]; - u16 r7 = gUnknown_0202FFB4->unk0[a].a; + u16 r7 = gPokedexView->unk0[a].dexNum; - if(gUnknown_0202FFB4->unk612 == 0) + if(gPokedexView->dexMode == DEX_MODE_HOENN) r7 = NationalToHoennOrder(r7); unk[0] = 0x3FC; unk[1] = 0x3FD; @@ -1321,10 +1353,10 @@ void sub_808E0CC(u16 a, u16 b) u8 spriteId; for(i = 0; i < 4; i++) - gUnknown_0202FFB4->unk61E[i] |= 0xFFFF; - gUnknown_0202FFB4->unk626 = 0xFFFF; + gPokedexView->unk61E[i] |= 0xFFFF; + gPokedexView->unk626 = 0xFFFF; sub_808DBE8(0, a, b); - REG_BG2VOFS = gUnknown_0202FFB4->unk62D; + REG_BG2VOFS = gPokedexView->unk62D; unk = sub_808E888(a - 1); if(unk != 0xFFFF) { @@ -1346,8 +1378,8 @@ void sub_808E0CC(u16 a, u16 b) gSprites[spriteId].callback = sub_808EE28; gSprites[spriteId].data5 = 32; } - gUnknown_0202FFB4->unk630 = 0; - gUnknown_0202FFB4->unk632 = 0; + gPokedexView->unk630 = 0; + gPokedexView->unk632 = 0; } bool8 sub_808E208(u8 a, u8 b, u8 c) @@ -1355,30 +1387,30 @@ bool8 sub_808E208(u8 a, u8 b, u8 c) u16 i; u8 foo; - if(gUnknown_0202FFB4->unk62E) + if(gPokedexView->unk62E) { - gUnknown_0202FFB4->unk62E--; + gPokedexView->unk62E--; switch(a) { case 1: for(i = 0; i < 4; i++) { - if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF) - gSprites[gUnknown_0202FFB4->unk61E[i]].data5 += b; + if(gPokedexView->unk61E[i] != 0xFFFF) + gSprites[gPokedexView->unk61E[i]].data5 += b; } - foo = 16 * (c - gUnknown_0202FFB4->unk62E) / c; - REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk632 * 16 - foo; - gUnknown_0202FFB4->unk62C -= gUnknown_0202FFB4->unk628; + foo = 16 * (c - gPokedexView->unk62E) / c; + REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 - foo; + gPokedexView->unk62C -= gPokedexView->unk628; break; case 2: for(i = 0; i < 4; i++) { - if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF) - gSprites[gUnknown_0202FFB4->unk61E[i]].data5 -= b; + if(gPokedexView->unk61E[i] != 0xFFFF) + gSprites[gPokedexView->unk61E[i]].data5 -= b; } - foo = 16 * (c - gUnknown_0202FFB4->unk62E) / c; - REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk632 * 16 + foo; - gUnknown_0202FFB4->unk62C += gUnknown_0202FFB4->unk628; + foo = 16 * (c - gPokedexView->unk62E) / c; + REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk632 * 16 + foo; + gPokedexView->unk62C += gPokedexView->unk628; break; } return 0; @@ -1386,7 +1418,7 @@ bool8 sub_808E208(u8 a, u8 b, u8 c) //_0808E36C else { - REG_BG2VOFS = gUnknown_0202FFB4->unk62D + gUnknown_0202FFB4->unk630 * 16; + REG_BG2VOFS = gPokedexView->unk62D + gPokedexView->unk630 * 16; return 1; } } @@ -1396,7 +1428,7 @@ void sub_808E398(u8 a, u16 b) u16 unk; u8 spriteId; - gUnknown_0202FFB4->unk632 = gUnknown_0202FFB4->unk630; + gPokedexView->unk632 = gPokedexView->unk630; switch(a) { case 1: @@ -1408,10 +1440,10 @@ void sub_808E398(u8 a, u16 b) gSprites[spriteId].callback = sub_808EE28; gSprites[spriteId].data5 = 0xFFC0; } - if(gUnknown_0202FFB4->unk630 > 0) - gUnknown_0202FFB4->unk630--; + if(gPokedexView->unk630 > 0) + gPokedexView->unk630--; else - gUnknown_0202FFB4->unk630 = 0xF; + gPokedexView->unk630 = 0xF; break; } case 2: @@ -1423,10 +1455,10 @@ void sub_808E398(u8 a, u16 b) gSprites[spriteId].callback = sub_808EE28; gSprites[spriteId].data5 = 0x40; } - if(gUnknown_0202FFB4->unk630 <= 0xE) - gUnknown_0202FFB4->unk630++; + if(gPokedexView->unk630 <= 0xE) + gPokedexView->unk630++; else - gUnknown_0202FFB4->unk630 = 0; + gPokedexView->unk630 = 0; break; } } @@ -1446,7 +1478,7 @@ u16 sub_808E48C(u16 a, u16 b) //_0808E4B6 if(gMain.heldKeys & 0x80) { - if(a < gUnknown_0202FFB4->unk60C - 1) + if(a < gPokedexView->unk60C - 1) goto _0808E5C4; } //_0808E4CE @@ -1457,69 +1489,69 @@ u16 sub_808E48C(u16 a, u16 b) //_0808E4E0 for(i = 0; i < 7; i++) { - a = sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1); + a = sub_8091818(1, a, 0, gPokedexView->unk60C - 1); } - gUnknown_0202FFB4->unk62C += (a - r6) * 16; + gPokedexView->unk62C += (a - r6) * 16; sub_808E82C(); sub_808E0CC(a, 0xE); - PlaySE(0x6D); + PlaySE(SE_Z_PAGE); goto _0808E5A2; } //_0808E53C - if(!(gMain.newKeys & 0x10) || a >= gUnknown_0202FFB4->unk60C - 1) + if(!(gMain.newKeys & 0x10) || a >= gPokedexView->unk60C - 1) goto _0808E5A2; r6 = a; for(i = 0; i < 7; i++) { - a = sub_8091818(0, a, 0, gUnknown_0202FFB4->unk60C - 1); + a = sub_8091818(0, a, 0, gPokedexView->unk60C - 1); } - gUnknown_0202FFB4->unk62C += (a - r6) * 16; + gPokedexView->unk62C += (a - r6) * 16; sub_808E82C(); sub_808E0CC(a, 0xE); - PlaySE(0x6D); + PlaySE(SE_Z_PAGE); goto _0808E5A2; _0808E5A2: if(r10 != 0) goto _0808E628; - gUnknown_0202FFB4->unk638 = r10; + gPokedexView->unk638 = r10; return a; _0808E5C4: r10 = 2; - a = sub_8091818(0, a, 0, gUnknown_0202FFB4->unk60C - 1); + a = sub_8091818(0, a, 0, gPokedexView->unk60C - 1); sub_808E398(2, a); //goto _0808E60E sub_808DBE8(2, a, b); - PlaySE(0x6C); + PlaySE(SE_Z_SCROLL); } //_0808E5E4 else { r10 = 1; - a = sub_8091818(1, a, 0, gUnknown_0202FFB4->unk60C - 1); + a = sub_8091818(1, a, 0, gPokedexView->unk60C - 1); sub_808E398(1, a); //_0808E60E sub_808DBE8(1, a, b); - PlaySE(0x6C); + PlaySE(SE_Z_SCROLL); } //_0808E60E goto _0808E5A2; _0808E628: - r5 = gUnknown_083A05EC[gUnknown_0202FFB4->unk638 / 4]; - r3 = gUnknown_083A05F1[gUnknown_0202FFB4->unk638 / 4]; - gUnknown_0202FFB4->unk62E = r3; - gUnknown_0202FFB4->unk636 = r3; - gUnknown_0202FFB4->unk634 = r5; - gUnknown_0202FFB4->unk62F = r10; - gUnknown_0202FFB4->unk628 = r5; - sub_808E208(gUnknown_0202FFB4->unk62F, gUnknown_0202FFB4->unk634, gUnknown_0202FFB4->unk636); - if(gUnknown_0202FFB4->unk638 <= 0xB) - gUnknown_0202FFB4->unk638++; + r5 = gUnknown_083A05EC[gPokedexView->unk638 / 4]; + r3 = gUnknown_083A05F1[gPokedexView->unk638 / 4]; + gPokedexView->unk62E = r3; + gPokedexView->unk636 = r3; + gPokedexView->unk634 = r5; + gPokedexView->unk62F = r10; + gPokedexView->unk628 = r5; + sub_808E208(gPokedexView->unk62F, gPokedexView->unk634, gPokedexView->unk636); + if(gPokedexView->unk638 <= 0xB) + gPokedexView->unk638++; return a; } #else @@ -1607,7 +1639,7 @@ _0808E4E0:\n\ b _0808E5A2\n\ .align 2, 0\n\ _0808E52C: .4byte gMain\n\ -_0808E530: .4byte gUnknown_0202FFB4\n\ +_0808E530: .4byte gPokedexView\n\ _0808E534: .4byte 0x0000060c\n\ _0808E538: .4byte 0x0000062c\n\ _0808E53C:\n\ @@ -1672,7 +1704,7 @@ _0808E5A2:\n\ strh r2, [r0]\n\ b _0808E68E\n\ .align 2, 0\n\ -_0808E5B8: .4byte gUnknown_0202FFB4\n\ +_0808E5B8: .4byte gPokedexView\n\ _0808E5BC: .4byte 0x0000060c\n\ _0808E5C0: .4byte 0x0000062c\n\ _0808E5C4:\n\ @@ -1718,7 +1750,7 @@ _0808E60E:\n\ bl PlaySE\n\ b _0808E5A2\n\ .align 2, 0\n\ -_0808E620: .4byte gUnknown_0202FFB4\n\ +_0808E620: .4byte gPokedexView\n\ _0808E624: .4byte 0x0000060c\n\ _0808E628:\n\ ldr r1, _0808E6A0\n\ @@ -1782,7 +1814,7 @@ _0808E68E:\n\ bx r1\n\ .align 2, 0\n\ _0808E6A0: .4byte gUnknown_083A05EC\n\ -_0808E6A4: .4byte gUnknown_0202FFB4\n\ +_0808E6A4: .4byte gPokedexView\n\ _0808E6A8: .4byte gUnknown_083A05F1\n\ _0808E6AC: .4byte 0x0000062e\n\ _0808E6B0: .4byte 0x00000636\n\ @@ -1798,10 +1830,10 @@ void sub_808E6BC(void) for(i = 0; i < 4; i++) { - u16 spriteId = gUnknown_0202FFB4->unk61E[i]; + u16 spriteId = gPokedexView->unk61E[i]; if(gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF) - gUnknown_0202FFB4->unk626 = spriteId; + gPokedexView->unk626 = spriteId; } } @@ -1809,54 +1841,51 @@ u8 sub_808E71C(void) { u16 r2; u16 r3; - u16 r4 = gUnknown_0202FFB4->unk60E; + u16 r4 = gPokedexView->selectedPokemon; - if((gMain.newKeys & 0x40) && r4) + if((gMain.newKeys & DPAD_UP) && r4) { r2 = r4; while(r2 != 0) { - r2 = sub_8091818(1, r2, 0, gUnknown_0202FFB4->unk60C - 1); + r2 = sub_8091818(1, r2, 0, gPokedexView->unk60C - 1); - if(gUnknown_0202FFB4->unk0[r2].seen) + if(gPokedexView->unk0[r2].seen) { - //goto _0808E78C; r4 = r2; break; } } - if(gUnknown_0202FFB4->unk60E == r4) + if(gPokedexView->selectedPokemon == r4) return 0; else { - gUnknown_0202FFB4->unk60E = r4; - //goto _0808E80C - gUnknown_0202FFB4->unk62C -= 16; + gPokedexView->selectedPokemon = r4; + gPokedexView->unk62C -= 16; return 1; } } - //_0808E7A4 - else if((gMain.newKeys & 0x80) && r4 < gUnknown_0202FFB4->unk60C - 1) + else if((gMain.newKeys & DPAD_DOWN) && r4 < gPokedexView->unk60C - 1) { r2 = r4; - while(r2 < gUnknown_0202FFB4->unk60C - 1) + while(r2 < gPokedexView->unk60C - 1) { - r2 = sub_8091818(0, r2, 0, gUnknown_0202FFB4->unk60C - 1); + r2 = sub_8091818(0, r2, 0, gPokedexView->unk60C - 1); - if(gUnknown_0202FFB4->unk0[r2].seen) + if(gPokedexView->unk0[r2].seen) { r4 = r2; break; } } - if(gUnknown_0202FFB4->unk60E == r4) + if(gPokedexView->selectedPokemon == r4) return 0; else { - gUnknown_0202FFB4->unk60E = r4; - gUnknown_0202FFB4->unk62C += 16; + gPokedexView->selectedPokemon = r4; + gPokedexView->unk62C += 16; return 1; } } @@ -1869,10 +1898,10 @@ u8 sub_808E82C(void) for(i = 0; i < 4; i++) { - if(gUnknown_0202FFB4->unk61E[i] != 0xFFFF) + if(gPokedexView->unk61E[i] != 0xFFFF) { - DestroySprite(&gSprites[gUnknown_0202FFB4->unk61E[i]]); - gUnknown_0202FFB4->unk61E[i] |= 0xFFFF; + DestroySprite(&gSprites[gPokedexView->unk61E[i]]); + gPokedexView->unk61E[i] |= 0xFFFF; } } return 0; @@ -1880,10 +1909,10 @@ u8 sub_808E82C(void) u16 sub_808E888(u16 a1) { - if(a1 > 385 || gUnknown_0202FFB4->unk0[a1].a == 0xFFFF) + if(a1 > 385 || gPokedexView->unk0[a1].dexNum == 0xFFFF) return 0xFFFF; - else if(gUnknown_0202FFB4->unk0[a1].seen) - return gUnknown_0202FFB4->unk0[a1].a; + else if(gPokedexView->unk0[a1].seen) + return gPokedexView->unk0[a1].dexNum; else return 0; } @@ -1894,7 +1923,7 @@ u32 sub_808E8C8(u16 a, u16 b, u16 c) for(i = 0; i < 4; i++) { - if(gUnknown_0202FFB4->unk61E[i] == 0xFFFF) + if(gPokedexView->unk61E[i] == 0xFFFF) { u8 spriteId = sub_80918EC(a, (s16)b, (s16)c, i); @@ -1903,7 +1932,7 @@ u32 sub_808E8C8(u16 a, u16 b, u16 c) gSprites[spriteId].data0 = 0; gSprites[spriteId].data1 = i; gSprites[spriteId].data2 = NationalPokedexNumToSpecies(a); - gUnknown_0202FFB4->unk61E[i] = spriteId; + gPokedexView->unk61E[i] = spriteId; return spriteId; } } @@ -1958,7 +1987,7 @@ void sub_808E978(u8 a) _a = 0; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x1C, 0x30, 1); - r5 = gUnknown_0202FFB4->unk61A / 100; + r5 = gPokedexView->unk61A / 100; StartSpriteAnim(&gSprites[spriteId], r5); if(r5 != 0) _a = 1; @@ -1966,19 +1995,19 @@ void sub_808E978(u8 a) gSprites[spriteId].invisible = 1; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x22, 0x30, 1); - r5 = (gUnknown_0202FFB4->unk61A % 100) / 10; + r5 = (gPokedexView->unk61A % 100) / 10; if(r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = 1; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x28, 0x30, 1); - r5 = (gUnknown_0202FFB4->unk61A % 100) % 10; + r5 = (gPokedexView->unk61A % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); _a = 0; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x1C, 0x50, 1); - r5 = gUnknown_0202FFB4->unk61C / 100; + r5 = gPokedexView->unk61C / 100; StartSpriteAnim(&gSprites[spriteId], r5); if(r5 != 0) _a = 1; @@ -1986,14 +2015,14 @@ void sub_808E978(u8 a) gSprites[spriteId].invisible = 1; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x22, 0x50, 1); - r5 = (gUnknown_0202FFB4->unk61C % 100) / 10; + r5 = (gPokedexView->unk61C % 100) / 10; if(r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = 1; spriteId = CreateSprite(&gSpriteTemplate_83A059C, 0x28, 0x50, 1); - r5 = (gUnknown_0202FFB4->unk61C % 100) % 10; + r5 = (gPokedexView->unk61C % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); spriteId = CreateSprite(&gSpriteTemplate_83A05B4, 0x8C, 0x60, 1); @@ -2012,10 +2041,11 @@ void nullsub_58(struct Sprite *sprite) void sub_808ED94(struct Sprite *sprite) { - if(gUnknown_0202FFB4->unk64A != 0) + if(gPokedexView->unk64A != 0) DestroySprite(sprite); } +//Move Pokemon into position for description page void sub_808EDB8(struct Sprite *sprite) { sprite->oam.priority = 0; @@ -2042,10 +2072,10 @@ void sub_808EE28(struct Sprite *sprite) { u8 data1 = sprite->data1; - if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3) + if(gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) { DestroySprite(sprite); - gUnknown_0202FFB4->unk61E[data1] = 0xFFFF; + gPokedexView->unk61E[data1] = 0xFFFF; } else { @@ -2073,7 +2103,7 @@ void sub_808EE28(struct Sprite *sprite) if((u16)(sprite->data5 + 0x3F) > 0x7E && sprite->data0 != 0) { DestroySprite(sprite); - gUnknown_0202FFB4->unk61E[data1] = 0xFFFF; + gPokedexView->unk61E[data1] = 0xFFFF; } } //_0808EF16 @@ -2081,15 +2111,15 @@ void sub_808EE28(struct Sprite *sprite) void sub_808EF38(struct Sprite *sprite) { - if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3) + if(gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) DestroySprite(sprite); else - sprite->pos2.y = gUnknown_0202FFB4->unk60E * 120 / (gUnknown_0202FFB4->unk60C - 1); + sprite->pos2.y = gPokedexView->selectedPokemon * 120 / (gPokedexView->unk60C - 1); } void sub_808EF8C(struct Sprite *sprite) { - if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3) + if(gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) DestroySprite(sprite); else { @@ -2097,7 +2127,7 @@ void sub_808EF8C(struct Sprite *sprite) if(sprite->data1 != 0) { - if(gUnknown_0202FFB4->unk60E == gUnknown_0202FFB4->unk60C - 1) + if(gPokedexView->selectedPokemon == gPokedexView->unk60C - 1) sprite->invisible = 1; else sprite->invisible = 0; @@ -2105,7 +2135,7 @@ void sub_808EF8C(struct Sprite *sprite) } else { - if(gUnknown_0202FFB4->unk60E == 0) + if(gPokedexView->selectedPokemon == 0) sprite->invisible = 1; else sprite->invisible = 0; @@ -2113,7 +2143,7 @@ void sub_808EF8C(struct Sprite *sprite) } sprite->pos2.y = gSineTable[r0] / 64; sprite->data2 = sprite->data2 + 8; - if(gUnknown_0202FFB4->unk650 == 0 && gUnknown_0202FFB4->unk654 == 0 && sprite->invisible == 0) + if(gPokedexView->menuIsOpen == 0 && gPokedexView->menuY == 0 && sprite->invisible == 0) sprite->invisible = 0; else sprite->invisible = 1; @@ -2122,28 +2152,28 @@ void sub_808EF8C(struct Sprite *sprite) void sub_808F08C(struct Sprite *sprite) { - if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3) + if(gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) DestroySprite(sprite); } #ifdef NONMATCHING void sub_808F0B4(struct Sprite *sprite) { - if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3) + if(gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) DestroySprite(sprite); else { s16 r3; - u8 unk = gUnknown_0202FFB4->unk62C + sprite->data1; + u8 unk = gPokedexView->unk62C + sprite->data1; u16 foo = gSineTable[unk]; //u8 unk2 = sprite->data0; //u16 bar = gSineTable[unk + 0x40]; SetOamMatrix(sprite->data0, foo, gSineTable[unk + 0x40], (-(u16)foo) >> 16, gSineTable[unk + 0x40]); - r3 = gSineTable[sprite->data1 + gUnknown_0202FFB4->unk62C]; - sprite->pos2.x = gSineTable[sprite->data1 + gUnknown_0202FFB4->unk62C + 0x40] * 5 / 256; + r3 = gSineTable[sprite->data1 + gPokedexView->unk62C]; + sprite->pos2.x = gSineTable[sprite->data1 + gPokedexView->unk62C + 0x40] * 5 / 256; sprite->pos2.y = r3 * 40 / 256; } } @@ -2155,7 +2185,7 @@ void sub_808F0B4(struct Sprite *sprite) push {r4-r7,lr}\n\ sub sp, 0x4\n\ adds r6, r0, 0\n\ - ldr r1, _0808F0D8 @ =gUnknown_0202FFB4\n\ + ldr r1, _0808F0D8 @ =gPokedexView\n\ ldr r0, [r1]\n\ ldr r2, _0808F0DC @ =0x0000064a\n\ adds r0, r2\n\ @@ -2169,7 +2199,7 @@ void sub_808F0B4(struct Sprite *sprite) bl DestroySprite\n\ b _0808F158\n\ .align 2, 0\n\ -_0808F0D8: .4byte gUnknown_0202FFB4\n\ +_0808F0D8: .4byte gPokedexView\n\ _0808F0DC: .4byte 0x0000064a\n\ _0808F0E0:\n\ ldr r0, [r7]\n\ @@ -2247,18 +2277,18 @@ _0808F164: .4byte gSineTable\n\ void sub_808F168(struct Sprite *sprite) { - if(gUnknown_0202FFB4->unk64A != 0 && gUnknown_0202FFB4->unk64A != 3) + if(gPokedexView->unk64A != 0 && gPokedexView->unk64A != 3) DestroySprite(sprite); else { - u16 r1 = gUnknown_0202FFB4->unk64A == 0 ? 0x50 : 0x60; + u16 r1 = gPokedexView->unk64A == 0 ? 0x50 : 0x60; - if(gUnknown_0202FFB4->unk650 != 0 && gUnknown_0202FFB4->unk654 == r1) + if(gPokedexView->menuIsOpen != 0 && gPokedexView->menuY == r1) { u8 data2; sprite->invisible = 0; - sprite->pos2.y = gUnknown_0202FFB4->unk652 * 16; + sprite->pos2.y = gPokedexView->menuCursorPos * 16; sprite->pos2.x = gSineTable[(u8)sprite->data2] / 64; sprite->data2 += 8; } @@ -2272,7 +2302,7 @@ u8 sub_808F210(struct PokedexListItem *item, u8 b) u8 taskId; gUnknown_0202FFBC = item; - taskId = CreateTask(sub_808F2B0, 0); + taskId = CreateTask(Task_InitPageScreenMultistep, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 1; gTasks[taskId].data[2] = 0; @@ -2283,7 +2313,7 @@ u8 sub_808F210(struct PokedexListItem *item, u8 b) bool8 sub_808F250(u8 taskId) { - if(gTasks[taskId].data[0] == 0 && gTasks[taskId].func == sub_808F6CC) + if(gTasks[taskId].data[0] == 0 && gTasks[taskId].func == Task_PageScreenProcessInput) return 0; else return 1; @@ -2299,7 +2329,7 @@ u8 sub_808F284(struct PokedexListItem *item, u8 b) return b; } -void sub_808F2B0(u8 taskId) +void Task_InitPageScreenMultistep(u8 taskId) { switch(gMain.state) { @@ -2309,31 +2339,28 @@ void sub_808F2B0(u8 taskId) { u16 r2; - gUnknown_0202FFB4->unk64A = 1; - gUnknown_0202FFB4->unk64E = 0; + gPokedexView->unk64A = 1; + gPokedexView->unk64E = 0; gUnknown_03005CEC = gMain.vblankCallback; SetVBlankCallback(NULL); r2 = 0; if(gTasks[taskId].data[1] != 0) r2 += 0x1000; - if(gTasks[taskId].data[2] != 0) r2 |= 0x200; - sub_8091060(r2); - gMain.state = 1; } break; case 1: LZ77UnCompVram(gPokedexMenu_Gfx, (void *)VRAM); LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); - sub_8091738(gUnknown_0202FFBC->a, 2, 0x3FC); + sub_8091738(gUnknown_0202FFBC->dexNum, 2, 0x3FC); gMain.state++; break; case 2: sub_80904FC(0xD); - sub_8090584(gUnknown_0202FFB4->unk64D, 0xD); + sub_8090584(gPokedexView->selectedScreen, 0xD); sub_808D640(); gMain.state++; break; @@ -2343,21 +2370,21 @@ void sub_808F2B0(u8 taskId) gMain.state++; break; case 4: - if(gUnknown_0202FFB4->unk612 == 0) - sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->a), 0xD, 3); + if(gPokedexView->dexMode == DEX_MODE_HOENN) + sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3); else - sub_8091154(gUnknown_0202FFBC->a, 0xD, 3); + sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3); //_0808F45A - sub_80911C8(gUnknown_0202FFBC->a, 0x10, 3); + sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3); MenuPrint(gDexText_UnknownPoke, 11, 5); MenuPrint(gDexText_UnknownHeight, 16, 7); MenuPrint(gDexText_UnknownWeight, 16, 9); if(gUnknown_0202FFBC->owned) { - sub_8091304(gPokedexEntries[gUnknown_0202FFBC->a].categoryName, 11, 5); - sub_8091458(gPokedexEntries[gUnknown_0202FFBC->a].height, 16, 7); - sub_8091564(gPokedexEntries[gUnknown_0202FFBC->a].weight, 16, 9); - MenuPrint(gPokedexEntries[gUnknown_0202FFBC->a].descriptionPage1, 2, 13); + sub_8091304(gPokedexEntries[gUnknown_0202FFBC->dexNum].categoryName, 11, 5); + sub_8091458(gPokedexEntries[gUnknown_0202FFBC->dexNum].height, 16, 7); + sub_8091564(gPokedexEntries[gUnknown_0202FFBC->dexNum].weight, 16, 9); + MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13); sub_80917CC(14, 0x3FC); } //_0808F50C @@ -2372,7 +2399,7 @@ void sub_808F2B0(u8 taskId) if(gTasks[taskId].data[1] == 0) { //_0808F540 - gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->a, 0x30, 0x38, 0); + gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; } gMain.state++; @@ -2398,7 +2425,7 @@ void sub_808F2B0(u8 taskId) REG_BLDY = 0; REG_BG3CNT = 0xF03; REG_BG1CNT = 0xD00; - REG_DISPCNT = 0x1E40; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; gMain.state++; break; case 8: @@ -2408,7 +2435,7 @@ void sub_808F2B0(u8 taskId) if(gTasks[taskId].data[3] == 0) { StopCryAndClearCrySongs(); - PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->a), 0, 0x7D, 0xA); + PlayCry2(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), 0, 0x7D, 0xA); } else gMain.state++; @@ -2423,84 +2450,86 @@ void sub_808F2B0(u8 taskId) gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 1; gTasks[taskId].data[3] = 1; - gTasks[taskId].func = sub_808F6CC; + gTasks[taskId].func = Task_PageScreenProcessInput; gMain.state = 0; break; } } -void sub_808F6CC(u8 taskId) +void Task_PageScreenProcessInput(u8 taskId) { - if(gTasks[taskId].data[0] != 0) + if (gTasks[taskId].data[0] != 0) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); gTasks[taskId].func = sub_808F888; - PlaySE(0x6C); + PlaySE(SE_Z_SCROLL); } - else if(gMain.newKeys & 2) + else if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gTasks[taskId].func = sub_808F8B8; - PlaySE(3); + gTasks[taskId].func = Task_ClosePageScreen; + PlaySE(SE_PC_OFF); } - else if(gMain.newKeys & 1) + else if (gMain.newKeys & A_BUTTON) { - switch(gUnknown_0202FFB4->unk64D) + switch (gPokedexView->selectedScreen) { - case 0: + case PAGE_SCREEN: sub_8090C68(); break; - case 1: + case AREA_SCREEN: BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gTasks[taskId].func = sub_808F8D8; - PlaySE(0x15); + gTasks[taskId].func = Task_InitAreaScreenMultistep; + PlaySE(SE_PIN); break; - case 2: + case CRY_SCREEN: BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gTasks[taskId].func = sub_808FA64; - PlaySE(0x15); + gTasks[taskId].func = Task_InitCryScreenMultistep; + PlaySE(SE_PIN); break; - case 3: - if(!gUnknown_0202FFBC->owned) - PlaySE(0x20); + case SIZE_SCREEN: + if (!gUnknown_0202FFBC->owned) + PlaySE(SE_HAZURE); else { BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); - gTasks[taskId].func = sub_8090070; - PlaySE(0x15); + gTasks[taskId].func = Task_InitSizeScreenMultistep; + PlaySE(SE_PIN); } break; } } - else if (((gMain.newKeys & 0x20) || ((gMain.newKeys & 0x200) && gSaveBlock2.optionsButtonMode == 1)) - && gUnknown_0202FFB4->unk64D != 0) + else if (((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + && gPokedexView->selectedScreen > 0) { - gUnknown_0202FFB4->unk64D--; - sub_8090584(gUnknown_0202FFB4->unk64D, 0xD); - PlaySE(0x6D); + gPokedexView->selectedScreen--; + sub_8090584(gPokedexView->selectedScreen, 0xD); + PlaySE(SE_Z_PAGE); } - else if(((gMain.newKeys & 0x10) || ((gMain.newKeys & 0x100) && gSaveBlock2.optionsButtonMode == 1)) - && gUnknown_0202FFB4->unk64D <= 2) + else if (((gMain.newKeys & DPAD_RIGHT) + || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + && gPokedexView->selectedScreen < 3) { - gUnknown_0202FFB4->unk64D++; - sub_8090584(gUnknown_0202FFB4->unk64D, 0xD); - PlaySE(0x6D); + gPokedexView->selectedScreen++; + sub_8090584(gPokedexView->selectedScreen, 0xD); + PlaySE(SE_Z_PAGE); } } void sub_808F888(u8 taskId) { if(!gPaletteFade.active) - gTasks[taskId].func = sub_808F2B0; + gTasks[taskId].func = Task_InitPageScreenMultistep; } -void sub_808F8B8(u8 taskId) +void Task_ClosePageScreen(u8 taskId) { if(!gPaletteFade.active) DestroyTask(taskId); } -void sub_808F8D8(u8 taskId) +void Task_InitAreaScreenMultistep(u8 taskId) { switch (gMain.state) { @@ -2508,11 +2537,11 @@ void sub_808F8D8(u8 taskId) default: if (!gPaletteFade.active) { - gUnknown_0202FFB4->unk64A = 5; + gPokedexView->unk64A = 5; gUnknown_03005CEC = gMain.vblankCallback; SetVBlankCallback(NULL); sub_8091060(0x200); - gUnknown_0202FFB4->unk64D = 1; + gPokedexView->selectedScreen = AREA_SCREEN; gMain.state = 1; } break; @@ -2524,18 +2553,18 @@ void sub_808F8D8(u8 taskId) gMain.state++; break; case 2: - ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->a), &gUnknown_0202FFB4->unk64F); + ShowPokedexAreaScreen(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum), &gPokedexView->unk64F); SetVBlankCallback(gUnknown_03005CEC); - gUnknown_0202FFB4->unk64F = 0; + gPokedexView->unk64F = 0; gMain.state = 0; - gTasks[taskId].func = sub_808F9C8; + gTasks[taskId].func = Task_AreaScreenProcessInput; break; } } -void sub_808F9C8(u8 taskId) +void Task_AreaScreenProcessInput(u8 taskId) { - if(gUnknown_0202FFB4->unk64F != 0) + if(gPokedexView->unk64F != 0) gTasks[taskId].func = sub_808FA00; } @@ -2543,20 +2572,20 @@ void sub_808FA00(u8 taskId) { if(!gPaletteFade.active) { - switch(gUnknown_0202FFB4->unk64F) + switch(gPokedexView->unk64F) { case 1: default: - gTasks[taskId].func = sub_808F2B0; + gTasks[taskId].func = Task_InitPageScreenMultistep; break; case 2: - gTasks[taskId].func = sub_808FA64; + gTasks[taskId].func = Task_InitCryScreenMultistep; break; } } } -void sub_808FA64(u8 taskId) +void Task_InitCryScreenMultistep(u8 taskId) { switch(gMain.state) { @@ -2565,11 +2594,11 @@ void sub_808FA64(u8 taskId) if(!gPaletteFade.active) { m4aMPlayStop(&gMPlay_BGM); - gUnknown_0202FFB4->unk64A = 6; + gPokedexView->unk64A = 6; gUnknown_03005CEC = gMain.vblankCallback; SetVBlankCallback(NULL); sub_8091060(0x200); - gUnknown_0202FFB4->unk64D = 2; + gPokedexView->selectedScreen = CRY_SCREEN; gMain.state = 1; } break; @@ -2593,11 +2622,11 @@ void sub_808FA64(u8 taskId) break; case 4: MenuPrint(gDexText_CryOf, 10, 4); - sub_8091260(gUnknown_0202FFBC->a, 10, 6, 2); + sub_8091260(gUnknown_0202FFBC->dexNum, 10, 6, 2); gMain.state++; break; case 5: - gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->a, 0x30, 0x38, 0); + gTasks[taskId].data[4] = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0); gSprites[gTasks[taskId].data[4]].oam.priority = 0; gUnknown_03005E98 = 0; gMain.state++; @@ -2649,14 +2678,14 @@ void sub_808FA64(u8 taskId) gMain.state++; break; case 10: - gUnknown_0202FFB4->unk64F = 0; + gPokedexView->unk64F = 0; gMain.state = 0; - gTasks[taskId].func = sub_808FDF8; + gTasks[taskId].func = Task_CryScreenProcessInput; break; } } -void sub_808FDF8(u8 taskId) +void Task_CryScreenProcessInput(u8 taskId) { sub_8119F88(0); @@ -2665,41 +2694,43 @@ void sub_808FDF8(u8 taskId) else sub_8090040(0); - if (gMain.newKeys & 1) + if (gMain.newKeys & A_BUTTON) { sub_8090040(1); - sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->a)); + sub_811A050(NationalPokedexNumToSpecies(gUnknown_0202FFBC->dexNum)); return; } else if (!gPaletteFade.active) { - if (gMain.newKeys & 2) + if (gMain.newKeys & B_BUTTON) { BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); m4aMPlayContinue(&gMPlay_BGM); - gUnknown_0202FFB4->unk64F = 1; + gPokedexView->unk64F = 1; gTasks[taskId].func = sub_808FFBC; - PlaySE(3); + PlaySE(SE_PC_OFF); } - else if ((gMain.newKeys & 0x20) || ((gMain.newKeys & 0x200) && gSaveBlock2.optionsButtonMode == 1)) + else if ((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); m4aMPlayContinue(&gMPlay_BGM); - gUnknown_0202FFB4->unk64F = 2; + gPokedexView->unk64F = 2; gTasks[taskId].func = sub_808FFBC; - PlaySE(0x6D); + PlaySE(SE_Z_PAGE); } - else if ((gMain.newKeys & 0x10) || ((gMain.newKeys & 0x100) && gSaveBlock2.optionsButtonMode == 1)) + else if ((gMain.newKeys & DPAD_RIGHT) + || ((gMain.newKeys & R_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) { if (!gUnknown_0202FFBC->owned) - PlaySE(0x20); + PlaySE(SE_HAZURE); else { BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); m4aMPlayContinue(&gMPlay_BGM); - gUnknown_0202FFB4->unk64F = 3; + gPokedexView->unk64F = 3; gTasks[taskId].func = sub_808FFBC; - PlaySE(0x6D); + PlaySE(SE_Z_PAGE); } } } @@ -2710,17 +2741,17 @@ void sub_808FFBC(u8 taskId) if(!gPaletteFade.active) { DestroyCryMeterNeedleSprite(); - switch(gUnknown_0202FFB4->unk64F) + switch(gPokedexView->unk64F) { default: case 1: - gTasks[taskId].func = sub_808F2B0; + gTasks[taskId].func = Task_InitPageScreenMultistep; break; case 2: - gTasks[taskId].func = sub_808F8D8; + gTasks[taskId].func = Task_InitAreaScreenMultistep; break; case 3: - gTasks[taskId].func = sub_8090070; + gTasks[taskId].func = Task_InitSizeScreenMultistep; } } } @@ -2736,7 +2767,7 @@ void sub_8090040(u8 a) LoadPalette(&unk, 0x5D, 2); } -void sub_8090070(u8 taskId) +void Task_InitSizeScreenMultistep(u8 taskId) { u8 spriteId; @@ -2746,11 +2777,11 @@ void sub_8090070(u8 taskId) case 0: if(!gPaletteFade.active) { - gUnknown_0202FFB4->unk64A = 7; + gPokedexView->unk64A = 7; gUnknown_03005CEC = gMain.vblankCallback; SetVBlankCallback(NULL); sub_8091060(0x200); - gUnknown_0202FFB4->unk64D = 3; + gPokedexView->selectedScreen = SIZE_SCREEN; gMain.state = 1; } break; @@ -2787,18 +2818,18 @@ void sub_8090070(u8 taskId) gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 1; gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->a].trainerOffset; - SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->a].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->a].trainerScale); + gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerOffset; + SetOamMatrix(1, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].trainerScale); LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); gMain.state++; break; case 6: - spriteId = sub_80918EC(gUnknown_0202FFBC->a, 0x58, 0x38, 1); + spriteId = sub_80918EC(gUnknown_0202FFBC->dexNum, 0x58, 0x38, 1); gSprites[spriteId].oam.affineMode = 1; gSprites[spriteId].oam.matrixNum = 2; gSprites[spriteId].oam.priority = 0; - gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->a].pokemonOffset; - SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->a].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->a].pokemonScale); + gSprites[spriteId].pos2.y = gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonOffset; + SetOamMatrix(2, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale, 0, 0, gPokedexEntries[gUnknown_0202FFBC->dexNum].pokemonScale); LoadPalette(gUnknown_083B4EC4, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20); gMain.state++; break; @@ -2818,10 +2849,453 @@ void sub_8090070(u8 taskId) case 9: if(!gPaletteFade.active) { - gUnknown_0202FFB4->unk64F = 0; + gPokedexView->unk64F = 0; gMain.state = 0; - gTasks[taskId].func = sub_80903D0; + gTasks[taskId].func = Task_SizeScreenProcessInput; + } + break; + } +} + +void Task_SizeScreenProcessInput(u8 taskId) +{ + if(gMain.newKeys & B_BUTTON) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gPokedexView->unk64F = 1; + gTasks[taskId].func = sub_8090498; + PlaySE(SE_PC_OFF); + } + //_08090430 + else if((gMain.newKeys & DPAD_LEFT) + || ((gMain.newKeys & L_BUTTON) && gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)) + { + BeginNormalPaletteFade(-0x15, 0, 0, 0x10, 0); + gPokedexView->unk64F = 2; + gTasks[taskId].func = sub_8090498; + PlaySE(SE_Z_PAGE); + } +} + +void sub_8090498(u8 taskId) +{ + if(!gPaletteFade.active) + { + switch(gPokedexView->unk64F) + { + default: + case 1: + gTasks[taskId].func = Task_InitPageScreenMultistep; + break; + case 2: + gTasks[taskId].func = Task_InitCryScreenMultistep; + break; + } + } +} + +void sub_80904FC(u16 a) +{ + LZ77UnCompVram(gUnknown_08E96ACC, (void *)(VRAM + a * 0x800)); + DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); +} + +void sub_8090540(u16 a) +{ + LZ77UnCompVram(gUnknown_08E96B58, (void *)(VRAM + a * 0x800)); + DmaClear16(3, (void *)(VRAM + a * 0x800 + 0xC0), 0x440); +} + +#ifdef NONMATCHING +void sub_8090584(u8 a, u16 b) +{ + u8 i; //r1 + u8 j; //r3 + u32 r6; + register u8 r7; + + for(i = 0; i < 4; i++) + { + r7 = i * 5 + 1; + r6 = 0x4000; + + if(i == a) + r6 = 0x2000; + + for(j = 0; j < 5; j++) + { + u32 r0 = b * 0x800 + (r7 + j) * 2; + u8 *ptr; + + ptr = VRAM; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + ptr = VRAM + 0x40; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + } + } + r6 = 0x4000; + for(j = 0; j < 5; j++) + { + u32 r0 = b * 0x800 + j * 2; + u8 *ptr; + + ptr = VRAM + 0x32; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + ptr = VRAM + 0x72; + *(u16 *)(ptr + r0) = *(u16 *)(ptr + r0) & 0xFFF | r6; + } +} +#else +__attribute__((naked)) +void sub_8090584(u8 a, u16 b) +{ + 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\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r9, r1\n\ + movs r1, 0\n\ +_0809059C:\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + movs r6, 0x80\n\ + lsls r6, 7\n\ + cmp r1, r10\n\ + bne _080905B2\n\ + movs r6, 0x80\n\ + lsls r6, 6\n\ +_080905B2:\n\ + movs r3, 0\n\ + mov r0, r9\n\ + lsls r0, 11\n\ + mov r12, r0\n\ + adds r1, 0x1\n\ + mov r8, r1\n\ + mov r5, r12\n\ + ldr r4, _08090634 @ =0x00000fff\n\ +_080905C2:\n\ + adds r0, r7, r3\n\ + lsls r0, 1\n\ + adds r0, r5, r0\n\ + movs r2, 0xC0\n\ + lsls r2, 19\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r1]\n\ + ldr r1, _08090638 @ =0x06000040\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _080905C2\n\ + mov r2, r8\n\ + lsls r0, r2, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x3\n\ + bls _0809059C\n\ + movs r6, 0x80\n\ + lsls r6, 7\n\ + movs r3, 0\n\ + mov r5, r12\n\ + ldr r4, _08090634 @ =0x00000fff\n\ +_08090600:\n\ + lsls r0, r3, 1\n\ + adds r0, r5, r0\n\ + ldr r2, _0809063C @ =0x06000032\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r1]\n\ + ldr r1, _08090640 @ =0x06000072\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r6\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _08090600\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\ +_08090634: .4byte 0x00000fff\n\ +_08090638: .4byte 0x06000040\n\ +_0809063C: .4byte 0x06000032\n\ +_08090640: .4byte 0x06000072\n\ + .syntax divided\n"); +} +#endif + +//Nope, can't get this one to match, either. +#ifdef NONMATCHING +void sub_8090644(u8 a, u16 b) +{ + u8 i; + u8 j; + + for(i = 0; i < 4; i++) + { + u8 r8 = i * 5 + 1; + u32 r5; + + if(i == a || i == 0) + r5 = 0x2000; + else if(a != 0) + r5 = 0x4000; + + for(j = 0; j < 5; j++) + { + u16 (*vramData)[0x400]; + + vramData = (u16 (*)[])VRAM; + vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5; + vramData = (u16 (*)[])(VRAM + 0x40); + vramData[b][r8 + j] = vramData[b][r8 + j] & 0xFFF | r5; + } + } + + for(j = 0; j < 5; j++) + { + u16 (*vramData)[0x400]; + + vramData = (u16 (*)[])(VRAM + 0x32); + vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000; + vramData = (u16 (*)[])(VRAM + 0x72); + vramData[b][j] = vramData[b][j] & 0xFFF | 0x4000; + } +} +#else +__attribute__((naked)) +void sub_8090644(u8 a, u16 b) +{ + 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\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r9, r1\n\ + movs r1, 0\n\ +_0809065C:\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + cmp r1, r10\n\ + beq _08090670\n\ + cmp r1, 0\n\ + bne _08090676\n\ +_08090670:\n\ + movs r5, 0x80\n\ + lsls r5, 6\n\ + b _0809067A\n\ +_08090676:\n\ + movs r5, 0x80\n\ + lsls r5, 7\n\ +_0809067A:\n\ + movs r3, 0\n\ + mov r0, r9\n\ + lsls r7, r0, 11\n\ + adds r1, 0x1\n\ + mov r12, r1\n\ + adds r6, r7, 0\n\ + ldr r4, _080906FC @ =0x00000fff\n\ +_08090688:\n\ + mov r1, r8\n\ + adds r0, r1, r3\n\ + lsls r0, 1\n\ + adds r0, r6, r0\n\ + movs r2, 0xC0\n\ + lsls r2, 19\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r1]\n\ + ldr r1, _08090700 @ =0x06000040\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _08090688\n\ + mov r2, r12\n\ + lsls r0, r2, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x3\n\ + bls _0809065C\n\ + movs r5, 0x80\n\ + lsls r5, 7\n\ + movs r3, 0\n\ + adds r6, r7, 0\n\ + ldr r4, _080906FC @ =0x00000fff\n\ +_080906C8:\n\ + lsls r0, r3, 1\n\ + adds r0, r6, r0\n\ + ldr r2, _08090704 @ =0x06000032\n\ + adds r1, r0, r2\n\ + ldrh r2, [r1]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r1]\n\ + ldr r1, _08090708 @ =0x06000072\n\ + adds r0, r1\n\ + ldrh r2, [r0]\n\ + ands r2, r4\n\ + orrs r2, r5\n\ + strh r2, [r0]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x4\n\ + bls _080906C8\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\ +_080906FC: .4byte 0x00000fff\n\ +_08090700: .4byte 0x06000040\n\ +_08090704: .4byte 0x06000032\n\ +_08090708: .4byte 0x06000072\n\ + .syntax divided\n"); +} +#endif + +u8 sub_809070C(u16 dexNum, u32 b, u32 c) +{ + u8 taskId = CreateTask(sub_8090750, 0); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = dexNum; + gTasks[taskId].data[12] = b; + gTasks[taskId].data[13] = b >> 16; + gTasks[taskId].data[14] = c; + gTasks[taskId].data[15] = c >> 16; + return taskId; +} + +/* +void sub_8090750(u8 taskId) +{ + u16 dexNum = gTasks[taskId].data[1]; + + switch(gTasks[taskId].data[0]) + { + default: + case 0: + if(!gPaletteFade.active) + { + gUnknown_03005CEC = gMain.vblankCallback; + SetVBlankCallback(NULL); + sub_8091060(0x100); + gTasks[taskId].data[0] = 1; + } + break; + case 1: + { + u16 i; + + LZ77UnCompVram(gPokedexMenu_Gfx, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(gUnknown_08E96BD4, (void *)(VRAM + 0x7800)); + for(i = 0; i < 0x280; i++) + ((u16 *)(VRAM + 0x7800))[i] += 0x2000; + sub_8091738(gTasks[taskId].data[1], 2, 0x3FC); + ResetPaletteFade(); + LoadPalette(gPokedexMenu_Pal + 2, 0x21, 0x9E); + gTasks[taskId].data[0]++; + break; + } + case 2: + SetUpWindowConfig(&gWindowConfig_81E7064); + InitMenuWindow(&gWindowConfig_81E7064); + DmaClear16(3, (void *)(VRAM + 0xC000), 0x200); + gTasks[taskId].data[0]++; + break; + case 3: + sub_8072BD8(gDexText_RegisterComplete, 2, 0, 0xD0); + if(!IsNationalPokedex()) + sub_8091154(NationalToHoennOrder(dexNum), 13, 3); + else + sub_8091154(dexNum, 13, 3); + sub_80911C8(dexNum, 16, 3); + MenuPrint(gDexText_UnknownPoke, 11, 5); + MenuPrint(gDexText_UnknownHeight, 16, 7); + MenuPrint(gDexText_UnknownWeight, 16, 9); + sub_8091304(&gPokedexEntries[dexNum], 11, 5); + sub_8091458(gPokedexEntries[dexNum].height, 16, 7); + sub_8091564(gPokedexEntries[dexNum].weight, 16, 9); + MenuPrint(gPokedexEntries[dexNum].descriptionPage1, 2, 13); + sub_80917CC(14, 0x3FC); + gTasks[taskId].data[0]++; + break; + case 4: + { + u8 spriteId = sub_80918EC(dexNum, 0x30, 0x38, 0); + + gSprites[spriteId].oam.priority = 0; + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + SetVBlankCallback(gUnknown_03005CEC); + gTasks[taskId].data[3] = spriteId; + gTasks[taskId].data[0]++; + break; + } + case 5: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = 0xF07; + REG_DISPCNT = 0x1C40; + gTasks[taskId].data[0]++; + break; + case 6: + if(!gPaletteFade.active) + { + PlayCry1(NationalPokedexNumToSpecies(dexNum), 0); + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].func = sub_8090A3C; } break; } } +*/
\ No newline at end of file diff --git a/sym_ewram.txt b/sym_ewram.txt index e3650a008..924ee969f 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -617,7 +617,7 @@ gUnknown_0202FFA9: @ 202FFA9 gUnknown_0202FFAA: @ 202FFAA .space 0xA -gUnknown_0202FFB4: @ 202FFB4 +gPokedexView: @ 202FFB4 .space 0x4 gUnknown_0202FFB8: @ 202FFB8 |