diff options
-rw-r--r-- | asm/pokenav.s | 374 | ||||
-rw-r--r-- | include/pokenav.h | 2 | ||||
-rw-r--r-- | src/menu_specialized.c | 90 |
3 files changed, 92 insertions, 374 deletions
diff --git a/asm/pokenav.s b/asm/pokenav.s index e2f33ed2c..087e6f4d2 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,380 +5,6 @@ .text - thumb_func_start sub_80F5BF0 -sub_80F5BF0: @ 80F5BF0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - ldr r0, _080F5CB8 @ =gPokenavStructPtr - ldr r5, [r0] - ldr r1, _080F5CBC @ =0x00009344 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080F5CA6 - ldr r0, _080F5CC0 @ =0x0000911c - adds r4, r5, r0 - adds r0, r4, 0 - bl sub_80F58DC - adds r0, r4, 0 - bl sub_80F5A1C - movs r6, 0 - ldr r1, _080F5CC4 @ =gScanlineEffectRegBuffers - mov r12, r1 - movs r0, 0xF0 - lsls r0, 3 - add r0, r12 - mov r9, r0 - adds r7, r5, 0 - ldr r1, _080F5CC8 @ =0x0000ffff - mov r8, r1 - ldr r5, _080F5CCC @ =0x00009130 - adds r5, r7, r5 - str r5, [sp] - ldr r0, _080F5CD0 @ =0x00009132 - adds r0, r7, r0 - str r0, [sp, 0x4] - ldr r1, _080F5CD4 @ =0x00009238 - adds r1, r7 - mov r10, r1 -_080F5C40: - adds r2, r6, 0 - adds r2, 0x37 - lsls r3, r2, 2 - mov r5, r9 - adds r5, r3, r5 - str r5, [sp, 0x8] - add r3, r12 - lsls r4, r6, 2 - ldr r1, [sp] - adds r0, r1, r4 - ldrh r0, [r0] - lsls r0, 8 - ldr r5, [sp, 0x4] - adds r1, r5, r4 - ldrh r1, [r1] - orrs r0, r1 - strh r0, [r3] - mov r1, r8 - ands r0, r1 - ldr r5, [sp, 0x8] - strh r0, [r5] - lsls r2, 1 - adds r2, 0x1 - lsls r2, 1 - mov r0, r9 - adds r3, r2, r0 - add r2, r12 - mov r1, r10 - adds r0, r1, r4 - ldrh r1, [r0] - lsls r1, 8 - ldr r5, _080F5CD8 @ =0x0000923a - adds r0, r7, r5 - adds r0, r4 - ldrh r0, [r0] - orrs r1, r0 - strh r1, [r2] - mov r0, r8 - ands r1, r0 - strh r1, [r3] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, _080F5CB8 @ =gPokenavStructPtr - cmp r6, 0x41 - bls _080F5C40 - ldr r0, [r0] - ldr r1, _080F5CBC @ =0x00009344 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080F5CA6: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F5CB8: .4byte gPokenavStructPtr -_080F5CBC: .4byte 0x00009344 -_080F5CC0: .4byte 0x0000911c -_080F5CC4: .4byte gScanlineEffectRegBuffers -_080F5CC8: .4byte 0x0000ffff -_080F5CCC: .4byte 0x00009130 -_080F5CD0: .4byte 0x00009132 -_080F5CD4: .4byte 0x00009238 -_080F5CD8: .4byte 0x0000923a - thumb_func_end sub_80F5BF0 - - thumb_func_start sub_80F5CDC -sub_80F5CDC: @ 80F5CDC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080F5DB0 @ =gPokenavStructPtr - ldr r6, [r0] - ldr r1, _080F5DB4 @ =0x00009344 - adds r0, r6, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080F5DA0 - ldr r0, _080F5DB8 @ =0x0000911c - adds r4, r6, r0 - adds r0, r4, 0 - bl sub_80F58DC - adds r0, r4, 0 - bl sub_80F5A1C - movs r0, 0x37 - subs r0, r5 - lsls r0, 17 - lsrs r5, r0, 16 - movs r7, 0 - ldr r1, _080F5DBC @ =gScanlineEffectRegBuffers - mov r12, r1 - movs r4, 0xF0 - lsls r4, 3 - add r4, r12 - mov r9, r4 - ldr r0, _080F5DC0 @ =0x0000ffff - mov r8, r0 - ldr r1, _080F5DC4 @ =0x00009130 - adds r1, r6, r1 - str r1, [sp] - ldr r4, _080F5DC8 @ =0x00009132 - adds r4, r6, r4 - str r4, [sp, 0x4] - ldr r0, _080F5DCC @ =0x00009238 - adds r0, r6 - mov r10, r0 -_080F5D36: - lsls r2, r5, 1 - mov r1, r9 - adds r1, r2, r1 - str r1, [sp, 0x8] - add r2, r12 - lsls r3, r7, 2 - ldr r4, [sp] - adds r0, r4, r3 - ldrh r0, [r0] - lsls r0, 8 - ldr r4, [sp, 0x4] - adds r1, r4, r3 - ldrh r1, [r1] - orrs r0, r1 - strh r0, [r2] - mov r1, r8 - ands r0, r1 - ldr r4, [sp, 0x8] - strh r0, [r4] - adds r2, r5, 0x1 - lsls r2, 1 - mov r0, r9 - adds r0, r2, r0 - str r0, [sp, 0x8] - add r2, r12 - mov r1, r10 - adds r0, r1, r3 - ldrh r1, [r0] - lsls r1, 8 - ldr r4, _080F5DD0 @ =0x0000923a - adds r0, r6, r4 - adds r0, r3 - ldrh r0, [r0] - orrs r1, r0 - strh r1, [r2] - mov r0, r8 - ands r1, r0 - ldr r4, [sp, 0x8] - strh r1, [r4] - adds r0, r5, 0x2 - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - ldr r0, _080F5DB0 @ =gPokenavStructPtr - cmp r7, 0x41 - bls _080F5D36 - ldr r0, [r0] - ldr r1, _080F5DB4 @ =0x00009344 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080F5DA0: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F5DB0: .4byte gPokenavStructPtr -_080F5DB4: .4byte 0x00009344 -_080F5DB8: .4byte 0x0000911c -_080F5DBC: .4byte gScanlineEffectRegBuffers -_080F5DC0: .4byte 0x0000ffff -_080F5DC4: .4byte 0x00009130 -_080F5DC8: .4byte 0x00009132 -_080F5DCC: .4byte 0x00009238 -_080F5DD0: .4byte 0x0000923a - thumb_func_end sub_80F5CDC - - thumb_func_start sub_80F5DD4 -sub_80F5DD4: @ 80F5DD4 - push {lr} - ldr r0, _080F5DE8 @ =gMain - ldrh r1, [r0, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080F5DEC - bl sub_80F5E20 - b _080F5E18 - .align 2, 0 -_080F5DE8: .4byte gMain -_080F5DEC: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080F5DFA - bl sub_80F5EE4 - b _080F5E18 -_080F5DFA: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080F5E08 - bl sub_80F5FB4 - b _080F5E18 -_080F5E08: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _080F5E14 - movs r0, 0 - b _080F5E1C -_080F5E14: - bl sub_80F6010 -_080F5E18: - lsls r0, 24 - lsrs r0, 24 -_080F5E1C: - pop {r1} - bx r1 - thumb_func_end sub_80F5DD4 - - thumb_func_start sub_80F5E20 -sub_80F5E20: @ 80F5E20 - push {r4,r5,lr} - ldr r0, _080F5E38 @ =gPokenavStructPtr - ldr r2, [r0] - ldr r3, _080F5E3C @ =0x0000876e - adds r1, r2, r3 - movs r5, 0 - ldrsh r1, [r1, r5] - adds r4, r0, 0 - cmp r1, 0 - bne _080F5E40 - movs r0, 0 - b _080F5EC8 - .align 2, 0 -_080F5E38: .4byte gPokenavStructPtr -_080F5E3C: .4byte 0x0000876e -_080F5E40: - ldr r1, _080F5E6C @ =0x000087c9 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080F5E74 - ldr r3, _080F5E70 @ =0x0000876c - adds r0, r2, r3 - movs r5, 0 - ldrsh r0, [r0, r5] - cmp r0, 0 - bne _080F5E74 - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - bl sub_80F063C - adds r0, r4, 0 - bl sub_80F6074 - movs r0, 0x2 - b _080F5EC8 - .align 2, 0 -_080F5E6C: .4byte 0x000087c9 -_080F5E70: .4byte 0x0000876c -_080F5E74: - ldr r1, [r4] - ldr r0, _080F5ED0 @ =0x0000876c - adds r2, r1, r0 - ldrh r0, [r2] - subs r3, r0, 0x1 - strh r3, [r2] - ldr r5, _080F5ED4 @ =0x000087c9 - adds r0, r1, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _080F5E98 - lsls r0, r3, 16 - cmp r0, 0 - bge _080F5E98 - ldr r3, _080F5ED8 @ =0x00008772 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] -_080F5E98: - ldr r0, [r4] - ldr r5, _080F5EDC @ =0x00008770 - adds r2, r0, r5 - ldr r3, _080F5ED0 @ =0x0000876c - adds r1, r0, r3 - ldrh r1, [r1] - ldrh r2, [r2] - adds r2, r1, r2 - subs r5, 0x2 - adds r4, r0, r5 - strh r2, [r4] - ldr r1, _080F5EE0 @ =0x00008774 - adds r0, r1 - lsls r1, r2, 16 - asrs r1, 16 - ldrh r3, [r0] - movs r5, 0 - ldrsh r0, [r0, r5] - cmp r1, r0 - ble _080F5EC6 - subs r0, r2, 0x1 - subs r0, r3 - strh r0, [r4] -_080F5EC6: - movs r0, 0x1 -_080F5EC8: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080F5ED0: .4byte 0x0000876c -_080F5ED4: .4byte 0x000087c9 -_080F5ED8: .4byte 0x00008772 -_080F5EDC: .4byte 0x00008770 -_080F5EE0: .4byte 0x00008774 - thumb_func_end sub_80F5E20 - thumb_func_start sub_80F5EE4 sub_80F5EE4: @ 80F5EE4 push {r4-r6,lr} diff --git a/include/pokenav.h b/include/pokenav.h index 4004d0438..e63254a90 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -254,5 +254,7 @@ void LoadTrainerEyesDescriptionLines(void); void sub_80F0FFC(u8); void sub_80F105C(void); void sub_80F43D4(u8 *); +void sub_80F063C(s16 arg0); +void sub_80F6074(s16 arg0); #endif // GUARD_POKENAV_H diff --git a/src/menu_specialized.c b/src/menu_specialized.c index a9cb626f8..cd80f1603 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -2,6 +2,11 @@ #include "scanline_effect.h" #include "pokenav.h" +u8 sub_80F5E20(void); +u8 sub_80F5EE4(void); +u8 sub_80F5FB4(void); +u8 sub_80F6010(void); + /* TODO // emerald: sub_81D2278 void sub_80F5688(u16 * r6, u16 * r5, u16 * sp0, u8 r9, u16 * r7) @@ -457,3 +462,88 @@ void sub_80F5BDC(void) ScanlineEffect_InitHBlankDmaTransfer(); } +void sub_80F5BF0(void) +{ + u16 i; + + if (gPokenavStructPtr->unk9344) + { + sub_80F58DC(gPokenavStructPtr->unk911C); + sub_80F5A1C(gPokenavStructPtr->unk911C); + for (i = 0; i < 66; i++) + { + gScanlineEffectRegBuffers[1][(i + 55) * 2 + 0] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 0] = (gPokenavStructPtr->unk9130[i][0] << 8) | (gPokenavStructPtr->unk9130[i][1]); + gScanlineEffectRegBuffers[1][(i + 55) * 2 + 1] = gScanlineEffectRegBuffers[0][(i + 55) * 2 + 1] = (gPokenavStructPtr->unk9238[i][0] << 8) | (gPokenavStructPtr->unk9238[i][1]); + } + gPokenavStructPtr->unk9344 = 0; + } +} + +void sub_80F5CDC(u8 a0) +{ + u16 i, r5; + + if (gPokenavStructPtr->unk9344) + { + sub_80F58DC(gPokenavStructPtr->unk911C); + sub_80F5A1C(gPokenavStructPtr->unk911C); + r5 = 2 * (55 - a0); + for (i = 0; i < 66; i ++) + { + gScanlineEffectRegBuffers[1][r5 + 0] = gScanlineEffectRegBuffers[0][r5 + 0] = (gPokenavStructPtr->unk9130[i][0] << 8) | (gPokenavStructPtr->unk9130[i][1]); + gScanlineEffectRegBuffers[1][r5 + 1] = gScanlineEffectRegBuffers[0][r5 + 1] = (gPokenavStructPtr->unk9238[i][0] << 8) | (gPokenavStructPtr->unk9238[i][1]); + r5 += 2; + } + gPokenavStructPtr->unk9344 = 0; + } +} + +u8 sub_80F5DD4(void) +{ + if (({gMain.newAndRepeatedKeys & DPAD_UP;})) + { + return sub_80F5E20(); + } + else if (({gMain.newAndRepeatedKeys & DPAD_DOWN;})) + { + return sub_80F5EE4(); + } + else if (({gMain.newAndRepeatedKeys & DPAD_LEFT;})) + { + return sub_80F5FB4(); + } + else if (({gMain.newAndRepeatedKeys & DPAD_RIGHT;})) + { + return sub_80F6010(); + } + else + { + return 0; + } +} + +u8 sub_80F5E20(void) +{ + if (gPokenavStructPtr->unk876E == 0) + { + return 0; + } + if (gPokenavStructPtr->unk87C9 != 0 && gPokenavStructPtr->unk876C == 0) + { + sub_80F063C(-1); + sub_80F6074(-1); + return 2; + } + gPokenavStructPtr->unk876C--; + if (gPokenavStructPtr->unk87C9 == 0 && gPokenavStructPtr->unk876C < 0) + { + gPokenavStructPtr->unk876C = gPokenavStructPtr->unk8772; + } + gPokenavStructPtr->unk876E = gPokenavStructPtr->unk8770 + gPokenavStructPtr->unk876C; + if (gPokenavStructPtr->unk876E > gPokenavStructPtr->unk8774) + { + gPokenavStructPtr->unk876E -= gPokenavStructPtr->unk8774 + 1; + } + return 1; +} + |