From 9b40cdaeb98c85baaf2ac34004b1a1ab91a3e061 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 May 2019 14:27:59 -0400 Subject: [PATCH 01/12] through sub_81C99FC --- asm/pokenav_unk_2.s | 161 ----------------------------------------- data/pokenav.s | 43 +---------- include/pokenav.h | 2 +- ld_script.txt | 2 + src/pokenav_unk_2.c | 169 ++++++++++++++++++++++++++++++++++++++++++++ src/pokenav_unk_3.c | 2 +- 6 files changed, 175 insertions(+), 204 deletions(-) create mode 100644 src/pokenav_unk_2.c diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index fd076973c4..1f1d1c2ad3 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,167 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81C98D4 -sub_81C98D4: @ 81C98D4 - push {r4,lr} - movs r4, 0 -_081C98D8: - adds r0, r4, 0 - bl sub_81CB0C8 - ldr r1, =gMapHeader - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1, 0x14] - cmp r0, r1 - bne _081C9914 - adds r0, r4, 0 - bl sub_81CAE08 - cmp r0, 0 - beq _081C9914 - ldr r0, =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, =0x000009ca - adds r0, r1 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _081C9914 - movs r0, 0x1 - b _081C991C - .pool -_081C9914: - adds r4, 0x1 - cmp r4, 0x4D - ble _081C98D8 - movs r0, 0 -_081C991C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81C98D4 - - thumb_func_start sub_81C9924 -sub_81C9924: @ 81C9924 - push {lr} - bl sub_81C9958 - adds r1, r0, 0 - cmp r1, 0 - beq _081C9938 - movs r0, 0 - strb r0, [r1, 0xD] - movs r0, 0x1 - b _081C993A -_081C9938: - movs r0, 0 -_081C993A: - pop {r1} - bx r1 - thumb_func_end sub_81C9924 - - thumb_func_start sub_81C9940 -sub_81C9940: @ 81C9940 - push {lr} - bl sub_81C9958 - adds r1, r0, 0 - cmp r1, 0 - beq _081C9952 - movs r0, 0x1 - strb r0, [r1, 0xD] - b _081C9954 -_081C9952: - movs r0, 0 -_081C9954: - pop {r1} - bx r1 - thumb_func_end sub_81C9940 - - thumb_func_start sub_81C9958 -sub_81C9958: @ 81C9958 - push {r4,lr} - ldr r1, =0x0000088c - movs r0, 0x2 - bl AllocSubstruct - adds r4, r0, 0 - cmp r4, 0 - beq _081C997A - movs r0, 0 - strb r0, [r4, 0xC] - ldr r0, =sub_81C9A10 - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r4, 0x4] - ldr r0, =sub_81C99FC - str r0, [r4] -_081C997A: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C9958 - - thumb_func_start sub_81C9990 -sub_81C9990: @ 81C9990 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r0, =gUnknown_086201A0 - lsls r4, 2 - adds r4, r0 - ldr r0, [r4] - movs r1, 0x1 - bl CreateLoopedTask - str r0, [r5, 0x4] - ldr r0, =sub_81C99FC - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C9990 - - thumb_func_start sub_81C99C0 -sub_81C99C0: @ 81C99C0 - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81C99C0 - - thumb_func_start sub_81C99D4 -sub_81C99D4: @ 81C99D4 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81CA7F4 - ldrb r0, [r4, 0x8] - bl RemoveWindow - bl sub_81C9FEC - bl sub_81CA994 - movs r0, 0x2 - bl FreePokenavSubstruct - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C99D4 - - thumb_func_start sub_81C99FC -sub_81C99FC: @ 81C99FC - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldr r0, [r0, 0x4] - bl IsLoopedTaskActive - pop {r1} - bx r1 - thumb_func_end sub_81C99FC - thumb_func_start sub_81C9A10 sub_81C9A10: @ 81C9A10 push {r4,r5,lr} diff --git a/data/pokenav.s b/data/pokenav.s index 81ee9024d6..e12dd3b12b 100644 --- a/data/pokenav.s +++ b/data/pokenav.s @@ -4,49 +4,10 @@ .section .rodata // pokenav_unk_2.s -gUnknown_0861FC78:: @ 861FC78 - .incbin "graphics/pokenav/bg.gbapal" - -gUnknown_0861FC98:: @ 861FC98 - .incbin "graphics/pokenav/bg.4bpp.lz" - -gUnknown_0861FCAC:: @ 861FCAC - .incbin "graphics/pokenav/bg.bin.lz" - -gUnknown_0861FD4C:: @ 861FD4C - .incbin "graphics/pokenav/outline.gbapal" - -gUnknown_0861FD6C:: @ 861FD6C - .incbin "graphics/pokenav/outline.4bpp.lz" - -gUnknown_0861FFF4:: @ 861FFF4 - .incbin "graphics/pokenav/outline_map.bin.lz" - -gUnknown_08620104:: @ 8620104 - .incbin "graphics/pokenav/blue_light.gbapal" - -gUnknown_08620124:: @ 8620124 - .incbin "graphics/pokenav/blue_light.4bpp.lz" - -gUnknown_08620194:: @ 8620194 - .byte 0xF5, 0x10, 0, 0, 0x7A, 0x21, 0, 0, 0xFF, 0x31, 0, 0 - -gUnknown_086201A0:: @ 86201A0 - .4byte NULL - .4byte sub_81C9C6C - .4byte sub_81C9CA8 - .4byte sub_81C9D44 - .4byte sub_81C9DD8 - .4byte sub_81C9E58 - .4byte sub_81C9EC8 - .4byte sub_81C9EF8 - .4byte sub_81C9F28 gUnknown_086201C4:: @ 86201C4 - .4byte gPokenavOptions_Gfx - .byte 0, 0x34, 3, 0 - .4byte gUnknown_08620124 - .byte 0, 1, 1, 0 + obj_tiles gPokenavOptions_Gfx, 0x3400, 0x0003 + obj_tiles gUnknown_08620124, 0x0100, 0x0001 gUnknown_086201D4:: @ 86201D4 .4byte gPokenavOptions_Pal + 0x0, 4 diff --git a/include/pokenav.h b/include/pokenav.h index 0d46f04f39..da17d1e699 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -162,7 +162,7 @@ const u8 *sub_81CAFD8(int index, int textType); u16 sub_81CB01C(void); u16 sub_81CB02C(int arg0); void sub_81CB050(u32 arg0, u8 *str); -int sub_81CB0C8(int rematchIndex); +u8 sub_81CB0C8(int rematchIndex); int sub_81CB0E4(int index); bool32 sub_81CAE08(int); int sub_81CB128(int index); diff --git a/ld_script.txt b/ld_script.txt index f210e83cad..1782adbacf 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -304,6 +304,7 @@ SECTIONS { src/pokenav_main_menu.o(.text); src/pokenav_match_call_ui.o(.text); src/pokenav_unk_1.o(.text); + src/pokenav_unk_2.o(.text); asm/pokenav_unk_2.o(.text); src/pokenav_unk_3.o(.text); src/pokenav_unk_4.o(.text); @@ -633,6 +634,7 @@ SECTIONS { src/pokenav_main_menu.o(.rodata); src/pokenav_match_call_ui.o(.rodata); src/pokenav_unk_1.o(.rodata); + src/pokenav_unk_2.o(.rodata); data/pokenav.o(.rodata); src/pokenav_match_call_data.o(.rodata); src/menu_specialized.o(.rodata); diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c new file mode 100644 index 0000000000..f58d5977bd --- /dev/null +++ b/src/pokenav_unk_2.c @@ -0,0 +1,169 @@ +#include "global.h" +#include "alloc.h" +#include "bg.h" +#include "window.h" +#include "pokenav.h" + +// Match Call + +struct Pokenav2Struct +{ + bool32 (*callback)(void); + u32 loopedTaskId; + u8 field_008; + u8 field_009; + u8 field_00a; + u8 field_00b; + u8 field_00c; + u8 field_00d; + u8 filler_00e[0x87E]; +}; + +struct Pokenav2Struct * sub_81C9958(void); +bool32 sub_81C99FC(void); +u32 sub_81C9A10(int state); +u32 sub_81C9C6C(int state); +u32 sub_81C9CA8(int state); +u32 sub_81C9D44(int state); +u32 sub_81C9DD8(int state); +u32 sub_81C9E58(int state); +u32 sub_81C9EC8(int state); +u32 sub_81C9EF8(int state); +u32 sub_81C9F28(int state); +void sub_81CA7F4(void); +void sub_81C9FEC(void); +void sub_81CA994(void); + +const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); +const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); +const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); +const u16 gUnknown_0861FD4C[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); +const u32 gUnknown_0861FD6C[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); +const u32 gUnknown_0861FFF4[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); +const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); +const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); + +const struct BgTemplate gUnknown_08620194[] = { + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 23, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +const LoopedTask gUnknown_086201A0[] = { + NULL, + sub_81C9C6C, + sub_81C9CA8, + sub_81C9D44, + sub_81C9DD8, + sub_81C9E58, + sub_81C9EC8, + sub_81C9EF8, + sub_81C9F28 +}; + +bool32 sub_81C98D4(void) +{ + s32 i; + + for (i = 0; i < 78; i++) + { + if (sub_81CB0C8(i) == gMapHeader.regionMapSectionId + && sub_81CAE08(i) + && gSaveBlock1Ptr->trainerRematches[i]) + return TRUE; + } + + return FALSE; +} + +bool32 sub_81C9924(void) +{ + struct Pokenav2Struct * unk = sub_81C9958(); + + if (unk == NULL) + return FALSE; + + unk->field_00d = 0; + return TRUE; +} + +bool32 sub_81C9940(void) +{ + struct Pokenav2Struct * unk = sub_81C9958(); + + if (unk == NULL) + return FALSE; + + unk->field_00d = 1; + return TRUE; +} + +struct Pokenav2Struct * sub_81C9958(void) +{ + struct Pokenav2Struct * unk = AllocSubstruct(2, sizeof(struct Pokenav2Struct)); + + if (unk != NULL) + { + unk->field_00c = 0; + unk->loopedTaskId = CreateLoopedTask(sub_81C9A10, 1); + unk->callback = sub_81C99FC; + } + + return unk; +} + + +void sub_81C9990(s32 ltIdx) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + unk->loopedTaskId = CreateLoopedTask(gUnknown_086201A0[ltIdx], 1); + unk->callback = sub_81C99FC; +} + +bool32 sub_81C99C0(void) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + return unk->callback(); +} + +void sub_81C99D4(void) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + sub_81CA7F4(); + RemoveWindow(unk->field_008); + sub_81C9FEC(); + sub_81CA994(); + FreePokenavSubstruct(2); +} + +bool32 sub_81C99FC(void) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + return IsLoopedTaskActive(unk->loopedTaskId); +} diff --git a/src/pokenav_unk_3.c b/src/pokenav_unk_3.c index c6705a352f..dfef062df6 100755 --- a/src/pokenav_unk_3.c +++ b/src/pokenav_unk_3.c @@ -411,7 +411,7 @@ void sub_81CB050(u32 arg0, u8 *str) } } -int sub_81CB0C8(int rematchIndex) +u8 sub_81CB0C8(int rematchIndex) { int mapGroup = gRematchTable[rematchIndex].mapGroup; int mapNum = gRematchTable[rematchIndex].mapNum; From 518865d8d9d6d35ca40478570c51c33ca1477d6d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 May 2019 16:19:25 -0400 Subject: [PATCH 02/12] sub_81C9A10 --- asm/pokenav_unk_2.s | 251 -------------------------------------------- include/graphics.h | 5 + src/pokenav_unk_2.c | 128 +++++++++++++++++++++- 3 files changed, 131 insertions(+), 253 deletions(-) diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index 1f1d1c2ad3..109cdfe8f7 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,257 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81C9A10 -sub_81C9A10: @ 81C9A10 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - cmp r4, 0x9 - bls _081C9A24 - b _081C9C60 -_081C9A24: - lsls r0, r4, 2 - ldr r1, =_081C9A34 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C9A34: - .4byte _081C9A5C - .4byte _081C9AEC - .4byte _081C9B30 - .4byte _081C9B88 - .4byte _081C9B9E - .4byte _081C9BA4 - .4byte _081C9BB6 - .4byte _081C9BC0 - .4byte _081C9C0E - .4byte _081C9C4C -_081C9A5C: - ldr r0, =gUnknown_08620194 - movs r1, 0x3 - bl InitBgTemplates - ldr r1, =gPokenavMessageBox_Gfx - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r1, r5, 0 - adds r1, 0x8C - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, =gPokenavMessageBox_Tilemap - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - ldr r0, =gPokenavMessageBox_Pal - movs r1, 0x10 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY -_081C9AD6: - movs r0, 0 - b _081C9C62 - .pool -_081C9AEC: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081C9AFA - b _081C9C5C -_081C9AFA: - ldr r1, =gUnknown_0861FD6C - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gUnknown_0861FFF4 - movs r0, 0x1 - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gUnknown_0861FD4C - movs r1, 0x20 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - b _081C9AD6 - .pool -_081C9B30: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _081C9B3E - b _081C9C5C -_081C9B3E: - ldr r1, =gUnknown_0861FC98 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r1, =gUnknown_0861FCAC - movs r0, 0x1 - str r0, [sp] - movs r0, 0x3 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - ldr r0, =gUnknown_0861FC78 - movs r1, 0x30 - movs r2, 0x20 - bl CopyPaletteIntoBufferUnfaded - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9B76 - bl sub_81C9894 - cmp r0, 0x4 - bne _081C9AD6 -_081C9B76: - bl sub_81CA850 - b _081C9AD6 - .pool -_081C9B88: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081C9C5C - bl sub_81CA6E0 - bl sub_81CA7D4 -_081C9B9A: - movs r0, 0x1 - b _081C9C62 -_081C9B9E: - bl sub_81C9FC4 - b _081C9B9A -_081C9BA4: - bl sub_81CA714 - bl sub_81CA02C - bl sub_81CA640 - bl sub_81CA0C8 - b _081C9AD6 -_081C9BB6: - bl sub_81CA7C4 - cmp r0, 0 - bne _081C9C5C - b _081C9B9A -_081C9BC0: - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldrb r0, [r5, 0xD] - cmp r0, 0 - beq _081C9BE0 - movs r0, 0x1 - bl sub_81C7AC0 - b _081C9BEC -_081C9BE0: - movs r0, 0x6E - bl PlaySE - movs r0, 0x3 - bl sub_81C7AC0 -_081C9BEC: - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9BFE - cmp r0, 0x4 - bne _081C9C06 - movs r0, 0x7 - bl LoadLeftHeaderGfxForIndex -_081C9BFE: - movs r0, 0x1 - bl LoadLeftHeaderGfxForIndex - b _081C9AD6 -_081C9C06: - movs r0, 0 - bl LoadLeftHeaderGfxForIndex - b _081C9AD6 -_081C9C0E: - bl IsPaletteFadeActive - cmp r0, 0 - bne _081C9C5C - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9C2C - cmp r0, 0x4 - bne _081C9C38 - movs r0, 0x7 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 -_081C9C2C: - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - b _081C9C42 -_081C9C38: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 -_081C9C42: - bl sub_81CA20C - bl titlescreen_0 - b _081C9B9A -_081C9C4C: - bl sub_81CA324 - cmp r0, 0 - bne _081C9C5C - bl sub_81C8010 - cmp r0, 0 - beq _081C9C60 -_081C9C5C: - movs r0, 0x2 - b _081C9C62 -_081C9C60: - movs r0, 0x4 -_081C9C62: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_81C9A10 - thumb_func_start sub_81C9C6C sub_81C9C6C: @ 81C9C6C push {lr} diff --git a/include/graphics.h b/include/graphics.h index 4e558b5088..9b7bc1e0e8 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4941,4 +4941,9 @@ extern const u16 gPokenavConditionCancel_Pal[]; extern const u32 gUnknown_08DE34B8[]; extern const u16 gUnknown_08DE3398[]; +// Pokenav +extern const u32 gPokenavMessageBox_Gfx[]; +extern const u32 gPokenavMessageBox_Tilemap[]; +extern const u16 gPokenavMessageBox_Pal[]; + #endif //GUARD_GRAPHICS_H diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index f58d5977bd..a799631c70 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -1,8 +1,12 @@ #include "global.h" #include "alloc.h" #include "bg.h" +#include "menu.h" #include "window.h" #include "pokenav.h" +#include "graphics.h" +#include "sound.h" +#include "constants/songs.h" // Match Call @@ -16,7 +20,8 @@ struct Pokenav2Struct u8 field_00b; u8 field_00c; u8 field_00d; - u8 filler_00e[0x87E]; + u8 filler_00e[0x7E]; + u8 field_08c[0x800]; }; struct Pokenav2Struct * sub_81C9958(void); @@ -30,8 +35,20 @@ u32 sub_81C9E58(int state); u32 sub_81C9EC8(int state); u32 sub_81C9EF8(int state); u32 sub_81C9F28(int state); -void sub_81CA7F4(void); +void sub_81C9FC4(void); void sub_81C9FEC(void); +void sub_81CA02C(void); +void sub_81CA0C8(void); +void sub_81CA20C(void); +bool32 sub_81CA324(void); +void sub_81CA640(void); +void sub_81CA6E0(void); +void sub_81CA714(void); +bool32 sub_81CA7C4(void); +void sub_81CA7D4(void); +void sub_81CA7F4(void); +void sub_81CA850(void); +void titlescreen_0(void); void sub_81CA994(void); const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); @@ -167,3 +184,110 @@ bool32 sub_81C99FC(void) return IsLoopedTaskActive(unk->loopedTaskId); } + +u32 sub_81C9A10(int state) +{ + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + switch (state) + { + case 0: + InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194)); + decompress_and_copy_tile_data_to_vram(1, gPokenavMessageBox_Gfx, 0, 0, 0); + SetBgTilemapBuffer(1, unk->field_08c); + CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(1); + CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + return 0; + case 1: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FD6C, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FFF4, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FC98, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FCAC, 0, 0, 1); + CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20); + if (sub_81C9894() == 3 || sub_81C9894() == 4) + sub_81CA850(); + return 0; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + sub_81CA6E0(); + sub_81CA7D4(); + return 1; + case 4: + sub_81C9FC4(); + return 1; + case 5: + sub_81CA714(); + sub_81CA02C(); + sub_81CA640(); + sub_81CA0C8(); + return 0; + case 6: + if (sub_81CA7C4()) + return 2; + return 1; + case 7: + ShowBg(1); + ShowBg(2); + ShowBg(3); + if (unk->field_00d) + sub_81C7AC0(1); + else + { + PlaySE(SE_PN_ON); + sub_81C7AC0(3); + } + switch (sub_81C9894()) + { + case 4: + LoadLeftHeaderGfxForIndex(7); + // fallthrough + case 3: + LoadLeftHeaderGfxForIndex(1); + break; + default: + LoadLeftHeaderGfxForIndex(0); + break; + } + return 0; + case 8: + if (IsPaletteFadeActive()) + return 2; + switch (sub_81C9894()) + { + case 4: + sub_81C7FA0(7, FALSE, FALSE); + // fallthrough + case 3: + sub_81C7FA0(1, FALSE, FALSE); + break; + default: + sub_81C7FA0(0, FALSE, FALSE); + break; + } + sub_81CA20C(); + titlescreen_0(); + return 1; + case 9: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + break; + } + return 4; +} From a14162eb9fdc0ac4f196b078b05be7ca6b7c73f9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 May 2019 16:43:32 -0400 Subject: [PATCH 03/12] through sub_81C9F28 --- asm/pokenav_unk_2.s | 431 -------------------------------------------- include/pokenav.h | 3 + src/pokenav_unk_1.c | 2 +- src/pokenav_unk_2.c | 244 +++++++++++++++++++++++++ 4 files changed, 248 insertions(+), 432 deletions(-) diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index 109cdfe8f7..51f81fb945 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,437 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81C9C6C -sub_81C9C6C: @ 81C9C6C - push {lr} - cmp r0, 0 - beq _081C9C78 - cmp r0, 0x1 - beq _081C9C8E - b _081C9CA2 -_081C9C78: - bl sub_81CAA3C - bl sub_81CA278 - bl sub_81CA714 - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9CA4 -_081C9C8E: - bl sub_81CA324 - cmp r0, 0 - bne _081C9C9E - bl sub_81CA7C4 - cmp r0, 0 - beq _081C9CA2 -_081C9C9E: - movs r0, 0x2 - b _081C9CA4 -_081C9CA2: - movs r0, 0x4 -_081C9CA4: - pop {r1} - bx r1 - thumb_func_end sub_81C9C6C - - thumb_func_start sub_81C9CA8 -sub_81C9CA8: @ 81C9CA8 - push {lr} - cmp r0, 0x1 - beq _081C9CDC - cmp r0, 0x1 - bgt _081C9CB8 - cmp r0, 0 - beq _081C9CC2 - b _081C9D3C -_081C9CB8: - cmp r0, 0x2 - beq _081C9CFA - cmp r0, 0x3 - beq _081C9D14 - b _081C9D3C -_081C9CC2: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0 - movs r1, 0 - bl sub_81C7FC4 - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9D3E -_081C9CDC: - bl sub_81CA324 - cmp r0, 0 - bne _081C9D34 - bl sub_81C8010 - cmp r0, 0 - bne _081C9D34 - bl sub_81CA0C8 - movs r0, 0x1 - bl LoadLeftHeaderGfxForIndex - movs r0, 0 - b _081C9D3E -_081C9CFA: - bl sub_81CA20C - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - bl sub_81CA818 - bl sub_81CA714 - movs r0, 0 - b _081C9D3E -_081C9D14: - bl sub_81CA324 - cmp r0, 0 - bne _081C9D34 - bl sub_81C8010 - cmp r0, 0 - bne _081C9D34 - bl sub_81CA89C - cmp r0, 0 - bne _081C9D34 - bl sub_81CA7C4 - cmp r0, 0 - beq _081C9D38 -_081C9D34: - movs r0, 0x2 - b _081C9D3E -_081C9D38: - bl sub_81CA9D8 -_081C9D3C: - movs r0, 0x4 -_081C9D3E: - pop {r1} - bx r1 - thumb_func_end sub_81C9CA8 - - thumb_func_start sub_81C9D44 -sub_81C9D44: @ 81C9D44 - push {lr} - cmp r0, 0x1 - beq _081C9D72 - cmp r0, 0x1 - bgt _081C9D54 - cmp r0, 0 - beq _081C9D5E - b _081C9DD2 -_081C9D54: - cmp r0, 0x2 - beq _081C9D90 - cmp r0, 0x3 - beq _081C9DAA - b _081C9DD2 -_081C9D5E: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0x1 - movs r1, 0 - bl sub_81C7FC4 - movs r0, 0 - b _081C9DD4 -_081C9D72: - bl sub_81CA324 - cmp r0, 0 - bne _081C9DCA - bl sub_81C8010 - cmp r0, 0 - bne _081C9DCA - bl sub_81CA0C8 - movs r0, 0 - bl LoadLeftHeaderGfxForIndex - movs r0, 0 - b _081C9DD4 -_081C9D90: - bl sub_81CA20C - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - bl sub_81CA864 - bl sub_81CA714 - movs r0, 0 - b _081C9DD4 -_081C9DAA: - bl sub_81CA324 - cmp r0, 0 - bne _081C9DCA - bl sub_81C8010 - cmp r0, 0 - bne _081C9DCA - bl sub_81CA89C - cmp r0, 0 - bne _081C9DCA - bl sub_81CA7C4 - cmp r0, 0 - beq _081C9DCE -_081C9DCA: - movs r0, 0x2 - b _081C9DD4 -_081C9DCE: - bl sub_81CA9D8 -_081C9DD2: - movs r0, 0x4 -_081C9DD4: - pop {r1} - bx r1 - thumb_func_end sub_81C9D44 - - thumb_func_start sub_81C9DD8 -sub_81C9DD8: @ 81C9DD8 - push {lr} - cmp r0, 0x1 - beq _081C9E04 - cmp r0, 0x1 - bgt _081C9DE8 - cmp r0, 0 - beq _081C9DF2 - b _081C9E50 -_081C9DE8: - cmp r0, 0x2 - beq _081C9E1A - cmp r0, 0x3 - beq _081C9E30 - b _081C9E50 -_081C9DF2: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9E52 -_081C9E04: - bl sub_81CA324 - cmp r0, 0 - bne _081C9E48 - movs r0, 0x7 - bl LoadLeftHeaderGfxForIndex - bl sub_81CA0C8 - movs r0, 0 - b _081C9E52 -_081C9E1A: - bl sub_81CA20C - movs r0, 0x7 - movs r1, 0 - movs r2, 0 - bl sub_81C7FA0 - bl sub_81CA714 - movs r0, 0 - b _081C9E52 -_081C9E30: - bl sub_81CA324 - cmp r0, 0 - bne _081C9E48 - bl sub_81C8010 - cmp r0, 0 - bne _081C9E48 - bl sub_81CA89C - cmp r0, 0 - beq _081C9E4C -_081C9E48: - movs r0, 0x2 - b _081C9E52 -_081C9E4C: - bl sub_81CA9D8 -_081C9E50: - movs r0, 0x4 -_081C9E52: - pop {r1} - bx r1 - thumb_func_end sub_81C9DD8 - - thumb_func_start sub_81C9E58 -sub_81C9E58: @ 81C9E58 - push {lr} - cmp r0, 0x1 - beq _081C9E86 - cmp r0, 0x1 - bgt _081C9E68 - cmp r0, 0 - beq _081C9E72 - b _081C9EC2 -_081C9E68: - cmp r0, 0x2 - beq _081C9E9E - cmp r0, 0x3 - beq _081C9EAA - b _081C9EC2 -_081C9E72: - bl sub_81CA9C8 - bl sub_81CA2DC - movs r0, 0x7 - movs r1, 0 - bl sub_81C7FC4 - movs r0, 0 - b _081C9EC4 -_081C9E86: - bl sub_81CA324 - cmp r0, 0 - bne _081C9EBA - bl sub_81C8010 - cmp r0, 0 - bne _081C9EBA - bl sub_81CA0C8 - movs r0, 0 - b _081C9EC4 -_081C9E9E: - bl sub_81CA20C - bl sub_81CA714 - movs r0, 0 - b _081C9EC4 -_081C9EAA: - bl sub_81CA324 - cmp r0, 0 - bne _081C9EBA - bl sub_81CA89C - cmp r0, 0 - beq _081C9EBE -_081C9EBA: - movs r0, 0x2 - b _081C9EC4 -_081C9EBE: - bl sub_81CA9D8 -_081C9EC2: - movs r0, 0x4 -_081C9EC4: - pop {r1} - bx r1 - thumb_func_end sub_81C9E58 - - thumb_func_start sub_81C9EC8 -sub_81C9EC8: @ 81C9EC8 - push {lr} - cmp r0, 0 - beq _081C9ED4 - cmp r0, 0x1 - beq _081C9EE2 - b _081C9EF0 -_081C9ED4: - movs r0, 0x20 - bl PlaySE - bl sub_81CA770 - movs r0, 0 - b _081C9EF2 -_081C9EE2: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081C9EF0 - movs r0, 0x2 - b _081C9EF2 -_081C9EF0: - movs r0, 0x4 -_081C9EF2: - pop {r1} - bx r1 - thumb_func_end sub_81C9EC8 - - thumb_func_start sub_81C9EF8 -sub_81C9EF8: @ 81C9EF8 - push {lr} - cmp r0, 0 - beq _081C9F04 - cmp r0, 0x1 - beq _081C9F12 - b _081C9F20 -_081C9F04: - movs r0, 0x5 - bl PlaySE - bl sub_81CA714 - movs r0, 0 - b _081C9F22 -_081C9F12: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081C9F20 - movs r0, 0x2 - b _081C9F22 -_081C9F20: - movs r0, 0x4 -_081C9F22: - pop {r1} - bx r1 - thumb_func_end sub_81C9EF8 - - thumb_func_start sub_81C9F28 -sub_81C9F28: @ 81C9F28 - push {lr} - cmp r0, 0x1 - beq _081C9F52 - cmp r0, 0x1 - bgt _081C9F38 - cmp r0, 0 - beq _081C9F42 - b _081C9FBC -_081C9F38: - cmp r0, 0x2 - beq _081C9F96 - cmp r0, 0x3 - beq _081C9FB0 - b _081C9FBC -_081C9F42: - bl sub_81C98C4 - lsls r0, 16 - lsrs r0, 16 - bl sub_81C7BA4 - movs r0, 0 - b _081C9FBE -_081C9F52: - bl IsDma3ManagerBusyWithBgCopy_ - cmp r0, 0 - bne _081C9FB8 - bl sub_81C7880 - bl sub_81CA9C8 - bl sub_81CA2DC - bl sub_81C9894 - cmp r0, 0x3 - beq _081C9F7A - cmp r0, 0x4 - bne _081C9F84 - movs r0, 0x7 - movs r1, 0 - bl sub_81C7FC4 -_081C9F7A: - movs r0, 0x1 - movs r1, 0 - bl sub_81C7FC4 - b _081C9F8C -_081C9F84: - movs r0, 0 - movs r1, 0 - bl sub_81C7FC4 -_081C9F8C: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - b _081C9FBE -_081C9F96: - bl sub_81CA324 - cmp r0, 0 - bne _081C9FB8 - bl sub_81C8010 - cmp r0, 0 - bne _081C9FB8 - movs r0, 0 - bl sub_81C7AC0 - movs r0, 0 - b _081C9FBE -_081C9FB0: - bl IsPaletteFadeActive - cmp r0, 0 - beq _081C9FBC -_081C9FB8: - movs r0, 0x2 - b _081C9FBE -_081C9FBC: - movs r0, 0x4 -_081C9FBE: - pop {r1} - bx r1 - thumb_func_end sub_81C9F28 - thumb_func_start sub_81C9FC4 sub_81C9FC4: @ 81C9FC4 push {r4,r5,lr} diff --git a/include/pokenav.h b/include/pokenav.h index da17d1e699..470f00db72 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -125,6 +125,8 @@ void sub_81C7B40(void); struct Sprite *PauseSpinningPokenavSprite(void); void ResumeSpinningPokenavSprite(void); void sub_81C7E14(u32 arg0); +void sub_81C7FC4(u32 arg0, bool32 arg1); +void sub_81C7880(void); // pokenav_unk_1.c bool32 sub_81C9298(void); @@ -136,6 +138,7 @@ u32 sub_81C941C(void); void sub_81C9430(void); int sub_81C9894(void); const u8 *sub_81CAF78(int index, u8 *arg1); +u16 sub_81C98C4(void); // pokenav_unk_2.c void sub_81C99D4(void); diff --git a/src/pokenav_unk_1.c b/src/pokenav_unk_1.c index 96ecf9c8b7..336cf49f2a 100644 --- a/src/pokenav_unk_1.c +++ b/src/pokenav_unk_1.c @@ -459,7 +459,7 @@ int sub_81C98B4(void) return state->descriptionId; } -int sub_81C98C4(void) +u16 sub_81C98C4(void) { struct Pokenav1Struct *state = GetSubstructPtr(1); return state->helpBarIndex; diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index a799631c70..71870e5d63 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -40,16 +40,25 @@ void sub_81C9FEC(void); void sub_81CA02C(void); void sub_81CA0C8(void); void sub_81CA20C(void); +void sub_81CA278(void); +void sub_81CA2DC(void); bool32 sub_81CA324(void); void sub_81CA640(void); void sub_81CA6E0(void); void sub_81CA714(void); +void sub_81CA770(void); bool32 sub_81CA7C4(void); void sub_81CA7D4(void); void sub_81CA7F4(void); +void sub_81CA818(void); void sub_81CA850(void); +void sub_81CA864(void); +bool32 sub_81CA89C(void); void titlescreen_0(void); void sub_81CA994(void); +void sub_81CA9C8(void); +void sub_81CA9D8(void); +void sub_81CAA3C(void); const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); @@ -291,3 +300,238 @@ u32 sub_81C9A10(int state) } return 4; } + +u32 sub_81C9C6C(int state) +{ + switch (state) + { + case 0: + sub_81CAA3C(); + sub_81CA278(); + sub_81CA714(); + PlaySE(SE_SELECT); + return 0; + case 1: + if (sub_81CA324()) + return 2; + if (sub_81CA7C4()) + return 2; + break; + } + return 4; +} + +u32 sub_81C9CA8(int state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + sub_81C7FC4(0, 0); + PlaySE(SE_SELECT); + return 0; + case 1: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + sub_81CA0C8(); + LoadLeftHeaderGfxForIndex(1); + return 0; + case 2: + sub_81CA20C(); + sub_81C7FA0(1, FALSE, FALSE); + sub_81CA818(); + sub_81CA714(); + return 0; + case 3: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + if (sub_81CA89C()) + return 2; + if (sub_81CA7C4()) + return 2; + sub_81CA9D8(); + break; + } + return 4; +} + +u32 sub_81C9D44(int state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + sub_81C7FC4(1, 0); + return 0; + case 1: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + sub_81CA0C8(); + LoadLeftHeaderGfxForIndex(0); + return 0; + case 2: + sub_81CA20C(); + sub_81C7FA0(0, FALSE, FALSE); + sub_81CA864(); + sub_81CA714(); + return 0; + case 3: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + if (sub_81CA89C()) + return 2; + if (sub_81CA7C4()) + return 2; + sub_81CA9D8(); + break; + } + return 4; +} + +u32 sub_81C9DD8(int state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + PlaySE(SE_SELECT); + return 0; + case 1: + if (sub_81CA324()) + return 2; + LoadLeftHeaderGfxForIndex(7); + sub_81CA0C8(); + return 0; + case 2: + sub_81CA20C(); + sub_81C7FA0(7, FALSE, FALSE); + sub_81CA714(); + return 0; + case 3: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + if (sub_81CA89C()) + return 2; + sub_81CA9D8(); + break; + } + return 4; +} + +u32 sub_81C9E58(int state) +{ + switch (state) + { + case 0: + sub_81CA9C8(); + sub_81CA2DC(); + sub_81C7FC4(7, 0); + return 0; + case 1: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + sub_81CA0C8(); + return 0; + case 2: + sub_81CA20C(); + sub_81CA714(); + return 0; + case 3: + if (sub_81CA324()) + return 2; + if (sub_81CA89C()) + return 2; + sub_81CA9D8(); + break; + } + return 4; +} + +u32 sub_81C9EC8(int state) +{ + switch (state) + { + case 0: + PlaySE(SE_HAZURE); + sub_81CA770(); + return 0; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return 2; + break; + } + return 4; +} + +u32 sub_81C9EF8(int state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81CA714(); + return 0; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return 2; + break; + } + return 4; +} + +u32 sub_81C9F28(int state) +{ + switch (state) + { + case 0: + sub_81C7BA4(sub_81C98C4()); + return 0; + case 1: + if (IsDma3ManagerBusyWithBgCopy_()) + return 2; + sub_81C7880(); + sub_81CA9C8(); + sub_81CA2DC(); + switch (sub_81C9894()) + { + case 4: + sub_81C7FC4(7, FALSE); + // fallthrough + case 3: + sub_81C7FC4(1, FALSE); + break; + default: + sub_81C7FC4(0, FALSE); + break; + } + PlaySE(SE_SELECT); + return 0; + case 2: + if (sub_81CA324()) + return 2; + if (sub_81C8010()) + return 2; + sub_81C7AC0(0); + return 0; + case 3: + if (IsPaletteFadeActive()) + return 2; + break; + } + return 4; +} From f13e1c78b23c5b9bccb8288ff1ba575f66e53afc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 2 May 2019 17:50:42 -0400 Subject: [PATCH 04/12] through sub_81CA0EC --- asm/pokenav_unk_2.s | 291 -------------------------------------------- data/pokenav.s | 15 --- include/graphics.h | 2 + src/pokenav_unk_2.c | 128 ++++++++++++++++++- 4 files changed, 129 insertions(+), 307 deletions(-) diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index 51f81fb945..1d8d45baad 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,297 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81C9FC4 -sub_81C9FC4: @ 81C9FC4 - push {r4,r5,lr} - movs r5, 0 - ldr r4, =gUnknown_086201C4 -_081C9FCA: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x1 - bls _081C9FCA - ldr r0, =gUnknown_086201D4 - bl Pokenav_AllocAndLoadPalettes - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C9FC4 - - thumb_func_start sub_81C9FEC -sub_81C9FEC: @ 81C9FEC - push {lr} - movs r0, 0x3 - bl FreeSpriteTilesByTag - movs r0, 0x1 - bl FreeSpriteTilesByTag - movs r0, 0x4 - bl FreeSpritePaletteByTag - movs r0, 0x5 - bl FreeSpritePaletteByTag - movs r0, 0x6 - bl FreeSpritePaletteByTag - movs r0, 0x7 - bl FreeSpritePaletteByTag - movs r0, 0x8 - bl FreeSpritePaletteByTag - movs r0, 0x3 - bl FreeSpritePaletteByTag - bl sub_81CA094 - bl sub_81CA698 - pop {r0} - bx r0 - thumb_func_end sub_81C9FEC - - thumb_func_start sub_81CA02C -sub_81CA02C: @ 81CA02C - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r0, 0x2 - bl GetSubstructPtr - movs r2, 0 - adds r0, 0x2C - mov r8, r0 -_081CA03E: - movs r4, 0 - lsls r0, r2, 2 - lsls r1, r2, 4 - adds r7, r2, 0x1 - adds r0, r2 - lsls r0, 18 - movs r2, 0xA0 - lsls r2, 14 - adds r5, r0, r2 - mov r0, r8 - adds r6, r1, r0 -_081CA054: - ldr r0, =gUnknown_0862034C - movs r1, 0x8C - asrs r2, r5, 16 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, =gSprites - adds r1, r0 - stm r6!, {r1} - lsls r0, r4, 5 - strh r0, [r1, 0x24] - adds r4, 0x1 - cmp r4, 0x3 - ble _081CA054 - adds r2, r7, 0 - cmp r2, 0x5 - ble _081CA03E - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA02C - - thumb_func_start sub_81CA094 -sub_81CA094: @ 81CA094 - push {r4-r7,lr} - movs r0, 0x2 - bl GetSubstructPtr - movs r1, 0 - adds r7, r0, 0 - adds r7, 0x2C -_081CA0A2: - lsls r0, r1, 4 - adds r6, r1, 0x1 - adds r4, r0, r7 - movs r5, 0x3 -_081CA0AA: - ldr r0, [r4] - bl FreeSpriteOamMatrix - ldm r4!, {r0} - bl DestroySprite - subs r5, 0x1 - cmp r5, 0 - bge _081CA0AA - adds r1, r6, 0 - cmp r1, 0x5 - ble _081CA0A2 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CA094 - - thumb_func_start sub_81CA0C8 -sub_81CA0C8: @ 81CA0C8 - push {lr} - bl sub_81C9894 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - ldr r1, =gUnknown_08620244 - adds r0, r2, r1 - subs r1, 0x4 - adds r2, r1 - ldrh r1, [r2] - ldrh r2, [r2, 0x2] - bl sub_81CA0EC - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA0C8 - - thumb_func_start sub_81CA0EC -sub_81CA0EC: @ 81CA0EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - adds r6, r0, 0 - str r1, [sp, 0x14] - str r2, [sp] - movs r0, 0x2 - bl GetSubstructPtr - mov r10, r0 - movs r0, 0x3 - bl GetSpriteTileStartByTag - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x4] - movs r1, 0 -_081CA114: - ldr r0, [r6] - cmp r0, 0 - beq _081CA1B0 - movs r5, 0 - lsls r2, r1, 4 - mov r0, r10 - adds r0, 0x2C - lsls r3, r1, 2 - mov r9, r3 - movs r4, 0x10 - add r4, r10 - mov r8, r4 - adds r7, r6, 0x4 - str r7, [sp, 0xC] - ldr r3, [sp, 0x14] - ldr r4, [sp] - adds r3, r4 - str r3, [sp, 0x8] - adds r1, 0x1 - str r1, [sp, 0x10] - adds r4, r2, r0 -_081CA13E: - ldr r3, [r4] - ldr r0, [r6] - ldrh r2, [r0] - ldr r7, [sp, 0x4] - adds r2, r7 - lsls r0, r5, 3 - adds r2, r0 - ldr r1, =0x000003ff - adds r0, r1, 0 - ands r2, r0 - ldrh r0, [r3, 0x4] - ldr r7, =0xfffffc00 - adds r1, r7, 0 - ands r0, r1 - orrs r0, r2 - strh r0, [r3, 0x4] - ldr r0, [r6] - ldrh r0, [r0, 0x2] - adds r0, 0x4 - lsls r0, 16 - lsrs r0, 16 - bl IndexOfSpritePaletteTag - ldr r3, [r4] - lsls r0, 4 - ldrb r2, [r3, 0x5] - movs r1, 0xF - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x5] - ldr r2, [r4] - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4] - mov r1, sp - ldrh r1, [r1, 0x14] - strh r1, [r0, 0x22] - ldr r1, [r4] - movs r0, 0x8C - strh r0, [r1, 0x20] - ldm r4!, {r1} - lsls r0, r5, 5 - strh r0, [r1, 0x24] - adds r5, 0x1 - cmp r5, 0x3 - ble _081CA13E - mov r1, r8 - add r1, r9 - movs r0, 0x1 - b _081CA1EC - .pool -_081CA1B0: - lsls r2, r1, 4 - mov r0, r10 - adds r0, 0x2C - lsls r3, r1, 2 - mov r9, r3 - movs r4, 0x10 - add r4, r10 - mov r8, r4 - adds r6, 0x4 - str r6, [sp, 0xC] - ldr r7, [sp, 0x14] - ldr r3, [sp] - adds r7, r3 - str r7, [sp, 0x8] - adds r1, 0x1 - str r1, [sp, 0x10] - movs r3, 0x4 - adds r2, r0 - movs r5, 0x3 -_081CA1D6: - ldm r2!, {r1} - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r3 - strb r0, [r1] - subs r5, 0x1 - cmp r5, 0 - bge _081CA1D6 - mov r1, r8 - add r1, r9 - movs r0, 0 -_081CA1EC: - str r0, [r1] - ldr r6, [sp, 0xC] - ldr r4, [sp, 0x8] - str r4, [sp, 0x14] - ldr r1, [sp, 0x10] - cmp r1, 0x5 - ble _081CA114 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CA0EC - thumb_func_start sub_81CA20C sub_81CA20C: @ 81CA20C push {r4-r7,lr} diff --git a/data/pokenav.s b/data/pokenav.s index e12dd3b12b..14400c00f3 100644 --- a/data/pokenav.s +++ b/data/pokenav.s @@ -5,19 +5,6 @@ // pokenav_unk_2.s -gUnknown_086201C4:: @ 86201C4 - obj_tiles gPokenavOptions_Gfx, 0x3400, 0x0003 - obj_tiles gUnknown_08620124, 0x0100, 0x0001 - -gUnknown_086201D4:: @ 86201D4 - .4byte gPokenavOptions_Pal + 0x0, 4 - .4byte gPokenavOptions_Pal + 0x20, 5 - .4byte gPokenavOptions_Pal + 0x40, 6 - .4byte gPokenavOptions_Pal + 0x60, 7 - .4byte gPokenavOptions_Pal + 0x80, 8 - .4byte gUnknown_08620104, 3 - .4byte 0, 0 - gUnknown_0862020C:: @ 862020C .2byte 0, 0 @@ -59,8 +46,6 @@ gUnknown_0862023C:: @ 862023C gUnknown_08620240:: @ 8620240 .2byte 0x2A, 0x14 - -gUnknown_08620244:: @ 8620244 .4byte gUnknown_0862020C .4byte gUnknown_08620210 .4byte gUnknown_0862021C diff --git a/include/graphics.h b/include/graphics.h index 9b7bc1e0e8..161633e178 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4945,5 +4945,7 @@ extern const u16 gUnknown_08DE3398[]; extern const u32 gPokenavMessageBox_Gfx[]; extern const u32 gPokenavMessageBox_Tilemap[]; extern const u16 gPokenavMessageBox_Pal[]; +extern const u32 gPokenavOptions_Gfx[]; +extern const u16 gPokenavOptions_Pal[]; #endif //GUARD_GRAPHICS_H diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 71870e5d63..048742ef7d 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -1,5 +1,6 @@ #include "global.h" #include "alloc.h" +#include "decompress.h" #include "bg.h" #include "menu.h" #include "window.h" @@ -20,7 +21,9 @@ struct Pokenav2Struct u8 field_00b; u8 field_00c; u8 field_00d; - u8 filler_00e[0x7E]; + bool32 field_010[6]; + u8 filler_028[4]; + struct Sprite * field_02c[6][4]; u8 field_08c[0x800]; }; @@ -38,12 +41,15 @@ u32 sub_81C9F28(int state); void sub_81C9FC4(void); void sub_81C9FEC(void); void sub_81CA02C(void); +void sub_81CA094(void); void sub_81CA0C8(void); +void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); void sub_81CA20C(void); void sub_81CA278(void); void sub_81CA2DC(void); bool32 sub_81CA324(void); void sub_81CA640(void); +void sub_81CA698(void); void sub_81CA6E0(void); void sub_81CA714(void); void sub_81CA770(void); @@ -109,6 +115,32 @@ const LoopedTask gUnknown_086201A0[] = { sub_81C9F28 }; +const struct CompressedSpriteSheet gUnknown_086201C4[] = { + {gPokenavOptions_Gfx, 0x3400, 0x0003}, + {gUnknown_08620124, 0x0100, 0x0001} +}; + +const struct SpritePalette gUnknown_086201D4[] = { + {gPokenavOptions_Pal + 0x00, 4}, + {gPokenavOptions_Pal + 0x10, 5}, + {gPokenavOptions_Pal + 0x20, 6}, + {gPokenavOptions_Pal + 0x30, 7}, + {gPokenavOptions_Pal + 0x40, 8}, + {gUnknown_08620104, 3}, + {NULL, 0} +}; + +struct UnkStruct_08620240 +{ + u16 field_0; + u16 field_2; + const u16 *field_4[6]; +}; + +extern const struct UnkStruct_08620240 gUnknown_08620240[]; + +extern const struct SpriteTemplate gUnknown_0862034C; + bool32 sub_81C98D4(void) { s32 i; @@ -535,3 +567,97 @@ u32 sub_81C9F28(int state) } return 4; } + +void sub_81C9FC4(void) +{ + u32 i; + + for (i = 0; i < 2; i++) + LoadCompressedSpriteSheet(&gUnknown_086201C4[i]); + Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); +} + +void sub_81C9FEC(void) +{ + FreeSpriteTilesByTag(3); + FreeSpriteTilesByTag(1); + FreeSpritePaletteByTag(4); + FreeSpritePaletteByTag(5); + FreeSpritePaletteByTag(6); + FreeSpritePaletteByTag(7); + FreeSpritePaletteByTag(8); + FreeSpritePaletteByTag(3); + sub_81CA094(); + sub_81CA698(); +} + +void sub_81CA02C(void) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) + { + u8 spriteId = CreateSprite(&gUnknown_0862034C, 0x8c, 20 * i + 40, 3); + unk->field_02c[i][j] = &gSprites[spriteId]; + gSprites[spriteId].pos2.x = 32 * j; + } + } +} + +void sub_81CA094(void) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + for (j = 0; j < 4; j++) + { + FreeSpriteOamMatrix(unk->field_02c[i][j]); + DestroySprite(unk->field_02c[i][j]); + } + } +} + +void sub_81CA0C8(void) +{ + s32 r0 = sub_81C9894(); + sub_81CA0EC(gUnknown_08620240[r0].field_4, gUnknown_08620240[r0].field_0, gUnknown_08620240[r0].field_2); +} + +void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) +{ + s32 i, j; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 sp04 = GetSpriteTileStartByTag(3); + + for (i = 0; i < 6; i++) + { + if (*a0 != NULL) + { + for (j = 0; j < 4; j++) + { + unk->field_02c[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; + unk->field_02c[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); + unk->field_02c[i][j]->invisible = TRUE; + unk->field_02c[i][j]->pos1.y = a1; + unk->field_02c[i][j]->pos1.x = 0x8c; + unk->field_02c[i][j]->pos2.x = 32 * j; + } + unk->field_010[i] = TRUE; + } + else + { + for (j = 0; j < 4; j++) + { + unk->field_02c[i][j]->invisible = TRUE; + } + unk->field_010[i] = FALSE; + } + a0++; + a1 += a2; + } +} From a08cbaee0a5f06f2e6d11ceb958e36430175f220 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 30 Jul 2019 19:46:56 -0400 Subject: [PATCH 05/12] pokenav_unk_2 staging --- asm/pokenav_unk_2.s | 229 -------------------------------------------- include/pokenav.h | 1 + src/pokenav_unk_2.c | 105 ++++++++++++++++++++ 3 files changed, 106 insertions(+), 229 deletions(-) diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index 1d8d45baad..9ed0332954 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,235 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81CA20C -sub_81CA20C: @ 81CA20C - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r0, 0x2 - bl GetSubstructPtr - adds r6, r0, 0 - bl sub_81C98A4 - mov r8, r0 - movs r7, 0 - movs r5, 0 - adds r4, r6, 0 - adds r4, 0x2C -_081CA228: - lsls r0, r5, 2 - adds r1, r6, 0 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _081CA25C - adds r0, r7, 0 - adds r7, 0x1 - cmp r0, r8 - bne _081CA244 - movs r2, 0x82 - strb r5, [r6, 0xB] - b _081CA246 -_081CA244: - movs r2, 0x8C -_081CA246: - adds r0, r4, 0 - movs r1, 0x80 - lsls r1, 1 - movs r3, 0xC - bl sub_81CA35C - adds r0, r4, 0 - movs r1, 0 - bl sub_81CA448 - b _081CA264 -_081CA25C: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_81CA448 -_081CA264: - adds r4, 0x10 - adds r5, 0x1 - cmp r5, 0x5 - ble _081CA228 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81CA20C - - thumb_func_start sub_81CA278 -sub_81CA278: @ 81CA278 - push {r4,r5,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - bl sub_81C98A4 - adds r3, r0, 0 - movs r2, 0 - movs r5, 0 - ldr r0, [r4, 0x10] - cmp r0, 0 - beq _081CA298 - cmp r5, r3 - beq _081CA2B2 -_081CA296: - adds r5, 0x1 -_081CA298: - adds r2, 0x1 - cmp r2, 0x5 - bgt _081CA2B2 - lsls r0, r2, 2 - adds r1, r4, 0 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _081CA298 - cmp r5, r3 - bne _081CA296 - adds r5, r2, 0 -_081CA2B2: - ldrb r0, [r4, 0xB] - lsls r0, 4 - adds r0, 0x2C - adds r0, r4, r0 - movs r1, 0x82 - movs r2, 0x8C - movs r3, 0x4 - bl sub_81CA35C - lsls r0, r5, 4 - adds r0, 0x2C - adds r0, r4, r0 - movs r1, 0x8C - movs r2, 0x82 - movs r3, 0x4 - bl sub_81CA35C - strb r5, [r4, 0xB] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CA278 - - thumb_func_start sub_81CA2DC -sub_81CA2DC: @ 81CA2DC - push {r4-r6,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r6, r0, 0 - movs r5, 0 - adds r4, r6, 0 - adds r4, 0x2C -_081CA2EC: - lsls r0, r5, 2 - adds r1, r6, 0 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - cmp r0, 0 - beq _081CA316 - ldrb r0, [r6, 0xB] - cmp r0, r5 - beq _081CA310 - adds r0, r4, 0 - movs r1, 0x8C - movs r2, 0x80 - lsls r2, 1 - movs r3, 0x8 - bl sub_81CA35C - b _081CA316 -_081CA310: - adds r0, r4, 0 - bl sub_81CA3B4 -_081CA316: - adds r4, 0x10 - adds r5, 0x1 - cmp r5, 0x5 - ble _081CA2EC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81CA2DC - - thumb_func_start sub_81CA324 -sub_81CA324: @ 81CA324 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r3, r0, 0 - movs r2, 0 - ldr r4, =SpriteCallbackDummy - adds r1, r3, 0 - adds r1, 0x2C -_081CA336: - ldr r0, [r1] - ldr r0, [r0, 0x1C] - cmp r0, r4 - bne _081CA354 - adds r1, 0x10 - adds r2, 0x1 - cmp r2, 0x5 - ble _081CA336 - ldrb r0, [r3, 0xC] - cmp r0, 0 - bne _081CA354 - movs r0, 0 - b _081CA356 - .pool -_081CA354: - movs r0, 0x1 -_081CA356: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81CA324 - - thumb_func_start sub_81CA35C -sub_81CA35C: @ 81CA35C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r4, r0, 0 - adds r5, r1, 0 - mov r9, r2 - adds r6, r3, 0 - ldr r0, =sub_81CA474 - mov r8, r0 - subs r0, r2, r5 - lsls r0, 4 - adds r1, r6, 0 - bl __divsi3 - adds r3, r0, 0 - movs r1, 0x3 - lsls r2, r5, 4 -_081CA380: - ldr r0, [r4] - strh r5, [r0, 0x20] - ldr r0, [r4] - strh r6, [r0, 0x2E] - ldr r0, [r4] - strh r3, [r0, 0x30] - ldr r0, [r4] - strh r2, [r0, 0x32] - ldr r0, [r4] - mov r7, r9 - strh r7, [r0, 0x3C] - ldm r4!, {r0} - mov r7, r8 - str r7, [r0, 0x1C] - subs r1, 0x1 - cmp r1, 0 - bge _081CA380 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA35C - thumb_func_start sub_81CA3B4 sub_81CA3B4: @ 81CA3B4 push {r4-r7,lr} diff --git a/include/pokenav.h b/include/pokenav.h index 470f00db72..e181b592c2 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -139,6 +139,7 @@ void sub_81C9430(void); int sub_81C9894(void); const u8 *sub_81CAF78(int index, u8 *arg1); u16 sub_81C98C4(void); +int sub_81C98A4(void); // pokenav_unk_2.c void sub_81C99D4(void); diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 048742ef7d..a6713554f8 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -46,6 +46,10 @@ void sub_81CA0C8(void); void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); void sub_81CA20C(void); void sub_81CA278(void); +void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); +void sub_81CA3B4(struct Sprite ** sprites); +void sub_81CA448(struct Sprite ** sprites, s32 a1); +void sub_81CA474(struct Sprite * sprite); void sub_81CA2DC(void); bool32 sub_81CA324(void); void sub_81CA640(void); @@ -661,3 +665,104 @@ void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) a1 += a2; } } + +void sub_81CA20C(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 r8 = sub_81C98A4(); + s32 r7 = 0; + s32 r2; + + for (i = 0; i < 6; i++) + { + if (unk->field_010[i]) + { + if (r7++ == r8) + { + r2 = 0x82; + unk->field_00b = i; + } + else + r2 = 0x8c; + sub_81CA35C(unk->field_02c[i], 0x100, r2, 0xC); + sub_81CA448(unk->field_02c[i], 0); + } + else + sub_81CA448(unk->field_02c[i], 1); + } +} + +void sub_81CA278(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + s32 r3 = sub_81C98A4(); + s32 r5; + + for (i = 0, r5 = 0; i < 6; i++) + { + if (unk->field_010[i]) + { + if (r5 == r3) + { + r5 = i; + break; + } + r5++; + } + } + + sub_81CA35C(unk->field_02c[unk->field_00b], 0x82, 0x8c, 0x4); + sub_81CA35C(unk->field_02c[r5], 0x8c, 0x82, 0x4); + unk->field_00b = r5; +} + +void sub_81CA2DC(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + if (unk->field_010[i]) + { + if (unk->field_00b != i) + sub_81CA35C(unk->field_02c[i], 0x8C, 0x100, 0x8); + else + sub_81CA3B4(unk->field_02c[i]); + } + } +} + +bool32 sub_81CA324(void) +{ + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + + for (i = 0; i < 6; i++) + { + if (unk->field_02c[i][0]->callback != SpriteCallbackDummy) + return TRUE; + } + + if (unk->field_00c) + return TRUE; + + return FALSE; +} + +void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + sprites[i]->pos1.x = a1; + sprites[i]->data[0] = a3; + sprites[i]->data[1] = 16 * (a2 - a1) / a3; + sprites[i]->data[2] = 16 * a1; + sprites[i]->data[7] = a2; + sprites[i]->callback = sub_81CA474; + } +} From 2dee42dbafd7083a3b45cf51062977c54f632a10 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 4 Aug 2019 18:15:02 -0400 Subject: [PATCH 06/12] through sub_81CA474 --- asm/pokenav_unk_2.s | 127 -------------------------------------------- src/pokenav_unk_2.c | 120 +++++++++++++++++++++-------------------- 2 files changed, 63 insertions(+), 184 deletions(-) diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s index 9ed0332954..d74a485a80 100644 --- a/asm/pokenav_unk_2.s +++ b/asm/pokenav_unk_2.s @@ -5,133 +5,6 @@ @ File centered around AllocSubstruct(2) - thumb_func_start sub_81CA3B4 -sub_81CA3B4: @ 81CA3B4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - movs r0, 0x2 - bl GetSubstructPtr - adds r7, r0, 0 - movs r5, 0 - mov r8, r5 -_081CA3C8: - ldr r2, [r4] - ldrb r1, [r2, 0x1] - movs r3, 0xD - negs r3, r3 - adds r0, r3, 0 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r2, 0x1] - ldr r2, [r4] - ldrb r0, [r2, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r1, [r4] - ldr r0, =sub_81CA4AC - str r0, [r1, 0x1C] - movs r6, 0x8 - strh r6, [r1, 0x2E] - ldr r0, [r4] - mov r1, r8 - strh r1, [r0, 0x30] - ldr r0, [r4] - strh r5, [r0, 0x3C] - ldr r0, [r4] - bl InitSpriteAffineAnim - ldm r4!, {r0} - movs r1, 0 - bl StartSpriteAffineAnim - adds r5, 0x1 - cmp r5, 0x3 - ble _081CA3C8 - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldr r0, =sub_81CA580 - movs r1, 0x3 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r6, [r1, 0x8] - ldrb r0, [r7, 0xC] - adds r0, 0x1 - strb r0, [r7, 0xC] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA3B4 - - thumb_func_start sub_81CA448 -sub_81CA448: @ 81CA448 - push {r4-r6,lr} - adds r5, r0, 0 - movs r0, 0x1 - ands r1, r0 - lsls r4, r1, 2 - movs r6, 0x5 - negs r6, r6 - movs r3, 0x3 -_081CA458: - ldm r5!, {r0} - adds r0, 0x3E - ldrb r2, [r0] - adds r1, r6, 0 - ands r1, r2 - orrs r1, r4 - strb r1, [r0] - subs r3, 0x1 - cmp r3, 0 - bge _081CA458 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81CA448 - - thumb_func_start sub_81CA474 -sub_81CA474: @ 81CA474 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _081CA49A - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - b _081CA4A2 -_081CA49A: - ldrh r0, [r2, 0x3C] - strh r0, [r2, 0x20] - ldr r0, =SpriteCallbackDummy - str r0, [r2, 0x1C] -_081CA4A2: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA474 - thumb_func_start sub_81CA4AC sub_81CA4AC: @ 81CA4AC push {r4,r5,lr} diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index ae15eabfb5..b428e20c65 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -2,6 +2,7 @@ #include "alloc.h" #include "decompress.h" #include "bg.h" +#include "gpu_regs.h" #include "menu.h" #include "window.h" #include "pokenav.h" @@ -52,10 +53,12 @@ void sub_81CA20C(void); void sub_81CA278(void); void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); void sub_81CA3B4(struct Sprite ** sprites); -void sub_81CA448(struct Sprite ** sprites, s32 a1); -void sub_81CA474(struct Sprite * sprite); void sub_81CA2DC(void); bool32 sub_81CA324(void); +void sub_81CA448(struct Sprite ** sprites, bool32 a1); +void sub_81CA474(struct Sprite * sprite); +void sub_81CA4AC(struct Sprite * sprite); +void sub_81CA580(u8 taskId); void sub_81CA640(void); void sub_81CA698(void); void sub_81CA6E0(void); @@ -852,10 +855,10 @@ void sub_81CA20C(void) else r2 = 0x8c; sub_81CA35C(unk->field_02c[i], 0x100, r2, 0xC); - sub_81CA448(unk->field_02c[i], 0); + sub_81CA448(unk->field_02c[i], FALSE); } else - sub_81CA448(unk->field_02c[i], 1); + sub_81CA448(unk->field_02c[i], TRUE); } } @@ -918,66 +921,69 @@ bool32 sub_81CA324(void) return FALSE; } -#ifdef NONMATCHING void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) { s32 i; for (i = 0; i < 4; i++) { - sprites[i]->pos1.x = a1; - sprites[i]->data[0] = a3; - sprites[i]->data[1] = 16 * (a2 - a1) / a3; - sprites[i]->data[2] = 16 * a1; - sprites[i]->data[7] = a2; - sprites[i]->callback = sub_81CA474; + (*sprites)->pos1.x = a1; + (*sprites)->data[0] = a3; + (*sprites)->data[1] = 16 * (a2 - a1) / a3; + (*sprites)->data[2] = 16 * a1; + (*sprites)->data[7] = a2; + (*sprites)->callback = sub_81CA474; + sprites++; } } -#else -NAKED -void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) + +void sub_81CA3B4(struct Sprite ** sprites) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tadds r4, r0, 0\n" - "\tadds r5, r1, 0\n" - "\tmov r9, r2\n" - "\tadds r6, r3, 0\n" - "\tldr r0, =sub_81CA474\n" - "\tmov r8, r0\n" - "\tsubs r0, r2, r5\n" - "\tlsls r0, 4\n" - "\tadds r1, r6, 0\n" - "\tbl __divsi3\n" - "\tadds r3, r0, 0\n" - "\tmovs r1, 0x3\n" - "\tlsls r2, r5, 4\n" - "_081CA380:\n" - "\tldr r0, [r4]\n" - "\tstrh r5, [r0, 0x20]\n" - "\tldr r0, [r4]\n" - "\tstrh r6, [r0, 0x2E]\n" - "\tldr r0, [r4]\n" - "\tstrh r3, [r0, 0x30]\n" - "\tldr r0, [r4]\n" - "\tstrh r2, [r0, 0x32]\n" - "\tldr r0, [r4]\n" - "\tmov r7, r9\n" - "\tstrh r7, [r0, 0x3C]\n" - "\tldm r4!, {r0}\n" - "\tmov r7, r8\n" - "\tstr r7, [r0, 0x1C]\n" - "\tsubs r1, 0x1\n" - "\tcmp r1, 0\n" - "\tbge _081CA380\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.pool"); + s32 i; + struct Pokenav2Struct * unk = GetSubstructPtr(2); + u8 taskId; + + for (i = 0; i < 4; i++) + { + (*sprites)->oam.objMode = ST_OAM_OBJ_BLEND; + (*sprites)->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + (*sprites)->callback = sub_81CA4AC; + (*sprites)->data[0] = 8; + (*sprites)->data[1] = 0; + (*sprites)->data[7] = i; + InitSpriteAffineAnim(sprites[0]); + StartSpriteAffineAnim(sprites[0], 0); + sprites++; + } + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); + taskId = CreateTask(sub_81CA580, 3); + gTasks[taskId].data[0] = 8; + unk->field_00c++; +} + +void sub_81CA448(struct Sprite ** sprites, bool32 a1) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + (*sprites)->invisible = a1; + sprites++; + } +} + +void sub_81CA474(struct Sprite * sprite) +{ + sprite->data[0]--; + if (sprite->data[0] != -1) + { + sprite->data[2] += sprite->data[1]; + sprite->pos1.x = sprite->data[2] >> 4; + } + else + { + sprite->pos1.x = sprite->data[7]; + sprite->callback = SpriteCallbackDummy; + } } -#endif //NONMATCHING From 299c3cf1dcd5f93e7d12ec9d084da9d01431d5ec Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 4 Aug 2019 20:39:36 -0400 Subject: [PATCH 07/12] Finish pokenav_unk_2 --- asm/pokenav_unk_2.s | 787 -------------------------------------------- include/pokenav.h | 3 +- include/strings.h | 1 + ld_script.txt | 1 - src/pokenav_unk_2.c | 294 ++++++++++++++++- 5 files changed, 294 insertions(+), 792 deletions(-) delete mode 100644 asm/pokenav_unk_2.s diff --git a/asm/pokenav_unk_2.s b/asm/pokenav_unk_2.s deleted file mode 100644 index d74a485a80..0000000000 --- a/asm/pokenav_unk_2.s +++ /dev/null @@ -1,787 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - -@ File centered around AllocSubstruct(2) - - thumb_func_start sub_81CA4AC -sub_81CA4AC: @ 81CA4AC - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _081CA574 - movs r0, 0x30 - ldrsh r5, [r4, r0] - cmp r5, 0 - bne _081CA4E2 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - strh r5, [r4, 0x24] - b _081CA578 -_081CA4E2: - ldrh r0, [r4, 0x32] - adds r0, 0x10 - strh r0, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - asrs r1, r0, 3 - adds r0, r1, 0 - subs r0, 0x20 - lsrs r1, r0, 31 - adds r0, r1 - asrs r1, r0, 1 - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0x1 - beq _081CA518 - cmp r0, 0x1 - bgt _081CA50A - cmp r0, 0 - beq _081CA514 - b _081CA526 -_081CA50A: - cmp r0, 0x2 - beq _081CA51C - cmp r0, 0x3 - beq _081CA520 - b _081CA526 -_081CA514: - negs r1, r1 - b _081CA520 -_081CA518: - negs r0, r1 - b _081CA524 -_081CA51C: - strh r1, [r4, 0x24] - b _081CA526 -_081CA520: - lsls r0, r1, 1 - adds r0, r1 -_081CA524: - strh r0, [r4, 0x24] -_081CA526: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _081CA578 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0xD - negs r1, r1 - ands r0, r1 - strb r0, [r4, 0x1] - ldr r0, =SpriteCallbackDummy - str r0, [r4, 0x1C] - b _081CA578 - .pool -_081CA574: - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] -_081CA578: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CA4AC - - thumb_func_start sub_81CA580 -sub_81CA580: @ 81CA580 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - ldrh r0, [r4] - movs r1, 0 - ldrsh r2, [r4, r1] - cmp r2, 0 - bne _081CA634 - movs r0, 0x2 - ldrsh r1, [r4, r0] - cmp r1, 0 - beq _081CA5AC - cmp r1, 0x1 - beq _081CA5CC - b _081CA638 - .pool -_081CA5AC: - movs r0, 0x10 - strh r0, [r4, 0x4] - strh r2, [r4, 0x6] - movs r1, 0xFC - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _081CA638 -_081CA5CC: - ldrh r0, [r4, 0x8] - ands r1, r0 - cmp r1, 0 - beq _081CA5E4 - ldrh r0, [r4, 0x4] - subs r0, 0x3 - strh r0, [r4, 0x4] - lsls r0, 16 - cmp r0, 0 - bge _081CA5F6 - strh r2, [r4, 0x4] - b _081CA5F6 -_081CA5E4: - ldrh r0, [r4, 0x6] - adds r0, 0x3 - strh r0, [r4, 0x6] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _081CA5F6 - movs r0, 0x10 - strh r0, [r4, 0x6] -_081CA5F6: - ldrh r1, [r4, 0x6] - lsls r1, 8 - ldrh r0, [r4, 0x4] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bne _081CA638 - movs r0, 0x2 - bl GetSubstructPtr - ldrb r1, [r0, 0xC] - subs r1, 0x1 - strb r1, [r0, 0xC] - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyTask - b _081CA638 -_081CA634: - subs r0, 0x1 - strh r0, [r4] -_081CA638: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81CA580 - - thumb_func_start sub_81CA640 -sub_81CA640: @ 81CA640 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =gUnknown_0862036C - movs r1, 0x10 - movs r2, 0x60 - movs r3, 0x4 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, =gSprites - adds r1, r0 - str r1, [r4, 0x28] - bl sub_81C98D4 - cmp r0, 0 - beq _081CA684 - ldr r1, [r4, 0x28] - ldr r0, =sub_81CA6AC - str r0, [r1, 0x1C] - b _081CA690 - .pool -_081CA684: - ldr r0, [r4, 0x28] - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_081CA690: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81CA640 - - thumb_func_start sub_81CA698 -sub_81CA698: @ 81CA698 - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldr r0, [r0, 0x28] - bl DestroySprite - pop {r0} - bx r0 - thumb_func_end sub_81CA698 - - thumb_func_start sub_81CA6AC -sub_81CA6AC: @ 81CA6AC - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _081CA6DA - movs r0, 0 - strh r0, [r3, 0x2E] - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_081CA6DA: - pop {r0} - bx r0 - thumb_func_end sub_81CA6AC - - thumb_func_start sub_81CA6E0 -sub_81CA6E0: @ 81CA6E0 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =gUnknown_086202CC - bl AddWindow - strh r0, [r4, 0x8] - lsls r0, 24 - lsrs r0, 24 - bl PutWindowTilemap - ldrb r0, [r4, 0x8] - movs r1, 0x66 - bl FillWindowPixelBuffer - ldrb r0, [r4, 0x8] - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA6E0 - - thumb_func_start sub_81CA714 -sub_81CA714: @ 81CA714 - push {r4-r6,lr} - sub sp, 0xC - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - bl sub_81C98B4 - ldr r1, =gUnknown_086202D4 - lsls r0, 2 - adds r0, r1 - ldr r6, [r0] - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - adds r1, r6, 0 - bl GetStringWidth - adds r4, r0, 0 - ldrb r0, [r5, 0x8] - movs r1, 0x66 - bl FillWindowPixelBuffer - ldrb r0, [r5, 0x8] - movs r2, 0xC0 - subs r2, r4 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r1, =gUnknown_0862030C - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA714 - - thumb_func_start sub_81CA770 -sub_81CA770: @ 81CA770 - push {r4-r6,lr} - sub sp, 0xC - movs r0, 0x2 - bl GetSubstructPtr - adds r5, r0, 0 - ldr r6, =gText_NoRibbonWinners - movs r2, 0x1 - negs r2, r2 - movs r0, 0x1 - adds r1, r6, 0 - bl GetStringWidth - adds r4, r0, 0 - ldrb r0, [r5, 0x8] - movs r1, 0x66 - bl FillWindowPixelBuffer - ldrb r0, [r5, 0x8] - movs r2, 0xC0 - subs r2, r4 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r1, =gUnknown_0862030F - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA770 - - thumb_func_start sub_81CA7C4 -sub_81CA7C4: @ 81CA7C4 - push {lr} - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_81CA7C4 - - thumb_func_start sub_81CA7D4 -sub_81CA7D4: @ 81CA7D4 - push {r4,lr} - movs r0, 0x2 - bl GetSubstructPtr - adds r4, r0, 0 - ldr r0, =sub_81CA808 - movs r1, 0x2 - bl CreateTask - strb r0, [r4, 0xA] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA7D4 - - thumb_func_start sub_81CA7F4 -sub_81CA7F4: @ 81CA7F4 - push {lr} - movs r0, 0x2 - bl GetSubstructPtr - ldrb r0, [r0, 0xA] - bl DestroyTask - pop {r0} - bx r0 - thumb_func_end sub_81CA7F4 - - thumb_func_start sub_81CA808 -sub_81CA808: @ 81CA808 - push {lr} - movs r0, 0x3 - movs r1, 0x80 - movs r2, 0x1 - bl ChangeBgX - pop {r0} - bx r0 - thumb_func_end sub_81CA808 - - thumb_func_start sub_81CA818 -sub_81CA818: @ 81CA818 - push {r4,r5,lr} - ldr r0, =sub_81CA8B0 - movs r1, 0x3 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, =gUnknown_0861FC78 + 2 - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl SetWordTaskArg - adds r5, 0xC - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetWordTaskArg - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA818 - - thumb_func_start sub_81CA850 -sub_81CA850: @ 81CA850 - push {lr} - ldr r0, =gUnknown_0861FC78 + 0xE - movs r1, 0x31 - movs r2, 0x4 - bl CopyPaletteIntoBufferUnfaded - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA850 - - thumb_func_start sub_81CA864 -sub_81CA864: @ 81CA864 - push {r4,r5,lr} - ldr r0, =sub_81CA8B0 - movs r1, 0x3 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, =gUnknown_0861FC78 + 0xE - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl SetWordTaskArg - subs r5, 0xC - adds r0, r4, 0 - movs r1, 0x3 - adds r2, r5, 0 - bl SetWordTaskArg - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA864 - - thumb_func_start sub_81CA89C -sub_81CA89C: @ 81CA89C - push {lr} - ldr r0, =sub_81CA8B0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81CA89C - - thumb_func_start sub_81CA8B0 -sub_81CA8B0: @ 81CA8B0 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r6, r0, 24 - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - ldr r0, =gTasks + 0x8 - adds r4, r0 - adds r0, r6, 0 - movs r1, 0x1 - bl GetWordTaskArg - adds r5, r0, 0 - adds r0, r6, 0 - movs r1, 0x3 - bl GetWordTaskArg - adds r1, r0, 0 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r0, 16 - str r0, [sp] - add r0, sp, 0x8 - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0xC - bl sub_81C79BC - add r0, sp, 0x8 - movs r1, 0x31 - movs r2, 0x4 - bl LoadPalette - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0xC - bne _081CA908 - adds r0, r6, 0 - bl DestroyTask -_081CA908: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA8B0 - - thumb_func_start sub_81CA914 -sub_81CA914: @ 81CA914 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r0} - bx r0 - thumb_func_end sub_81CA914 - - thumb_func_start titlescreen_0 -titlescreen_0: @ 81CA92C - push {lr} - movs r0, 0x50 - movs r1, 0x90 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuRegBits - movs r0, 0x4A - movs r1, 0x1F - bl SetGpuRegBits - movs r0, 0x44 - movs r1, 0xA0 - bl SetGpuRegBits - bl ScanlineEffect_Stop - bl sub_81CAA3C - ldr r2, =gUnknown_08620384 - ldr r0, [r2] - ldr r1, [r2, 0x4] - ldr r2, [r2, 0x8] - bl ScanlineEffect_SetParams - ldr r0, =sub_81CA914 - bl SetVBlankCallback_ - ldr r0, =sub_81CA9EC - movs r1, 0x3 - bl CreateTask - pop {r0} - bx r0 - .pool - thumb_func_end titlescreen_0 - - thumb_func_start sub_81CA994 -sub_81CA994: @ 81CA994 - push {lr} - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl ClearGpuRegBits - bl ScanlineEffect_Stop - ldr r0, =sub_81CA9EC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - bl SetPokenavVBlankCallback - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA994 - - thumb_func_start sub_81CA9C8 -sub_81CA9C8: @ 81CA9C8 - push {lr} - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_81CA9C8 - - thumb_func_start sub_81CA9D8 -sub_81CA9D8: @ 81CA9D8 - push {lr} - bl sub_81CAA3C - movs r0, 0x50 - movs r1, 0x90 - bl SetGpuReg - pop {r0} - bx r0 - thumb_func_end sub_81CA9D8 - - thumb_func_start sub_81CA9EC -sub_81CA9EC: @ 81CA9EC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r2, r1, r0 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - lsls r0, 16 - cmp r0, 0 - ble _081CAA30 - movs r0, 0 - strh r0, [r2] - ldrh r0, [r2, 0x2] - adds r0, 0x3 - movs r1, 0x7F - ands r0, r1 - strh r0, [r2, 0x2] - ldr r1, =gSineTable - movs r3, 0x2 - ldrsh r0, [r2, r3] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - lsls r1, 16 - asrs r1, 21 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x54 - bl SetGpuReg -_081CAA30: - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CA9EC - - thumb_func_start sub_81CAA3C -sub_81CAA3C: @ 81CAA3C - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - bl sub_81C9894 - adds r4, r0, 0 - bl sub_81C98A4 - ldr r2, =gUnknown_08620240 - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r1, 0x2] - adds r4, r2, 0 - muls r4, r0 - ldrh r1, [r1] - adds r4, r1 - subs r4, 0x8 - mov r0, sp - movs r6, 0 - strh r6, [r0] - ldr r5, =gScanlineEffectRegBuffers - ldr r0, =0x010000a0 - mov r8, r0 - mov r0, sp - adds r1, r5, 0 - mov r2, r8 - bl CpuSet - mov r0, sp - adds r0, 0x2 - strh r6, [r0] - movs r1, 0xF0 - lsls r1, 3 - adds r1, r5 - mov r9, r1 - mov r2, r8 - bl CpuSet - add r0, sp, 0x4 - ldr r1, =0x000072f0 - adds r6, r1, 0 - strh r6, [r0] - lsls r4, 1 - adds r5, r4, r5 - ldr r1, =0x01000010 - mov r8, r1 - adds r1, r5, 0 - mov r2, r8 - bl CpuSet - mov r0, sp - adds r0, 0x6 - strh r6, [r0] - add r4, r9 - adds r1, r4, 0 - mov r2, r8 - bl CpuSet - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81CAA3C - - thumb_func_start sub_81CAADC -sub_81CAADC: @ 81CAADC - push {lr} - bl sub_81CA9C8 - pop {r0} - bx r0 - thumb_func_end sub_81CAADC - - .align 2, 0 @ Don't pad with nop. diff --git a/include/pokenav.h b/include/pokenav.h index ecf66de51d..75f08a9e91 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -152,8 +152,9 @@ u32 sub_81C941C(void); void sub_81C9430(void); int sub_81C9894(void); const u8 *sub_81CAF78(int index, u8 *arg1); -u16 sub_81C98C4(void); int sub_81C98A4(void); +int sub_81C98B4(void); +u16 sub_81C98C4(void); // pokenav_unk_2.c void sub_81C99D4(void); diff --git a/include/strings.h b/include/strings.h index 97285b0510..f2d3f23ad1 100644 --- a/include/strings.h +++ b/include/strings.h @@ -2766,6 +2766,7 @@ extern const u8 gUnknown_085EBE06[]; extern const u8 gUnknown_085EBE19[]; extern const u8 gUnknown_085EBE2D[]; extern const u8 gUnknown_085EBE41[]; +extern const u8 gText_NoRibbonWinners[]; // pokenav_unk_4 extern const u8 gUnknown_085EC017[]; diff --git a/ld_script.txt b/ld_script.txt index 769df23f8e..f3531344b2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -310,7 +310,6 @@ SECTIONS { src/pokenav_match_call_ui.o(.text); src/pokenav_unk_1.o(.text); src/pokenav_unk_2.o(.text); - asm/pokenav_unk_2.o(.text); src/pokenav_unk_3.o(.text); src/pokenav_unk_4.o(.text); src/pokenav_unk_5.o(.text); diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index b428e20c65..a211093164 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -2,6 +2,8 @@ #include "alloc.h" #include "decompress.h" #include "bg.h" +#include "palette.h" +#include "trig.h" #include "gpu_regs.h" #include "menu.h" #include "window.h" @@ -20,14 +22,13 @@ struct Pokenav2Struct { bool32 (*callback)(void); u32 loopedTaskId; - u8 field_008; - u8 field_009; + u16 field_008; u8 field_00a; u8 field_00b; u8 field_00c; u8 field_00d; bool32 field_010[6]; - u8 filler_028[4]; + struct Sprite * field_028; struct Sprite * field_02c[6][4]; u8 field_08c[0x800]; }; @@ -60,6 +61,7 @@ void sub_81CA474(struct Sprite * sprite); void sub_81CA4AC(struct Sprite * sprite); void sub_81CA580(u8 taskId); void sub_81CA640(void); +void sub_81CA6AC(struct Sprite * sprite); void sub_81CA698(void); void sub_81CA6E0(void); void sub_81CA714(void); @@ -67,14 +69,17 @@ void sub_81CA770(void); bool32 sub_81CA7C4(void); void sub_81CA7D4(void); void sub_81CA7F4(void); +void sub_81CA808(u8 taskId); void sub_81CA818(void); void sub_81CA850(void); void sub_81CA864(void); bool32 sub_81CA89C(void); +void sub_81CA8B0(u8 taskId); void titlescreen_0(void); void sub_81CA994(void); void sub_81CA9C8(void); void sub_81CA9D8(void); +void sub_81CA9EC(u8 taskId); void sub_81CAA3C(void); extern const u32 gPokenavOptions_Gfx[]; @@ -987,3 +992,286 @@ void sub_81CA474(struct Sprite * sprite) sprite->callback = SpriteCallbackDummy; } } + +void sub_81CA4AC(struct Sprite * sprite) +{ + s32 r0; + s32 r1; + if (sprite->data[0] == 0) + { + if (sprite->data[1] == 0) + { + StartSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + sprite->data[2] = 0x100; + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + } + else + { + sprite->data[2] += 16; + r0 = sprite->data[2]; + r1 = r0 >> 3; + r1 = (r1 - 32) / 2; + switch (sprite->data[7]) + { + case 0: + sprite->pos2.x = -r1 * 3; + break; + case 1: + sprite->pos2.x = -r1; + break; + case 2: + sprite->pos2.x = r1; + break; + case 3: + sprite->pos2.x = r1 * 3; + break; + } + if (sprite->affineAnimEnded) + { + sprite->invisible = TRUE; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + sprite->oam.objMode = ST_OAM_OBJ_NORMAL; + sprite->callback = SpriteCallbackDummy; + } + } + } + else + { + sprite->data[0]--; + } +} + +void sub_81CA580(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + + if (data[0] == 0) + { + switch (data[1]) + { + case 0: + data[2] = 16; + data[3] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); + data[1]++; + break; + case 1: + if (data[4] & 1) + { + data[2] -= 3; + if (data[2] < 0) + data[2] = 0; + } + else + { + data[3] += 3; + if (data[3] > 16) + data[3] = 16; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(data[2], data[3])); + data[4]++; + if (data[4] == 12) + { + ((struct Pokenav2Struct *)GetSubstructPtr(2))->field_00c--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); + DestroyTask(taskId); + } + break; + } + } + else + data[0]--; +} + +void sub_81CA640(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + u8 spriteId = CreateSprite(&gUnknown_0862036C, 0x10, 0x60, 4); + ptr->field_028 = &gSprites[spriteId]; + if (sub_81C98D4()) + ptr->field_028->callback = sub_81CA6AC; + else + ptr->field_028->invisible = TRUE; +} + +void sub_81CA698(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + DestroySprite(ptr->field_028); +} + +void sub_81CA6AC(struct Sprite * sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 8) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + } +} + +void sub_81CA6E0(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + + ptr->field_008 = AddWindow(&gUnknown_086202CC); + PutWindowTilemap(ptr->field_008); + FillWindowPixelBuffer(ptr->field_008, PIXEL_FILL(6)); + CopyWindowToVram(ptr->field_008, 3); +} + +void sub_81CA714(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + int i = sub_81C98B4(); + const u8 * s = gUnknown_086202D4[i]; + u32 width = GetStringWidth(1, s, -1); + FillWindowPixelBuffer(ptr->field_008, PIXEL_FILL(6)); + AddTextPrinterParameterized3(ptr->field_008, 1, (192 - width) / 2, 1, gUnknown_0862030C, 0, s); +} + + +void sub_81CA770(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + const u8 * s = gText_NoRibbonWinners; + u32 width = GetStringWidth(1, s, -1); + FillWindowPixelBuffer(ptr->field_008, PIXEL_FILL(6)); + AddTextPrinterParameterized3(ptr->field_008, 1, (192 - width) / 2, 1, gUnknown_0862030F, 0, s); +} + +bool32 sub_81CA7C4(void) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +void sub_81CA7D4(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + ptr->field_00a = CreateTask(sub_81CA808, 2); +} + +void sub_81CA7F4(void) +{ + struct Pokenav2Struct * ptr = GetSubstructPtr(2); + DestroyTask(ptr->field_00a); +} + +void sub_81CA808(u8 taskId) +{ + ChangeBgX(3, 0x80, 1); +} + +void sub_81CA818(void) +{ + u8 taskId = CreateTask(sub_81CA8B0, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 1)); + SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 7)); +} + +void sub_81CA850(void) +{ + CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78 + 7, 0x31, 4); +} + +void sub_81CA864(void) +{ + u8 taskId = CreateTask(sub_81CA8B0, 3); + SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 7)); + SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 1)); +} + +bool32 sub_81CA89C(void) +{ + return FuncIsActiveTask(sub_81CA8B0); +} + +void sub_81CA8B0(u8 taskId) +{ + u16 sp8[2]; + s16 * data = gTasks[taskId].data; + const u16 * pal1 = (const u16 *)GetWordTaskArg(taskId, 1); + const u16 * pal2 = (const u16 *)GetWordTaskArg(taskId, 3); + + sub_81C79BC(pal1, pal2, 2, 12, ++data[0], sp8); + LoadPalette(sp8, 0x31, 4); + if (data[0] == 12) + DestroyTask(taskId); +} + +void sub_81CA914(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void titlescreen_0(void) // almost definitely the wrong name +{ + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuRegBits(REG_OFFSET_WININ, 0x3F); + SetGpuRegBits(REG_OFFSET_WINOUT, 0x1F); + SetGpuRegBits(REG_OFFSET_WIN0V, 0xA0); + ScanlineEffect_Stop(); + sub_81CAA3C(); + ScanlineEffect_SetParams(gUnknown_08620384); + SetVBlankCallback_(sub_81CA914); + CreateTask(sub_81CA9EC, 3); +} + +void sub_81CA994(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + ScanlineEffect_Stop(); + DestroyTask(FindTaskIdByFunc(sub_81CA9EC)); + SetPokenavVBlankCallback(); +} + +void sub_81CA9C8(void) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); +} + +void sub_81CA9D8(void) +{ + sub_81CAA3C(); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); +} + +void sub_81CA9EC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + data[0]++; + if (data[0] > 0) + { + data[0] = 0; + data[1] += 3; + data[1] &= 0x7F; + SetGpuReg(REG_OFFSET_BLDY, gSineTable[data[1]] >> 5); + } +} + +void sub_81CAA3C(void) +{ + int i = sub_81C9894(); + int j = sub_81C98A4(); + int r4 = gUnknown_08620240[i].unk2 * j + gUnknown_08620240[i].unk0 - 8; + CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); + CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); + CpuFill16(0x72F0, &gScanlineEffectRegBuffers[0][r4], 0x20); + CpuFill16(0x72F0, &gScanlineEffectRegBuffers[1][r4], 0x20); +} + +void sub_81CAADC(void) +{ + sub_81CA9C8(); +} From ff2166b8fe5680d5b7339465eb37371d4fec810c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 4 Aug 2019 21:10:08 -0400 Subject: [PATCH 08/12] pokenav_unk_2: unclutter global namespace --- include/pokenav.h | 4 + src/pokenav_unk_2.c | 288 ++++++++++++++++++++++---------------------- 2 files changed, 147 insertions(+), 145 deletions(-) diff --git a/include/pokenav.h b/include/pokenav.h index 75f08a9e91..31cb5cb173 100644 --- a/include/pokenav.h +++ b/include/pokenav.h @@ -157,6 +157,10 @@ int sub_81C98B4(void); u16 sub_81C98C4(void); // pokenav_unk_2.c +bool32 sub_81C9924(void); +bool32 sub_81C9940(void); +void sub_81C9990(s32 ltIdx); +bool32 sub_81C99C0(void); void sub_81C99D4(void); void sub_81CAADC(void); diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index a211093164..7265a1a00d 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -15,6 +15,7 @@ #include "strings.h" #include "scanline_effect.h" #include "constants/songs.h" +#include "constants/rgb.h" // Match Call @@ -33,68 +34,65 @@ struct Pokenav2Struct u8 field_08c[0x800]; }; -struct Pokenav2Struct * sub_81C9958(void); -bool32 sub_81C99FC(void); -u32 sub_81C9A10(s32 state); -u32 sub_81C9C6C(s32 state); -u32 sub_81C9CA8(s32 state); -u32 sub_81C9D44(s32 state); -u32 sub_81C9DD8(s32 state); -u32 sub_81C9E58(s32 state); -u32 sub_81C9EC8(s32 state); -u32 sub_81C9EF8(s32 state); -u32 sub_81C9F28(s32 state); -void sub_81C9FC4(void); -void sub_81C9FEC(void); -void sub_81CA02C(void); -void sub_81CA094(void); -void sub_81CA0C8(void); -void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); -void sub_81CA20C(void); -void sub_81CA278(void); -void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); -void sub_81CA3B4(struct Sprite ** sprites); -void sub_81CA2DC(void); -bool32 sub_81CA324(void); -void sub_81CA448(struct Sprite ** sprites, bool32 a1); -void sub_81CA474(struct Sprite * sprite); -void sub_81CA4AC(struct Sprite * sprite); -void sub_81CA580(u8 taskId); -void sub_81CA640(void); -void sub_81CA6AC(struct Sprite * sprite); -void sub_81CA698(void); -void sub_81CA6E0(void); -void sub_81CA714(void); -void sub_81CA770(void); -bool32 sub_81CA7C4(void); -void sub_81CA7D4(void); -void sub_81CA7F4(void); -void sub_81CA808(u8 taskId); -void sub_81CA818(void); -void sub_81CA850(void); -void sub_81CA864(void); -bool32 sub_81CA89C(void); -void sub_81CA8B0(u8 taskId); -void titlescreen_0(void); -void sub_81CA994(void); -void sub_81CA9C8(void); -void sub_81CA9D8(void); -void sub_81CA9EC(u8 taskId); -void sub_81CAA3C(void); +static struct Pokenav2Struct * sub_81C9958(void); +static bool32 sub_81C99FC(void); +static u32 sub_81C9A10(s32 state); +static u32 sub_81C9C6C(s32 state); +static u32 sub_81C9CA8(s32 state); +static u32 sub_81C9D44(s32 state); +static u32 sub_81C9DD8(s32 state); +static u32 sub_81C9E58(s32 state); +static u32 sub_81C9EC8(s32 state); +static u32 sub_81C9EF8(s32 state); +static u32 sub_81C9F28(s32 state); +static void sub_81C9FC4(void); +static void sub_81C9FEC(void); +static void sub_81CA02C(void); +static void sub_81CA094(void); +static void sub_81CA0C8(void); +static void sub_81CA0EC(const u16 *const * a0, s32 a1, s32 a2); +static void sub_81CA20C(void); +static void sub_81CA278(void); +static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3); +static void sub_81CA3B4(struct Sprite ** sprites); +static void sub_81CA2DC(void); +static bool32 sub_81CA324(void); +static void sub_81CA448(struct Sprite ** sprites, bool32 a1); +static void sub_81CA474(struct Sprite * sprite); +static void sub_81CA4AC(struct Sprite * sprite); +static void sub_81CA580(u8 taskId); +static void sub_81CA640(void); +static void sub_81CA6AC(struct Sprite * sprite); +static void sub_81CA698(void); +static void sub_81CA6E0(void); +static void sub_81CA714(void); +static void sub_81CA770(void); +static bool32 sub_81CA7C4(void); +static void sub_81CA7D4(void); +static void sub_81CA7F4(void); +static void sub_81CA808(u8 taskId); +static void sub_81CA818(void); +static void sub_81CA850(void); +static void sub_81CA864(void); +static bool32 sub_81CA89C(void); +static void sub_81CA8B0(u8 taskId); +static void titlescreen_0(void); +static void sub_81CA994(void); +static void sub_81CA9C8(void); +static void sub_81CA9D8(void); +static void sub_81CA9EC(u8 taskId); +static void sub_81CAA3C(void); -extern const u32 gPokenavOptions_Gfx[]; -extern const u16 gPokenavOptions_Pal[]; +static const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); +static const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); +static const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); +static const u16 gUnknown_0861FD4C[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); +static const u32 gUnknown_0861FD6C[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); +static const u32 gUnknown_0861FFF4[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); +static const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); +static const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); -const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); -const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); -const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); -const u16 gUnknown_0861FD4C[] = INCBIN_U16("graphics/pokenav/outline.gbapal"); -const u32 gUnknown_0861FD6C[] = INCBIN_U32("graphics/pokenav/outline.4bpp.lz"); -const u32 gUnknown_0861FFF4[] = INCBIN_U32("graphics/pokenav/outline_map.bin.lz"); -const u16 gUnknown_08620104[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); -const u32 gUnknown_08620124[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); - -const struct BgTemplate gUnknown_08620194[] = { +static const struct BgTemplate gUnknown_08620194[] = { { .bg = 1, .charBaseIndex = 1, @@ -122,7 +120,7 @@ const struct BgTemplate gUnknown_08620194[] = { } }; -const LoopedTask gUnknown_086201A0[] = { +static const LoopedTask gUnknown_086201A0[] = { NULL, sub_81C9C6C, sub_81C9CA8, @@ -134,7 +132,7 @@ const LoopedTask gUnknown_086201A0[] = { sub_81C9F28 }; -const struct CompressedSpriteSheet gUnknown_086201C4[] = +static const struct CompressedSpriteSheet gUnknown_086201C4[] = { { .data = gPokenavOptions_Gfx, @@ -148,7 +146,7 @@ const struct CompressedSpriteSheet gUnknown_086201C4[] = } }; -const struct SpritePalette gUnknown_086201D4[] = +static const struct SpritePalette gUnknown_086201D4[] = { {gPokenavOptions_Pal + 0x00, 4}, {gPokenavOptions_Pal + 0x10, 5}, @@ -159,19 +157,19 @@ const struct SpritePalette gUnknown_086201D4[] = {} }; -const u16 gUnknown_0862020C[] = {0, 0}; -const u16 gUnknown_08620210[] = {0x20, 1}; -const u16 gUnknown_08620214[] = {0x40, 4}; -const u16 gUnknown_08620218[] = {0x60, 2}; -const u16 gUnknown_0862021C[] = {0x80, 3}; -const u16 gUnknown_08620220[] = {0xA0, 1}; -const u16 gUnknown_08620224[] = {0xC0, 1}; -const u16 gUnknown_08620228[] = {0xE0, 4}; -const u16 gUnknown_0862022C[] = {0x100, 1}; -const u16 gUnknown_08620230[] = {0x120, 2}; -const u16 gUnknown_08620234[] = {0x140, 0}; -const u16 gUnknown_08620238[] = {0x160, 0}; -const u16 gUnknown_0862023C[] = {0x180, 3}; +static const u16 gUnknown_0862020C[] = {0, 0}; +static const u16 gUnknown_08620210[] = {0x20, 1}; +static const u16 gUnknown_08620214[] = {0x40, 4}; +static const u16 gUnknown_08620218[] = {0x60, 2}; +static const u16 gUnknown_0862021C[] = {0x80, 3}; +static const u16 gUnknown_08620220[] = {0xA0, 1}; +static const u16 gUnknown_08620224[] = {0xC0, 1}; +static const u16 gUnknown_08620228[] = {0xE0, 4}; +static const u16 gUnknown_0862022C[] = {0x100, 1}; +static const u16 gUnknown_08620230[] = {0x120, 2}; +static const u16 gUnknown_08620234[] = {0x140, 0}; +static const u16 gUnknown_08620238[] = {0x160, 0}; +static const u16 gUnknown_0862023C[] = {0x180, 3}; struct UnkStruct_08620240 { @@ -180,27 +178,27 @@ struct UnkStruct_08620240 const u16 *unk4[6]; }; -const struct UnkStruct_08620240 gUnknown_08620240[5] = +static const struct UnkStruct_08620240 gUnknown_08620240[5] = { { 0x2A, 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C, NULL, NULL, NULL} + {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C} }, { 0x2A, 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C, NULL, NULL} + {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C} }, { 0x2A, 0x14, - {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C, NULL} + {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C} }, { 0x38, 0x14, - {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C, NULL, NULL, NULL} + {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C} }, { 0x28, @@ -209,7 +207,7 @@ const struct UnkStruct_08620240 gUnknown_08620240[5] = }, }; -const struct WindowTemplate gUnknown_086202CC = +static const struct WindowTemplate gUnknown_086202CC = { .bg = 1, .tilemapLeft = 3, @@ -220,7 +218,7 @@ const struct WindowTemplate gUnknown_086202CC = .baseBlock = 8 }; -const u8 *const gUnknown_086202D4[] = +static const u8 *const gUnknown_086202D4[] = { gUnknown_085EBCC5, gUnknown_085EBCE8, @@ -238,11 +236,11 @@ const u8 *const gUnknown_086202D4[] = gUnknown_085EBE41 }; -const u8 gUnknown_0862030C[] = {6, 8, 7}; +static const u8 gUnknown_0862030C[] = {6, 8, 7}; -const u8 gUnknown_0862030F[] = {6, 8, 7, 0, 0}; +static const u8 gUnknown_0862030F[] = {6, 8, 7, 0, 0}; -const struct OamData gUnknown_08620314 = +static const struct OamData gUnknown_08620314 = { .y = 0, .affineMode = 0, @@ -256,26 +254,26 @@ const struct OamData gUnknown_08620314 = .paletteNum = 0, }; -const union AffineAnimCmd gUnknown_0862031C[] = +static const union AffineAnimCmd gUnknown_0862031C[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_0862032C[] = +static const union AffineAnimCmd gUnknown_0862032C[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0x12), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_08620344[] = +static const union AffineAnimCmd *const gUnknown_08620344[] = { gUnknown_0862031C, gUnknown_0862032C }; -const struct SpriteTemplate gUnknown_0862034C = +static const struct SpriteTemplate gUnknown_0862034C = { .tileTag = 3, .paletteTag = 4, @@ -286,7 +284,7 @@ const struct SpriteTemplate gUnknown_0862034C = .callback = SpriteCallbackDummy, }; -const struct OamData gUnknown_08620364 = +static const struct OamData gUnknown_08620364 = { .y = 0, .affineMode = 0, @@ -300,7 +298,7 @@ const struct OamData gUnknown_08620364 = .paletteNum = 0, }; -const struct SpriteTemplate gUnknown_0862036C = +static const struct SpriteTemplate gUnknown_0862036C = { .tileTag = 1, .paletteTag = 3, @@ -311,7 +309,7 @@ const struct SpriteTemplate gUnknown_0862036C = .callback = SpriteCallbackDummy, }; -const struct ScanlineEffectParams gUnknown_08620384 = +static const struct ScanlineEffectParams gUnknown_08620384 = { (void *)REG_ADDR_WIN0H, ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, @@ -319,7 +317,7 @@ const struct ScanlineEffectParams gUnknown_08620384 = 0 }; -bool32 sub_81C98D4(void) +static bool32 sub_81C98D4(void) { s32 i; @@ -356,7 +354,7 @@ bool32 sub_81C9940(void) return TRUE; } -struct Pokenav2Struct * sub_81C9958(void) +static struct Pokenav2Struct * sub_81C9958(void) { struct Pokenav2Struct * unk = AllocSubstruct(2, sizeof(struct Pokenav2Struct)); @@ -397,14 +395,14 @@ void sub_81C99D4(void) FreePokenavSubstruct(2); } -bool32 sub_81C99FC(void) +static bool32 sub_81C99FC(void) { struct Pokenav2Struct * unk = GetSubstructPtr(2); return IsLoopedTaskActive(unk->loopedTaskId); } -u32 sub_81C9A10(s32 state) +static u32 sub_81C9A10(s32 state) { struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -511,7 +509,7 @@ u32 sub_81C9A10(s32 state) return 4; } -u32 sub_81C9C6C(s32 state) +static u32 sub_81C9C6C(s32 state) { switch (state) { @@ -531,7 +529,7 @@ u32 sub_81C9C6C(s32 state) return 4; } -u32 sub_81C9CA8(s32 state) +static u32 sub_81C9CA8(s32 state) { switch (state) { @@ -570,7 +568,7 @@ u32 sub_81C9CA8(s32 state) return 4; } -u32 sub_81C9D44(s32 state) +static u32 sub_81C9D44(s32 state) { switch (state) { @@ -608,7 +606,7 @@ u32 sub_81C9D44(s32 state) return 4; } -u32 sub_81C9DD8(s32 state) +static u32 sub_81C9DD8(s32 state) { switch (state) { @@ -641,7 +639,7 @@ u32 sub_81C9DD8(s32 state) return 4; } -u32 sub_81C9E58(s32 state) +static u32 sub_81C9E58(s32 state) { switch (state) { @@ -672,7 +670,7 @@ u32 sub_81C9E58(s32 state) return 4; } -u32 sub_81C9EC8(s32 state) +static u32 sub_81C9EC8(s32 state) { switch (state) { @@ -688,7 +686,7 @@ u32 sub_81C9EC8(s32 state) return 4; } -u32 sub_81C9EF8(s32 state) +static u32 sub_81C9EF8(s32 state) { switch (state) { @@ -704,7 +702,7 @@ u32 sub_81C9EF8(s32 state) return 4; } -u32 sub_81C9F28(s32 state) +static u32 sub_81C9F28(s32 state) { switch (state) { @@ -746,7 +744,7 @@ u32 sub_81C9F28(s32 state) return 4; } -void sub_81C9FC4(void) +static void sub_81C9FC4(void) { u32 i; @@ -755,7 +753,7 @@ void sub_81C9FC4(void) Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); } -void sub_81C9FEC(void) +static void sub_81C9FEC(void) { FreeSpriteTilesByTag(3); FreeSpriteTilesByTag(1); @@ -769,7 +767,7 @@ void sub_81C9FEC(void) sub_81CA698(); } -void sub_81CA02C(void) +static void sub_81CA02C(void) { s32 i, j; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -785,7 +783,7 @@ void sub_81CA02C(void) } } -void sub_81CA094(void) +static void sub_81CA094(void) { s32 i, j; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -800,13 +798,13 @@ void sub_81CA094(void) } } -void sub_81CA0C8(void) +static void sub_81CA0C8(void) { s32 r0 = sub_81C9894(); sub_81CA0EC(gUnknown_08620240[r0].unk4, gUnknown_08620240[r0].unk0, gUnknown_08620240[r0].unk2); } -void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) +static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) { s32 i, j; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -840,7 +838,7 @@ void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) } } -void sub_81CA20C(void) +static void sub_81CA20C(void) { s32 i; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -867,7 +865,7 @@ void sub_81CA20C(void) } } -void sub_81CA278(void) +static void sub_81CA278(void) { s32 i; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -892,7 +890,7 @@ void sub_81CA278(void) unk->field_00b = r5; } -void sub_81CA2DC(void) +static void sub_81CA2DC(void) { s32 i; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -909,7 +907,7 @@ void sub_81CA2DC(void) } } -bool32 sub_81CA324(void) +static bool32 sub_81CA324(void) { s32 i; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -926,7 +924,7 @@ bool32 sub_81CA324(void) return FALSE; } -void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) +static void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) { s32 i; @@ -942,7 +940,7 @@ void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) } } -void sub_81CA3B4(struct Sprite ** sprites) +static void sub_81CA3B4(struct Sprite ** sprites) { s32 i; struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -967,7 +965,7 @@ void sub_81CA3B4(struct Sprite ** sprites) unk->field_00c++; } -void sub_81CA448(struct Sprite ** sprites, bool32 a1) +static void sub_81CA448(struct Sprite ** sprites, bool32 a1) { s32 i; @@ -978,7 +976,7 @@ void sub_81CA448(struct Sprite ** sprites, bool32 a1) } } -void sub_81CA474(struct Sprite * sprite) +static void sub_81CA474(struct Sprite * sprite) { sprite->data[0]--; if (sprite->data[0] != -1) @@ -993,7 +991,7 @@ void sub_81CA474(struct Sprite * sprite) } } -void sub_81CA4AC(struct Sprite * sprite) +static void sub_81CA4AC(struct Sprite * sprite) { s32 r0; s32 r1; @@ -1045,7 +1043,7 @@ void sub_81CA4AC(struct Sprite * sprite) } } -void sub_81CA580(u8 taskId) +static void sub_81CA580(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -1088,7 +1086,7 @@ void sub_81CA580(u8 taskId) data[0]--; } -void sub_81CA640(void) +static void sub_81CA640(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); u8 spriteId = CreateSprite(&gUnknown_0862036C, 0x10, 0x60, 4); @@ -1099,13 +1097,13 @@ void sub_81CA640(void) ptr->field_028->invisible = TRUE; } -void sub_81CA698(void) +static void sub_81CA698(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); DestroySprite(ptr->field_028); } -void sub_81CA6AC(struct Sprite * sprite) +static void sub_81CA6AC(struct Sprite * sprite) { sprite->data[0]++; if (sprite->data[0] > 8) @@ -1115,7 +1113,7 @@ void sub_81CA6AC(struct Sprite * sprite) } } -void sub_81CA6E0(void) +static void sub_81CA6E0(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); @@ -1125,7 +1123,7 @@ void sub_81CA6E0(void) CopyWindowToVram(ptr->field_008, 3); } -void sub_81CA714(void) +static void sub_81CA714(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); int i = sub_81C98B4(); @@ -1136,7 +1134,7 @@ void sub_81CA714(void) } -void sub_81CA770(void) +static void sub_81CA770(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); const u8 * s = gText_NoRibbonWinners; @@ -1145,53 +1143,53 @@ void sub_81CA770(void) AddTextPrinterParameterized3(ptr->field_008, 1, (192 - width) / 2, 1, gUnknown_0862030F, 0, s); } -bool32 sub_81CA7C4(void) +static bool32 sub_81CA7C4(void) { return IsDma3ManagerBusyWithBgCopy(); } -void sub_81CA7D4(void) +static void sub_81CA7D4(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); ptr->field_00a = CreateTask(sub_81CA808, 2); } -void sub_81CA7F4(void) +static void sub_81CA7F4(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); DestroyTask(ptr->field_00a); } -void sub_81CA808(u8 taskId) +static void sub_81CA808(u8 taskId) { ChangeBgX(3, 0x80, 1); } -void sub_81CA818(void) +static void sub_81CA818(void) { u8 taskId = CreateTask(sub_81CA8B0, 3); SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 1)); SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 7)); } -void sub_81CA850(void) +static void sub_81CA850(void) { CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78 + 7, 0x31, 4); } -void sub_81CA864(void) +static void sub_81CA864(void) { u8 taskId = CreateTask(sub_81CA8B0, 3); SetWordTaskArg(taskId, 1, (uintptr_t)(gUnknown_0861FC78 + 7)); SetWordTaskArg(taskId, 3, (uintptr_t)(gUnknown_0861FC78 + 1)); } -bool32 sub_81CA89C(void) +static bool32 sub_81CA89C(void) { return FuncIsActiveTask(sub_81CA8B0); } -void sub_81CA8B0(u8 taskId) +static void sub_81CA8B0(u8 taskId) { u16 sp8[2]; s16 * data = gTasks[taskId].data; @@ -1204,7 +1202,7 @@ void sub_81CA8B0(u8 taskId) DestroyTask(taskId); } -void sub_81CA914(void) +static void sub_81CA914(void) { TransferPlttBuffer(); LoadOam(); @@ -1212,7 +1210,7 @@ void sub_81CA914(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void titlescreen_0(void) // almost definitely the wrong name +static void titlescreen_0(void) // almost definitely the wrong name { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); @@ -1227,7 +1225,7 @@ void titlescreen_0(void) // almost definitely the wrong name CreateTask(sub_81CA9EC, 3); } -void sub_81CA994(void) +static void sub_81CA994(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); @@ -1236,18 +1234,18 @@ void sub_81CA994(void) SetPokenavVBlankCallback(); } -void sub_81CA9C8(void) +static void sub_81CA9C8(void) { SetGpuReg(REG_OFFSET_BLDCNT, 0); } -void sub_81CA9D8(void) +static void sub_81CA9D8(void) { sub_81CAA3C(); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); } -void sub_81CA9EC(u8 taskId) +static void sub_81CA9EC(u8 taskId) { s16 * data = gTasks[taskId].data; data[0]++; @@ -1260,15 +1258,15 @@ void sub_81CA9EC(u8 taskId) } } -void sub_81CAA3C(void) +static void sub_81CAA3C(void) { int i = sub_81C9894(); int j = sub_81C98A4(); int r4 = gUnknown_08620240[i].unk2 * j + gUnknown_08620240[i].unk0 - 8; CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140); CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140); - CpuFill16(0x72F0, &gScanlineEffectRegBuffers[0][r4], 0x20); - CpuFill16(0x72F0, &gScanlineEffectRegBuffers[1][r4], 0x20); + CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[0][r4], 0x20); + CpuFill16(RGB(16, 23, 28), &gScanlineEffectRegBuffers[1][r4], 0x20); } void sub_81CAADC(void) From ffc7a9be27ee534643ce4c969c89b7556f78b707 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 4 Aug 2019 21:23:38 -0400 Subject: [PATCH 09/12] Fix build errors --- src/pokenav.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pokenav.c b/src/pokenav.c index 132e4123b0..b4b185c847 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -37,21 +37,22 @@ struct UnknownPokenavCallbackStruct void (*unk18)(void); }; +// TODO: Move these to pokenav.h extern bool32 sub_81C9924(void); extern u32 sub_81C99C0(void); -extern void sub_81C9990(int); +extern void sub_81C9990(s32); extern bool32 sub_81C9940(void); extern u32 sub_81CCFD8(void); extern u32 sub_81CD070(void); extern bool32 sub_81CDDD4(void); -extern void sub_81CDE2C(int); +extern void sub_81CDE2C(s32); extern u32 sub_81CDE64(void); extern void sub_81CD1C0(void); extern void sub_81CECA0(void); extern u32 sub_81CEF3C(void); extern u32 sub_81CEFDC(void); extern bool32 sub_81CF330(void); -extern void sub_81CF3A0(int); +extern void sub_81CF3A0(s32); extern u32 sub_81CF3D0(void); extern void sub_81CEFF0(void); extern void sub_81CF3F8(void); From a42e5c24e6ed91c44eeb615101a182218b237987 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 5 Aug 2019 08:40:03 -0400 Subject: [PATCH 10/12] Use LT return defines --- src/pokenav_unk_2.c | 142 ++++++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 7265a1a00d..d852236d20 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -421,42 +421,42 @@ static u32 sub_81C9A10(s32 state) ChangeBgY(2, 0, 0); ChangeBgX(3, 0, 0); ChangeBgY(3, 0, 0); - return 0; + return LT_INC_AND_PAUSE; case 1: if (free_temp_tile_data_buffers_if_possible()) - return 2; + return LT_PAUSE; decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FD6C, 0, 0, 0); decompress_and_copy_tile_data_to_vram(2, gUnknown_0861FFF4, 0, 0, 1); CopyPaletteIntoBufferUnfaded(gUnknown_0861FD4C, 0x20, 0x20); - return 0; + return LT_INC_AND_PAUSE; case 2: if (free_temp_tile_data_buffers_if_possible()) - return 2; + return LT_PAUSE; decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FC98, 0, 0, 0); decompress_and_copy_tile_data_to_vram(3, gUnknown_0861FCAC, 0, 0, 1); CopyPaletteIntoBufferUnfaded(gUnknown_0861FC78, 0x30, 0x20); if (sub_81C9894() == 3 || sub_81C9894() == 4) sub_81CA850(); - return 0; + return LT_INC_AND_PAUSE; case 3: if (free_temp_tile_data_buffers_if_possible()) - return 2; + return LT_PAUSE; sub_81CA6E0(); sub_81CA7D4(); - return 1; + return LT_INC_AND_CONTINUE; case 4: sub_81C9FC4(); - return 1; + return LT_INC_AND_CONTINUE; case 5: sub_81CA714(); sub_81CA02C(); sub_81CA640(); sub_81CA0C8(); - return 0; + return LT_INC_AND_PAUSE; case 6: if (sub_81CA7C4()) - return 2; - return 1; + return LT_PAUSE; + return LT_INC_AND_CONTINUE; case 7: ShowBg(1); ShowBg(2); @@ -480,10 +480,10 @@ static u32 sub_81C9A10(s32 state) LoadLeftHeaderGfxForIndex(0); break; } - return 0; + return LT_INC_AND_PAUSE; case 8: if (IsPaletteFadeActive()) - return 2; + return LT_PAUSE; switch (sub_81C9894()) { case 4: @@ -498,15 +498,15 @@ static u32 sub_81C9A10(s32 state) } sub_81CA20C(); titlescreen_0(); - return 1; + return LT_INC_AND_CONTINUE; case 9: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; break; } - return 4; + return LT_FINISH; } static u32 sub_81C9C6C(s32 state) @@ -518,15 +518,15 @@ static u32 sub_81C9C6C(s32 state) sub_81CA278(); sub_81CA714(); PlaySE(SE_SELECT); - return 0; + return LT_INC_AND_PAUSE; case 1: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81CA7C4()) - return 2; + return LT_PAUSE; break; } - return 4; + return LT_FINISH; } static u32 sub_81C9CA8(s32 state) @@ -538,34 +538,34 @@ static u32 sub_81C9CA8(s32 state) sub_81CA2DC(); sub_81C7FC4(0, 0); PlaySE(SE_SELECT); - return 0; + return LT_INC_AND_PAUSE; case 1: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; sub_81CA0C8(); LoadLeftHeaderGfxForIndex(1); - return 0; + return LT_INC_AND_PAUSE; case 2: sub_81CA20C(); sub_81C7FA0(1, FALSE, FALSE); sub_81CA818(); sub_81CA714(); - return 0; + return LT_INC_AND_PAUSE; case 3: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; if (sub_81CA89C()) - return 2; + return LT_PAUSE; if (sub_81CA7C4()) - return 2; + return LT_PAUSE; sub_81CA9D8(); break; } - return 4; + return LT_FINISH; } static u32 sub_81C9D44(s32 state) @@ -576,34 +576,34 @@ static u32 sub_81C9D44(s32 state) sub_81CA9C8(); sub_81CA2DC(); sub_81C7FC4(1, 0); - return 0; + return LT_INC_AND_PAUSE; case 1: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; sub_81CA0C8(); LoadLeftHeaderGfxForIndex(0); - return 0; + return LT_INC_AND_PAUSE; case 2: sub_81CA20C(); sub_81C7FA0(0, FALSE, FALSE); sub_81CA864(); sub_81CA714(); - return 0; + return LT_INC_AND_PAUSE; case 3: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; if (sub_81CA89C()) - return 2; + return LT_PAUSE; if (sub_81CA7C4()) - return 2; + return LT_PAUSE; sub_81CA9D8(); break; } - return 4; + return LT_FINISH; } static u32 sub_81C9DD8(s32 state) @@ -614,29 +614,29 @@ static u32 sub_81C9DD8(s32 state) sub_81CA9C8(); sub_81CA2DC(); PlaySE(SE_SELECT); - return 0; + return LT_INC_AND_PAUSE; case 1: if (sub_81CA324()) - return 2; + return LT_PAUSE; LoadLeftHeaderGfxForIndex(7); sub_81CA0C8(); - return 0; + return LT_INC_AND_PAUSE; case 2: sub_81CA20C(); sub_81C7FA0(7, FALSE, FALSE); sub_81CA714(); - return 0; + return LT_INC_AND_PAUSE; case 3: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; if (sub_81CA89C()) - return 2; + return LT_PAUSE; sub_81CA9D8(); break; } - return 4; + return LT_FINISH; } static u32 sub_81C9E58(s32 state) @@ -647,27 +647,27 @@ static u32 sub_81C9E58(s32 state) sub_81CA9C8(); sub_81CA2DC(); sub_81C7FC4(7, 0); - return 0; + return LT_INC_AND_PAUSE; case 1: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; sub_81CA0C8(); - return 0; + return LT_INC_AND_PAUSE; case 2: sub_81CA20C(); sub_81CA714(); - return 0; + return LT_INC_AND_PAUSE; case 3: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81CA89C()) - return 2; + return LT_PAUSE; sub_81CA9D8(); break; } - return 4; + return LT_FINISH; } static u32 sub_81C9EC8(s32 state) @@ -677,13 +677,13 @@ static u32 sub_81C9EC8(s32 state) case 0: PlaySE(SE_HAZURE); sub_81CA770(); - return 0; + return LT_INC_AND_PAUSE; case 1: if (IsDma3ManagerBusyWithBgCopy()) - return 2; + return LT_PAUSE; break; } - return 4; + return LT_FINISH; } static u32 sub_81C9EF8(s32 state) @@ -693,13 +693,13 @@ static u32 sub_81C9EF8(s32 state) case 0: PlaySE(SE_SELECT); sub_81CA714(); - return 0; + return LT_INC_AND_PAUSE; case 1: if (IsDma3ManagerBusyWithBgCopy()) - return 2; + return LT_PAUSE; break; } - return 4; + return LT_FINISH; } static u32 sub_81C9F28(s32 state) @@ -708,10 +708,10 @@ static u32 sub_81C9F28(s32 state) { case 0: sub_81C7BA4(sub_81C98C4()); - return 0; + return LT_INC_AND_PAUSE; case 1: if (IsDma3ManagerBusyWithBgCopy_()) - return 2; + return LT_PAUSE; sub_81C7880(); sub_81CA9C8(); sub_81CA2DC(); @@ -728,20 +728,20 @@ static u32 sub_81C9F28(s32 state) break; } PlaySE(SE_SELECT); - return 0; + return LT_INC_AND_PAUSE; case 2: if (sub_81CA324()) - return 2; + return LT_PAUSE; if (sub_81C8010()) - return 2; + return LT_PAUSE; sub_81C7AC0(0); - return 0; + return LT_INC_AND_PAUSE; case 3: if (IsPaletteFadeActive()) - return 2; + return LT_PAUSE; break; } - return 4; + return LT_FINISH; } static void sub_81C9FC4(void) From 329670e16e18b1ca53195e02c6bc72c0e68af8fa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 5 Aug 2019 08:46:52 -0400 Subject: [PATCH 11/12] Minor fixes --- include/global.h | 4 ++++ src/pokenav_unk_2.c | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/global.h b/include/global.h index 16f08c895d..14377d8bbc 100644 --- a/include/global.h +++ b/include/global.h @@ -32,6 +32,10 @@ #define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0])) +// GameFreak used a macro called "NELEMS", as evidenced by +// AgbAssert calls. +#define NELEMS(arr) (sizeof(arr)/sizeof(*(arr))) + #define SWAP(a, b, temp) \ { \ temp = a; \ diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index d852236d20..6165c3a9bb 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -76,7 +76,7 @@ static void sub_81CA850(void); static void sub_81CA864(void); static bool32 sub_81CA89C(void); static void sub_81CA8B0(u8 taskId); -static void titlescreen_0(void); +static void sub_81CA92C(void); static void sub_81CA994(void); static void sub_81CA9C8(void); static void sub_81CA9D8(void); @@ -497,7 +497,7 @@ static u32 sub_81C9A10(s32 state) break; } sub_81CA20C(); - titlescreen_0(); + sub_81CA92C(); return LT_INC_AND_CONTINUE; case 9: if (sub_81CA324()) @@ -746,9 +746,9 @@ static u32 sub_81C9F28(s32 state) static void sub_81C9FC4(void) { - u32 i; + s32 i; - for (i = 0; i < 2; i++) + for (i = 0; i < NELEMS(gUnknown_086201C4); i++) LoadCompressedSpriteSheet(&gUnknown_086201C4[i]); Pokenav_AllocAndLoadPalettes(gUnknown_086201D4); } @@ -1210,7 +1210,7 @@ static void sub_81CA914(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void titlescreen_0(void) // almost definitely the wrong name +static void sub_81CA92C(void) { SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN); SetGpuReg(REG_OFFSET_BLDY, 0); From 463e1eb6b836be8f6f1b9465ada1072a4d3d37d6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 5 Aug 2019 09:17:21 -0400 Subject: [PATCH 12/12] Name some fields in Pokenav2Struct --- src/pokenav_unk_2.c | 126 ++++++++++++++++++++++---------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 6165c3a9bb..1c40e146fb 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -17,21 +17,21 @@ #include "constants/songs.h" #include "constants/rgb.h" -// Match Call +// Top Menu struct Pokenav2Struct { bool32 (*callback)(void); u32 loopedTaskId; - u16 field_008; - u8 field_00a; - u8 field_00b; - u8 field_00c; + u16 optionDescriptionWindowId; + u8 bg3ScrollTaskId; + u8 cursorPos; + bool8 otherIconsInMotion; u8 field_00d; - bool32 field_010[6]; + bool32 iconVisible[6]; struct Sprite * field_028; - struct Sprite * field_02c[6][4]; - u8 field_08c[0x800]; + struct Sprite * iconSprites[6][4]; + u16 bg1TilemapBuffer[0x400]; }; static struct Pokenav2Struct * sub_81C9958(void); @@ -221,19 +221,19 @@ static const struct WindowTemplate gUnknown_086202CC = static const u8 *const gUnknown_086202D4[] = { gUnknown_085EBCC5, - gUnknown_085EBCE8, - gUnknown_085EBD01, - gUnknown_085EBD1C, - gUnknown_085EBD34, - gUnknown_085EBD83, - gUnknown_085EBDA2, - gUnknown_085EBDBF, - gUnknown_085EBDDB, - gUnknown_085EBDEE, - gUnknown_085EBE06, - gUnknown_085EBE19, - gUnknown_085EBE2D, - gUnknown_085EBE41 + gUnknown_085EBCE8, + gUnknown_085EBD01, + gUnknown_085EBD1C, + gUnknown_085EBD34, + gUnknown_085EBD83, + gUnknown_085EBDA2, + gUnknown_085EBDBF, + gUnknown_085EBDDB, + gUnknown_085EBDEE, + gUnknown_085EBE06, + gUnknown_085EBE19, + gUnknown_085EBE2D, + gUnknown_085EBE41 }; static const u8 gUnknown_0862030C[] = {6, 8, 7}; @@ -360,7 +360,7 @@ static struct Pokenav2Struct * sub_81C9958(void) if (unk != NULL) { - unk->field_00c = 0; + unk->otherIconsInMotion = FALSE; unk->loopedTaskId = CreateLoopedTask(sub_81C9A10, 1); unk->callback = sub_81C99FC; } @@ -389,7 +389,7 @@ void sub_81C99D4(void) struct Pokenav2Struct * unk = GetSubstructPtr(2); sub_81CA7F4(); - RemoveWindow(unk->field_008); + RemoveWindow(unk->optionDescriptionWindowId); sub_81C9FEC(); sub_81CA994(); FreePokenavSubstruct(2); @@ -411,7 +411,7 @@ static u32 sub_81C9A10(s32 state) case 0: InitBgTemplates(gUnknown_08620194, ARRAY_COUNT(gUnknown_08620194)); decompress_and_copy_tile_data_to_vram(1, gPokenavMessageBox_Gfx, 0, 0, 0); - SetBgTilemapBuffer(1, unk->field_08c); + SetBgTilemapBuffer(1, unk->bg1TilemapBuffer); CopyToBgTilemapBuffer(1, gPokenavMessageBox_Tilemap, 0, 0); CopyBgTilemapBufferToVram(1); CopyPaletteIntoBufferUnfaded(gPokenavMessageBox_Pal, 0x10, 0x20); @@ -777,7 +777,7 @@ static void sub_81CA02C(void) for (j = 0; j < 4; j++) { u8 spriteId = CreateSprite(&gUnknown_0862034C, 0x8c, 20 * i + 40, 3); - unk->field_02c[i][j] = &gSprites[spriteId]; + unk->iconSprites[i][j] = &gSprites[spriteId]; gSprites[spriteId].pos2.x = 32 * j; } } @@ -792,8 +792,8 @@ static void sub_81CA094(void) { for (j = 0; j < 4; j++) { - FreeSpriteOamMatrix(unk->field_02c[i][j]); - DestroySprite(unk->field_02c[i][j]); + FreeSpriteOamMatrix(unk->iconSprites[i][j]); + DestroySprite(unk->iconSprites[i][j]); } } } @@ -816,22 +816,22 @@ static void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) { for (j = 0; j < 4; j++) { - unk->field_02c[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; - unk->field_02c[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); - unk->field_02c[i][j]->invisible = TRUE; - unk->field_02c[i][j]->pos1.y = a1; - unk->field_02c[i][j]->pos1.x = 0x8c; - unk->field_02c[i][j]->pos2.x = 32 * j; + unk->iconSprites[i][j]->oam.tileNum = (*a0)[0] + sp04 + 8 * j; + unk->iconSprites[i][j]->oam.paletteNum = IndexOfSpritePaletteTag((*a0)[1] + 4); + unk->iconSprites[i][j]->invisible = TRUE; + unk->iconSprites[i][j]->pos1.y = a1; + unk->iconSprites[i][j]->pos1.x = 0x8c; + unk->iconSprites[i][j]->pos2.x = 32 * j; } - unk->field_010[i] = TRUE; + unk->iconVisible[i] = TRUE; } else { for (j = 0; j < 4; j++) { - unk->field_02c[i][j]->invisible = TRUE; + unk->iconSprites[i][j]->invisible = TRUE; } - unk->field_010[i] = FALSE; + unk->iconVisible[i] = FALSE; } a0++; a1 += a2; @@ -848,20 +848,20 @@ static void sub_81CA20C(void) for (i = 0; i < 6; i++) { - if (unk->field_010[i]) + if (unk->iconVisible[i]) { if (r7++ == r8) { r2 = 0x82; - unk->field_00b = i; + unk->cursorPos = i; } else r2 = 0x8c; - sub_81CA35C(unk->field_02c[i], 0x100, r2, 0xC); - sub_81CA448(unk->field_02c[i], FALSE); + sub_81CA35C(unk->iconSprites[i], 0x100, r2, 0xC); + sub_81CA448(unk->iconSprites[i], FALSE); } else - sub_81CA448(unk->field_02c[i], TRUE); + sub_81CA448(unk->iconSprites[i], TRUE); } } @@ -874,7 +874,7 @@ static void sub_81CA278(void) for (i = 0, r5 = 0; i < 6; i++) { - if (unk->field_010[i]) + if (unk->iconVisible[i]) { if (r5 == r3) { @@ -885,9 +885,9 @@ static void sub_81CA278(void) } } - sub_81CA35C(unk->field_02c[unk->field_00b], 0x82, 0x8c, 0x4); - sub_81CA35C(unk->field_02c[r5], 0x8c, 0x82, 0x4); - unk->field_00b = r5; + sub_81CA35C(unk->iconSprites[unk->cursorPos], 0x82, 0x8c, 0x4); + sub_81CA35C(unk->iconSprites[r5], 0x8c, 0x82, 0x4); + unk->cursorPos = r5; } static void sub_81CA2DC(void) @@ -897,12 +897,12 @@ static void sub_81CA2DC(void) for (i = 0; i < 6; i++) { - if (unk->field_010[i]) + if (unk->iconVisible[i]) { - if (unk->field_00b != i) - sub_81CA35C(unk->field_02c[i], 0x8C, 0x100, 0x8); + if (unk->cursorPos != i) + sub_81CA35C(unk->iconSprites[i], 0x8C, 0x100, 0x8); else - sub_81CA3B4(unk->field_02c[i]); + sub_81CA3B4(unk->iconSprites[i]); } } } @@ -914,11 +914,11 @@ static bool32 sub_81CA324(void) for (i = 0; i < 6; i++) { - if (unk->field_02c[i][0]->callback != SpriteCallbackDummy) + if (unk->iconSprites[i][0]->callback != SpriteCallbackDummy) return TRUE; } - if (unk->field_00c) + if (unk->otherIconsInMotion) return TRUE; return FALSE; @@ -962,7 +962,7 @@ static void sub_81CA3B4(struct Sprite ** sprites) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0x00)); taskId = CreateTask(sub_81CA580, 3); gTasks[taskId].data[0] = 8; - unk->field_00c++; + unk->otherIconsInMotion++; } static void sub_81CA448(struct Sprite ** sprites, bool32 a1) @@ -1075,7 +1075,7 @@ static void sub_81CA580(u8 taskId) data[4]++; if (data[4] == 12) { - ((struct Pokenav2Struct *)GetSubstructPtr(2))->field_00c--; + ((struct Pokenav2Struct *)GetSubstructPtr(2))->otherIconsInMotion--; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x00, 0x10)); DestroyTask(taskId); } @@ -1117,10 +1117,10 @@ static void sub_81CA6E0(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); - ptr->field_008 = AddWindow(&gUnknown_086202CC); - PutWindowTilemap(ptr->field_008); - FillWindowPixelBuffer(ptr->field_008, PIXEL_FILL(6)); - CopyWindowToVram(ptr->field_008, 3); + ptr->optionDescriptionWindowId = AddWindow(&gUnknown_086202CC); + PutWindowTilemap(ptr->optionDescriptionWindowId); + FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6)); + CopyWindowToVram(ptr->optionDescriptionWindowId, 3); } static void sub_81CA714(void) @@ -1129,8 +1129,8 @@ static void sub_81CA714(void) int i = sub_81C98B4(); const u8 * s = gUnknown_086202D4[i]; u32 width = GetStringWidth(1, s, -1); - FillWindowPixelBuffer(ptr->field_008, PIXEL_FILL(6)); - AddTextPrinterParameterized3(ptr->field_008, 1, (192 - width) / 2, 1, gUnknown_0862030C, 0, s); + FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, gUnknown_0862030C, 0, s); } @@ -1139,8 +1139,8 @@ static void sub_81CA770(void) struct Pokenav2Struct * ptr = GetSubstructPtr(2); const u8 * s = gText_NoRibbonWinners; u32 width = GetStringWidth(1, s, -1); - FillWindowPixelBuffer(ptr->field_008, PIXEL_FILL(6)); - AddTextPrinterParameterized3(ptr->field_008, 1, (192 - width) / 2, 1, gUnknown_0862030F, 0, s); + FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6)); + AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, gUnknown_0862030F, 0, s); } static bool32 sub_81CA7C4(void) @@ -1151,13 +1151,13 @@ static bool32 sub_81CA7C4(void) static void sub_81CA7D4(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); - ptr->field_00a = CreateTask(sub_81CA808, 2); + ptr->bg3ScrollTaskId = CreateTask(sub_81CA808, 2); } static void sub_81CA7F4(void) { struct Pokenav2Struct * ptr = GetSubstructPtr(2); - DestroyTask(ptr->field_00a); + DestroyTask(ptr->bg3ScrollTaskId); } static void sub_81CA808(u8 taskId)