From 698c2879e4d29d78b10f47718fcf99de1b0c2ee4 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 11 Feb 2019 14:59:44 -0500 Subject: Decompiled sub_81C7078 --- asm/pokenav.s | 43 +---------------- ld_script.txt | 1 + src/pokenav_main.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+), 42 deletions(-) create mode 100644 src/pokenav_main.c diff --git a/asm/pokenav.s b/asm/pokenav.s index 40ce730ea..f6f2b69b6 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -7,48 +7,7 @@ - thumb_func_start sub_81C7078 -sub_81C7078: @ 81C7078 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl is_c1_link_related_active - cmp r0, 0 - bne _081C7090 - ldr r0, =sub_81C7170 - b _081C7092 - .pool -_081C7090: - ldr r0, =sub_81C71E4 -_081C7092: - lsls r1, r4, 24 - lsrs r1, 24 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl SetWordTaskArg - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r2, =gUnknown_0203CF3C - ldrb r1, [r2] - strh r1, [r0, 0xE] - ldrb r0, [r2] - adds r1, r0, 0x1 - strb r1, [r2] - lsls r0, 24 - lsrs r0, 8 - orrs r0, r4 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C7078 + thumb_func_start sub_81C70D8 sub_81C70D8: @ 81C70D8 diff --git a/ld_script.txt b/ld_script.txt index 306a1f4b0..a92e1d85e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -289,6 +289,7 @@ SECTIONS { src/pokemon_summary_screen.o(.text); src/unk_pokedex_area_screen_helper.o(.text); src/battle_pyramid_bag.o(.text); + src/pokenav_main.o(.text); asm/pokenav.o(.text); src/pokenav_match_call.o(.text); asm/rom_81D1C44.o(.text); diff --git a/src/pokenav_main.c b/src/pokenav_main.c new file mode 100644 index 000000000..fd8e51318 --- /dev/null +++ b/src/pokenav_main.c @@ -0,0 +1,134 @@ +#include "global.h" +#include "alloc.h" +#include "task.h" +#include "main.h" +#include "overworld.h" + +/* + + thumb_func_start CB2_PokeNav +CB2_PokeNav: @ 81C7250 + push {r4,lr} + ldr r4, =gUnknown_0203CF40 + movs r0, 0x5C + bl Alloc + str r0, [r4] + cmp r0, 0 + bne _081C7270 + ldr r0, =CB2_ReturnToFieldWithOpenMenu + bl SetMainCallback2 + b _081C7292 + .pool +_081C7270: + bl sub_81C7360 + bl ResetTasks + movs r0, 0 + bl SetVBlankCallback + ldr r0, =sub_81C742C + movs r1, 0 + bl CreateTask + ldr r0, =sub_81C7400 + bl SetMainCallback2 + ldr r0, =sub_81C7418 + bl SetVBlankCallback +_081C7292: + pop {r4} + pop {r0} + bx r0 + .pool + thumb_func_end CB2_PokeNav + +*/ + +extern u8* gUnknown_0203CF40; +extern void sub_81C7360(void); +extern void sub_81C742C(u8 taskId); +extern void sub_81C7400(void); +extern void sub_81C7418(void); + +/* +void CB2_PokeNav(void) +{ + gUnknown_0203CF40 = Alloc(0x5C); + if (gUnknown_0203CF40 == NULL) { + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + } else { + sub_81C7360(); + ResetTasks(); + SetVBlankCallback(NULL); + CreateTask(sub_81C742C, 0); + SetMainCallback2(sub_81C7400); + SetVBlankCallback(sub_81C7418); + } +}*/ + +/* +thumb_func_start sub_81C7078 +sub_81C7078: @ 81C7078 + push {r4,r5,lr} + adds r5, r0, 0 + adds r4, r1, 0 + bl is_c1_link_related_active + cmp r0, 0 + bne _081C7090 + ldr r0, =sub_81C7170 + b _081C7092 + .pool +_081C7090: + ldr r0, =sub_81C71E4 +_081C7092: + lsls r1, r4, 24 + lsrs r1, 24 + bl CreateTask + lsls r0, 24 + lsrs r4, r0, 24 + adds r0, r4, 0 + movs r1, 0x1 + adds r2, r5, 0 + bl SetWordTaskArg + ldr r1, =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r0, r1 + ldr r2, =gUnknown_0203CF3C + ldrb r1, [r2] + strh r1, [r0, 0xE] + ldrb r0, [r2] + adds r1, r0, 0x1 + strb r1, [r2] + lsls r0, 24 + lsrs r0, 8 + orrs r0, r4 + pop {r4,r5} + pop {r1} + bx r1 + .pool + thumb_func_end sub_81C7078 + */ + +extern u8 gUnknown_0203CF3C; +extern void sub_81C7170(u8 a0); +extern void sub_81C71E4(u8 a0); + +u32 sub_81C7078(s32 a0, u32 a1) +{ + u16 taskId; + u32 old; + + if (is_c1_link_related_active() == FALSE) + taskId = CreateTask(sub_81C7170, a1); + else + taskId = CreateTask(sub_81C71E4, a1); + + //taskId = CreateTask(temp, a1); + + SetWordTaskArg(taskId, 1, a0); + + gTasks[taskId].data[3] = gUnknown_0203CF3C; + //old = gUnknown_0203CF3C; + //gUnknown_0203CF3C = old + 1; + return ((gUnknown_0203CF3C++) << 16) | taskId; +} + +// nonce \ No newline at end of file -- cgit v1.2.3 From 052cd4da10355a0b85372c4e6aeaaadc07383d48 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 11 Feb 2019 16:06:46 -0500 Subject: Decompiled sub_81C70D8 --- asm/pokenav.s | 36 ----------------------------- src/pokenav_main.c | 66 ++++++++++++------------------------------------------ 2 files changed, 14 insertions(+), 88 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index f6f2b69b6..41644ebcc 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -9,42 +9,6 @@ - thumb_func_start sub_81C70D8 -sub_81C70D8: @ 81C70D8 - push {lr} - ldr r1, =0x0000ffff - ands r1, r0 - lsrs r3, r0, 16 - ldr r2, =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r2 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _081C711C - ldr r2, [r1] - ldr r0, =sub_81C7170 - cmp r2, r0 - beq _081C70FE - ldr r0, =sub_81C71E4 - cmp r2, r0 - bne _081C711C -_081C70FE: - movs r2, 0xE - ldrsh r0, [r1, r2] - cmp r0, r3 - bne _081C711C - movs r0, 0x1 - b _081C711E - .pool -_081C711C: - movs r0, 0 -_081C711E: - pop {r1} - bx r1 - thumb_func_end sub_81C70D8 - thumb_func_start sub_81C7124 sub_81C7124: @ 81C7124 push {r4-r6,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index fd8e51318..fc45b9406 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -62,51 +62,6 @@ void CB2_PokeNav(void) } }*/ -/* -thumb_func_start sub_81C7078 -sub_81C7078: @ 81C7078 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl is_c1_link_related_active - cmp r0, 0 - bne _081C7090 - ldr r0, =sub_81C7170 - b _081C7092 - .pool -_081C7090: - ldr r0, =sub_81C71E4 -_081C7092: - lsls r1, r4, 24 - lsrs r1, 24 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r5, 0 - bl SetWordTaskArg - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r2, =gUnknown_0203CF3C - ldrb r1, [r2] - strh r1, [r0, 0xE] - ldrb r0, [r2] - adds r1, r0, 0x1 - strb r1, [r2] - lsls r0, 24 - lsrs r0, 8 - orrs r0, r4 - pop {r4,r5} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C7078 - */ - extern u8 gUnknown_0203CF3C; extern void sub_81C7170(u8 a0); extern void sub_81C71E4(u8 a0); @@ -114,21 +69,28 @@ extern void sub_81C71E4(u8 a0); u32 sub_81C7078(s32 a0, u32 a1) { u16 taskId; - u32 old; - if (is_c1_link_related_active() == FALSE) + if (!is_c1_link_related_active()) taskId = CreateTask(sub_81C7170, a1); else taskId = CreateTask(sub_81C71E4, a1); - //taskId = CreateTask(temp, a1); - SetWordTaskArg(taskId, 1, a0); gTasks[taskId].data[3] = gUnknown_0203CF3C; - //old = gUnknown_0203CF3C; - //gUnknown_0203CF3C = old + 1; return ((gUnknown_0203CF3C++) << 16) | taskId; } -// nonce \ No newline at end of file +bool32 sub_81C70D8(u32 a0, u32 unused) { + u32 v1 = a0 & 0xFFFF; + u32 v2 = a0 >> 16; + if (gTasks[v1].isActive + && (gTasks[v1].func == sub_81C7170 || gTasks[v1].func == sub_81C71E4) + && gTasks[v1].data[3] == v2) { + + return TRUE; + } else { + return FALSE; + } +} + -- cgit v1.2.3 From 6466d0bea8e743f8dbba0b2d0bc2e4bce60ea501 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 11 Feb 2019 16:35:02 -0500 Subject: Decompiled sub_81C7124 --- asm/pokenav.s | 43 ------------------------------------------- src/pokenav_main.c | 25 ++++++++++++++++++++++--- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 41644ebcc..db18b89a7 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -4,49 +4,6 @@ .syntax unified .text - - - - - - thumb_func_start sub_81C7124 -sub_81C7124: @ 81C7124 - push {r4-r6,lr} - adds r6, r0, 0 - movs r5, 0 - ldr r4, =gTasks -_081C712C: - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _081C7160 - ldr r1, [r4] - ldr r0, =sub_81C7170 - cmp r1, r0 - beq _081C7140 - ldr r0, =sub_81C71E4 - cmp r1, r0 - bne _081C7160 -_081C7140: - lsls r0, r5, 24 - lsrs r0, 24 - movs r1, 0x1 - bl GetWordTaskArg - cmp r0, r6 - bne _081C7160 - movs r0, 0x1 - b _081C716A - .pool -_081C7160: - adds r4, 0x28 - adds r5, 0x1 - cmp r5, 0xF - ble _081C712C - movs r0, 0 -_081C716A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81C7124 thumb_func_start sub_81C7170 sub_81C7170: @ 81C7170 diff --git a/src/pokenav_main.c b/src/pokenav_main.c index fc45b9406..2d5144a7f 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -81,16 +81,35 @@ u32 sub_81C7078(s32 a0, u32 a1) return ((gUnknown_0203CF3C++) << 16) | taskId; } -bool32 sub_81C70D8(u32 a0, u32 unused) { +bool32 sub_81C70D8(u32 a0, u32 unused) +{ u32 v1 = a0 & 0xFFFF; u32 v2 = a0 >> 16; if (gTasks[v1].isActive && (gTasks[v1].func == sub_81C7170 || gTasks[v1].func == sub_81C71E4) - && gTasks[v1].data[3] == v2) { + && gTasks[v1].data[3] == v2) + { return TRUE; - } else { + } + else + { return FALSE; } } +bool32 sub_81C7124(u32 a0) +{ + s32 i; + for (i = 0; i < 16; i++) { + if (gTasks[i].isActive + && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)) + { + u32 arg = GetWordTaskArg((u8)i, 1); + if (arg == a0) { + return TRUE; + } + } + } + return FALSE; +} \ No newline at end of file -- cgit v1.2.3 From fb705e604743f30983145a184472570fdc42fe35 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 00:51:54 -0500 Subject: Decompiled sub_81C7170. --- asm/pokenav.s | 60 ------------------------------------------------------ src/pokenav_main.c | 36 ++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 62 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index db18b89a7..9568a9fee 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,66 +5,6 @@ .text - thumb_func_start sub_81C7170 -sub_81C7170: @ 81C7170 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - movs r1, 0x1 - bl GetWordTaskArg - adds r6, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - movs r7, 0 -_081C718C: - movs r1, 0 - ldrsh r0, [r4, r1] - bl _call_via_r6 - cmp r0, 0x4 - bhi _081C71D6 - lsls r0, 2 - ldr r1, =_081C71AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C71AC: - .4byte _081C71C6 - .4byte _081C71C0 - .4byte _081C71DE - .4byte _081C71DA - .4byte _081C71CE -_081C71C0: - ldrh r0, [r4] - adds r0, 0x1 - b _081C71D8 -_081C71C6: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _081C71DE -_081C71CE: - adds r0, r5, 0 - bl DestroyTask - b _081C71DE -_081C71D6: - subs r0, 0x5 -_081C71D8: - strh r0, [r4] -_081C71DA: - cmp r7, 0 - beq _081C718C -_081C71DE: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81C7170 - thumb_func_start sub_81C71E4 sub_81C71E4: @ 81C71E4 push {r4,r5,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 2d5144a7f..4791cbc25 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -66,7 +66,7 @@ extern u8 gUnknown_0203CF3C; extern void sub_81C7170(u8 a0); extern void sub_81C71E4(u8 a0); -u32 sub_81C7078(s32 a0, u32 a1) +u32 sub_81C7078(u32 (*a0)(u32), u32 a1) { u16 taskId; @@ -75,7 +75,7 @@ u32 sub_81C7078(s32 a0, u32 a1) else taskId = CreateTask(sub_81C71E4, a1); - SetWordTaskArg(taskId, 1, a0); + SetWordTaskArg(taskId, 1, (u32)a0); gTasks[taskId].data[3] = gUnknown_0203CF3C; return ((gUnknown_0203CF3C++) << 16) | taskId; @@ -112,4 +112,36 @@ bool32 sub_81C7124(u32 a0) } } return FALSE; +} + +void sub_81C7170(u8 taskId) +{ + s16 *dataPtr; + u32 (*func)(u32); + bool32 exitLoop; + + func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); + dataPtr = gTasks[taskId].data; + exitLoop = FALSE; + while (!exitLoop) { + u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); + switch (v1) { + case 1: + dataPtr[0] = dataPtr[0] + 1; + break; + case 0: + dataPtr[0]++; + return; + case 4: + DestroyTask(taskId); + return; + default: + dataPtr[0] = v1 - 5; + break; + case 3: + break; + case 2: + return; + } + } } \ No newline at end of file -- cgit v1.2.3 From 69b014f7aa9da2e61d158b33806bcdfce1fb95a0 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 01:30:39 -0500 Subject: Decompiled sub_81C71E4 --- asm/pokenav.s | 53 ----------------------------------------------------- src/pokenav_main.c | 27 +++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 53 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 9568a9fee..84d3c4b2b 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,59 +5,6 @@ .text - thumb_func_start sub_81C71E4 -sub_81C71E4: @ 81C71E4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_8087598 - cmp r0, 0 - bne _081C724A - adds r0, r5, 0 - movs r1, 0x1 - bl GetWordTaskArg - adds r2, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - bl _call_via_r2 - cmp r0, 0x4 - bhi _081C7246 - lsls r0, 2 - ldr r1, =_081C7224 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C7224: - .4byte _081C7238 - .4byte _081C7238 - .4byte _081C724A - .4byte _081C724A - .4byte _081C723E -_081C7238: - ldrh r0, [r4] - adds r0, 0x1 - b _081C7248 -_081C723E: - adds r0, r5, 0 - bl DestroyTask - b _081C724A -_081C7246: - subs r0, 0x5 -_081C7248: - strh r0, [r4] -_081C724A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81C71E4 - thumb_func_start CB2_PokeNav CB2_PokeNav: @ 81C7250 push {r4,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 4791cbc25..06d599f99 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -144,4 +144,31 @@ void sub_81C7170(u8 taskId) return; } } +} + +void sub_81C71E4(u8 taskId) { + u32 (*func)(u32); + s16 *data; + u32 v1; + + if (sub_8087598()) { + return; + } + func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); + data = gTasks[taskId].data; + v1 = func(data[0]); + switch (v1) { + case 0: + case 1: + data[0]++; + break; + case 4: + DestroyTask(taskId); + break; + default: + data[0] = v1 - 5; + break; + case 2: + case 3: + } } \ No newline at end of file -- cgit v1.2.3 From cd84c92cfa67fc1afc1e03795fbf390e546a7482 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 01:34:43 -0500 Subject: Decompiled CB2_PokeNav --- asm/pokenav.s | 32 -------------------------------- src/pokenav_main.c | 31 ++++++++++++++++--------------- 2 files changed, 16 insertions(+), 47 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 84d3c4b2b..92cde018a 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,38 +5,6 @@ .text - thumb_func_start CB2_PokeNav -CB2_PokeNav: @ 81C7250 - push {r4,lr} - ldr r4, =gUnknown_0203CF40 - movs r0, 0x5C - bl Alloc - str r0, [r4] - cmp r0, 0 - bne _081C7270 - ldr r0, =CB2_ReturnToFieldWithOpenMenu - bl SetMainCallback2 - b _081C7292 - .pool -_081C7270: - bl sub_81C7360 - bl ResetTasks - movs r0, 0 - bl SetVBlankCallback - ldr r0, =sub_81C742C - movs r1, 0 - bl CreateTask - ldr r0, =sub_81C7400 - bl SetMainCallback2 - ldr r0, =sub_81C7418 - bl SetVBlankCallback -_081C7292: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end CB2_PokeNav - thumb_func_start sub_81C72A4 sub_81C72A4: @ 81C72A4 push {lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 06d599f99..437ca009f 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -46,21 +46,7 @@ extern void sub_81C742C(u8 taskId); extern void sub_81C7400(void); extern void sub_81C7418(void); -/* -void CB2_PokeNav(void) -{ - gUnknown_0203CF40 = Alloc(0x5C); - if (gUnknown_0203CF40 == NULL) { - SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - } else { - sub_81C7360(); - ResetTasks(); - SetVBlankCallback(NULL); - CreateTask(sub_81C742C, 0); - SetMainCallback2(sub_81C7400); - SetVBlankCallback(sub_81C7418); - } -}*/ + extern u8 gUnknown_0203CF3C; extern void sub_81C7170(u8 a0); @@ -171,4 +157,19 @@ void sub_81C71E4(u8 taskId) { case 2: case 3: } +} + +void CB2_PokeNav(void) +{ + gUnknown_0203CF40 = Alloc(0x5C); + if (gUnknown_0203CF40 == NULL) { + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + } else { + sub_81C7360(); + ResetTasks(); + SetVBlankCallback(NULL); + CreateTask(sub_81C742C, 0); + SetMainCallback2(sub_81C7400); + SetVBlankCallback(sub_81C7418); + } } \ No newline at end of file -- cgit v1.2.3 From 9bda2297e36bd4aa476326310d85ea26c9beeb7c Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 01:39:27 -0500 Subject: Decompiled sub_81C72A4 --- asm/pokenav.s | 12 ------------ src/pokenav_main.c | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 92cde018a..64439e890 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,18 +5,6 @@ .text - thumb_func_start sub_81C72A4 -sub_81C72A4: @ 81C72A4 - push {lr} - ldr r0, =sub_81C72BC - bl SetMainCallback2 - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C72A4 thumb_func_start sub_81C72BC sub_81C72BC: @ 81C72BC diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 437ca009f..13b6331a5 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -3,6 +3,7 @@ #include "task.h" #include "main.h" #include "overworld.h" +#include "field_weather.h" /* @@ -172,4 +173,26 @@ void CB2_PokeNav(void) SetMainCallback2(sub_81C7400); SetVBlankCallback(sub_81C7418); } +} + +/* + thumb_func_start sub_81C72A4 +sub_81C72A4: @ 81C72A4 + push {lr} + ldr r0, =sub_81C72BC + bl SetMainCallback2 + movs r0, 0x1 + movs r1, 0 + bl FadeScreen + pop {r0} + bx r0 + .pool + thumb_func_end sub_81C72A4 +*/ + +extern void sub_81C72BC(void); + +void sub_81C72A4() { + SetMainCallback2(sub_81C72BC); + FadeScreen(1, 0); } \ No newline at end of file -- cgit v1.2.3 From d52cbe6bcb7777547ba1dc0c3e58c9d72aff4338 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 02:23:08 -0500 Subject: Decompiled sub_81C72BC --- asm/pokenav.s | 45 -------------------------- src/pokenav_main.c | 94 ++++++++++++++++++++---------------------------------- 2 files changed, 35 insertions(+), 104 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 64439e890..dbe58020a 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,51 +5,6 @@ .text - - thumb_func_start sub_81C72BC -sub_81C72BC: @ 81C72BC - push {r4,lr} - bl UpdatePaletteFade - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _081C7320 - ldr r4, =gUnknown_0203CF40 - movs r0, 0x5C - bl Alloc - str r0, [r4] - cmp r0, 0 - bne _081C72F0 - ldr r0, =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - b _081C7320 - .pool -_081C72F0: - bl sub_81C7360 - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x8] - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - movs r0, 0 - bl SetVBlankCallback - ldr r0, =sub_81C742C - movs r1, 0 - bl CreateTask - ldr r0, =sub_81C7400 - bl SetMainCallback2 - ldr r0, =sub_81C7418 - bl SetVBlankCallback -_081C7320: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C72BC - thumb_func_start sub_81C7334 sub_81C7334: @ 81C7334 push {r4,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 13b6331a5..0712b95d5 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -4,55 +4,28 @@ #include "main.h" #include "overworld.h" #include "field_weather.h" +#include "palette.h" + +// Can confirm the size is correct on line 287 of the generated pokenav_main.s +// file. The expected size is 0x5C. +struct UnknownStruct_0203CF40 { + u8 data1[8]; + u16 field_0; + u8 data[0x52]; +}; + +extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; +extern u8 gUnknown_0203CF3C; -/* - - thumb_func_start CB2_PokeNav -CB2_PokeNav: @ 81C7250 - push {r4,lr} - ldr r4, =gUnknown_0203CF40 - movs r0, 0x5C - bl Alloc - str r0, [r4] - cmp r0, 0 - bne _081C7270 - ldr r0, =CB2_ReturnToFieldWithOpenMenu - bl SetMainCallback2 - b _081C7292 - .pool -_081C7270: - bl sub_81C7360 - bl ResetTasks - movs r0, 0 - bl SetVBlankCallback - ldr r0, =sub_81C742C - movs r1, 0 - bl CreateTask - ldr r0, =sub_81C7400 - bl SetMainCallback2 - ldr r0, =sub_81C7418 - bl SetVBlankCallback -_081C7292: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end CB2_PokeNav - -*/ - -extern u8* gUnknown_0203CF40; extern void sub_81C7360(void); extern void sub_81C742C(u8 taskId); extern void sub_81C7400(void); extern void sub_81C7418(void); - - - -extern u8 gUnknown_0203CF3C; extern void sub_81C7170(u8 a0); extern void sub_81C71E4(u8 a0); +void sub_81C72BC(void); + u32 sub_81C7078(u32 (*a0)(u32), u32 a1) { u16 taskId; @@ -162,7 +135,7 @@ void sub_81C71E4(u8 taskId) { void CB2_PokeNav(void) { - gUnknown_0203CF40 = Alloc(0x5C); + gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); if (gUnknown_0203CF40 == NULL) { SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); } else { @@ -175,24 +148,27 @@ void CB2_PokeNav(void) } } -/* - thumb_func_start sub_81C72A4 -sub_81C72A4: @ 81C72A4 - push {lr} - ldr r0, =sub_81C72BC - bl SetMainCallback2 - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C72A4 -*/ - -extern void sub_81C72BC(void); - void sub_81C72A4() { SetMainCallback2(sub_81C72BC); FadeScreen(1, 0); +} + +void sub_81C72BC() { + UpdatePaletteFade(); + if (!gPaletteFade.active) { + gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); + if (gUnknown_0203CF40 == NULL) { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } else { + sub_81C7360(); + gUnknown_0203CF40->field_0 = 1; + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(NULL); + CreateTask(sub_81C742C, 0); + SetMainCallback2(sub_81C7400); + SetVBlankCallback(sub_81C7418); + } + } } \ No newline at end of file -- cgit v1.2.3 From aa61e105e0053af11826de510e93974d8443831d Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 02:28:46 -0500 Subject: Decompiled sub_81C7334 --- asm/pokenav.s | 22 ---------------------- src/pokenav_main.c | 12 ++++++++++++ 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index dbe58020a..7a878c373 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,28 +5,6 @@ .text - thumb_func_start sub_81C7334 -sub_81C7334: @ 81C7334 - push {r4,lr} - movs r4, 0 -_081C7338: - adds r0, r4, 0 - bl sub_81C7650 - adds r4, 0x1 - cmp r4, 0x12 - ble _081C7338 - ldr r4, =gUnknown_0203CF40 - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - bl InitKeys - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7334 - thumb_func_start sub_81C7360 sub_81C7360: @ 81C7360 push {r4,r5,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 0712b95d5..f1973ea15 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -23,6 +23,7 @@ extern void sub_81C7400(void); extern void sub_81C7418(void); extern void sub_81C7170(u8 a0); extern void sub_81C71E4(u8 a0); +extern void sub_81C7650(s32 a0); void sub_81C72BC(void); @@ -171,4 +172,15 @@ void sub_81C72BC() { SetVBlankCallback(sub_81C7418); } } +} + +void sub_81C7334() { + s32 i; + for (i = 0; i < 19; i++) { + sub_81C7650(i); + } + + Free(gUnknown_0203CF40); + gUnknown_0203CF40 = NULL; + InitKeys(); } \ No newline at end of file -- cgit v1.2.3 From 5441d80ebc694e56b080d9f280b974ff50eed1fb Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 02:59:17 -0500 Subject: Decompiled sub_81C7360 --- asm/pokenav.s | 24 ------------------------ src/pokenav_main.c | 39 ++++++++++++++++++++++++++++++--------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 7a878c373..77e826bde 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,30 +5,6 @@ .text - thumb_func_start sub_81C7360 -sub_81C7360: @ 81C7360 - push {r4,r5,lr} - adds r5, r0, 0 - movs r2, 0 - movs r1, 0x12 - adds r0, 0x58 -_081C736A: - str r2, [r0] - subs r0, 0x4 - subs r1, 0x1 - cmp r1, 0 - bge _081C736A - movs r4, 0 - strh r4, [r5, 0x8] - str r4, [r5, 0x4] - bl sub_81C7388 - str r0, [r5, 0xC] - str r4, [r5] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81C7360 - thumb_func_start sub_81C7388 sub_81C7388: @ 81C7388 push {r4-r6,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index f1973ea15..3f6f8eb5c 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -6,26 +6,28 @@ #include "field_weather.h" #include "palette.h" -// Can confirm the size is correct on line 287 of the generated pokenav_main.s -// file. The expected size is 0x5C. struct UnknownStruct_0203CF40 { - u8 data1[8]; - u16 field_0; - u8 data[0x52]; + u32 field_0; + u32 field_1; + u16 field_2; + u32 field_3; + u32 field_4; + u32 field_5[18]; }; extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; -extern void sub_81C7360(void); extern void sub_81C742C(u8 taskId); extern void sub_81C7400(void); extern void sub_81C7418(void); extern void sub_81C7170(u8 a0); extern void sub_81C71E4(u8 a0); extern void sub_81C7650(s32 a0); +extern u32 sub_81C7388(void); void sub_81C72BC(void); +void sub_81C7360(struct UnknownStruct_0203CF40 *a0); u32 sub_81C7078(u32 (*a0)(u32), u32 a1) { @@ -140,7 +142,7 @@ void CB2_PokeNav(void) if (gUnknown_0203CF40 == NULL) { SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); } else { - sub_81C7360(); + sub_81C7360(gUnknown_0203CF40); ResetTasks(); SetVBlankCallback(NULL); CreateTask(sub_81C742C, 0); @@ -161,8 +163,8 @@ void sub_81C72BC() { if (gUnknown_0203CF40 == NULL) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } else { - sub_81C7360(); - gUnknown_0203CF40->field_0 = 1; + sub_81C7360(gUnknown_0203CF40); + gUnknown_0203CF40->field_2 = 1; ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -183,4 +185,23 @@ void sub_81C7334() { Free(gUnknown_0203CF40); gUnknown_0203CF40 = NULL; InitKeys(); +} + +// Clears UnknownStruct_0203CF40 +void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { + s32 i; + u32 *arrayPtr; + s32 fill; + + fill = 0; + i = 18; + arrayPtr = &(a0->field_5[17]); + for (i; i >= 0; i--) { + *arrayPtr = fill; + arrayPtr -= 1; + } + a0->field_2 = 0; + a0->field_1 = 0; + a0->field_3 = sub_81C7388(); + a0->field_0 = 0; } \ No newline at end of file -- cgit v1.2.3 From 729e7116f2a71d72a7a3ab90d12159130a1d6a16 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 03:48:32 -0500 Subject: Decompiled AnyMonHasRibbon --- asm/pokenav.s | 64 +----------------------------------------------------- src/pokenav_main.c | 31 ++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 65 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 77e826bde..474efe935 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,69 +5,7 @@ .text - thumb_func_start sub_81C7388 -sub_81C7388: @ 81C7388 - push {r4-r6,lr} - movs r5, 0 -_081C738C: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x5 - bl GetMonData - cmp r0, 0 - beq _081C73BA - adds r0, r4, 0 - movs r1, 0x6 - bl GetMonData - cmp r0, 0 - bne _081C73BA - adds r0, r4, 0 - movs r1, 0x52 - bl GetMonData - cmp r0, 0 - bne _081C73E2 -_081C73BA: - adds r5, 0x1 - cmp r5, 0x5 - ble _081C738C - movs r4, 0 -_081C73C2: - movs r5, 0 - lsls r6, r4, 24 -_081C73C6: - adds r0, r4, 0 - adds r1, r5, 0 - bl CheckBoxMonSanityAt - cmp r0, 0 - beq _081C73EC - lsls r1, r5, 24 - lsrs r1, 24 - lsrs r0, r6, 24 - movs r2, 0x52 - bl GetBoxMonDataAt - cmp r0, 0 - beq _081C73EC -_081C73E2: - movs r0, 0x1 - b _081C73FA - .pool -_081C73EC: - adds r5, 0x1 - cmp r5, 0x1D - ble _081C73C6 - adds r4, 0x1 - cmp r4, 0xD - ble _081C73C2 - movs r0, 0 -_081C73FA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81C7388 + thumb_func_start sub_81C7400 sub_81C7400: @ 81C7400 diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 3f6f8eb5c..125ced646 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -5,6 +5,7 @@ #include "overworld.h" #include "field_weather.h" #include "palette.h" +#include "pokemon_storage_system.h" struct UnknownStruct_0203CF40 { u32 field_0; @@ -24,7 +25,7 @@ extern void sub_81C7418(void); extern void sub_81C7170(u8 a0); extern void sub_81C71E4(u8 a0); extern void sub_81C7650(s32 a0); -extern u32 sub_81C7388(void); +extern u32 AnyMonHasRibbon(void); void sub_81C72BC(void); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); @@ -202,6 +203,32 @@ void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { } a0->field_2 = 0; a0->field_1 = 0; - a0->field_3 = sub_81C7388(); + a0->field_3 = AnyMonHasRibbon(); a0->field_0 = 0; +} + +bool32 AnyMonHasRibbon() { + s32 i; + s32 j; + + for (i = 0; i < 6; i++) { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) + && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0) + { + return TRUE; + } + } + + for (j = 0; j < 14; j++) { + for (i = 0; i < 30; i++) { + if (CheckBoxMonSanityAt(j, i) + && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) + { + return TRUE; + } + } + } + + return FALSE; } \ No newline at end of file -- cgit v1.2.3 From 323df8ed407f22977053f9b672d661b00c9a63d3 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 03:51:48 -0500 Subject: Decompiled sub_81C7400 --- asm/pokenav.s | 13 ------------- src/pokenav_main.c | 7 +++++++ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 474efe935..c0fb9c48d 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,19 +5,6 @@ .text - - - thumb_func_start sub_81C7400 -sub_81C7400: @ 81C7400 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_81C7400 - thumb_func_start sub_81C7418 sub_81C7418: @ 81C7418 push {lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 125ced646..b39ab7bb1 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -231,4 +231,11 @@ bool32 AnyMonHasRibbon() { } return FALSE; +} + +void sub_81C7400() { + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); } \ No newline at end of file -- cgit v1.2.3 From cf721879dd2d6f36b02e3ce92220fd95e9da7f45 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 03:54:35 -0500 Subject: Decompiled sub_81C7418 --- asm/pokenav.s | 10 ---------- src/pokenav_main.c | 6 ++++++ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index c0fb9c48d..2d7981f10 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,16 +5,6 @@ .text - thumb_func_start sub_81C7418 -sub_81C7418: @ 81C7418 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - pop {r0} - bx r0 - thumb_func_end sub_81C7418 - thumb_func_start sub_81C742C sub_81C742C: @ 81C742C push {r4-r7,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index b39ab7bb1..bd57d6e05 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -238,4 +238,10 @@ void sub_81C7400() { AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); +} + +void sub_81C7418() { + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); } \ No newline at end of file -- cgit v1.2.3 From 3d73f7c48c7c658b0d12fbc89867a44bf9490206 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 20:20:15 -0500 Subject: Decompiled sub_81C742C --- asm/pokenav.s | 140 ----------------------------------------------------- src/pokenav_main.c | 116 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 98 insertions(+), 158 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 2d7981f10..3f09a5905 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,146 +5,6 @@ .text - thumb_func_start sub_81C742C -sub_81C742C: @ 81C742C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, =gTasks + 0x8 - adds r7, r1, r0 - movs r1, 0 - ldrsh r0, [r7, r1] - cmp r0, 0x5 - bls _081C7446 - b _081C7562 -_081C7446: - lsls r0, 2 - ldr r1, =_081C7458 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_081C7458: - .4byte _081C7470 - .4byte _081C747A - .4byte _081C7490 - .4byte _081C749C - .4byte _081C751E - .4byte _081C752C -_081C7470: - bl sub_81C76C4 - movs r0, 0x1 - strh r0, [r7] - b _081C7562 -_081C747A: - bl sub_81C76FC - cmp r0, 0 - bne _081C7562 - ldr r0, =0x000186a0 - bl sub_81C756C - b _081C74E8 - .pool -_081C7490: - bl sub_81C786C - cmp r0, 0 - bne _081C7562 - movs r0, 0x3 - strh r0, [r7] -_081C749C: - bl sub_81C75E0 - adds r6, r0, 0 - movs r0, 0x1 - negs r0, r0 - cmp r6, r0 - beq _081C74FC - ldr r0, =0x0001869f - cmp r6, r0 - bls _081C7506 - ldr r4, =gUnknown_0861F3EC - ldr r5, =gUnknown_0203CF40 - ldr r0, [r5] - ldr r1, [r0, 0x4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x18 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldr r0, [r5] - ldr r1, [r0, 0x4] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r4, 0x14 - adds r0, r4 - ldr r0, [r0] - bl _call_via_r0 - adds r0, r6, 0 - bl sub_81C756C - cmp r0, 0 - beq _081C74FC -_081C74E8: - movs r0, 0x4 - strh r0, [r7] - b _081C7562 - .pool -_081C74FC: - bl sub_81C7710 - movs r0, 0x5 - strh r0, [r7] - b _081C7562 -_081C7506: - cmp r6, 0 - beq _081C7562 - adds r0, r6, 0 - bl sub_81C7850 - bl sub_81C786C - cmp r0, 0 - beq _081C7562 - movs r0, 0x2 - strh r0, [r7] - b _081C7562 -_081C751E: - bl sub_81C75D4 - cmp r0, 0 - bne _081C7562 - movs r0, 0x3 - strh r0, [r7] - b _081C7562 -_081C752C: - bl sub_81C7738 - cmp r0, 0 - bne _081C7562 - ldr r0, =gUnknown_0203CF40 - ldr r0, [r0] - ldrh r0, [r0, 0x8] - negs r4, r0 - orrs r4, r0 - lsrs r4, 31 - bl sub_81C9430 - bl sub_81C7334 - cmp r4, 0 - beq _081C755C - ldr r0, =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - b _081C7562 - .pool -_081C755C: - ldr r0, =CB2_ReturnToFieldWithOpenMenu - bl SetMainCallback2 -_081C7562: - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C742C - thumb_func_start sub_81C756C sub_81C756C: @ 81C756C push {r4-r6,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index bd57d6e05..e75ae38f3 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -8,25 +8,41 @@ #include "pokemon_storage_system.h" struct UnknownStruct_0203CF40 { - u32 field_0; - u32 field_1; - u16 field_2; - u32 field_3; - u32 field_4; - u32 field_5[18]; + u32 field0; + u32 field4; + u16 field8; + u32 fieldC; + u32 field10; + u32 field14[18]; +}; + +struct UnknownStruct_0861F3EC { + void (*data[7])(void); }; extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; +extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. -extern void sub_81C742C(u8 taskId); -extern void sub_81C7400(void); -extern void sub_81C7418(void); -extern void sub_81C7170(u8 a0); -extern void sub_81C71E4(u8 a0); extern void sub_81C7650(s32 a0); -extern u32 AnyMonHasRibbon(void); +extern void sub_81C76C4(void); +extern void sub_81C7710(void); +extern void sub_81C7850(u32 a0); +extern void sub_81C9430(void); +extern u32 sub_81C756C(u32 a0); +extern u32 sub_81C76FC(void); +extern u32 sub_81C786C(void); +extern u32 sub_81C75E0(void); +extern u32 sub_81C75D4(void); +extern u32 sub_81C7738(void); +u32 AnyMonHasRibbon(void); +void sub_81C7334(void); +void sub_81C71E4(u8 a0); +void sub_81C7170(u8 a0); +void sub_81C7418(void); +void sub_81C7400(void); +void sub_81C742C(u8 taskId); void sub_81C72BC(void); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); @@ -165,7 +181,7 @@ void sub_81C72BC() { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } else { sub_81C7360(gUnknown_0203CF40); - gUnknown_0203CF40->field_2 = 1; + gUnknown_0203CF40->field8 = 1; ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -196,15 +212,15 @@ void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { fill = 0; i = 18; - arrayPtr = &(a0->field_5[17]); + arrayPtr = &(a0->field14[17]); for (i; i >= 0; i--) { *arrayPtr = fill; arrayPtr -= 1; } - a0->field_2 = 0; - a0->field_1 = 0; - a0->field_3 = AnyMonHasRibbon(); - a0->field_0 = 0; + a0->field8 = 0; + a0->field4 = 0; + a0->fieldC = AnyMonHasRibbon(); + a0->field0 = 0; } bool32 AnyMonHasRibbon() { @@ -244,4 +260,68 @@ void sub_81C7418() { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); +} + +void sub_81C742C(u8 taskId) { + s16* dataPtr; + u32 v1; + bool32 v2; + + dataPtr = gTasks[taskId].data; + + switch (dataPtr[0]) { + case 0: + sub_81C76C4(); + dataPtr[0] = 1; + break; + case 1: + if (sub_81C76FC()) { + break; + } + sub_81C756C(0x186a0); + dataPtr[0] = 4; + break; + case 2: + if (sub_81C786C()) { + break; + } + dataPtr[0] = 3; + case 3: + v1 = sub_81C75E0(); + if (v1 == -1) { + sub_81C7710(); + dataPtr[0] = 5; + } else if (v1 > 0x1869F) { + gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[6](); + gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[5](); + if (sub_81C756C(v1)) { + dataPtr[0] = 4; + } else { + sub_81C7710(); + dataPtr[0] = 5; + } + } else if (v1 != 0) { + sub_81C7850(v1); + if (sub_81C786C()) { + dataPtr[0] = 2; + } + } + break; + case 4: + if (!sub_81C75D4()) { + dataPtr[0] = 3; + } + break; + case 5: + if (!sub_81C7738()) { + v2 = gUnknown_0203CF40->field8 != 0; + sub_81C9430(); + sub_81C7334(); + if (v2) { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } else { + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + } + } + } } \ No newline at end of file -- cgit v1.2.3 From 112fc4701794ba3b1a35882d7995c907448431fe Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 20:57:51 -0500 Subject: Decompiled sub_81C756C Also discovered a constant that may be useful for future decompiling. Comments were added in the asm that references the constant. --- asm/pokenav.s | 51 +-------------------------------------------------- asm/rom_8011DC0.s | 2 +- src/pokedex.c | 4 ++-- src/pokenav_main.c | 33 +++++++++++++++++++++++++++------ 4 files changed, 31 insertions(+), 59 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 3f09a5905..f3fd3923e 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,55 +5,6 @@ .text - thumb_func_start sub_81C756C -sub_81C756C: @ 81C756C - push {r4-r6,lr} - ldr r1, =0xfffe7960 - adds r6, r0, r1 - bl sub_81C75F4 - ldr r5, =gUnknown_0861F3EC - lsls r0, r6, 3 - subs r0, r6 - lsls r4, r0, 2 - adds r0, r4, r5 - ldr r0, [r0] - bl _call_via_r0 - cmp r0, 0 - beq _081C75CC - adds r0, r5, 0 - adds r0, 0x8 - adds r0, r4, r0 - ldr r0, [r0] - bl _call_via_r0 - cmp r0, 0 - beq _081C75CC - adds r0, r5, 0 - adds r0, 0xC - adds r0, r4, r0 - ldr r0, [r0] - adds r1, r5, 0 - adds r1, 0x10 - adds r1, r4, r1 - ldr r1, [r1] - bl sub_81C7834 - ldr r0, =gUnknown_0203CF40 - ldr r1, [r0] - adds r0, r5, 0x4 - adds r0, r4, r0 - ldr r0, [r0] - str r0, [r1] - str r6, [r1, 0x4] - movs r0, 0x1 - b _081C75CE - .pool -_081C75CC: - movs r0, 0 -_081C75CE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_81C756C - thumb_func_start sub_81C75D4 sub_81C75D4: @ 81C75D4 push {lr} @@ -9441,7 +9392,7 @@ sub_81CBE50: @ 81CBE50 movs r0, 0x9 bl GetGameStat adds r1, r0, 0 - ldr r0, =0x0001869f + ldr r0, =0x0001869f @ Note to decompiler: See UNKNOWN_OFFSET cmp r1, r0 ble _081CBE68 adds r1, r0, 0 diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s index af7fdbf3d..ec5b7e8f5 100644 --- a/asm/rom_8011DC0.s +++ b/asm/rom_8011DC0.s @@ -27181,7 +27181,7 @@ sub_8024700: @ 8024700 adds r0, r5, 0 bl sub_8024668 adds r1, r0, r4 - ldr r2, =0x0001869f + ldr r2, =0x0001869f @ Note to decompiler: See UNKNOWN_OFFSET cmp r1, r2 bhi _08024730 adds r0, r5, 0 diff --git a/src/pokedex.c b/src/pokedex.c index c47ada5b8..22c8286a4 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4036,7 +4036,7 @@ void sub_80C0460(u16 weight, u8 left, u8 top) lsls r2, 24\n\ lsrs r2, 24\n\ str r2, [sp, 0x10]\n\ - ldr r5, =0x000186a0\n\ + ldr r5, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\ muls r0, r5\n\ ldr r1, =0x000011b8\n\ bl __divsi3\n\ @@ -4070,7 +4070,7 @@ _080C04C0:\n\ mov r8, r1\n\ movs r6, 0x1\n\ _080C04C6:\n\ - ldr r1, =0x000186a0\n\ + ldr r1, =0x000186a0 @ Note to decompiler: See UNKNOWN_OFFSET\n\ adds r0, r7, 0\n\ bl __umodsi3\n\ adds r7, r0, 0\n\ diff --git a/src/pokenav_main.c b/src/pokenav_main.c index e75ae38f3..21ee72f30 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -7,8 +7,10 @@ #include "palette.h" #include "pokemon_storage_system.h" +#define UNKNOWN_OFFSET 100000 + struct UnknownStruct_0203CF40 { - u32 field0; + u32 (*field0)(void); u32 field4; u16 field8; u32 fieldC; @@ -17,7 +19,7 @@ struct UnknownStruct_0203CF40 { }; struct UnknownStruct_0861F3EC { - void (*data[7])(void); + u32 (*data[7])(void); }; extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; @@ -29,13 +31,15 @@ extern void sub_81C76C4(void); extern void sub_81C7710(void); extern void sub_81C7850(u32 a0); extern void sub_81C9430(void); -extern u32 sub_81C756C(u32 a0); +extern void sub_81C75F4(void); +extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern u32 sub_81C76FC(void); extern u32 sub_81C786C(void); extern u32 sub_81C75E0(void); extern u32 sub_81C75D4(void); extern u32 sub_81C7738(void); +bool32 sub_81C756C(u32 a0); u32 AnyMonHasRibbon(void); void sub_81C7334(void); void sub_81C71E4(u8 a0); @@ -220,7 +224,7 @@ void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { a0->field8 = 0; a0->field4 = 0; a0->fieldC = AnyMonHasRibbon(); - a0->field0 = 0; + a0->field0 = NULL; } bool32 AnyMonHasRibbon() { @@ -278,7 +282,7 @@ void sub_81C742C(u8 taskId) { if (sub_81C76FC()) { break; } - sub_81C756C(0x186a0); + sub_81C756C(UNKNOWN_OFFSET); dataPtr[0] = 4; break; case 2: @@ -291,7 +295,7 @@ void sub_81C742C(u8 taskId) { if (v1 == -1) { sub_81C7710(); dataPtr[0] = 5; - } else if (v1 > 0x1869F) { + } else if (v1 >= UNKNOWN_OFFSET) { gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[6](); gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[5](); if (sub_81C756C(v1)) { @@ -324,4 +328,21 @@ void sub_81C742C(u8 taskId) { } } } +} + +bool32 sub_81C756C(u32 a0) { + u32 index; + + index = a0 - UNKNOWN_OFFSET; + sub_81C75F4(); + if (!gUnknown_0861F3EC[index].data[0]()) { + return FALSE; + } + if (!gUnknown_0861F3EC[index].data[2]()) { + return FALSE; + } + sub_81C7834(gUnknown_0861F3EC[index].data[3], gUnknown_0861F3EC[index].data[4]); + gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index].data[1]; + gUnknown_0203CF40->field4 = index; + return TRUE; } \ No newline at end of file -- cgit v1.2.3 From 13a6765c882e0f3db83b50f37af8667b64a1d47e Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 21:33:15 -0500 Subject: Decompiled several trivial functions --- asm/pokenav.s | 72 +++--------------------------------------------------- src/pokenav_main.c | 42 ++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 77 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index f3fd3923e..b5f33872c 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,70 +5,6 @@ .text - thumb_func_start sub_81C75D4 -sub_81C75D4: @ 81C75D4 - push {lr} - bl sub_81C786C - pop {r1} - bx r1 - thumb_func_end sub_81C75D4 - - thumb_func_start sub_81C75E0 -sub_81C75E0: @ 81C75E0 - push {lr} - ldr r0, =gUnknown_0203CF40 - ldr r0, [r0] - ldr r0, [r0] - bl _call_via_r0 - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C75E0 - - thumb_func_start sub_81C75F4 -sub_81C75F4: @ 81C75F4 - push {lr} - bl InitKeys - pop {r0} - bx r0 - thumb_func_end sub_81C75F4 - - thumb_func_start c3args_set_0toR1_1to0 -c3args_set_0toR1_1to0: @ 81C7600 - push {lr} - bl SetVBlankCallback - pop {r0} - bx r0 - thumb_func_end c3args_set_0toR1_1to0 - - thumb_func_start sub_81C760C -sub_81C760C: @ 81C760C - push {lr} - ldr r0, =sub_81C7418 - bl SetVBlankCallback - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C760C - - thumb_func_start sub_81C761C -sub_81C761C: @ 81C761C - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - bl Alloc - ldr r1, =gUnknown_0203CF40 - ldr r1, [r1] - lsls r4, 2 - adds r1, 0x10 - adds r1, r4 - str r0, [r1] - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C761C - thumb_func_start sub_81C763C sub_81C763C: @ 81C763C ldr r1, =gUnknown_0203CF40 @@ -6694,7 +6630,7 @@ titlescreen_0: @ 81CA92C ldr r2, [r2, 0x8] bl ScanlineEffect_SetParams ldr r0, =sub_81CA914 - bl c3args_set_0toR1_1to0 + bl IndirectSetVBlankCallback ldr r0, =sub_81CA9EC movs r1, 0x3 bl CreateTask @@ -10543,7 +10479,7 @@ _081CC714: .4byte _081CC82A _081CC734: movs r0, 0 - bl c3args_set_0toR1_1to0 + bl IndirectSetVBlankCallback movs r0, 0x1 bl HideBg movs r0, 0x2 @@ -10623,7 +10559,7 @@ _081CC7E2: movs r0, 0x2 bl ShowBg ldr r0, =sub_81CC6A4 - bl c3args_set_0toR1_1to0 + bl IndirectSetVBlankCallback b _081CC77C .pool _081CC804: @@ -13809,7 +13745,7 @@ _081CE218: bne _081CE2C0 _081CE230: ldr r0, =sub_81CEE44 - bl c3args_set_0toR1_1to0 + bl IndirectSetVBlankCallback b _081CDFB0 .pool _081CE23C: diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 21ee72f30..b2e0589ce 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -14,8 +14,8 @@ struct UnknownStruct_0203CF40 { u32 field4; u16 field8; u32 fieldC; - u32 field10; - u32 field14[18]; + u32* field10[19]; + //u32* field14[18]; }; struct UnknownStruct_0861F3EC { @@ -31,16 +31,16 @@ extern void sub_81C76C4(void); extern void sub_81C7710(void); extern void sub_81C7850(u32 a0); extern void sub_81C9430(void); -extern void sub_81C75F4(void); extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern u32 sub_81C76FC(void); extern u32 sub_81C786C(void); -extern u32 sub_81C75E0(void); -extern u32 sub_81C75D4(void); extern u32 sub_81C7738(void); bool32 sub_81C756C(u32 a0); u32 AnyMonHasRibbon(void); +u32 sub_81C75E0(void); +u32 sub_81C75D4(void); +void sub_81C75F4(void); void sub_81C7334(void); void sub_81C71E4(u8 a0); void sub_81C7170(u8 a0); @@ -211,12 +211,12 @@ void sub_81C7334() { // Clears UnknownStruct_0203CF40 void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { s32 i; - u32 *arrayPtr; - s32 fill; + u32 **arrayPtr; + s32 *fill; - fill = 0; + fill = NULL; i = 18; - arrayPtr = &(a0->field14[17]); + arrayPtr = &(a0->field10[18]); for (i; i >= 0; i--) { *arrayPtr = fill; arrayPtr -= 1; @@ -345,4 +345,28 @@ bool32 sub_81C756C(u32 a0) { gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index].data[1]; gUnknown_0203CF40->field4 = index; return TRUE; +} + +u32 sub_81C75D4(void) { + return sub_81C786C(); +} + +u32 sub_81C75E0(void) { + return gUnknown_0203CF40->field0(); +} + +void sub_81C75F4(void) { + InitKeys(); +} + +void IndirectSetVBlankCallback(IntrCallback callback) { + SetVBlankCallback(callback); +} + +void sub_81C760C(void) { + SetVBlankCallback(sub_81C7418); +} + +u32* sub_81C761C(u32 a0, u32 a1) { + return gUnknown_0203CF40->field10[a0] = (u32*)Alloc(a1); } \ No newline at end of file -- cgit v1.2.3 From b0385568510c39bbc42d63d59085a1f1ef44cf8d Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 22:18:12 -0500 Subject: Decompiled several setters and getters --- asm/pokenav.s | 88 ------------------------------------------------------ src/pokenav_main.c | 55 +++++++++++++++++++++++++++++----- 2 files changed, 47 insertions(+), 96 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index b5f33872c..744ed90c4 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,94 +5,6 @@ .text - thumb_func_start sub_81C763C -sub_81C763C: @ 81C763C - ldr r1, =gUnknown_0203CF40 - ldr r1, [r1] - lsls r0, 2 - adds r1, 0x10 - adds r1, r0 - ldr r0, [r1] - bx lr - .pool - thumb_func_end sub_81C763C - - thumb_func_start sub_81C7650 -sub_81C7650: @ 81C7650 - push {r4,r5,lr} - ldr r5, =gUnknown_0203CF40 - ldr r1, [r5] - lsls r4, r0, 2 - adds r1, 0x10 - adds r1, r4 - ldr r0, [r1] - cmp r0, 0 - beq _081C7670 - bl Free - ldr r0, [r5] - adds r0, 0x10 - adds r0, r4 - movs r1, 0 - str r1, [r0] -_081C7670: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7650 - - thumb_func_start sub_81C767C -sub_81C767C: @ 81C767C - ldr r0, =gUnknown_0203CF40 - ldr r0, [r0] - ldrh r0, [r0, 0x8] - bx lr - .pool - thumb_func_end sub_81C767C - - thumb_func_start sub_81C7688 -sub_81C7688: @ 81C7688 - ldr r1, =gUnknown_0203CF40 - ldr r1, [r1] - strh r0, [r1, 0x8] - bx lr - .pool - thumb_func_end sub_81C7688 - - thumb_func_start sub_81C7694 -sub_81C7694: @ 81C7694 - push {lr} - adds r1, r0, 0 - cmp r1, 0x4 - bls _081C769E - movs r1, 0 -_081C769E: - ldr r0, =gUnknown_0203CF40 - ldr r0, [r0] - strh r1, [r0, 0xA] - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7694 - - thumb_func_start sub_81C76AC -sub_81C76AC: @ 81C76AC - ldr r0, =gUnknown_0203CF40 - ldr r0, [r0] - ldrh r0, [r0, 0xA] - bx lr - .pool - thumb_func_end sub_81C76AC - - thumb_func_start sub_81C76B8 -sub_81C76B8: @ 81C76B8 - ldr r0, =gUnknown_0203CF40 - ldr r0, [r0] - ldr r0, [r0, 0xC] - bx lr - .pool - thumb_func_end sub_81C76B8 - thumb_func_start sub_81C76C4 sub_81C76C4: @ 81C76C4 push {r4,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index b2e0589ce..f35564ee7 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -13,6 +13,7 @@ struct UnknownStruct_0203CF40 { u32 (*field0)(void); u32 field4; u16 field8; + u16 fieldA; u32 fieldC; u32* field10[19]; //u32* field14[18]; @@ -26,12 +27,11 @@ extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. -extern void sub_81C7650(s32 a0); +extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); +extern void sub_81C7850(u32 a0); extern void sub_81C76C4(void); extern void sub_81C7710(void); -extern void sub_81C7850(u32 a0); extern void sub_81C9430(void); -extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern u32 sub_81C76FC(void); extern u32 sub_81C786C(void); extern u32 sub_81C7738(void); @@ -40,15 +40,16 @@ bool32 sub_81C756C(u32 a0); u32 AnyMonHasRibbon(void); u32 sub_81C75E0(void); u32 sub_81C75D4(void); -void sub_81C75F4(void); -void sub_81C7334(void); +void sub_81C7360(struct UnknownStruct_0203CF40 *a0); +void sub_81C7650(u32 index); void sub_81C71E4(u8 a0); void sub_81C7170(u8 a0); +void sub_81C742C(u8 taskId); +void sub_81C75F4(void); +void sub_81C7334(void); void sub_81C7418(void); void sub_81C7400(void); -void sub_81C742C(u8 taskId); void sub_81C72BC(void); -void sub_81C7360(struct UnknownStruct_0203CF40 *a0); u32 sub_81C7078(u32 (*a0)(u32), u32 a1) { @@ -369,4 +370,42 @@ void sub_81C760C(void) { u32* sub_81C761C(u32 a0, u32 a1) { return gUnknown_0203CF40->field10[a0] = (u32*)Alloc(a1); -} \ No newline at end of file +} + +u32* sub_81C763C(u32 a0) { + return gUnknown_0203CF40->field10[a0]; +} + +void sub_81C7650(u32 index) { + if (gUnknown_0203CF40->field10[index] != NULL) { + Free(gUnknown_0203CF40->field10[index]); + gUnknown_0203CF40->field10[index] = NULL; + } +} + +u16 sub_81C767C(void) { + return gUnknown_0203CF40->field8; +} + +void sub_81C7688(u16 a0) { + gUnknown_0203CF40->field8 = a0; +} + +void sub_81C7694(u32 a0) { + u32 value; + value = a0; + if (a0 > 4) { + value = 0; + } + gUnknown_0203CF40->fieldA = value; +} + +u16 sub_81C76AC(void) { + return gUnknown_0203CF40->fieldA; +} + +u32 sub_81C76B8(void) { + return gUnknown_0203CF40->fieldC; +} + + -- cgit v1.2.3 From 5beb2baa97c0ffdc7be38aad3fbc46e8f3abac37 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Feb 2019 22:35:07 -0500 Subject: Decompiled sub_81C76C4 --- asm/pokenav.s | 26 -------------------------- src/pokenav_main.c | 35 ++++++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 35 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 744ed90c4..e8c31bcf6 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,32 +5,6 @@ .text - thumb_func_start sub_81C76C4 -sub_81C76C4: @ 81C76C4 - push {r4,lr} - ldr r1, =0x0000082c - movs r0, 0 - bl sub_81C761C - adds r4, r0, 0 - cmp r4, 0 - beq _081C76F4 - bl ResetSpriteData - bl FreeAllSpritePalettes - ldr r0, =sub_81C7764 - movs r1, 0x1 - bl sub_81C7078 - str r0, [r4, 0xC] - movs r0, 0x1 - b _081C76F6 - .pool -_081C76F4: - movs r0, 0 -_081C76F6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81C76C4 - thumb_func_start sub_81C76FC sub_81C76FC: @ 81C76FC push {lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index f35564ee7..35dcbeb73 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -15,28 +15,33 @@ struct UnknownStruct_0203CF40 { u16 field8; u16 fieldA; u32 fieldC; - u32* field10[19]; - //u32* field14[18]; + void* field10[19]; }; struct UnknownStruct_0861F3EC { u32 (*data[7])(void); }; +struct UnknownStruct_sub_81C76C4 { + u32 data[523]; +}; + extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern void sub_81C7850(u32 a0); -extern void sub_81C76C4(void); extern void sub_81C7710(void); extern void sub_81C9430(void); +extern u32 sub_81C7764(u32 a0); extern u32 sub_81C76FC(void); extern u32 sub_81C786C(void); extern u32 sub_81C7738(void); + bool32 sub_81C756C(u32 a0); +bool32 sub_81C76C4(void); u32 AnyMonHasRibbon(void); u32 sub_81C75E0(void); u32 sub_81C75D4(void); @@ -212,8 +217,8 @@ void sub_81C7334() { // Clears UnknownStruct_0203CF40 void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { s32 i; - u32 **arrayPtr; - s32 *fill; + void **arrayPtr; + void *fill; fill = NULL; i = 18; @@ -368,12 +373,12 @@ void sub_81C760C(void) { SetVBlankCallback(sub_81C7418); } -u32* sub_81C761C(u32 a0, u32 a1) { - return gUnknown_0203CF40->field10[a0] = (u32*)Alloc(a1); +void* sub_81C761C(u32 index, u32 size) { + return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); } -u32* sub_81C763C(u32 a0) { - return gUnknown_0203CF40->field10[a0]; +void* sub_81C763C(u32 index) { + return gUnknown_0203CF40->field10[index]; } void sub_81C7650(u32 index) { @@ -408,4 +413,16 @@ u32 sub_81C76B8(void) { return gUnknown_0203CF40->fieldC; } +bool32 sub_81C76C4(void) { + struct UnknownStruct_sub_81C76C4 *v1; + v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); + if (v1 == NULL) { + return FALSE; + } else { + ResetSpriteData(); + FreeAllSpritePalettes(); + v1->data[3] = sub_81C7078(sub_81C7764, 1); + return TRUE; + } +} \ No newline at end of file -- cgit v1.2.3 From 7c405e08d0625355395c2da76b877e3b302c3ea0 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Wed, 13 Feb 2019 00:07:48 -0500 Subject: Decompiled three more small functions --- asm/pokenav.s | 53 ----------------------------------------------------- src/pokenav_main.c | 38 ++++++++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 57 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index e8c31bcf6..d04b665be 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,59 +5,6 @@ .text - thumb_func_start sub_81C76FC -sub_81C76FC: @ 81C76FC - push {lr} - movs r0, 0 - bl sub_81C763C - ldr r0, [r0, 0xC] - bl sub_81C70D8 - pop {r1} - bx r1 - thumb_func_end sub_81C76FC - - thumb_func_start sub_81C7710 -sub_81C7710: @ 81C7710 - push {lr} - sub sp, 0x4 - movs r0, 0x6F - bl PlaySE - bl sub_81CAADC - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_81C7710 - - thumb_func_start sub_81C7738 -sub_81C7738: @ 81C7738 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _081C7750 - movs r0, 0x1 - b _081C775E - .pool -_081C7750: - bl sub_81C99D4 - bl sub_81C7C94 - bl FreeAllWindowBuffers - movs r0, 0 -_081C775E: - pop {r1} - bx r1 - thumb_func_end sub_81C7738 - thumb_func_start sub_81C7764 sub_81C7764: @ 81C7764 push {r4,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 35dcbeb73..bda65e7ce 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -6,6 +6,9 @@ #include "field_weather.h" #include "palette.h" #include "pokemon_storage_system.h" +#include "sound.h" +#include "constants/songs.h" +#include "window.h" #define UNKNOWN_OFFSET 100000 @@ -32,12 +35,12 @@ extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at l extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern void sub_81C7850(u32 a0); -extern void sub_81C7710(void); extern void sub_81C9430(void); extern u32 sub_81C7764(u32 a0); -extern u32 sub_81C76FC(void); extern u32 sub_81C786C(void); -extern u32 sub_81C7738(void); +extern void sub_81CAADC(void); +extern void sub_81C99D4(void); +extern void sub_81C7C94(void); bool32 sub_81C756C(u32 a0); @@ -45,11 +48,14 @@ bool32 sub_81C76C4(void); u32 AnyMonHasRibbon(void); u32 sub_81C75E0(void); u32 sub_81C75D4(void); +u32 sub_81C76FC(void); +bool32 sub_81C7738(void); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); void sub_81C7650(u32 index); void sub_81C71E4(u8 a0); void sub_81C7170(u8 a0); void sub_81C742C(u8 taskId); +void sub_81C7710(void); void sub_81C75F4(void); void sub_81C7334(void); void sub_81C7418(void); @@ -71,7 +77,7 @@ u32 sub_81C7078(u32 (*a0)(u32), u32 a1) return ((gUnknown_0203CF3C++) << 16) | taskId; } -bool32 sub_81C70D8(u32 a0, u32 unused) +bool32 sub_81C70D8(u32 a0) { u32 v1 = a0 & 0xFFFF; u32 v2 = a0 >> 16; @@ -425,4 +431,28 @@ bool32 sub_81C76C4(void) { v1->data[3] = sub_81C7078(sub_81C7764, 1); return TRUE; } +} + +u32 sub_81C76FC(void) { + // This is a guess. + struct UnknownStruct_sub_81C76C4 *v1; + v1 = sub_81C763C(0); + return sub_81C70D8(v1->data[3]); +} + +void sub_81C7710(void) { + PlaySE(SE_PN_OFF); + sub_81CAADC(); + BeginNormalPaletteFade(-1, -1, 0, 16, 0); +} + +bool32 sub_81C7738(void) { + if (!gPaletteFade.active) { + sub_81C99D4(); + sub_81C7C94(); + FreeAllWindowBuffers(); + return FALSE; + } else { + return TRUE; + } } \ No newline at end of file -- cgit v1.2.3 From 3bb4057bada112943dd1e39c695c3b6ef36c10f4 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Wed, 13 Feb 2019 02:31:24 -0500 Subject: Decompiled sub_81C7764 --- asm/pokenav.s | 92 ------------------------------------------------------ include/graphics.h | 5 ++- src/pokenav_main.c | 57 +++++++++++++++++++++++++++++++-- 3 files changed, 59 insertions(+), 95 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index d04b665be..74cf91ca4 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,98 +5,6 @@ .text - thumb_func_start sub_81C7764 -sub_81C7764: @ 81C7764 - push {r4,lr} - sub sp, 0x4 - cmp r0, 0x1 - beq _081C77B0 - cmp r0, 0x1 - bgt _081C7776 - cmp r0, 0 - beq _081C7780 - b _081C782A -_081C7776: - cmp r0, 0x2 - beq _081C77FC - cmp r0, 0x3 - beq _081C780E - b _081C782A -_081C7780: - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - bl FreeAllWindowBuffers - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_0861FA04 - movs r0, 0 - movs r2, 0x1 - bl InitBgsFromTemplates - bl sub_8199D98 - bl reset_temp_tile_data_buffers - movs r0, 0x1 - b _081C782C - .pool -_081C77B0: - movs r0, 0 - bl sub_81C763C - adds r4, r0, 0 - ldr r1, =gPokenavHeader_Gfx - movs r0, 0 - str r0, [sp] - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - adds r4, 0x2C - movs r0, 0 - adds r1, r4, 0 - bl SetBgTilemapBuffer - ldr r1, =gPokenavHeader_Tilemap - movs r0, 0 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - ldr r0, =gPokenavHeader_Pal - movs r1, 0 - movs r2, 0x20 - bl sub_81C7944 - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0 - b _081C782C - .pool -_081C77FC: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - bne _081C7818 - bl sub_81C7B74 - movs r0, 0 - b _081C782C -_081C780E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _081C781C -_081C7818: - movs r0, 0x2 - b _081C782C -_081C781C: - bl sub_81C7C28 - bl sub_81C7D28 - movs r0, 0 - bl ShowBg -_081C782A: - movs r0, 0x4 -_081C782C: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81C7764 - thumb_func_start sub_81C7834 sub_81C7834: @ 81C7834 push {r4,r5,lr} diff --git a/include/graphics.h b/include/graphics.h index 58a9666a6..2ac2f2a5a 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4007,9 +4007,12 @@ extern const u32 gBerryPalette_Enigma[]; //credits extern const u32 gCreditsCopyrightEnd_Gfx[]; -//pokenav condition marker +//pokenav extern const u8 gPokenavConditionMarker_Gfx[]; extern const u16 gPokenavConditionMarker_Pal[]; +extern const u16 gPokenavHeader_Pal[]; +extern const u32 gPokenavHeader_Gfx[]; +extern const u32 gPokenavHeader_Tilemap[]; extern const u32 gUnknown_08D9862C[]; extern const u32 gUnknown_08D98CC8[]; diff --git a/src/pokenav_main.c b/src/pokenav_main.c index bda65e7ce..21d3e90e8 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -9,6 +9,10 @@ #include "sound.h" #include "constants/songs.h" #include "window.h" +#include "gpu_regs.h" +#include "bg.h" +#include "menu.h" +#include "graphics.h" #define UNKNOWN_OFFSET 100000 @@ -29,6 +33,8 @@ struct UnknownStruct_sub_81C76C4 { u32 data[523]; }; +extern struct BgTemplate gUnknown_0861FA04; + extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. @@ -36,11 +42,15 @@ extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at l extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); extern void sub_81C7850(u32 a0); extern void sub_81C9430(void); -extern u32 sub_81C7764(u32 a0); extern u32 sub_81C786C(void); extern void sub_81CAADC(void); extern void sub_81C99D4(void); extern void sub_81C7C94(void); +extern void sub_8199D98(void); +extern void sub_81C7944(void* palette, u32 a1, u32 a2); +extern void sub_81C7B74(void); +extern void sub_81C7C28(void); +extern void sub_81C7D28(void); bool32 sub_81C756C(u32 a0); @@ -49,6 +59,7 @@ u32 AnyMonHasRibbon(void); u32 sub_81C75E0(void); u32 sub_81C75D4(void); u32 sub_81C76FC(void); +u32 sub_81C7764(s32 a0); bool32 sub_81C7738(void); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); void sub_81C7650(u32 index); @@ -62,7 +73,7 @@ void sub_81C7418(void); void sub_81C7400(void); void sub_81C72BC(void); -u32 sub_81C7078(u32 (*a0)(u32), u32 a1) +u32 sub_81C7078(u32 (*a0)(s32), u32 a1) { u16 taskId; @@ -455,4 +466,46 @@ bool32 sub_81C7738(void) { } else { return TRUE; } +} + +u32 sub_81C7764(s32 a0) { + // This is a guess. + struct UnknownStruct_sub_81C76C4 *v1; + + switch (a0) { + case 0: + SetGpuReg(0, 0x82 << 5); + FreeAllWindowBuffers(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_0861FA04, 1); + sub_8199D98(); + reset_temp_tile_data_buffers(); + return 1; + case 1: + v1 = sub_81C763C(0); + decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); + SetBgTilemapBuffer(0, &v1->data[11]); + CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); + sub_81C7944(&gPokenavHeader_Pal, 0, 0x20); + CopyBgTilemapBufferToVram(0); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) { + return 2; + } else { + sub_81C7B74(); + return 0; + } + case 3: + if (IsDma3ManagerBusyWithBgCopy()) { + return 2; + } else { + sub_81C7C28(); + sub_81C7D28(); + ShowBg(0); + return 4; + } + default: + return 4; + } } \ No newline at end of file -- cgit v1.2.3 From 34b16e9e78a717331344934abe4ee172ca487692 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Wed, 13 Feb 2019 03:19:27 -0500 Subject: Decompiled 5 functions for unknown structs --- asm/pokenav.s | 86 ------------------------------------------------------ src/pokenav_main.c | 64 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 89 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 74cf91ca4..904822ee4 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,92 +5,6 @@ .text - thumb_func_start sub_81C7834 -sub_81C7834: @ 81C7834 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0 - bl sub_81C763C - str r4, [r0] - str r5, [r0, 0x4] - movs r1, 0 - str r1, [r0, 0x8] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81C7834 - - thumb_func_start sub_81C7850 -sub_81C7850: @ 81C7850 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - bl sub_81C763C - movs r1, 0 - str r1, [r0, 0x8] - ldr r1, [r0] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C7850 - - thumb_func_start sub_81C786C -sub_81C786C: @ 81C786C - push {lr} - movs r0, 0 - bl sub_81C763C - ldr r0, [r0, 0x4] - bl _call_via_r0 - pop {r1} - bx r1 - thumb_func_end sub_81C786C - - thumb_func_start sub_81C7880 -sub_81C7880: @ 81C7880 - push {r4,lr} - movs r0, 0 - bl sub_81C763C - adds r4, r0, 0 - ldr r0, =atk47_cmd47 - movs r1, 0x4 - bl sub_81C7078 - str r0, [r4, 0xC] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7880 - - thumb_func_start sub_81C78A0 -sub_81C78A0: @ 81C78A0 - push {r4,lr} - movs r0, 0 - bl sub_81C763C - adds r4, r0, 0 - ldr r0, =sub_81C791C - movs r1, 0x4 - bl sub_81C7078 - str r0, [r4, 0xC] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C78A0 - - thumb_func_start sub_81C78C0 -sub_81C78C0: @ 81C78C0 - push {lr} - movs r0, 0 - bl sub_81C763C - ldr r0, [r0, 0xC] - bl sub_81C70D8 - pop {r1} - bx r1 - thumb_func_end sub_81C78C0 - thumb_func_start atk47_cmd47 atk47_cmd47: @ 81C78D4 push {lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 21d3e90e8..29df2b40f 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -29,6 +29,11 @@ struct UnknownStruct_0861F3EC { u32 (*data[7])(void); }; +struct UnknownStruct_sub_81C7850 { + // Unknown size; at least 3. + void (*data[3])(u32); +}; + struct UnknownStruct_sub_81C76C4 { u32 data[523]; }; @@ -39,10 +44,7 @@ extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. -extern void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); -extern void sub_81C7850(u32 a0); extern void sub_81C9430(void); -extern u32 sub_81C786C(void); extern void sub_81CAADC(void); extern void sub_81C99D4(void); extern void sub_81C7C94(void); @@ -51,6 +53,8 @@ extern void sub_81C7944(void* palette, u32 a1, u32 a2); extern void sub_81C7B74(void); extern void sub_81C7C28(void); extern void sub_81C7D28(void); +extern u32 atk47_cmd47(s32 a0); +extern u32 sub_81C791C(s32 a0); bool32 sub_81C756C(u32 a0); @@ -59,10 +63,13 @@ u32 AnyMonHasRibbon(void); u32 sub_81C75E0(void); u32 sub_81C75D4(void); u32 sub_81C76FC(void); +u32 sub_81C786C(void); u32 sub_81C7764(s32 a0); bool32 sub_81C7738(void); +void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); void sub_81C7650(u32 index); +void sub_81C7850(u32 a0); void sub_81C71E4(u8 a0); void sub_81C7170(u8 a0); void sub_81C742C(u8 taskId); @@ -508,4 +515,55 @@ u32 sub_81C7764(s32 a0) { default: return 4; } +} + +void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) { + // This is a guess. + struct UnknownStruct_0861F3EC *v1; + + v1 = sub_81C763C(0); + v1->data[0] = a0; + v1->data[1] = a1; + v1->data[2] = NULL; +} + +void sub_81C7850(u32 a0) { + // This is a guess. + struct UnknownStruct_sub_81C7850 *v1; + + v1 = sub_81C763C(0); + v1->data[2] = NULL; + v1->data[0](a0); +} + +u32 sub_81C786C(void) { + // This is a guess. + struct UnknownStruct_0861F3EC *v1; + + v1 = sub_81C763C(0); + return v1->data[1](); +} + +void sub_81C7880(void) { + // This is a guess. + struct UnknownStruct_0203CF40* v1; + + v1 = sub_81C763C(0); + v1->fieldC = sub_81C7078(atk47_cmd47, 4); +} + +void sub_81C78A0(void) { + // This is a guess. + struct UnknownStruct_0203CF40* v1; + + v1 = sub_81C763C(0); + v1->fieldC = sub_81C7078(sub_81C791C, 4); +} + +bool32 sub_81C78C0(void) { + // This is a guess. + struct UnknownStruct_0203CF40* v1; + + v1 = sub_81C763C(0); + return sub_81C70D8(v1->fieldC); } \ No newline at end of file -- cgit v1.2.3 From a8d920cc45abdef48ca660530d094661557a8451 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Wed, 13 Feb 2019 21:37:34 -0500 Subject: Decompiled 2 functions, unable to decompile 1. sub_81C795C could not be decompiled due to register naming issues. However, its structure was correctly matched, so I have left the C code and a comment explaining the issue. --- asm/pokenav.s | 149 +++++++---------------------------------------------- src/pokenav_main.c | 99 +++++++++++++++++++++++++++++++++-- 2 files changed, 115 insertions(+), 133 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 904822ee4..e810049ff 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,115 +5,6 @@ .text - thumb_func_start atk47_cmd47 -atk47_cmd47: @ 81C78D4 - push {lr} - cmp r0, 0x1 - beq _081C78EA - cmp r0, 0x1 - bgt _081C78E4 - cmp r0, 0 - beq _081C78EA - b _081C7914 -_081C78E4: - cmp r0, 0x2 - beq _081C78EE - b _081C7914 -_081C78EA: - movs r0, 0 - b _081C7916 -_081C78EE: - movs r1, 0xC0 - lsls r1, 1 - movs r0, 0 - movs r2, 0x1 - bl ChangeBgY - ldr r1, =0x00001fff - cmp r0, r1 - bhi _081C7908 - movs r0, 0x2 - b _081C7916 - .pool -_081C7908: - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - movs r2, 0 - bl ChangeBgY -_081C7914: - movs r0, 0x4 -_081C7916: - pop {r1} - bx r1 - thumb_func_end atk47_cmd47 - - thumb_func_start sub_81C791C -sub_81C791C: @ 81C791C - push {lr} - movs r1, 0xC0 - lsls r1, 1 - movs r0, 0 - movs r2, 0x2 - bl ChangeBgY - cmp r0, 0 - ble _081C7932 - movs r0, 0x2 - b _081C793E -_081C7932: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x4 -_081C793E: - pop {r1} - bx r1 - thumb_func_end sub_81C791C - - thumb_func_start sub_81C7944 -sub_81C7944: @ 81C7944 - push {lr} - lsls r1, 1 - ldr r3, =gPlttBufferUnfaded - adds r1, r3 - lsls r2, 10 - lsrs r2, 11 - bl CpuSet - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7944 - - thumb_func_start sub_81C795C -sub_81C795C: @ 81C795C - push {r4,lr} - adds r4, r0, 0 - b _081C7974 -_081C7962: - lsls r0, r1, 4 - movs r2, 0x80 - lsls r2, 1 - adds r1, r0, r2 - ldr r0, [r4] - movs r2, 0x20 - bl sub_81C7944 - adds r4, 0x8 -_081C7974: - ldr r0, [r4] - cmp r0, 0 - beq _081C7988 - ldrh r0, [r4, 0x4] - bl AllocSpritePalette - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - bne _081C7962 -_081C7988: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C795C - thumb_func_start sub_81C7990 sub_81C7990: @ 81C7990 push {lr} @@ -4401,7 +4292,7 @@ _081C9A5C: ldr r0, =gPokenavMessageBox_Pal movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x1 movs r1, 0 movs r2, 0 @@ -4454,7 +4345,7 @@ _081C9AFA: ldr r0, =gUnknown_0861FD4C movs r1, 0x20 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded b _081C9AD6 .pool _081C9B30: @@ -4481,7 +4372,7 @@ _081C9B3E: ldr r0, =gUnknown_0861FC78 movs r1, 0x30 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded bl sub_81C9894 cmp r0, 0x3 beq _081C9B76 @@ -6152,7 +6043,7 @@ sub_81CA850: @ 81CA850 ldr r0, =gUnknown_0861FC78 + 0xE movs r1, 0x31 movs r2, 0x4 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded pop {r0} bx r0 .pool @@ -7636,7 +7527,7 @@ _081CB368: ldr r0, =gUnknown_08622510 movs r1, 0x20 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x2 b _081CB418 .pool @@ -7669,7 +7560,7 @@ _081CB3E0: ldr r0, =gUnknown_086226E0 movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x1 _081CB418: bl CopyBgTilemapBufferToVram @@ -7693,11 +7584,11 @@ _081CB424: ldr r0, =gUnknown_08622700 movs r1, 0x30 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded ldr r0, =gUnknown_08622720 movs r1, 0x50 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0 b _081CB506 .pool @@ -10555,11 +10446,11 @@ sub_81CCA1C: @ 81CCA1C ldr r0, =gUnknown_08622868 movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded ldr r0, =gHoennMapZoomIcons_Pal movs r1, 0x30 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded bl sub_8124658 lsls r0, 24 cmp r0, 0 @@ -13180,11 +13071,11 @@ _081CDFF2: ldr r0, =gPokenavCondition_Pal movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded ldr r0, =gUnknown_08623208 movs r1, 0xF0 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded ldr r0, =0x00001814 adds r1, r5, r0 ldr r0, =0x0000ffb0 @@ -13211,7 +13102,7 @@ _081CE03C: ldr r0, =gUnknown_086231E8 movs r1, 0x30 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x2 bl sub_81D21DC b _081CDFB0 @@ -15659,7 +15550,7 @@ _081CF454: ldr r0, =gUnknown_086233C4 movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x1 bl CopyBgTilemapBufferToVram _081CF498: @@ -15683,7 +15574,7 @@ _081CF4C0: ldr r0, =gUnknown_08623570 movs r1, 0x20 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded bl sub_81CF88C b _081CF498 .pool @@ -17043,7 +16934,7 @@ _081CFEF4: ldr r0, =gUnknown_086235E4 movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x1 bl CopyBgTilemapBufferToVram _081CFF32: @@ -17077,7 +16968,7 @@ _081CFF76: ldr r0, =gUnknown_08623790 movs r1, 0x20 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded bl sub_81D0304 b _081CFF32 .pool @@ -18580,7 +18471,7 @@ _081D0AB8: ldr r0, =gUnknown_08DDE010 movs r1, 0x10 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded b _081D0BBA .pool _081D0B04: @@ -18618,11 +18509,11 @@ _081D0B12: ldr r0, =gUnknown_08623FF8 movs r1, 0x20 movs r2, 0xA0 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded ldr r0, =gUnknown_08624098 movs r1, 0xA0 movs r2, 0x20 - bl sub_81C7944 + bl CopyPaletteIntoBufferUnfaded movs r0, 0x1 b _081D0BBC .pool diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 29df2b40f..5610966b7 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -13,9 +13,15 @@ #include "bg.h" #include "menu.h" #include "graphics.h" +#include "gba/macro.h" #define UNKNOWN_OFFSET 100000 +struct PaletteDescriptor { + void *palette; + u16 tag; +}; + struct UnknownStruct_0203CF40 { u32 (*field0)(void); u32 field4; @@ -49,14 +55,12 @@ extern void sub_81CAADC(void); extern void sub_81C99D4(void); extern void sub_81C7C94(void); extern void sub_8199D98(void); -extern void sub_81C7944(void* palette, u32 a1, u32 a2); extern void sub_81C7B74(void); extern void sub_81C7C28(void); extern void sub_81C7D28(void); -extern u32 atk47_cmd47(s32 a0); -extern u32 sub_81C791C(s32 a0); +u32 sub_81C791C(s32 a0); bool32 sub_81C756C(u32 a0); bool32 sub_81C76C4(void); u32 AnyMonHasRibbon(void); @@ -65,7 +69,9 @@ u32 sub_81C75D4(void); u32 sub_81C76FC(void); u32 sub_81C786C(void); u32 sub_81C7764(s32 a0); +u32 atk47_cmd47(s32 a0); bool32 sub_81C7738(void); +void CopyPaletteIntoBufferUnfaded(void *palette, u32 a1, u32 a2); void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); void sub_81C7650(u32 index); @@ -493,7 +499,7 @@ u32 sub_81C7764(s32 a0) { decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); SetBgTilemapBuffer(0, &v1->data[11]); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); - sub_81C7944(&gPokenavHeader_Pal, 0, 0x20); + CopyPaletteIntoBufferUnfaded(&gPokenavHeader_Pal, 0, 0x20); CopyBgTilemapBufferToVram(0); return 0; case 2: @@ -566,4 +572,89 @@ bool32 sub_81C78C0(void) { v1 = sub_81C763C(0); return sub_81C70D8(v1->fieldC); +} + +u32 atk47_cmd47(s32 a0) { + switch (a0) { + default: + return 4; + case 1: + return 0; + case 0: + return 0; + case 2: + if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) { + ChangeBgY(0, 0x2000, 0); + return 4; + } else { + return 2; + } + } +} + +u32 sub_81C791C(s32 a0) { + if (ChangeBgY(0, 384, 2) <= 0) { + ChangeBgY(0, 0, 0); + return 4; + } else { + return 2; + } +} + +void CopyPaletteIntoBufferUnfaded(void *palette, u32 bufferOffset, u32 size) { + CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); +} + +__attribute__((naked)) +void sub_81C795C(struct PaletteDescriptor *palettes) { + // This code matches the assembly almost exactly; however, gcc chooses + // to store `index` in r0 instead of r1. +#ifdef NONMATCHING + struct PaletteDescriptor *current; + u32 offset; + u32 index; + + current = palettes; + for (;;) { + if (current->palette == NULL) { + break; + } + index = AllocSpritePalette(current->tag); + if (index == 0xFF) { + break; + } + offset = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->palette, offset, 0x20); + current++; + } +#else // NONMATCHING + asm(".syntax unified\n\ + push {r4,lr}\n\ + adds r4, r0, 0\n\ + b _081C7974\n\ + _081C7962:\n\ + lsls r0, r1, 4\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r1, r0, r2\n\ + ldr r0, [r4]\n\ + movs r2, 0x20\n\ + bl CopyPaletteIntoBufferUnfaded\n\ + adds r4, 0x8\n\ + _081C7974:\n\ + ldr r0, [r4]\n\ + cmp r0, 0\n\ + beq _081C7988\n\ + ldrh r0, [r4, 0x4]\n\ + bl AllocSpritePalette\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0xFF\n\ + bne _081C7962\n\ + _081C7988:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +#endif // NONMATCHING } \ No newline at end of file -- cgit v1.2.3 From f95eebf47a9fd235f722104d727b0b9da9af4474 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Wed, 13 Feb 2019 23:58:49 -0500 Subject: With help, sub_81C795C has been tamed. Thanks to Garak on the discord server. --- src/pokenav_main.c | 65 +++++++++++++----------------------------------------- 1 file changed, 15 insertions(+), 50 deletions(-) diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 5610966b7..3e77ba686 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -605,56 +605,21 @@ void CopyPaletteIntoBufferUnfaded(void *palette, u32 bufferOffset, u32 size) { CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); } -__attribute__((naked)) void sub_81C795C(struct PaletteDescriptor *palettes) { - // This code matches the assembly almost exactly; however, gcc chooses - // to store `index` in r0 instead of r1. -#ifdef NONMATCHING struct PaletteDescriptor *current; - u32 offset; - u32 index; - - current = palettes; - for (;;) { - if (current->palette == NULL) { - break; - } - index = AllocSpritePalette(current->tag); - if (index == 0xFF) { - break; - } - offset = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->palette, offset, 0x20); - current++; - } -#else // NONMATCHING - asm(".syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - b _081C7974\n\ - _081C7962:\n\ - lsls r0, r1, 4\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r1, r0, r2\n\ - ldr r0, [r4]\n\ - movs r2, 0x20\n\ - bl CopyPaletteIntoBufferUnfaded\n\ - adds r4, 0x8\n\ - _081C7974:\n\ - ldr r0, [r4]\n\ - cmp r0, 0\n\ - beq _081C7988\n\ - ldrh r0, [r4, 0x4]\n\ - bl AllocSpritePalette\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - cmp r1, 0xFF\n\ - bne _081C7962\n\ - _081C7988:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -#endif // NONMATCHING + u32 index; + + for (current = palettes; current->palette != NULL; current++) + { + index = AllocSpritePalette(current->tag); + if (index == 0xFF) + { + break; + } + else + { + index = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->palette, index, 0x20); + } + } } \ No newline at end of file -- cgit v1.2.3 From d41c597f901383944dbb6689be08beeeb859b9cd Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Thu, 14 Feb 2019 11:55:58 -0500 Subject: Decompiled sub_81C7990 --- asm/pokenav.s | 22 ---------------------- src/pokenav_main.c | 6 +++++- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index e810049ff..5f0a2aa91 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,28 +5,6 @@ .text - thumb_func_start sub_81C7990 -sub_81C7990: @ 81C7990 - push {lr} - sub sp, 0x4 - adds r3, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r0, sp - strh r1, [r0] - lsls r3, 5 - ldr r0, =gPlttBufferFaded + 0x200 - adds r3, r0 - ldr r2, =0x01000010 - mov r0, sp - adds r1, r3, 0 - bl CpuSet - add sp, 0x4 - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7990 - thumb_func_start sub_81C79BC sub_81C79BC: @ 81C79BC push {r4-r7,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 3e77ba686..67d812912 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -622,4 +622,8 @@ void sub_81C795C(struct PaletteDescriptor *palettes) { CopyPaletteIntoBufferUnfaded(current->palette, index, 0x20); } } -} \ No newline at end of file +} + +void sub_81C7990(u32 a0, u16 a1) { + CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); +} -- cgit v1.2.3 From cb800e4708e08181b9b33296e9ab8c8180518b04 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Thu, 14 Feb 2019 16:30:52 -0500 Subject: Decompiled 5 functions Was unable to decompile sub_81C79BC. --- asm/pokenav.s | 293 +++-------------------------------------------------- src/pokenav_main.c | 187 +++++++++++++++++++++++++++++++++- 2 files changed, 202 insertions(+), 278 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 5f0a2aa91..5409c7aaf 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,267 +5,6 @@ .text - thumb_func_start sub_81C79BC -sub_81C79BC: @ 81C79BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - str r0, [sp] - str r1, [sp, 0x4] - mov r10, r2 - str r3, [sp, 0x8] - ldr r0, [sp, 0x2C] - cmp r0, 0 - bne _081C79E4 - ldr r2, =0x001fffff - mov r1, r10 - ands r2, r1 - ldr r0, [sp] - b _081C79F4 - .pool -_081C79E4: - ldr r2, [sp, 0x2C] - ldr r0, [sp, 0x8] - cmp r2, r0 - blt _081C7A00 - ldr r2, =0x001fffff - mov r1, r10 - ands r2, r1 - ldr r0, [sp, 0x4] -_081C79F4: - ldr r1, [sp, 0x30] - bl CpuSet - b _081C7AAE - .pool -_081C7A00: - movs r2, 0x1 - negs r2, r2 - add r10, r2 - b _081C7AA6 -_081C7A08: - ldr r1, [sp] - ldrh r0, [r1] - movs r2, 0x1F - mov r9, r2 - mov r1, r9 - ands r1, r0 - mov r9, r1 - lsls r0, 16 - lsrs r2, r0, 21 - movs r1, 0x1F - ands r1, r2 - mov r8, r1 - lsrs r7, r0, 26 - movs r2, 0x1F - ands r7, r2 - ldr r0, [sp, 0x4] - ldrh r4, [r0] - movs r0, 0x1F - ands r0, r4 - mov r1, r9 - subs r0, r1 - lsls r0, 8 - ldr r1, [sp, 0x8] - bl __divsi3 - ldr r2, [sp, 0x2C] - adds r6, r0, 0 - muls r6, r2 - asrs r6, 8 - lsls r4, 16 - lsrs r0, r4, 21 - movs r1, 0x1F - ands r0, r1 - mov r2, r8 - subs r0, r2 - lsls r0, 8 - ldr r1, [sp, 0x8] - bl __divsi3 - ldr r1, [sp, 0x2C] - adds r5, r0, 0 - muls r5, r1 - asrs r5, 8 - lsrs r4, 26 - movs r2, 0x1F - ands r4, r2 - subs r4, r7 - lsls r4, 8 - adds r0, r4, 0 - ldr r1, [sp, 0x8] - bl __divsi3 - ldr r1, [sp, 0x2C] - muls r0, r1 - asrs r0, 8 - add r6, r9 - movs r2, 0x1F - ands r6, r2 - add r5, r8 - ands r5, r2 - adds r0, r7, r0 - ands r0, r2 - lsls r0, 10 - lsls r5, 5 - orrs r0, r5 - orrs r0, r6 - ldr r1, [sp, 0x30] - strh r0, [r1] - ldr r2, [sp] - adds r2, 0x2 - str r2, [sp] - ldr r0, [sp, 0x4] - adds r0, 0x2 - str r0, [sp, 0x4] - adds r1, 0x2 - str r1, [sp, 0x30] - movs r1, 0x1 - negs r1, r1 - add r10, r1 -_081C7AA6: - movs r0, 0x1 - negs r0, r0 - cmp r10, r0 - bne _081C7A08 -_081C7AAE: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_81C79BC - - thumb_func_start sub_81C7AC0 -sub_81C7AC0: @ 81C7AC0 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0 - bl sub_81C763C - cmp r4, 0x1 - beq _081C7AF0 - cmp r4, 0x1 - bgt _081C7ADA - cmp r4, 0 - beq _081C7AE4 - b _081C7B2C -_081C7ADA: - cmp r4, 0x2 - beq _081C7B04 - cmp r4, 0x3 - beq _081C7B18 - b _081C7B2C -_081C7AE4: - ldr r0, [r0, 0x14] - movs r1, 0x2 - negs r1, r1 - str r4, [sp] - movs r2, 0 - b _081C7B10 -_081C7AF0: - ldr r0, [r0, 0x14] - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _081C7B2C -_081C7B04: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] -_081C7B10: - movs r3, 0x10 - bl BeginNormalPaletteFade - b _081C7B2C -_081C7B18: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_081C7B2C: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C7AC0 - - thumb_func_start sub_81C7B34 -sub_81C7B34: @ 81C7B34 - ldr r0, =gPaletteFade - ldrb r0, [r0, 0x7] - lsrs r0, 7 - bx lr - .pool - thumb_func_end sub_81C7B34 - - thumb_func_start sub_81C7B40 -sub_81C7B40: @ 81C7B40 - push {lr} - ldr r0, =0xfffefffe - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7B40 - - thumb_func_start sub_81C7B54 -sub_81C7B54: @ 81C7B54 - push {r4,r5,lr} - adds r5, r0, 0 - cmp r1, 0 - ble _081C7B6C - adds r4, r1, 0 -_081C7B5E: - adds r0, r5, 0 - adds r5, 0x4 - bl InitBgFromTemplate - subs r4, 0x1 - cmp r4, 0 - bne _081C7B5E -_081C7B6C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81C7B54 - - thumb_func_start sub_81C7B74 -sub_81C7B74: @ 81C7B74 - push {r4,lr} - movs r0, 0 - bl sub_81C763C - adds r4, r0, 0 - ldr r0, =gUnknown_0861FA08 - bl InitWindows - movs r0, 0 - str r0, [r4, 0x10] - bl sub_81C7BF8 - ldrb r0, [r4, 0x10] - bl PutWindowTilemap - ldrb r0, [r4, 0x10] - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7B74 - thumb_func_start sub_81C7BA4 sub_81C7BA4: @ 81C7BA4 push {r4,r5,lr} @@ -4420,7 +4159,7 @@ _081C9C06: bl sub_81C7DFC b _081C9AD6 _081C9C0E: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081C9C5C bl sub_81C9894 @@ -4884,7 +4623,7 @@ _081C9F96: movs r0, 0 b _081C9FBE _081C9FB0: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 beq _081C9FBC _081C9FB8: @@ -7624,7 +7363,7 @@ _081CB4A6: movs r0, 0 b _081CB506 _081CB4EA: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CB4FA bl sub_81C8010 @@ -8517,7 +8256,7 @@ _081CBB80: movs r0, 0 b _081CBBB4 _081CBB9A: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CBBAA bl sub_81C78C0 @@ -10104,7 +9843,7 @@ _081CC812: bl sub_81C7AC0 b _081CC77C _081CC82A: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CC83A bl sub_81C8010 @@ -10290,7 +10029,7 @@ _081CC972: movs r0, 0 b _081CC9BA _081CC982: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CC99E bl sub_81C7FDC @@ -13258,7 +12997,7 @@ _081CE1FC: bl sub_81C7FA0 b _081CDFB0 _081CE218: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CE2C0 bl sub_81CDD5C @@ -13387,7 +13126,7 @@ _081CE33A: movs r0, 0 b _081CE376 _081CE33E: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CE34E bl sub_81C78C0 @@ -15607,7 +15346,7 @@ _081CF552: bl sub_81C7AC0 b _081CF498 _081CF55A: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CF56A bl sub_81C8010 @@ -15914,7 +15653,7 @@ _081CF764: movs r0, 0 b _081CF792 _081CF778: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CF788 bl sub_81C78C0 @@ -15948,7 +15687,7 @@ _081CF7A4: movs r0, 0 b _081CF7C2 _081CF7B4: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 beq _081CF7C0 movs r0, 0x2 @@ -16981,7 +16720,7 @@ _081CFFA4: bl sub_81C7FA0 b _081CFF32 _081CFFDE: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081CFFEE bl sub_81C8010 @@ -17288,7 +17027,7 @@ _081D01E8: movs r0, 0 b _081D0216 _081D01FC: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 bne _081D020C bl sub_81C78C0 @@ -17322,7 +17061,7 @@ _081D0228: movs r0, 0 b _081D0246 _081D0238: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 beq _081D0244 movs r0, 0x2 @@ -18583,7 +18322,7 @@ _081D0BE8: movs r0, 0 b _081D0C4A _081D0C3C: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 beq _081D0C48 _081D0C44: @@ -18614,7 +18353,7 @@ _081D0C60: movs r0, 0 b _081D0C7E _081D0C70: - bl sub_81C7B34 + bl IsPaletteFadeActive cmp r0, 0 beq _081D0C7C movs r0, 0x2 diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 67d812912..fe05f288f 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -45,6 +45,7 @@ struct UnknownStruct_sub_81C76C4 { }; extern struct BgTemplate gUnknown_0861FA04; +extern struct WindowTemplate gUnknown_0861FA08; extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; @@ -55,9 +56,9 @@ extern void sub_81CAADC(void); extern void sub_81C99D4(void); extern void sub_81C7C94(void); extern void sub_8199D98(void); -extern void sub_81C7B74(void); extern void sub_81C7C28(void); extern void sub_81C7D28(void); +extern void sub_81C7BF8(void); u32 sub_81C791C(s32 a0); @@ -85,6 +86,7 @@ void sub_81C7334(void); void sub_81C7418(void); void sub_81C7400(void); void sub_81C72BC(void); +void sub_81C7B74(void); u32 sub_81C7078(u32 (*a0)(s32), u32 a1) { @@ -627,3 +629,186 @@ void sub_81C795C(struct PaletteDescriptor *palettes) { void sub_81C7990(u32 a0, u16 a1) { CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } + +__attribute__((naked)) +void sub_81C79BC(u16* a0, u16* a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + mov r10, r2\n\ + str r3, [sp, 0x8]\n\ + ldr r0, [sp, 0x2C]\n\ + cmp r0, 0\n\ + bne _081C79E4\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp]\n\ + b _081C79F4\n\ + .pool\n\ +_081C79E4:\n\ + ldr r2, [sp, 0x2C]\n\ + ldr r0, [sp, 0x8]\n\ + cmp r2, r0\n\ + blt _081C7A00\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp, 0x4]\n\ +_081C79F4:\n\ + ldr r1, [sp, 0x30]\n\ + bl CpuSet\n\ + b _081C7AAE\n\ + .pool\n\ +_081C7A00:\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + add r10, r2\n\ + b _081C7AA6\n\ +_081C7A08:\n\ + ldr r1, [sp]\n\ + ldrh r0, [r1]\n\ + movs r2, 0x1F\n\ + mov r9, r2\n\ + mov r1, r9\n\ + ands r1, r0\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 21\n\ + movs r1, 0x1F\n\ + ands r1, r2\n\ + mov r8, r1\n\ + lsrs r7, r0, 26\n\ + movs r2, 0x1F\n\ + ands r7, r2\n\ + ldr r0, [sp, 0x4]\n\ + ldrh r4, [r0]\n\ + movs r0, 0x1F\n\ + ands r0, r4\n\ + mov r1, r9\n\ + subs r0, r1\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r0, 0\n\ + muls r6, r2\n\ + asrs r6, 8\n\ + lsls r4, 16\n\ + lsrs r0, r4, 21\n\ + movs r1, 0x1F\n\ + ands r0, r1\n\ + mov r2, r8\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + adds r5, r0, 0\n\ + muls r5, r1\n\ + asrs r5, 8\n\ + lsrs r4, 26\n\ + movs r2, 0x1F\n\ + ands r4, r2\n\ + subs r4, r7\n\ + lsls r4, 8\n\ + adds r0, r4, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + add r6, r9\n\ + movs r2, 0x1F\n\ + ands r6, r2\n\ + add r5, r8\n\ + ands r5, r2\n\ + adds r0, r7, r0\n\ + ands r0, r2\n\ + lsls r0, 10\n\ + lsls r5, 5\n\ + orrs r0, r5\n\ + orrs r0, r6\n\ + ldr r1, [sp, 0x30]\n\ + strh r0, [r1]\n\ + ldr r2, [sp]\n\ + adds r2, 0x2\n\ + str r2, [sp]\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x4]\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x30]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + add r10, r1\n\ +_081C7AA6:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r10, r0\n\ + bne _081C7A08\n\ +_081C7AAE:\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +void sub_81C7AC0(s32 a0) { + u32 *v1; + v1 = sub_81C763C(0); + switch (a0) { + case 0: + BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); + break; + case 1: + BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); + break; + case 2: + BeginNormalPaletteFade(-1, -2, 0, 16, 0); + break; + case 3: + BeginNormalPaletteFade(-1, -2, 16, 0, 0); + break; + } +} + +bool32 IsPaletteFadeActive(void) { + return gPaletteFade.active; +} + +void sub_81C7B40(void) { + BlendPalettes(0xFFFEFFFE, 16, 0); +} + +void sub_81C7B54(const struct BgTemplate *a0, s32 a1) { + s32 i; + if (a1 <= 0) { + return; + } + for (i = a1; i != 0; i--) { + InitBgFromTemplate(a0++); + } +} + +void sub_81C7B74(void) { + u32 *v1; + + v1 = sub_81C763C(0); + InitWindows(&gUnknown_0861FA08); + v1[4] = 0; + sub_81C7BF8(); + PutWindowTilemap(v1[4]); + CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. +} \ No newline at end of file -- cgit v1.2.3 From 6d929c61c5b445e488b47655437856e6542d0da9 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Thu, 14 Feb 2019 17:26:34 -0500 Subject: Decompiled 4 more functions --- asm/pokenav.s | 113 ----------------------------------------------------- src/pokenav_main.c | 60 +++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 119 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 5409c7aaf..252134562 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,119 +5,6 @@ .text - thumb_func_start sub_81C7BA4 -sub_81C7BA4: @ 81C7BA4 - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - movs r0, 0 - bl sub_81C763C - adds r5, r0, 0 - ldr r0, [r5, 0x10] - bl sub_81C7BF8 - ldrb r0, [r5, 0x10] - ldr r1, =gUnknown_0861FA48 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - ldr r1, =gUnknown_0861FA18 - lsls r4, 2 - adds r4, r1 - ldr r1, [r4] - str r1, [sp, 0x8] - movs r1, 0x1 - movs r2, 0 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7BA4 - - thumb_func_start sub_81C7BE8 -sub_81C7BE8: @ 81C7BE8 - push {lr} - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_81C7BE8 - - thumb_func_start sub_81C7BF8 -sub_81C7BF8: @ 81C7BF8 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x44 - bl FillWindowPixelBuffer - movs r0, 0x80 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - adds r0, r4, 0 - movs r1, 0x55 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C7BF8 - - thumb_func_start sub_81C7C28 -sub_81C7C28: @ 81C7C28 - push {r4-r6,lr} - movs r0, 0 - bl sub_81C763C - adds r6, r0, 0 - movs r5, 0 - ldr r4, =gUnknown_0861FA4C -_081C7C36: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0 - beq _081C7C36 - ldr r0, =gUnknown_0861FA54 - bl sub_81C795C - movs r0, 0 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - movs r0, 0x2 - negs r0, r0 - bics r0, r1 - str r0, [r6, 0x14] - ldr r0, =gUnknown_0861FB04 - movs r1, 0xDC - movs r2, 0xC - movs r3, 0 - 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, [r6, 0x18] - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81C7C28 - thumb_func_start sub_81C7C94 sub_81C7C94: @ 81C7C94 push {lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index fe05f288f..a75a85a18 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -14,6 +14,7 @@ #include "menu.h" #include "graphics.h" #include "gba/macro.h" +#include "decompress.h" #define UNKNOWN_OFFSET 100000 @@ -44,21 +45,28 @@ struct UnknownStruct_sub_81C76C4 { u32 data[523]; }; +struct UnknownStruct_sub_81C7C28 { + struct CompressedSpriteSheet sheet; + u32 field4; +}; + extern struct BgTemplate gUnknown_0861FA04; extern struct WindowTemplate gUnknown_0861FA08; - extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; +extern u8 gUnknown_0861FA48; extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. +extern const u8 *(gUnknown_0861FA18[]); +extern const struct CompressedSpriteSheet gUnknown_0861FA4C[]; +extern const struct PaletteDescriptor gUnknown_0861FA54; +extern const struct SpriteTemplate gUnknown_0861FB04; extern void sub_81C9430(void); extern void sub_81CAADC(void); extern void sub_81C99D4(void); extern void sub_81C7C94(void); extern void sub_8199D98(void); -extern void sub_81C7C28(void); extern void sub_81C7D28(void); -extern void sub_81C7BF8(void); u32 sub_81C791C(s32 a0); @@ -77,6 +85,7 @@ void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); void sub_81C7650(u32 index); void sub_81C7850(u32 a0); +void sub_81C7BF8(u32 a0); void sub_81C71E4(u8 a0); void sub_81C7170(u8 a0); void sub_81C742C(u8 taskId); @@ -85,6 +94,7 @@ void sub_81C75F4(void); void sub_81C7334(void); void sub_81C7418(void); void sub_81C7400(void); +void sub_81C7C28(void); void sub_81C72BC(void); void sub_81C7B74(void); @@ -607,8 +617,8 @@ void CopyPaletteIntoBufferUnfaded(void *palette, u32 bufferOffset, u32 size) { CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); } -void sub_81C795C(struct PaletteDescriptor *palettes) { - struct PaletteDescriptor *current; +void sub_81C795C(const struct PaletteDescriptor *palettes) { + const struct PaletteDescriptor *current; u32 index; for (current = palettes; current->palette != NULL; current++) @@ -808,7 +818,45 @@ void sub_81C7B74(void) { v1 = sub_81C763C(0); InitWindows(&gUnknown_0861FA08); v1[4] = 0; - sub_81C7BF8(); + sub_81C7BF8(0); PutWindowTilemap(v1[4]); CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. +} + +void sub_81C7BA4(u32 a0) { + u32* v1; + + v1 = sub_81C763C(0); + sub_81C7BF8(v1[4]); + AddTextPrinterParameterized3(v1[4], 1, 0, 1, &gUnknown_0861FA48, 0, gUnknown_0861FA18[a0]); +} + +bool8 sub_81C7BE8(void) { + return IsDma3ManagerBusyWithBgCopy(); +} + +void sub_81C7BF8(u32 a0) { + FillWindowPixelBuffer(a0, 0x44); + FillWindowPixelRect(a0, 0x55, 0, 0, 0x80, 1); +} + +void sub_81C7C28(void) { + u32* v1; + u32 i; + u8 v2; + u32 v3; + u32 v4; + u8 spriteId; + + v1 = sub_81C763C(0); + for (i = 0; i == 0; i++) { + LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); + } + + sub_81C795C(&gUnknown_0861FA54); + v2 = IndexOfSpritePaletteTag(0); + v3 = 0x80 << 9 << v2; + v1[5] = -2 & ~v3; + spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); + v1[6] = (u32)(&gSprites[spriteId]); } \ No newline at end of file -- cgit v1.2.3 From 758b8c7f0eda1df1914f4cd34e81c0a768792d59 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Thu, 14 Feb 2019 21:03:52 -0500 Subject: Decompiled three more functions. --- asm/pokenav.s | 42 ------------------------------------------ src/pokenav_main.c | 25 ++++++++++++++++++++++++- 2 files changed, 24 insertions(+), 43 deletions(-) diff --git a/asm/pokenav.s b/asm/pokenav.s index 252134562..01ba420aa 100644 --- a/asm/pokenav.s +++ b/asm/pokenav.s @@ -5,48 +5,6 @@ .text - thumb_func_start sub_81C7C94 -sub_81C7C94: @ 81C7C94 - push {lr} - movs r0, 0 - bl sub_81C763C - ldr r0, [r0, 0x18] - bl DestroySprite - movs r0, 0 - bl FreeSpriteTilesByTag - movs r0, 0 - bl FreeSpritePaletteByTag - pop {r0} - bx r0 - thumb_func_end sub_81C7C94 - - thumb_func_start sub_81C7CB4 -sub_81C7CB4: @ 81C7CB4 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0 - bl GetBgY - lsrs r0, 8 - negs r0, r0 - strh r0, [r4, 0x26] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_81C7CB4 - - thumb_func_start sub_81C7CCC -sub_81C7CCC: @ 81C7CCC - push {lr} - movs r0, 0 - bl sub_81C763C - ldr r0, [r0, 0x18] - ldr r1, =SpriteCallbackDummy - str r1, [r0, 0x1C] - pop {r1} - bx r1 - .pool - thumb_func_end sub_81C7CCC - thumb_func_start sub_81C7CE4 sub_81C7CE4: @ 81C7CE4 push {r4,lr} diff --git a/src/pokenav_main.c b/src/pokenav_main.c index a75a85a18..bc19a908b 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -64,7 +64,6 @@ extern const struct SpriteTemplate gUnknown_0861FB04; extern void sub_81C9430(void); extern void sub_81CAADC(void); extern void sub_81C99D4(void); -extern void sub_81C7C94(void); extern void sub_8199D98(void); extern void sub_81C7D28(void); @@ -97,6 +96,7 @@ void sub_81C7400(void); void sub_81C7C28(void); void sub_81C72BC(void); void sub_81C7B74(void); +void sub_81C7C94(void); u32 sub_81C7078(u32 (*a0)(s32), u32 a1) { @@ -859,4 +859,27 @@ void sub_81C7C28(void) { v1[5] = -2 & ~v3; spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); v1[6] = (u32)(&gSprites[spriteId]); +} + +void sub_81C7C94(void) { + void **v1; + v1 = sub_81C763C(0); + DestroySprite(v1[6]); + FreeSpriteTilesByTag(0); + FreeSpritePaletteByTag(0); +} + +void sub_81C7CB4(u16 *a0) { + u32 v1; + v1 = GetBgY(0); + a0[19] = (v1 >> 8) * -1; +} + +struct Sprite* sub_81C7CCC(void) { + struct Sprite **v1; + struct Sprite *v2; + v1 = sub_81C763C(0); + v2 = v1[6]; + v2->callback = SpriteCallbackDummy; + return v2; } \ No newline at end of file -- cgit v1.2.3 From bf4c1a73c0e14c88e61bb74f99385414d9b807a9 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Thu, 14 Feb 2019 22:18:47 -0500 Subject: Start moving pokenav data into C files The types and usage of many of the globals are now known. --- data/pokenav.s | 114 ++------------------------ ld_script.txt | 1 + src/pokenav_main.c | 236 ++++++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 225 insertions(+), 126 deletions(-) diff --git a/data/pokenav.s b/data/pokenav.s index 1a5e2bd99..030358715 100644 --- a/data/pokenav.s +++ b/data/pokenav.s @@ -3,113 +3,6 @@ .section .rodata -gUnknown_0861F3EC:: @ 861F3EC - .4byte sub_81C9298 - .4byte sub_81C941C - .4byte sub_81C9924 - .4byte sub_81C9990 - .4byte sub_81C99C0 - .4byte sub_81C9430 - .4byte sub_81C99D4 - .4byte sub_81C9298 - .4byte sub_81C941C - .4byte sub_81C9940 - .4byte sub_81C9990 - .4byte sub_81C99C0 - .4byte sub_81C9430 - .4byte sub_81C99D4 - .4byte sub_81C9338 - .4byte sub_81C941C - .4byte sub_81C9940 - .4byte sub_81C9990 - .4byte sub_81C99C0 - .4byte sub_81C9430 - .4byte sub_81C99D4 - .4byte sub_81C9368 - .4byte sub_81C941C - .4byte sub_81C9940 - .4byte sub_81C9990 - .4byte sub_81C99C0 - .4byte sub_81C9430 - .4byte sub_81C99D4 - .4byte sub_81C92CC - .4byte sub_81C941C - .4byte sub_81C9940 - .4byte sub_81C9990 - .4byte sub_81C99C0 - .4byte sub_81C9430 - .4byte sub_81C99D4 - .4byte sub_81C9304 - .4byte sub_81C941C - .4byte sub_81C9940 - .4byte sub_81C9990 - .4byte sub_81C99C0 - .4byte sub_81C9430 - .4byte sub_81C99D4 - .4byte sub_81CC4D4 - .4byte sub_81CC554 - .4byte sub_81CC5F4 - .4byte sub_81CC62C - .4byte sub_81CC65C - .4byte sub_81CC524 - .4byte sub_81CC670 - .4byte sub_81CCFD8 - .4byte sub_81CD070 - .4byte sub_81CDDD4 - .4byte sub_81CDE2C - .4byte sub_81CDE64 - .4byte sub_81CD1C0 - .4byte sub_81CECA0 - .4byte sub_81CEF3C - .4byte sub_81CEFDC - .4byte sub_81CF330 - .4byte sub_81CF3A0 - .4byte sub_81CF3D0 - .4byte sub_81CEFF0 - .4byte sub_81CF3F8 - .4byte sub_81CD024 - .4byte sub_81CD070 - .4byte sub_81CDDD4 - .4byte sub_81CDE2C - .4byte sub_81CDE64 - .4byte sub_81CD1C0 - .4byte sub_81CECA0 - .4byte sub_81CEF98 - .4byte sub_81CEFDC - .4byte sub_81CF368 - .4byte sub_81CF3A0 - .4byte sub_81CF3D0 - .4byte sub_81CEFF0 - .4byte sub_81CF3F8 - .4byte sub_81CAAE8 - .4byte sub_81CAB24 - .4byte sub_81CB260 - .4byte sub_81CB29C - .4byte sub_81CB2CC - .4byte sub_81CAB38 - .4byte sub_81CB2E0 - .4byte sub_81CF9BC - .4byte sub_81CFA34 - .4byte sub_81CFDD0 - .4byte sub_81CFE40 - .4byte sub_81CFE70 - .4byte sub_81CFA48 - .4byte sub_81CFE98 - .4byte sub_81D0450 - .4byte sub_81D04A0 - .4byte sub_81D0978 - .4byte sub_81D09B0 - .4byte sub_81D09E0 - .4byte sub_81D04B8 - .4byte sub_81D09F4 - .4byte sub_81CFA04 - .4byte sub_81CFA34 - .4byte sub_81CFE08 - .4byte sub_81CFE40 - .4byte sub_81CFE70 - .4byte sub_81CFA48 - .4byte sub_81CFE98 - gUnknown_0861F590:: @ 861F590 .incbin "graphics/pokenav/icon2.gbapal" @@ -119,6 +12,13 @@ gUnknown_0861F5B0:: @ 861F5B0 gUnknown_0861F994:: @ 861F994 .incbin "graphics/pokenav/icon2_unused.4bpp.lz" +@ struct BgTemplate gUnknown_0861FA04 { +@ .bg: 0, +@ .charBaseIndex: 0 +@ .mapBaseIndex: 5 +@ .screenSize: 2, +@ +@ } gUnknown_0861FA04:: @ 861FA04 .byte 0x50 .byte 0x0 diff --git a/ld_script.txt b/ld_script.txt index a92e1d85e..8c48cf316 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -592,6 +592,7 @@ SECTIONS { src/pokemon_summary_screen.o(.rodata); src/unk_pokedex_area_screen_helper.o(.rodata); src/battle_pyramid_bag.o(.rodata); + src/pokenav_main.o(.rodata); data/pokenav.o(.rodata); src/pokenav_match_call.o(.rodata); data/rom_81D1C44.o(.rodata); diff --git a/src/pokenav_main.c b/src/pokenav_main.c index bc19a908b..0b772ffe6 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -18,6 +18,7 @@ #define UNKNOWN_OFFSET 100000 + struct PaletteDescriptor { void *palette; u16 tag; @@ -50,23 +51,69 @@ struct UnknownStruct_sub_81C7C28 { u32 field4; }; -extern struct BgTemplate gUnknown_0861FA04; -extern struct WindowTemplate gUnknown_0861FA08; -extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; -extern u8 gUnknown_0203CF3C; -extern u8 gUnknown_0861FA48; -extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. -extern const u8 *(gUnknown_0861FA18[]); -extern const struct CompressedSpriteSheet gUnknown_0861FA4C[]; -extern const struct PaletteDescriptor gUnknown_0861FA54; -extern const struct SpriteTemplate gUnknown_0861FB04; -extern void sub_81C9430(void); +extern u32 sub_81C9430(void); extern void sub_81CAADC(void); -extern void sub_81C99D4(void); +extern u32 sub_81C99D4(void); extern void sub_8199D98(void); extern void sub_81C7D28(void); - +extern u32 sub_81C9298(void); +extern u32 sub_81C941C(void); +extern u32 sub_81C9924(void); +extern u32 sub_81C99C0(void); +extern u32 sub_81C9990(void); +extern u32 sub_81C9940(void); +extern u32 sub_81C9338(void); +extern u32 sub_81C9368(void); +extern u32 sub_81C92CC(void); +extern u32 sub_81C9304(void); +extern u32 sub_81CC4D4(void); +extern u32 sub_81CC554(void); +extern u32 sub_81CC5F4(void); +extern u32 sub_81CC62C(void); +extern u32 sub_81CC65C(void); +extern u32 sub_81CC524(void); +extern u32 sub_81CC670(void); +extern u32 sub_81CCFD8(void); +extern u32 sub_81CD070(void); +extern u32 sub_81CDDD4(void); +extern u32 sub_81CDE2C(void); +extern u32 sub_81CDE64(void); +extern u32 sub_81CD1C0(void); +extern u32 sub_81CECA0(void); +extern u32 sub_81CEF3C(void); +extern u32 sub_81CEFDC(void); +extern u32 sub_81CF330(void); +extern u32 sub_81CF3A0(void); +extern u32 sub_81CF3D0(void); +extern u32 sub_81CEFF0(void); +extern u32 sub_81CF3F8(void); +extern u32 sub_81CD024(void); +extern u32 sub_81CEF98(void); +extern u32 sub_81CF368(void); +extern u32 sub_81CAAE8(void); +extern u32 sub_81CAB24(void); +extern u32 sub_81CB260(void); +extern u32 sub_81CB29C(void); +extern u32 sub_81CB2CC(void); +extern u32 sub_81CAB38(void); +extern u32 sub_81CB2E0(void); +extern u32 sub_81CF9BC(void); +extern u32 sub_81CFA34(void); +extern u32 sub_81CFDD0(void); +extern u32 sub_81CFE40(void); +extern u32 sub_81CFE70(void); +extern u32 sub_81CFA48(void); +extern u32 sub_81CFE98(void); +extern u32 sub_81D0450(void); +extern u32 sub_81D04A0(void); +extern u32 sub_81D0978(void); +extern u32 sub_81D09B0(void); +extern u32 sub_81D09E0(void); +extern u32 sub_81D04B8(void); +extern u32 sub_81D09F4(void); +extern u32 sub_81CFA04(void); +extern u32 sub_81CFE08(void); u32 sub_81C791C(s32 a0); bool32 sub_81C756C(u32 a0); @@ -98,6 +145,157 @@ void sub_81C72BC(void); void sub_81C7B74(void); void sub_81C7C94(void); + +static u32 (*const gUnknown_0861F3EC[15][7])(void) = +{ + { + (u32 (*)(void))sub_81C9298, + sub_81C941C, + sub_81C9924, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9298, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9338, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9368, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C92CC, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9304, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81CC4D4, + sub_81CC554, + sub_81CC5F4, + sub_81CC62C, + sub_81CC65C, + sub_81CC524, + sub_81CC670, + }, + { + sub_81CCFD8, + sub_81CD070, + sub_81CDDD4, + sub_81CDE2C, + sub_81CDE64, + sub_81CD1C0, + sub_81CECA0, + }, + { + sub_81CEF3C, + sub_81CEFDC, + sub_81CF330, + sub_81CF3A0, + sub_81CF3D0, + sub_81CEFF0, + sub_81CF3F8, + }, + { + sub_81CD024, + sub_81CD070, + sub_81CDDD4, + sub_81CDE2C, + sub_81CDE64, + sub_81CD1C0, + sub_81CECA0, + }, + { + sub_81CEF98, + sub_81CEFDC, + sub_81CF368, + sub_81CF3A0, + sub_81CF3D0, + sub_81CEFF0, + sub_81CF3F8, + }, + { + sub_81CAAE8, + sub_81CAB24, + sub_81CB260, + sub_81CB29C, + sub_81CB2CC, + sub_81CAB38, + sub_81CB2E0, + }, + { + sub_81CF9BC, + sub_81CFA34, + sub_81CFDD0, + sub_81CFE40, + sub_81CFE70, + sub_81CFA48, + sub_81CFE98, + }, + { + sub_81D0450, + sub_81D04A0, + sub_81D0978, + sub_81D09B0, + sub_81D09E0, + sub_81D04B8, + sub_81D09F4, + }, + { + sub_81CFA04, + sub_81CFA34, + sub_81CFE08, + sub_81CFE40, + sub_81CFE70, + sub_81CFA48, + sub_81CFE98, + }, +}; + +extern struct BgTemplate gUnknown_0861FA04; +extern struct WindowTemplate gUnknown_0861FA08; +extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; +extern u8 gUnknown_0203CF3C; +extern u8 gUnknown_0861FA48; +//extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. +extern const u8 *(gUnknown_0861FA18[]); +extern const struct CompressedSpriteSheet gUnknown_0861FA4C[]; +extern const struct PaletteDescriptor gUnknown_0861FA54; +extern const struct SpriteTemplate gUnknown_0861FB04; + u32 sub_81C7078(u32 (*a0)(s32), u32 a1) { u16 taskId; @@ -344,8 +542,8 @@ void sub_81C742C(u8 taskId) { sub_81C7710(); dataPtr[0] = 5; } else if (v1 >= UNKNOWN_OFFSET) { - gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[6](); - gUnknown_0861F3EC[gUnknown_0203CF40->field4].data[5](); + gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); + gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); if (sub_81C756C(v1)) { dataPtr[0] = 4; } else { @@ -383,14 +581,14 @@ bool32 sub_81C756C(u32 a0) { index = a0 - UNKNOWN_OFFSET; sub_81C75F4(); - if (!gUnknown_0861F3EC[index].data[0]()) { + if (!gUnknown_0861F3EC[index][0]()) { return FALSE; } - if (!gUnknown_0861F3EC[index].data[2]()) { + if (!gUnknown_0861F3EC[index][2]()) { return FALSE; } - sub_81C7834(gUnknown_0861F3EC[index].data[3], gUnknown_0861F3EC[index].data[4]); - gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index].data[1]; + sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]); + gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1]; gUnknown_0203CF40->field4 = index; return TRUE; } -- cgit v1.2.3 From a4aaf279ac4a2033b511ddf8d49463c024306112 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Thu, 14 Feb 2019 23:25:07 -0500 Subject: Move more data into pokenav, name some strings --- data/pokenav.s | 49 ---------------------------- include/strings.h | 13 ++++++++ src/pokenav_main.c | 96 ++++++++++++++++++++++++++++++++++++++++++------------ src/strings.c | 24 +++++++------- 4 files changed, 100 insertions(+), 82 deletions(-) diff --git a/data/pokenav.s b/data/pokenav.s index 030358715..284ccee24 100644 --- a/data/pokenav.s +++ b/data/pokenav.s @@ -3,55 +3,6 @@ .section .rodata -gUnknown_0861F590:: @ 861F590 - .incbin "graphics/pokenav/icon2.gbapal" - -gUnknown_0861F5B0:: @ 861F5B0 - .incbin "graphics/pokenav/icon2.4bpp.lz" - -gUnknown_0861F994:: @ 861F994 - .incbin "graphics/pokenav/icon2_unused.4bpp.lz" - -@ struct BgTemplate gUnknown_0861FA04 { -@ .bg: 0, -@ .charBaseIndex: 0 -@ .mapBaseIndex: 5 -@ .screenSize: 2, -@ -@ } -gUnknown_0861FA04:: @ 861FA04 - .byte 0x50 - .byte 0x0 - .byte 0x0 - .byte 0x0 - -gUnknown_0861FA08:: @ 861FA08 - window_template 0, 1, 0x16, 0x10, 0x2, 0x0, 0x36 - null_window_template - -gUnknown_0861FA18:: @ 861FA18 - .4byte gUnknown_085EBED5 - .4byte gUnknown_085EBED9 - .4byte gUnknown_085EBEE9 - .4byte gUnknown_085EBEF9 - .4byte gUnknown_085EBF0E - .4byte gUnknown_085EBF22 - .4byte gUnknown_085EBF39 - .4byte gUnknown_085EBF49 - .4byte gUnknown_085EBF57 - .4byte gUnknown_085EBF60 - .4byte gUnknown_085EBF73 - .4byte gUnknown_085EBF84 - -gUnknown_0861FA48:: @ 861FA48 - .byte 0x4 - .byte 0x1 - .byte 0x2 - .byte 0x0 - -gUnknown_0861FA4C:: @ 861FA4C - obj_tiles gUnknown_0861F5B0, 0x1000, 0 - gUnknown_0861FA54:: @ 861FA54 obj_pal gUnknown_0861F590, 0 null_obj_pal diff --git a/include/strings.h b/include/strings.h index 9557dcca2..3acbc1c55 100644 --- a/include/strings.h +++ b/include/strings.h @@ -986,6 +986,19 @@ extern const u8 gText_SomeonesPC[]; extern const u8 gText_PlayersPC[]; extern const u8 gText_WhichPCShouldBeAccessed[]; +extern const u8 gText_Navgear_ClearButtonList[]; +extern const u8 gText_NavgearMap_ZoomedOutButtons[]; +extern const u8 gText_NavgearMap_ZoomedInButtons[]; +extern const u8 gText_NavgearCondition_MonListButtons[]; +extern const u8 gText_NavgearCondition_MonStatusButtons[]; +extern const u8 gText_NavgearCondition_MarkingButtons[]; +extern const u8 gText_NavgearMatchCall_TrainerListButtons[]; +extern const u8 gText_NavgearMatchCall_CallMenuButtons[]; +extern const u8 gText_NavgearMatchCall_CheckTrainerButtons[]; +extern const u8 gText_NavgearRibbons_MonListButtons[]; +extern const u8 gText_NavgearRibbons_RibbonListButtons[]; +extern const u8 gText_NavgearRibbons_RibbonCheckButtons[]; + extern const u8 gUnknown_085EAD37[]; extern const u8 gUnknown_085EAD41[]; extern const u8 gUnknown_085EAD67[]; diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 0b772ffe6..2cf370630 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -15,6 +15,7 @@ #include "graphics.h" #include "gba/macro.h" #include "decompress.h" +#include "strings.h" #define UNKNOWN_OFFSET 100000 @@ -33,10 +34,6 @@ struct UnknownStruct_0203CF40 { void* field10[19]; }; -struct UnknownStruct_0861F3EC { - u32 (*data[7])(void); -}; - struct UnknownStruct_sub_81C7850 { // Unknown size; at least 3. void (*data[3])(u32); @@ -146,7 +143,7 @@ void sub_81C7B74(void); void sub_81C7C94(void); -static u32 (*const gUnknown_0861F3EC[15][7])(void) = +u32 (*const gUnknown_0861F3EC[15][7])(void) = { { (u32 (*)(void))sub_81C9298, @@ -285,13 +282,70 @@ static u32 (*const gUnknown_0861F3EC[15][7])(void) = }, }; -extern struct BgTemplate gUnknown_0861FA04; -extern struct WindowTemplate gUnknown_0861FA08; +const u16 gUnknown_0861F590[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); +const u32 gUnknown_0861F5B0[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); +const u32 gUnknown_0861F994[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); + +const struct BgTemplate gUnknown_0861FA04 = { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, +}; + +const struct WindowTemplate gUnknown_0861FA08[2] = { + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x16, + .width = 0x10, + .height = 0x2, + .paletteNum = 0, + .baseBlock = 0x36, + }, + { + .bg = 0xFF, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 0, + .height = 0, + .paletteNum = 0, + .baseBlock = 0, + }, +}; + +const u8 *const (MenuButtonReminders[12]) = { + gText_Navgear_ClearButtonList, + gText_NavgearMap_ZoomedOutButtons, + gText_NavgearMap_ZoomedInButtons, + gText_NavgearCondition_MonListButtons, + gText_NavgearCondition_MonStatusButtons, + gText_NavgearCondition_MarkingButtons, + gText_NavgearMatchCall_TrainerListButtons, + gText_NavgearMatchCall_CallMenuButtons, + gText_NavgearMatchCall_CheckTrainerButtons, + gText_NavgearRibbons_MonListButtons, + gText_NavgearRibbons_RibbonListButtons, + gText_NavgearRibbons_RibbonCheckButtons, +}; + +const u8 gMenuButtonReminderColor[4] = { + 4, 1, 2, 0 +}; + +const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = { + { + .data = gUnknown_0861F5B0, + .size = 0x1000, + .tag = 0, + } +}; + extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; -extern u8 gUnknown_0861FA48; -//extern struct UnknownStruct_0861F3EC gUnknown_0861F3EC[7]; // Unknown size; at least 7. -extern const u8 *(gUnknown_0861FA18[]); extern const struct CompressedSpriteSheet gUnknown_0861FA4C[]; extern const struct PaletteDescriptor gUnknown_0861FA54; extern const struct SpriteTemplate gUnknown_0861FB04; @@ -735,29 +789,29 @@ u32 sub_81C7764(s32 a0) { void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) { // This is a guess. - struct UnknownStruct_0861F3EC *v1; + u32 (**v1)(void); v1 = sub_81C763C(0); - v1->data[0] = a0; - v1->data[1] = a1; - v1->data[2] = NULL; + v1[0] = a0; + v1[1] = a1; + v1[2] = NULL; } void sub_81C7850(u32 a0) { // This is a guess. - struct UnknownStruct_sub_81C7850 *v1; + void (**v1)(u32); v1 = sub_81C763C(0); - v1->data[2] = NULL; - v1->data[0](a0); + v1[2] = NULL; + v1[0](a0); } u32 sub_81C786C(void) { // This is a guess. - struct UnknownStruct_0861F3EC *v1; + u32 (**v1)(void); v1 = sub_81C763C(0); - return v1->data[1](); + return v1[1](); } void sub_81C7880(void) { @@ -1014,7 +1068,7 @@ void sub_81C7B74(void) { u32 *v1; v1 = sub_81C763C(0); - InitWindows(&gUnknown_0861FA08); + InitWindows(&gUnknown_0861FA08[0]); v1[4] = 0; sub_81C7BF8(0); PutWindowTilemap(v1[4]); @@ -1026,7 +1080,7 @@ void sub_81C7BA4(u32 a0) { v1 = sub_81C763C(0); sub_81C7BF8(v1[4]); - AddTextPrinterParameterized3(v1[4], 1, 0, 1, &gUnknown_0861FA48, 0, gUnknown_0861FA18[a0]); + AddTextPrinterParameterized3(v1[4], 1, 0, 1, gMenuButtonReminderColor, 0, MenuButtonReminders[a0]); } bool8 sub_81C7BE8(void) { diff --git a/src/strings.c b/src/strings.c index b0eb048ba..f81a19083 100644 --- a/src/strings.c +++ b/src/strings.c @@ -965,18 +965,18 @@ const u8 gUnknown_085EBE8E[] = _("Can't call opponent here."); const u8 gUnknown_085EBEA8[] = _("STRATEGY"); const u8 gUnknown_085EBEB1[] = _("TRAINER'S POKéMON"); const u8 gUnknown_085EBEC3[] = _("SELF-INTRODUCTION"); -const u8 gUnknown_085EBED5[] = _("{CLEAR 0x80}"); -const u8 gUnknown_085EBED9[] = _("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBEE9[] = _("{A_BUTTON}FULL {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBEF9[] = _("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF0E[] = _("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF22[] = _("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF39[] = _("{A_BUTTON}MENU {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF49[] = _("{A_BUTTON}OK {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF57[] = _("{B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF60[] = _("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF73[] = _("{A_BUTTON}CHECK {B_BUTTON}CANCEL"); -const u8 gUnknown_085EBF84[] = _("{B_BUTTON}CANCEL"); +const u8 gText_Navgear_ClearButtonList[] = _("{CLEAR 0x80}"); +const u8 gText_NavgearMap_ZoomedOutButtons[] = _("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"); +const u8 gText_NavgearMap_ZoomedInButtons[] = _("{A_BUTTON}FULL {B_BUTTON}CANCEL"); +const u8 gText_NavgearCondition_MonListButtons[] = _("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"); +const u8 gText_NavgearCondition_MonStatusButtons[] = _("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"); +const u8 gText_NavgearCondition_MarkingButtons[] = _("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"); +const u8 gText_NavgearMatchCall_TrainerListButtons[] = _("{A_BUTTON}MENU {B_BUTTON}CANCEL"); +const u8 gText_NavgearMatchCall_CallMenuButtons[] = _("{A_BUTTON}OK {B_BUTTON}CANCEL"); +const u8 gText_NavgearMatchCall_CheckTrainerButtons[] = _("{B_BUTTON}CANCEL"); +const u8 gText_NavgearRibbons_MonListButtons[] = _("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"); +const u8 gText_NavgearRibbons_RibbonListButtons[] = _("{A_BUTTON}CHECK {B_BUTTON}CANCEL"); +const u8 gText_NavgearRibbons_RibbonCheckButtons[] = _("{B_BUTTON}CANCEL"); const u8 gText_NatureSlash[] = _("NATURE/"); const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!"); const u8 gText_InParty[] = _("IN PARTY"); -- cgit v1.2.3 From be08a662a8a798f0b630a6ea464568aaec199ad7 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Fri, 15 Feb 2019 00:00:01 -0500 Subject: More data moved into C code --- data/pokenav.s | 7 ------- include/graphics.h | 5 +++++ src/pokenav_main.c | 41 +++++++++++++++++++++++++---------------- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/data/pokenav.s b/data/pokenav.s index 284ccee24..cb5030b4b 100644 --- a/data/pokenav.s +++ b/data/pokenav.s @@ -3,13 +3,6 @@ .section .rodata -gUnknown_0861FA54:: @ 861FA54 - obj_pal gUnknown_0861F590, 0 - null_obj_pal - -gUnknown_0861FA64:: @ 861FA64 - obj_tiles gPokenavLeftHeaderHoennMap_Gfx, 0xC00, 2 - gUnknown_0861FA6C:: @ 861FA6C obj_tiles gPokenavLeftHeaderMainMenu_Gfx, 0x20, 3 obj_tiles gPokenavLeftHeaderCondition_Gfx, 0x20, 1 diff --git a/include/graphics.h b/include/graphics.h index 2ac2f2a5a..48c00943b 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4013,6 +4013,11 @@ extern const u16 gPokenavConditionMarker_Pal[]; extern const u16 gPokenavHeader_Pal[]; extern const u32 gPokenavHeader_Gfx[]; extern const u32 gPokenavHeader_Tilemap[]; +extern const u32 gPokenavLeftHeaderHoennMap_Gfx[]; +extern const u32 gPokenavLeftHeaderMainMenu_Gfx[]; +extern const u32 gPokenavLeftHeaderCondition_Gfx[]; +extern const u32 gPokenavLeftHeaderRibbons_Gfx[]; +extern const u32 gPokenavLeftHeaderMatchCall_Gfx[]; extern const u32 gUnknown_08D9862C[]; extern const u32 gUnknown_08D98CC8[]; diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 2cf370630..f468ffc31 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -19,12 +19,6 @@ #define UNKNOWN_OFFSET 100000 - -struct PaletteDescriptor { - void *palette; - u16 tag; -}; - struct UnknownStruct_0203CF40 { u32 (*field0)(void); u32 field4; @@ -123,7 +117,7 @@ u32 sub_81C786C(void); u32 sub_81C7764(s32 a0); u32 atk47_cmd47(s32 a0); bool32 sub_81C7738(void); -void CopyPaletteIntoBufferUnfaded(void *palette, u32 a1, u32 a2); +void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 a1, u32 a2); void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); void sub_81C7360(struct UnknownStruct_0203CF40 *a0); void sub_81C7650(u32 index); @@ -344,10 +338,25 @@ const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = { } }; +const struct SpritePalette gUnknown_0861FA54[2] = { + { + .data = gUnknown_0861F590, + .tag = 0, + }, + { + .data = NULL, + .tag = 0, + } +}; + +const struct CompressedSpriteSheet gUnknown_0861FA64 = { + .data = gPokenavLeftHeaderHoennMap_Gfx, + .size = 0xC00, + .tag = 2 +}; + extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; extern u8 gUnknown_0203CF3C; -extern const struct CompressedSpriteSheet gUnknown_0861FA4C[]; -extern const struct PaletteDescriptor gUnknown_0861FA54; extern const struct SpriteTemplate gUnknown_0861FB04; u32 sub_81C7078(u32 (*a0)(s32), u32 a1) @@ -763,7 +772,7 @@ u32 sub_81C7764(s32 a0) { decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); SetBgTilemapBuffer(0, &v1->data[11]); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(&gPokenavHeader_Pal, 0, 0x20); + CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); CopyBgTilemapBufferToVram(0); return 0; case 2: @@ -865,15 +874,15 @@ u32 sub_81C791C(s32 a0) { } } -void CopyPaletteIntoBufferUnfaded(void *palette, u32 bufferOffset, u32 size) { +void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); } -void sub_81C795C(const struct PaletteDescriptor *palettes) { - const struct PaletteDescriptor *current; +void sub_81C795C(const struct SpritePalette *palettes) { + const struct SpritePalette *current; u32 index; - for (current = palettes; current->palette != NULL; current++) + for (current = palettes; current->data != NULL; current++) { index = AllocSpritePalette(current->tag); if (index == 0xFF) @@ -883,7 +892,7 @@ void sub_81C795C(const struct PaletteDescriptor *palettes) { else { index = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->palette, index, 0x20); + CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); } } } @@ -1105,7 +1114,7 @@ void sub_81C7C28(void) { LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); } - sub_81C795C(&gUnknown_0861FA54); + sub_81C795C(gUnknown_0861FA54); v2 = IndexOfSpritePaletteTag(0); v3 = 0x80 << 9 << v2; v1[5] = -2 & ~v3; -- cgit v1.2.3 From 197ad274b4036b49cce8003c6458d1f83841735b Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Fri, 15 Feb 2019 00:07:57 -0500 Subject: Reformat braces --- src/pokenav_main.c | 338 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 203 insertions(+), 135 deletions(-) diff --git a/src/pokenav_main.c b/src/pokenav_main.c index f468ffc31..ecf381bd8 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -19,7 +19,8 @@ #define UNKNOWN_OFFSET 100000 -struct UnknownStruct_0203CF40 { +struct UnknownStruct_0203CF40 +{ u32 (*field0)(void); u32 field4; u16 field8; @@ -28,16 +29,19 @@ struct UnknownStruct_0203CF40 { void* field10[19]; }; -struct UnknownStruct_sub_81C7850 { +struct UnknownStruct_sub_81C7850 +{ // Unknown size; at least 3. void (*data[3])(u32); }; -struct UnknownStruct_sub_81C76C4 { +struct UnknownStruct_sub_81C76C4 +{ u32 data[523]; }; -struct UnknownStruct_sub_81C7C28 { +struct UnknownStruct_sub_81C7C28 +{ struct CompressedSpriteSheet sheet; u32 field4; }; @@ -280,7 +284,8 @@ const u16 gUnknown_0861F590[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); const u32 gUnknown_0861F5B0[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); const u32 gUnknown_0861F994[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); -const struct BgTemplate gUnknown_0861FA04 = { +const struct BgTemplate gUnknown_0861FA04 = +{ .bg = 0, .charBaseIndex = 0, .mapBaseIndex = 5, @@ -290,7 +295,8 @@ const struct BgTemplate gUnknown_0861FA04 = { .baseTile = 0, }; -const struct WindowTemplate gUnknown_0861FA08[2] = { +const struct WindowTemplate gUnknown_0861FA08[2] = +{ { .bg = 0, .tilemapLeft = 1, @@ -311,7 +317,8 @@ const struct WindowTemplate gUnknown_0861FA08[2] = { }, }; -const u8 *const (MenuButtonReminders[12]) = { +const u8 *const (MenuButtonReminders[12]) = +{ gText_Navgear_ClearButtonList, gText_NavgearMap_ZoomedOutButtons, gText_NavgearMap_ZoomedInButtons, @@ -326,11 +333,13 @@ const u8 *const (MenuButtonReminders[12]) = { gText_NavgearRibbons_RibbonCheckButtons, }; -const u8 gMenuButtonReminderColor[4] = { +const u8 gMenuButtonReminderColor[4] = +{ 4, 1, 2, 0 }; -const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = { +const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = +{ { .data = gUnknown_0861F5B0, .size = 0x1000, @@ -338,7 +347,8 @@ const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = { } }; -const struct SpritePalette gUnknown_0861FA54[2] = { +const struct SpritePalette gUnknown_0861FA54[2] = +{ { .data = gUnknown_0861F590, .tag = 0, @@ -349,7 +359,8 @@ const struct SpritePalette gUnknown_0861FA54[2] = { } }; -const struct CompressedSpriteSheet gUnknown_0861FA64 = { +const struct CompressedSpriteSheet gUnknown_0861FA64 = +{ .data = gPokenavLeftHeaderHoennMap_Gfx, .size = 0xC00, .tag = 2 @@ -386,22 +397,20 @@ bool32 sub_81C70D8(u32 a0) return TRUE; } else - { return FALSE; - } } bool32 sub_81C7124(u32 a0) { s32 i; - for (i = 0; i < 16; i++) { + for (i = 0; i < 16; i++) + { if (gTasks[i].isActive && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)) { u32 arg = GetWordTaskArg((u8)i, 1); - if (arg == a0) { + if (arg == a0) return TRUE; - } } } return FALSE; @@ -416,7 +425,8 @@ void sub_81C7170(u8 taskId) func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); dataPtr = gTasks[taskId].data; exitLoop = FALSE; - while (!exitLoop) { + while (!exitLoop) + { u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); switch (v1) { case 1: @@ -439,18 +449,19 @@ void sub_81C7170(u8 taskId) } } -void sub_81C71E4(u8 taskId) { +void sub_81C71E4(u8 taskId) +{ u32 (*func)(u32); s16 *data; u32 v1; - if (sub_8087598()) { + if (sub_8087598()) return; - } func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); data = gTasks[taskId].data; v1 = func(data[0]); - switch (v1) { + switch (v1) + { case 0: case 1: data[0]++; @@ -481,18 +492,22 @@ void CB2_PokeNav(void) } } -void sub_81C72A4() { +void sub_81C72A4() +{ SetMainCallback2(sub_81C72BC); FadeScreen(1, 0); } -void sub_81C72BC() { +void sub_81C72BC() +{ UpdatePaletteFade(); - if (!gPaletteFade.active) { + if (!gPaletteFade.active) + { gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); - if (gUnknown_0203CF40 == NULL) { + if (gUnknown_0203CF40 == NULL) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - } else { + else + { sub_81C7360(gUnknown_0203CF40); gUnknown_0203CF40->field8 = 1; ResetTasks(); @@ -506,9 +521,11 @@ void sub_81C72BC() { } } -void sub_81C7334() { +void sub_81C7334() +{ s32 i; - for (i = 0; i < 19; i++) { + for (i = 0; i < 19; i++) + { sub_81C7650(i); } @@ -518,7 +535,8 @@ void sub_81C7334() { } // Clears UnknownStruct_0203CF40 -void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { +void sub_81C7360(struct UnknownStruct_0203CF40 *a0) +{ s32 i; void **arrayPtr; void *fill; @@ -526,7 +544,8 @@ void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { fill = NULL; i = 18; arrayPtr = &(a0->field10[18]); - for (i; i >= 0; i--) { + for (i; i >= 0; i--) + { *arrayPtr = fill; arrayPtr -= 1; } @@ -536,11 +555,13 @@ void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { a0->field0 = NULL; } -bool32 AnyMonHasRibbon() { +bool32 AnyMonHasRibbon() +{ s32 i; s32 j; - for (i = 0; i < 6; i++) { + for (i = 0; i < 6; i++) + { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) && GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0) @@ -549,8 +570,10 @@ bool32 AnyMonHasRibbon() { } } - for (j = 0; j < 14; j++) { - for (i = 0; i < 30; i++) { + for (j = 0; j < 14; j++) + { + for (i = 0; i < 30; i++) + { if (CheckBoxMonSanityAt(j, i) && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) { @@ -562,167 +585,187 @@ bool32 AnyMonHasRibbon() { return FALSE; } -void sub_81C7400() { +void sub_81C7400() +{ RunTasks(); AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); } -void sub_81C7418() { +void sub_81C7418() +{ TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -void sub_81C742C(u8 taskId) { +void sub_81C742C(u8 taskId) +{ s16* dataPtr; u32 v1; bool32 v2; dataPtr = gTasks[taskId].data; - switch (dataPtr[0]) { + switch (dataPtr[0]) + { case 0: sub_81C76C4(); dataPtr[0] = 1; break; case 1: - if (sub_81C76FC()) { + if (sub_81C76FC()) break; - } sub_81C756C(UNKNOWN_OFFSET); dataPtr[0] = 4; break; case 2: - if (sub_81C786C()) { + if (sub_81C786C()) break; - } dataPtr[0] = 3; case 3: v1 = sub_81C75E0(); - if (v1 == -1) { + if (v1 == -1) + { sub_81C7710(); dataPtr[0] = 5; - } else if (v1 >= UNKNOWN_OFFSET) { + } + else if (v1 >= UNKNOWN_OFFSET) + { gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); - if (sub_81C756C(v1)) { + if (sub_81C756C(v1)) dataPtr[0] = 4; - } else { + else + { sub_81C7710(); dataPtr[0] = 5; } - } else if (v1 != 0) { + } + else if (v1 != 0) + { sub_81C7850(v1); - if (sub_81C786C()) { + if (sub_81C786C()) dataPtr[0] = 2; - } } break; case 4: - if (!sub_81C75D4()) { + if (!sub_81C75D4()) dataPtr[0] = 3; - } break; case 5: - if (!sub_81C7738()) { + if (!sub_81C7738()) + { v2 = gUnknown_0203CF40->field8 != 0; sub_81C9430(); sub_81C7334(); - if (v2) { + if (v2) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - } else { + else SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - } } } } -bool32 sub_81C756C(u32 a0) { +bool32 sub_81C756C(u32 a0) +{ u32 index; index = a0 - UNKNOWN_OFFSET; sub_81C75F4(); - if (!gUnknown_0861F3EC[index][0]()) { + if (!gUnknown_0861F3EC[index][0]()) return FALSE; - } - if (!gUnknown_0861F3EC[index][2]()) { + if (!gUnknown_0861F3EC[index][2]()) return FALSE; - } sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]); gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1]; gUnknown_0203CF40->field4 = index; return TRUE; } -u32 sub_81C75D4(void) { +u32 sub_81C75D4(void) +{ return sub_81C786C(); } -u32 sub_81C75E0(void) { +u32 sub_81C75E0(void) +{ return gUnknown_0203CF40->field0(); } -void sub_81C75F4(void) { +void sub_81C75F4(void) +{ InitKeys(); } -void IndirectSetVBlankCallback(IntrCallback callback) { +void IndirectSetVBlankCallback(IntrCallback callback) +{ SetVBlankCallback(callback); } -void sub_81C760C(void) { +void sub_81C760C(void) +{ SetVBlankCallback(sub_81C7418); } -void* sub_81C761C(u32 index, u32 size) { +void* sub_81C761C(u32 index, u32 size) +{ return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); } -void* sub_81C763C(u32 index) { +void* sub_81C763C(u32 index) +{ return gUnknown_0203CF40->field10[index]; } -void sub_81C7650(u32 index) { - if (gUnknown_0203CF40->field10[index] != NULL) { +void sub_81C7650(u32 index) +{ + if (gUnknown_0203CF40->field10[index] != NULL) + { Free(gUnknown_0203CF40->field10[index]); gUnknown_0203CF40->field10[index] = NULL; } } -u16 sub_81C767C(void) { +u16 sub_81C767C(void) +{ return gUnknown_0203CF40->field8; } -void sub_81C7688(u16 a0) { +void sub_81C7688(u16 a0) +{ gUnknown_0203CF40->field8 = a0; } -void sub_81C7694(u32 a0) { +void sub_81C7694(u32 a0) +{ u32 value; value = a0; - if (a0 > 4) { + if (a0 > 4) value = 0; - } gUnknown_0203CF40->fieldA = value; } -u16 sub_81C76AC(void) { +u16 sub_81C76AC(void) +{ return gUnknown_0203CF40->fieldA; } -u32 sub_81C76B8(void) { +u32 sub_81C76B8(void) +{ return gUnknown_0203CF40->fieldC; } -bool32 sub_81C76C4(void) { +bool32 sub_81C76C4(void) +{ struct UnknownStruct_sub_81C76C4 *v1; v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); - if (v1 == NULL) { + if (v1 == NULL) return FALSE; - } else { + else + { ResetSpriteData(); FreeAllSpritePalettes(); v1->data[3] = sub_81C7078(sub_81C7764, 1); @@ -730,35 +773,40 @@ bool32 sub_81C76C4(void) { } } -u32 sub_81C76FC(void) { +u32 sub_81C76FC(void) +{ // This is a guess. struct UnknownStruct_sub_81C76C4 *v1; v1 = sub_81C763C(0); return sub_81C70D8(v1->data[3]); } -void sub_81C7710(void) { +void sub_81C7710(void) +{ PlaySE(SE_PN_OFF); sub_81CAADC(); BeginNormalPaletteFade(-1, -1, 0, 16, 0); } -bool32 sub_81C7738(void) { - if (!gPaletteFade.active) { +bool32 sub_81C7738(void) +{ + if (!gPaletteFade.active) + { sub_81C99D4(); sub_81C7C94(); FreeAllWindowBuffers(); return FALSE; - } else { + } else return TRUE; - } } -u32 sub_81C7764(s32 a0) { +u32 sub_81C7764(s32 a0) +{ // This is a guess. struct UnknownStruct_sub_81C76C4 *v1; - switch (a0) { + switch (a0) + { case 0: SetGpuReg(0, 0x82 << 5); FreeAllWindowBuffers(); @@ -776,28 +824,26 @@ u32 sub_81C7764(s32 a0) { CopyBgTilemapBufferToVram(0); return 0; case 2: - if (free_temp_tile_data_buffers_if_possible()) { + if (free_temp_tile_data_buffers_if_possible()) return 2; - } else { - sub_81C7B74(); - return 0; - } + + sub_81C7B74(); + return 0; case 3: - if (IsDma3ManagerBusyWithBgCopy()) { + if (IsDma3ManagerBusyWithBgCopy()) return 2; - } else { - sub_81C7C28(); - sub_81C7D28(); - ShowBg(0); - return 4; - } + + sub_81C7C28(); + sub_81C7D28(); + ShowBg(0); + return 4; default: return 4; } } -void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) { - // This is a guess. +void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) +{ u32 (**v1)(void); v1 = sub_81C763C(0); @@ -806,8 +852,8 @@ void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) { v1[2] = NULL; } -void sub_81C7850(u32 a0) { - // This is a guess. +void sub_81C7850(u32 a0) +{ void (**v1)(u32); v1 = sub_81C763C(0); @@ -815,15 +861,16 @@ void sub_81C7850(u32 a0) { v1[0](a0); } -u32 sub_81C786C(void) { - // This is a guess. +u32 sub_81C786C(void) +{ u32 (**v1)(void); v1 = sub_81C763C(0); return v1[1](); } -void sub_81C7880(void) { +void sub_81C7880(void) +{ // This is a guess. struct UnknownStruct_0203CF40* v1; @@ -831,7 +878,8 @@ void sub_81C7880(void) { v1->fieldC = sub_81C7078(atk47_cmd47, 4); } -void sub_81C78A0(void) { +void sub_81C78A0(void) +{ // This is a guess. struct UnknownStruct_0203CF40* v1; @@ -839,7 +887,8 @@ void sub_81C78A0(void) { v1->fieldC = sub_81C7078(sub_81C791C, 4); } -bool32 sub_81C78C0(void) { +bool32 sub_81C78C0(void) +{ // This is a guess. struct UnknownStruct_0203CF40* v1; @@ -847,8 +896,10 @@ bool32 sub_81C78C0(void) { return sub_81C70D8(v1->fieldC); } -u32 atk47_cmd47(s32 a0) { - switch (a0) { +u32 atk47_cmd47(s32 a0) +{ + switch (a0) + { default: return 4; case 1: @@ -856,12 +907,13 @@ u32 atk47_cmd47(s32 a0) { case 0: return 0; case 2: - if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) { + if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) + { ChangeBgY(0, 0x2000, 0); return 4; - } else { - return 2; } + + return 2; } } @@ -869,16 +921,16 @@ u32 sub_81C791C(s32 a0) { if (ChangeBgY(0, 384, 2) <= 0) { ChangeBgY(0, 0, 0); return 4; - } else { - return 2; } + return 2; } void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); } -void sub_81C795C(const struct SpritePalette *palettes) { +void sub_81C795C(const struct SpritePalette *palettes) +{ const struct SpritePalette *current; u32 index; @@ -897,12 +949,14 @@ void sub_81C795C(const struct SpritePalette *palettes) { } } -void sub_81C7990(u32 a0, u16 a1) { +void sub_81C7990(u32 a0, u16 a1) +{ CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } __attribute__((naked)) -void sub_81C79BC(u16* a0, u16* a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) { +void sub_81C79BC(u16* a0, u16* a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) +{ asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ @@ -1036,10 +1090,12 @@ _081C7AAE:\n\ .syntax divided"); } -void sub_81C7AC0(s32 a0) { +void sub_81C7AC0(s32 a0) +{ u32 *v1; v1 = sub_81C763C(0); - switch (a0) { + switch (a0) + { case 0: BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); break; @@ -1055,25 +1111,29 @@ void sub_81C7AC0(s32 a0) { } } -bool32 IsPaletteFadeActive(void) { +bool32 IsPaletteFadeActive(void) +{ return gPaletteFade.active; } -void sub_81C7B40(void) { +void sub_81C7B40(void) +{ BlendPalettes(0xFFFEFFFE, 16, 0); } -void sub_81C7B54(const struct BgTemplate *a0, s32 a1) { +void sub_81C7B54(const struct BgTemplate *a0, s32 a1) +{ s32 i; - if (a1 <= 0) { + if (a1 <= 0) return; - } - for (i = a1; i != 0; i--) { + for (i = a1; i != 0; i--) + { InitBgFromTemplate(a0++); } } -void sub_81C7B74(void) { +void sub_81C7B74(void) +{ u32 *v1; v1 = sub_81C763C(0); @@ -1084,7 +1144,8 @@ void sub_81C7B74(void) { CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. } -void sub_81C7BA4(u32 a0) { +void sub_81C7BA4(u32 a0) +{ u32* v1; v1 = sub_81C763C(0); @@ -1092,16 +1153,19 @@ void sub_81C7BA4(u32 a0) { AddTextPrinterParameterized3(v1[4], 1, 0, 1, gMenuButtonReminderColor, 0, MenuButtonReminders[a0]); } -bool8 sub_81C7BE8(void) { +bool8 sub_81C7BE8(void) +{ return IsDma3ManagerBusyWithBgCopy(); } -void sub_81C7BF8(u32 a0) { +void sub_81C7BF8(u32 a0) +{ FillWindowPixelBuffer(a0, 0x44); FillWindowPixelRect(a0, 0x55, 0, 0, 0x80, 1); } -void sub_81C7C28(void) { +void sub_81C7C28(void) +{ u32* v1; u32 i; u8 v2; @@ -1110,7 +1174,8 @@ void sub_81C7C28(void) { u8 spriteId; v1 = sub_81C763C(0); - for (i = 0; i == 0; i++) { + for (i = 0; i == 0; i++) + { LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); } @@ -1122,7 +1187,8 @@ void sub_81C7C28(void) { v1[6] = (u32)(&gSprites[spriteId]); } -void sub_81C7C94(void) { +void sub_81C7C94(void) +{ void **v1; v1 = sub_81C763C(0); DestroySprite(v1[6]); @@ -1130,13 +1196,15 @@ void sub_81C7C94(void) { FreeSpritePaletteByTag(0); } -void sub_81C7CB4(u16 *a0) { +void sub_81C7CB4(u16 *a0) +{ u32 v1; v1 = GetBgY(0); a0[19] = (v1 >> 8) * -1; } -struct Sprite* sub_81C7CCC(void) { +struct Sprite* sub_81C7CCC(void) +{ struct Sprite **v1; struct Sprite *v2; v1 = sub_81C763C(0); -- cgit v1.2.3 From fbcfb69fe6a0f29a5d28b3ca066d30d8a79602b8 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Fri, 15 Feb 2019 00:20:24 -0500 Subject: Remove guess code, fix pointer formatting --- src/pokenav_main.c | 54 ++++++++++++++++++------------------------------------ 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/src/pokenav_main.c b/src/pokenav_main.c index ecf381bd8..fd86903e7 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -26,13 +26,7 @@ struct UnknownStruct_0203CF40 u16 field8; u16 fieldA; u32 fieldC; - void* field10[19]; -}; - -struct UnknownStruct_sub_81C7850 -{ - // Unknown size; at least 3. - void (*data[3])(u32); + void *field10[19]; }; struct UnknownStruct_sub_81C76C4 @@ -40,13 +34,6 @@ struct UnknownStruct_sub_81C76C4 u32 data[523]; }; -struct UnknownStruct_sub_81C7C28 -{ - struct CompressedSpriteSheet sheet; - u32 field4; -}; - - extern u32 sub_81C9430(void); extern void sub_81CAADC(void); extern u32 sub_81C99D4(void); @@ -602,7 +589,7 @@ void sub_81C7418() void sub_81C742C(u8 taskId) { - s16* dataPtr; + s16 *dataPtr; u32 v1; bool32 v2; @@ -709,12 +696,12 @@ void sub_81C760C(void) SetVBlankCallback(sub_81C7418); } -void* sub_81C761C(u32 index, u32 size) +void *sub_81C761C(u32 index, u32 size) { return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); } -void* sub_81C763C(u32 index) +void *sub_81C763C(u32 index) { return gUnknown_0203CF40->field10[index]; } @@ -775,10 +762,9 @@ bool32 sub_81C76C4(void) u32 sub_81C76FC(void) { - // This is a guess. - struct UnknownStruct_sub_81C76C4 *v1; + u32 *v1; v1 = sub_81C763C(0); - return sub_81C70D8(v1->data[3]); + return sub_81C70D8(v1[3]); } void sub_81C7710(void) @@ -802,8 +788,7 @@ bool32 sub_81C7738(void) u32 sub_81C7764(s32 a0) { - // This is a guess. - struct UnknownStruct_sub_81C76C4 *v1; + u32 *v1; switch (a0) { @@ -818,7 +803,7 @@ u32 sub_81C7764(s32 a0) case 1: v1 = sub_81C763C(0); decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); - SetBgTilemapBuffer(0, &v1->data[11]); + SetBgTilemapBuffer(0, &v1[11]); CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); CopyBgTilemapBufferToVram(0); @@ -871,29 +856,26 @@ u32 sub_81C786C(void) void sub_81C7880(void) { - // This is a guess. - struct UnknownStruct_0203CF40* v1; + u32 *v1; v1 = sub_81C763C(0); - v1->fieldC = sub_81C7078(atk47_cmd47, 4); + v1[3] = sub_81C7078(atk47_cmd47, 4); } void sub_81C78A0(void) { - // This is a guess. - struct UnknownStruct_0203CF40* v1; + u32 *v1; v1 = sub_81C763C(0); - v1->fieldC = sub_81C7078(sub_81C791C, 4); + v1[3] = sub_81C7078(sub_81C791C, 4); } bool32 sub_81C78C0(void) { - // This is a guess. - struct UnknownStruct_0203CF40* v1; + u32 *v1; v1 = sub_81C763C(0); - return sub_81C70D8(v1->fieldC); + return sub_81C70D8(v1[3]); } u32 atk47_cmd47(s32 a0) @@ -955,7 +937,7 @@ void sub_81C7990(u32 a0, u16 a1) } __attribute__((naked)) -void sub_81C79BC(u16* a0, u16* a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) +void sub_81C79BC(u16 *a0, u16 *a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1146,7 +1128,7 @@ void sub_81C7B74(void) void sub_81C7BA4(u32 a0) { - u32* v1; + u32 *v1; v1 = sub_81C763C(0); sub_81C7BF8(v1[4]); @@ -1166,7 +1148,7 @@ void sub_81C7BF8(u32 a0) void sub_81C7C28(void) { - u32* v1; + u32 *v1; u32 i; u8 v2; u32 v3; @@ -1203,7 +1185,7 @@ void sub_81C7CB4(u16 *a0) a0[19] = (v1 >> 8) * -1; } -struct Sprite* sub_81C7CCC(void) +struct Sprite *sub_81C7CCC(void) { struct Sprite **v1; struct Sprite *v2; -- cgit v1.2.3 From bfeb7fb32a04ee80481a7cd03a1522764182e2d8 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Fri, 15 Feb 2019 00:29:32 -0500 Subject: Tabs converted to spaces. Oops. --- src/pokenav_main.c | 1512 ++++++++++++++++++++++++++-------------------------- 1 file changed, 756 insertions(+), 756 deletions(-) diff --git a/src/pokenav_main.c b/src/pokenav_main.c index fd86903e7..992bca3f0 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -21,17 +21,17 @@ struct UnknownStruct_0203CF40 { - u32 (*field0)(void); - u32 field4; - u16 field8; - u16 fieldA; - u32 fieldC; - void *field10[19]; + u32 (*field0)(void); + u32 field4; + u16 field8; + u16 fieldA; + u32 fieldC; + void *field10[19]; }; struct UnknownStruct_sub_81C76C4 { - u32 data[523]; + u32 data[523]; }; extern u32 sub_81C9430(void); @@ -130,141 +130,141 @@ void sub_81C7C94(void); u32 (*const gUnknown_0861F3EC[15][7])(void) = { - { - (u32 (*)(void))sub_81C9298, - sub_81C941C, - sub_81C9924, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9298, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9338, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9368, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C92CC, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9304, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81CC4D4, - sub_81CC554, - sub_81CC5F4, - sub_81CC62C, - sub_81CC65C, - sub_81CC524, - sub_81CC670, - }, - { - sub_81CCFD8, - sub_81CD070, - sub_81CDDD4, - sub_81CDE2C, - sub_81CDE64, - sub_81CD1C0, - sub_81CECA0, - }, - { - sub_81CEF3C, - sub_81CEFDC, - sub_81CF330, - sub_81CF3A0, - sub_81CF3D0, - sub_81CEFF0, - sub_81CF3F8, - }, - { - sub_81CD024, - sub_81CD070, - sub_81CDDD4, - sub_81CDE2C, - sub_81CDE64, - sub_81CD1C0, - sub_81CECA0, - }, - { - sub_81CEF98, - sub_81CEFDC, - sub_81CF368, - sub_81CF3A0, - sub_81CF3D0, - sub_81CEFF0, - sub_81CF3F8, - }, - { - sub_81CAAE8, - sub_81CAB24, - sub_81CB260, - sub_81CB29C, - sub_81CB2CC, - sub_81CAB38, - sub_81CB2E0, - }, - { - sub_81CF9BC, - sub_81CFA34, - sub_81CFDD0, - sub_81CFE40, - sub_81CFE70, - sub_81CFA48, - sub_81CFE98, - }, - { - sub_81D0450, - sub_81D04A0, - sub_81D0978, - sub_81D09B0, - sub_81D09E0, - sub_81D04B8, - sub_81D09F4, - }, - { - sub_81CFA04, - sub_81CFA34, - sub_81CFE08, - sub_81CFE40, - sub_81CFE70, - sub_81CFA48, - sub_81CFE98, - }, + { + (u32 (*)(void))sub_81C9298, + sub_81C941C, + sub_81C9924, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9298, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9338, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9368, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C92CC, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9304, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81CC4D4, + sub_81CC554, + sub_81CC5F4, + sub_81CC62C, + sub_81CC65C, + sub_81CC524, + sub_81CC670, + }, + { + sub_81CCFD8, + sub_81CD070, + sub_81CDDD4, + sub_81CDE2C, + sub_81CDE64, + sub_81CD1C0, + sub_81CECA0, + }, + { + sub_81CEF3C, + sub_81CEFDC, + sub_81CF330, + sub_81CF3A0, + sub_81CF3D0, + sub_81CEFF0, + sub_81CF3F8, + }, + { + sub_81CD024, + sub_81CD070, + sub_81CDDD4, + sub_81CDE2C, + sub_81CDE64, + sub_81CD1C0, + sub_81CECA0, + }, + { + sub_81CEF98, + sub_81CEFDC, + sub_81CF368, + sub_81CF3A0, + sub_81CF3D0, + sub_81CEFF0, + sub_81CF3F8, + }, + { + sub_81CAAE8, + sub_81CAB24, + sub_81CB260, + sub_81CB29C, + sub_81CB2CC, + sub_81CAB38, + sub_81CB2E0, + }, + { + sub_81CF9BC, + sub_81CFA34, + sub_81CFDD0, + sub_81CFE40, + sub_81CFE70, + sub_81CFA48, + sub_81CFE98, + }, + { + sub_81D0450, + sub_81D04A0, + sub_81D0978, + sub_81D09B0, + sub_81D09E0, + sub_81D04B8, + sub_81D09F4, + }, + { + sub_81CFA04, + sub_81CFA34, + sub_81CFE08, + sub_81CFE40, + sub_81CFE70, + sub_81CFA48, + sub_81CFE98, + }, }; const u16 gUnknown_0861F590[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); @@ -273,84 +273,84 @@ const u32 gUnknown_0861F994[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.l const struct BgTemplate gUnknown_0861FA04 = { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 5, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0, + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, }; const struct WindowTemplate gUnknown_0861FA08[2] = { - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 0x16, - .width = 0x10, - .height = 0x2, - .paletteNum = 0, - .baseBlock = 0x36, - }, - { - .bg = 0xFF, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 0, - .height = 0, - .paletteNum = 0, - .baseBlock = 0, - }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x16, + .width = 0x10, + .height = 0x2, + .paletteNum = 0, + .baseBlock = 0x36, + }, + { + .bg = 0xFF, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 0, + .height = 0, + .paletteNum = 0, + .baseBlock = 0, + }, }; const u8 *const (MenuButtonReminders[12]) = { - gText_Navgear_ClearButtonList, - gText_NavgearMap_ZoomedOutButtons, - gText_NavgearMap_ZoomedInButtons, - gText_NavgearCondition_MonListButtons, - gText_NavgearCondition_MonStatusButtons, - gText_NavgearCondition_MarkingButtons, - gText_NavgearMatchCall_TrainerListButtons, - gText_NavgearMatchCall_CallMenuButtons, - gText_NavgearMatchCall_CheckTrainerButtons, - gText_NavgearRibbons_MonListButtons, - gText_NavgearRibbons_RibbonListButtons, - gText_NavgearRibbons_RibbonCheckButtons, + gText_Navgear_ClearButtonList, + gText_NavgearMap_ZoomedOutButtons, + gText_NavgearMap_ZoomedInButtons, + gText_NavgearCondition_MonListButtons, + gText_NavgearCondition_MonStatusButtons, + gText_NavgearCondition_MarkingButtons, + gText_NavgearMatchCall_TrainerListButtons, + gText_NavgearMatchCall_CallMenuButtons, + gText_NavgearMatchCall_CheckTrainerButtons, + gText_NavgearRibbons_MonListButtons, + gText_NavgearRibbons_RibbonListButtons, + gText_NavgearRibbons_RibbonCheckButtons, }; const u8 gMenuButtonReminderColor[4] = { - 4, 1, 2, 0 + 4, 1, 2, 0 }; const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = { - { - .data = gUnknown_0861F5B0, - .size = 0x1000, - .tag = 0, - } + { + .data = gUnknown_0861F5B0, + .size = 0x1000, + .tag = 0, + } }; const struct SpritePalette gUnknown_0861FA54[2] = { - { - .data = gUnknown_0861F590, - .tag = 0, - }, - { - .data = NULL, - .tag = 0, - } + { + .data = gUnknown_0861F590, + .tag = 0, + }, + { + .data = NULL, + .tag = 0, + } }; const struct CompressedSpriteSheet gUnknown_0861FA64 = { - .data = gPokenavLeftHeaderHoennMap_Gfx, - .size = 0xC00, - .tag = 2 + .data = gPokenavLeftHeaderHoennMap_Gfx, + .size = 0xC00, + .tag = 2 }; extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; @@ -363,7 +363,7 @@ u32 sub_81C7078(u32 (*a0)(s32), u32 a1) if (!is_c1_link_related_active()) taskId = CreateTask(sub_81C7170, a1); - else + else taskId = CreateTask(sub_81C71E4, a1); SetWordTaskArg(taskId, 1, (u32)a0); @@ -374,94 +374,94 @@ u32 sub_81C7078(u32 (*a0)(s32), u32 a1) bool32 sub_81C70D8(u32 a0) { - u32 v1 = a0 & 0xFFFF; - u32 v2 = a0 >> 16; - if (gTasks[v1].isActive - && (gTasks[v1].func == sub_81C7170 || gTasks[v1].func == sub_81C71E4) - && gTasks[v1].data[3] == v2) - { - - return TRUE; - } - else - return FALSE; + u32 v1 = a0 & 0xFFFF; + u32 v2 = a0 >> 16; + if (gTasks[v1].isActive + && (gTasks[v1].func == sub_81C7170 || gTasks[v1].func == sub_81C71E4) + && gTasks[v1].data[3] == v2) + { + + return TRUE; + } + else + return FALSE; } bool32 sub_81C7124(u32 a0) { - s32 i; - for (i = 0; i < 16; i++) - { - if (gTasks[i].isActive - && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)) - { - u32 arg = GetWordTaskArg((u8)i, 1); - if (arg == a0) - return TRUE; - } - } - return FALSE; + s32 i; + for (i = 0; i < 16; i++) + { + if (gTasks[i].isActive + && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)) + { + u32 arg = GetWordTaskArg((u8)i, 1); + if (arg == a0) + return TRUE; + } + } + return FALSE; } void sub_81C7170(u8 taskId) { - s16 *dataPtr; - u32 (*func)(u32); - bool32 exitLoop; - - func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); - dataPtr = gTasks[taskId].data; - exitLoop = FALSE; - while (!exitLoop) - { - u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); - switch (v1) { - case 1: - dataPtr[0] = dataPtr[0] + 1; - break; - case 0: - dataPtr[0]++; - return; - case 4: - DestroyTask(taskId); - return; - default: - dataPtr[0] = v1 - 5; - break; - case 3: - break; - case 2: - return; - } - } + s16 *dataPtr; + u32 (*func)(u32); + bool32 exitLoop; + + func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); + dataPtr = gTasks[taskId].data; + exitLoop = FALSE; + while (!exitLoop) + { + u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); + switch (v1) { + case 1: + dataPtr[0] = dataPtr[0] + 1; + break; + case 0: + dataPtr[0]++; + return; + case 4: + DestroyTask(taskId); + return; + default: + dataPtr[0] = v1 - 5; + break; + case 3: + break; + case 2: + return; + } + } } void sub_81C71E4(u8 taskId) { - u32 (*func)(u32); - s16 *data; - u32 v1; - - if (sub_8087598()) - return; - func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); - data = gTasks[taskId].data; - v1 = func(data[0]); - switch (v1) - { - case 0: - case 1: - data[0]++; - break; - case 4: - DestroyTask(taskId); - break; - default: - data[0] = v1 - 5; - break; - case 2: - case 3: - } + u32 (*func)(u32); + s16 *data; + u32 v1; + + if (sub_8087598()) + return; + func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); + data = gTasks[taskId].data; + v1 = func(data[0]); + switch (v1) + { + case 0: + case 1: + data[0]++; + break; + case 4: + DestroyTask(taskId); + break; + default: + data[0] = v1 - 5; + break; + case 2: + case 3: + } } void CB2_PokeNav(void) @@ -481,439 +481,439 @@ void CB2_PokeNav(void) void sub_81C72A4() { - SetMainCallback2(sub_81C72BC); - FadeScreen(1, 0); + SetMainCallback2(sub_81C72BC); + FadeScreen(1, 0); } void sub_81C72BC() { - UpdatePaletteFade(); - if (!gPaletteFade.active) - { - gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); - if (gUnknown_0203CF40 == NULL) - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - else - { - sub_81C7360(gUnknown_0203CF40); - gUnknown_0203CF40->field8 = 1; - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(NULL); - CreateTask(sub_81C742C, 0); - SetMainCallback2(sub_81C7400); - SetVBlankCallback(sub_81C7418); - } - } + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); + if (gUnknown_0203CF40 == NULL) + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + else + { + sub_81C7360(gUnknown_0203CF40); + gUnknown_0203CF40->field8 = 1; + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(NULL); + CreateTask(sub_81C742C, 0); + SetMainCallback2(sub_81C7400); + SetVBlankCallback(sub_81C7418); + } + } } void sub_81C7334() { - s32 i; - for (i = 0; i < 19; i++) - { - sub_81C7650(i); - } + s32 i; + for (i = 0; i < 19; i++) + { + sub_81C7650(i); + } - Free(gUnknown_0203CF40); - gUnknown_0203CF40 = NULL; - InitKeys(); + Free(gUnknown_0203CF40); + gUnknown_0203CF40 = NULL; + InitKeys(); } // Clears UnknownStruct_0203CF40 void sub_81C7360(struct UnknownStruct_0203CF40 *a0) { - s32 i; - void **arrayPtr; - void *fill; - - fill = NULL; - i = 18; - arrayPtr = &(a0->field10[18]); - for (i; i >= 0; i--) - { - *arrayPtr = fill; - arrayPtr -= 1; - } - a0->field8 = 0; - a0->field4 = 0; - a0->fieldC = AnyMonHasRibbon(); - a0->field0 = NULL; + s32 i; + void **arrayPtr; + void *fill; + + fill = NULL; + i = 18; + arrayPtr = &(a0->field10[18]); + for (i; i >= 0; i--) + { + *arrayPtr = fill; + arrayPtr -= 1; + } + a0->field8 = 0; + a0->field4 = 0; + a0->fieldC = AnyMonHasRibbon(); + a0->field0 = NULL; } bool32 AnyMonHasRibbon() { - s32 i; - s32 j; - - for (i = 0; i < 6; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) - && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) - && GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0) - { - return TRUE; - } - } - - for (j = 0; j < 14; j++) - { - for (i = 0; i < 30; i++) - { - if (CheckBoxMonSanityAt(j, i) - && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) - { - return TRUE; - } - } - } - - return FALSE; + s32 i; + s32 j; + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) + && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0) + { + return TRUE; + } + } + + for (j = 0; j < 14; j++) + { + for (i = 0; i < 30; i++) + { + if (CheckBoxMonSanityAt(j, i) + && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) + { + return TRUE; + } + } + } + + return FALSE; } void sub_81C7400() { - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); } void sub_81C7418() { - TransferPlttBuffer(); - LoadOam(); - ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); } void sub_81C742C(u8 taskId) { - s16 *dataPtr; - u32 v1; - bool32 v2; - - dataPtr = gTasks[taskId].data; - - switch (dataPtr[0]) - { - case 0: - sub_81C76C4(); - dataPtr[0] = 1; - break; - case 1: - if (sub_81C76FC()) - break; - sub_81C756C(UNKNOWN_OFFSET); - dataPtr[0] = 4; - break; - case 2: - if (sub_81C786C()) - break; - dataPtr[0] = 3; - case 3: - v1 = sub_81C75E0(); - if (v1 == -1) - { - sub_81C7710(); - dataPtr[0] = 5; - } - else if (v1 >= UNKNOWN_OFFSET) - { - gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); - gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); - if (sub_81C756C(v1)) - dataPtr[0] = 4; - else - { - sub_81C7710(); - dataPtr[0] = 5; - } - } - else if (v1 != 0) - { - sub_81C7850(v1); - if (sub_81C786C()) - dataPtr[0] = 2; - } - break; - case 4: - if (!sub_81C75D4()) - dataPtr[0] = 3; - break; - case 5: - if (!sub_81C7738()) - { - v2 = gUnknown_0203CF40->field8 != 0; - sub_81C9430(); - sub_81C7334(); - if (v2) - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - else - SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - } - } + s16 *dataPtr; + u32 v1; + bool32 v2; + + dataPtr = gTasks[taskId].data; + + switch (dataPtr[0]) + { + case 0: + sub_81C76C4(); + dataPtr[0] = 1; + break; + case 1: + if (sub_81C76FC()) + break; + sub_81C756C(UNKNOWN_OFFSET); + dataPtr[0] = 4; + break; + case 2: + if (sub_81C786C()) + break; + dataPtr[0] = 3; + case 3: + v1 = sub_81C75E0(); + if (v1 == -1) + { + sub_81C7710(); + dataPtr[0] = 5; + } + else if (v1 >= UNKNOWN_OFFSET) + { + gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); + gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); + if (sub_81C756C(v1)) + dataPtr[0] = 4; + else + { + sub_81C7710(); + dataPtr[0] = 5; + } + } + else if (v1 != 0) + { + sub_81C7850(v1); + if (sub_81C786C()) + dataPtr[0] = 2; + } + break; + case 4: + if (!sub_81C75D4()) + dataPtr[0] = 3; + break; + case 5: + if (!sub_81C7738()) + { + v2 = gUnknown_0203CF40->field8 != 0; + sub_81C9430(); + sub_81C7334(); + if (v2) + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + else + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + } + } } bool32 sub_81C756C(u32 a0) { - u32 index; - - index = a0 - UNKNOWN_OFFSET; - sub_81C75F4(); - if (!gUnknown_0861F3EC[index][0]()) - return FALSE; - if (!gUnknown_0861F3EC[index][2]()) - return FALSE; - sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]); - gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1]; - gUnknown_0203CF40->field4 = index; - return TRUE; + u32 index; + + index = a0 - UNKNOWN_OFFSET; + sub_81C75F4(); + if (!gUnknown_0861F3EC[index][0]()) + return FALSE; + if (!gUnknown_0861F3EC[index][2]()) + return FALSE; + sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]); + gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1]; + gUnknown_0203CF40->field4 = index; + return TRUE; } u32 sub_81C75D4(void) { - return sub_81C786C(); + return sub_81C786C(); } u32 sub_81C75E0(void) { - return gUnknown_0203CF40->field0(); + return gUnknown_0203CF40->field0(); } void sub_81C75F4(void) { - InitKeys(); + InitKeys(); } void IndirectSetVBlankCallback(IntrCallback callback) { - SetVBlankCallback(callback); + SetVBlankCallback(callback); } void sub_81C760C(void) { - SetVBlankCallback(sub_81C7418); + SetVBlankCallback(sub_81C7418); } void *sub_81C761C(u32 index, u32 size) { - return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); + return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); } void *sub_81C763C(u32 index) { - return gUnknown_0203CF40->field10[index]; + return gUnknown_0203CF40->field10[index]; } void sub_81C7650(u32 index) { - if (gUnknown_0203CF40->field10[index] != NULL) - { - Free(gUnknown_0203CF40->field10[index]); - gUnknown_0203CF40->field10[index] = NULL; - } + if (gUnknown_0203CF40->field10[index] != NULL) + { + Free(gUnknown_0203CF40->field10[index]); + gUnknown_0203CF40->field10[index] = NULL; + } } u16 sub_81C767C(void) { - return gUnknown_0203CF40->field8; + return gUnknown_0203CF40->field8; } void sub_81C7688(u16 a0) { - gUnknown_0203CF40->field8 = a0; + gUnknown_0203CF40->field8 = a0; } void sub_81C7694(u32 a0) { - u32 value; - value = a0; - if (a0 > 4) - value = 0; - gUnknown_0203CF40->fieldA = value; + u32 value; + value = a0; + if (a0 > 4) + value = 0; + gUnknown_0203CF40->fieldA = value; } u16 sub_81C76AC(void) { - return gUnknown_0203CF40->fieldA; + return gUnknown_0203CF40->fieldA; } u32 sub_81C76B8(void) { - return gUnknown_0203CF40->fieldC; + return gUnknown_0203CF40->fieldC; } bool32 sub_81C76C4(void) { - struct UnknownStruct_sub_81C76C4 *v1; - - v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); - if (v1 == NULL) - return FALSE; - else - { - ResetSpriteData(); - FreeAllSpritePalettes(); - v1->data[3] = sub_81C7078(sub_81C7764, 1); - return TRUE; - } + struct UnknownStruct_sub_81C76C4 *v1; + + v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); + if (v1 == NULL) + return FALSE; + else + { + ResetSpriteData(); + FreeAllSpritePalettes(); + v1->data[3] = sub_81C7078(sub_81C7764, 1); + return TRUE; + } } u32 sub_81C76FC(void) { - u32 *v1; - v1 = sub_81C763C(0); - return sub_81C70D8(v1[3]); + u32 *v1; + v1 = sub_81C763C(0); + return sub_81C70D8(v1[3]); } void sub_81C7710(void) { - PlaySE(SE_PN_OFF); - sub_81CAADC(); - BeginNormalPaletteFade(-1, -1, 0, 16, 0); + PlaySE(SE_PN_OFF); + sub_81CAADC(); + BeginNormalPaletteFade(-1, -1, 0, 16, 0); } bool32 sub_81C7738(void) { - if (!gPaletteFade.active) - { - sub_81C99D4(); - sub_81C7C94(); - FreeAllWindowBuffers(); - return FALSE; - } else - return TRUE; + if (!gPaletteFade.active) + { + sub_81C99D4(); + sub_81C7C94(); + FreeAllWindowBuffers(); + return FALSE; + } else + return TRUE; } u32 sub_81C7764(s32 a0) { - u32 *v1; - - switch (a0) - { - case 0: - SetGpuReg(0, 0x82 << 5); - FreeAllWindowBuffers(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_0861FA04, 1); - sub_8199D98(); - reset_temp_tile_data_buffers(); - return 1; - case 1: - v1 = sub_81C763C(0); - decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); - SetBgTilemapBuffer(0, &v1[11]); - CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); - CopyBgTilemapBufferToVram(0); - return 0; - case 2: - if (free_temp_tile_data_buffers_if_possible()) - return 2; - - sub_81C7B74(); - return 0; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return 2; - - sub_81C7C28(); - sub_81C7D28(); - ShowBg(0); - return 4; - default: - return 4; - } + u32 *v1; + + switch (a0) + { + case 0: + SetGpuReg(0, 0x82 << 5); + FreeAllWindowBuffers(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_0861FA04, 1); + sub_8199D98(); + reset_temp_tile_data_buffers(); + return 1; + case 1: + v1 = sub_81C763C(0); + decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); + SetBgTilemapBuffer(0, &v1[11]); + CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); + CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); + CopyBgTilemapBufferToVram(0); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + sub_81C7B74(); + return 0; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return 2; + + sub_81C7C28(); + sub_81C7D28(); + ShowBg(0); + return 4; + default: + return 4; + } } void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) { - u32 (**v1)(void); + u32 (**v1)(void); - v1 = sub_81C763C(0); - v1[0] = a0; - v1[1] = a1; - v1[2] = NULL; + v1 = sub_81C763C(0); + v1[0] = a0; + v1[1] = a1; + v1[2] = NULL; } void sub_81C7850(u32 a0) { - void (**v1)(u32); + void (**v1)(u32); - v1 = sub_81C763C(0); - v1[2] = NULL; - v1[0](a0); + v1 = sub_81C763C(0); + v1[2] = NULL; + v1[0](a0); } u32 sub_81C786C(void) { - u32 (**v1)(void); + u32 (**v1)(void); - v1 = sub_81C763C(0); - return v1[1](); + v1 = sub_81C763C(0); + return v1[1](); } void sub_81C7880(void) { - u32 *v1; - - v1 = sub_81C763C(0); - v1[3] = sub_81C7078(atk47_cmd47, 4); + u32 *v1; + + v1 = sub_81C763C(0); + v1[3] = sub_81C7078(atk47_cmd47, 4); } void sub_81C78A0(void) { - u32 *v1; + u32 *v1; - v1 = sub_81C763C(0); - v1[3] = sub_81C7078(sub_81C791C, 4); + v1 = sub_81C763C(0); + v1[3] = sub_81C7078(sub_81C791C, 4); } bool32 sub_81C78C0(void) { - u32 *v1; + u32 *v1; - v1 = sub_81C763C(0); - return sub_81C70D8(v1[3]); + v1 = sub_81C763C(0); + return sub_81C70D8(v1[3]); } u32 atk47_cmd47(s32 a0) { - switch (a0) - { - default: - return 4; - case 1: - return 0; - case 0: - return 0; - case 2: - if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) - { - ChangeBgY(0, 0x2000, 0); - return 4; - } - - return 2; - } + switch (a0) + { + default: + return 4; + case 1: + return 0; + case 0: + return 0; + case 2: + if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) + { + ChangeBgY(0, 0x2000, 0); + return 4; + } + + return 2; + } } u32 sub_81C791C(s32 a0) { - if (ChangeBgY(0, 384, 2) <= 0) { - ChangeBgY(0, 0, 0); - return 4; - } - return 2; + if (ChangeBgY(0, 384, 2) <= 0) { + ChangeBgY(0, 0, 0); + return 4; + } + return 2; } void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { - CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); + CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); } void sub_81C795C(const struct SpritePalette *palettes) { - const struct SpritePalette *current; + const struct SpritePalette *current; u32 index; for (current = palettes; current->data != NULL; current++) @@ -933,264 +933,264 @@ void sub_81C795C(const struct SpritePalette *palettes) void sub_81C7990(u32 a0, u16 a1) { - CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); + CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); } __attribute__((naked)) void sub_81C79BC(u16 *a0, u16 *a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - str r0, [sp]\n\ - str r1, [sp, 0x4]\n\ - mov r10, r2\n\ - str r3, [sp, 0x8]\n\ - ldr r0, [sp, 0x2C]\n\ - cmp r0, 0\n\ - bne _081C79E4\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp]\n\ - b _081C79F4\n\ - .pool\n\ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + mov r10, r2\n\ + str r3, [sp, 0x8]\n\ + ldr r0, [sp, 0x2C]\n\ + cmp r0, 0\n\ + bne _081C79E4\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp]\n\ + b _081C79F4\n\ + .pool\n\ _081C79E4:\n\ - ldr r2, [sp, 0x2C]\n\ - ldr r0, [sp, 0x8]\n\ - cmp r2, r0\n\ - blt _081C7A00\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp, 0x4]\n\ + ldr r2, [sp, 0x2C]\n\ + ldr r0, [sp, 0x8]\n\ + cmp r2, r0\n\ + blt _081C7A00\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp, 0x4]\n\ _081C79F4:\n\ - ldr r1, [sp, 0x30]\n\ - bl CpuSet\n\ - b _081C7AAE\n\ - .pool\n\ + ldr r1, [sp, 0x30]\n\ + bl CpuSet\n\ + b _081C7AAE\n\ + .pool\n\ _081C7A00:\n\ - movs r2, 0x1\n\ - negs r2, r2\n\ - add r10, r2\n\ - b _081C7AA6\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + add r10, r2\n\ + b _081C7AA6\n\ _081C7A08:\n\ - ldr r1, [sp]\n\ - ldrh r0, [r1]\n\ - movs r2, 0x1F\n\ - mov r9, r2\n\ - mov r1, r9\n\ - ands r1, r0\n\ - mov r9, r1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 21\n\ - movs r1, 0x1F\n\ - ands r1, r2\n\ - mov r8, r1\n\ - lsrs r7, r0, 26\n\ - movs r2, 0x1F\n\ - ands r7, r2\n\ - ldr r0, [sp, 0x4]\n\ - ldrh r4, [r0]\n\ - movs r0, 0x1F\n\ - ands r0, r4\n\ - mov r1, r9\n\ - subs r0, r1\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r2, [sp, 0x2C]\n\ - adds r6, r0, 0\n\ - muls r6, r2\n\ - asrs r6, 8\n\ - lsls r4, 16\n\ - lsrs r0, r4, 21\n\ - movs r1, 0x1F\n\ - ands r0, r1\n\ - mov r2, r8\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - adds r5, r0, 0\n\ - muls r5, r1\n\ - asrs r5, 8\n\ - lsrs r4, 26\n\ - movs r2, 0x1F\n\ - ands r4, r2\n\ - subs r4, r7\n\ - lsls r4, 8\n\ - adds r0, r4, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - muls r0, r1\n\ - asrs r0, 8\n\ - add r6, r9\n\ - movs r2, 0x1F\n\ - ands r6, r2\n\ - add r5, r8\n\ - ands r5, r2\n\ - adds r0, r7, r0\n\ - ands r0, r2\n\ - lsls r0, 10\n\ - lsls r5, 5\n\ - orrs r0, r5\n\ - orrs r0, r6\n\ - ldr r1, [sp, 0x30]\n\ - strh r0, [r1]\n\ - ldr r2, [sp]\n\ - adds r2, 0x2\n\ - str r2, [sp]\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x2\n\ - str r0, [sp, 0x4]\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x30]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - add r10, r1\n\ + ldr r1, [sp]\n\ + ldrh r0, [r1]\n\ + movs r2, 0x1F\n\ + mov r9, r2\n\ + mov r1, r9\n\ + ands r1, r0\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 21\n\ + movs r1, 0x1F\n\ + ands r1, r2\n\ + mov r8, r1\n\ + lsrs r7, r0, 26\n\ + movs r2, 0x1F\n\ + ands r7, r2\n\ + ldr r0, [sp, 0x4]\n\ + ldrh r4, [r0]\n\ + movs r0, 0x1F\n\ + ands r0, r4\n\ + mov r1, r9\n\ + subs r0, r1\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r0, 0\n\ + muls r6, r2\n\ + asrs r6, 8\n\ + lsls r4, 16\n\ + lsrs r0, r4, 21\n\ + movs r1, 0x1F\n\ + ands r0, r1\n\ + mov r2, r8\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + adds r5, r0, 0\n\ + muls r5, r1\n\ + asrs r5, 8\n\ + lsrs r4, 26\n\ + movs r2, 0x1F\n\ + ands r4, r2\n\ + subs r4, r7\n\ + lsls r4, 8\n\ + adds r0, r4, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + add r6, r9\n\ + movs r2, 0x1F\n\ + ands r6, r2\n\ + add r5, r8\n\ + ands r5, r2\n\ + adds r0, r7, r0\n\ + ands r0, r2\n\ + lsls r0, 10\n\ + lsls r5, 5\n\ + orrs r0, r5\n\ + orrs r0, r6\n\ + ldr r1, [sp, 0x30]\n\ + strh r0, [r1]\n\ + ldr r2, [sp]\n\ + adds r2, 0x2\n\ + str r2, [sp]\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x4]\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x30]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + add r10, r1\n\ _081C7AA6:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r10, r0\n\ - bne _081C7A08\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r10, r0\n\ + bne _081C7A08\n\ _081C7AAE:\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); } void sub_81C7AC0(s32 a0) { - u32 *v1; - v1 = sub_81C763C(0); - switch (a0) - { - case 0: - BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); - break; - case 1: - BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); - break; - case 2: - BeginNormalPaletteFade(-1, -2, 0, 16, 0); - break; - case 3: - BeginNormalPaletteFade(-1, -2, 16, 0, 0); - break; - } + u32 *v1; + v1 = sub_81C763C(0); + switch (a0) + { + case 0: + BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); + break; + case 1: + BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); + break; + case 2: + BeginNormalPaletteFade(-1, -2, 0, 16, 0); + break; + case 3: + BeginNormalPaletteFade(-1, -2, 16, 0, 0); + break; + } } bool32 IsPaletteFadeActive(void) { - return gPaletteFade.active; + return gPaletteFade.active; } void sub_81C7B40(void) { - BlendPalettes(0xFFFEFFFE, 16, 0); + BlendPalettes(0xFFFEFFFE, 16, 0); } void sub_81C7B54(const struct BgTemplate *a0, s32 a1) { - s32 i; - if (a1 <= 0) - return; - for (i = a1; i != 0; i--) - { - InitBgFromTemplate(a0++); - } + s32 i; + if (a1 <= 0) + return; + for (i = a1; i != 0; i--) + { + InitBgFromTemplate(a0++); + } } void sub_81C7B74(void) { - u32 *v1; + u32 *v1; - v1 = sub_81C763C(0); - InitWindows(&gUnknown_0861FA08[0]); - v1[4] = 0; - sub_81C7BF8(0); - PutWindowTilemap(v1[4]); - CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. + v1 = sub_81C763C(0); + InitWindows(&gUnknown_0861FA08[0]); + v1[4] = 0; + sub_81C7BF8(0); + PutWindowTilemap(v1[4]); + CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. } void sub_81C7BA4(u32 a0) { - u32 *v1; + u32 *v1; - v1 = sub_81C763C(0); - sub_81C7BF8(v1[4]); - AddTextPrinterParameterized3(v1[4], 1, 0, 1, gMenuButtonReminderColor, 0, MenuButtonReminders[a0]); + v1 = sub_81C763C(0); + sub_81C7BF8(v1[4]); + AddTextPrinterParameterized3(v1[4], 1, 0, 1, gMenuButtonReminderColor, 0, MenuButtonReminders[a0]); } bool8 sub_81C7BE8(void) { - return IsDma3ManagerBusyWithBgCopy(); + return IsDma3ManagerBusyWithBgCopy(); } void sub_81C7BF8(u32 a0) { - FillWindowPixelBuffer(a0, 0x44); - FillWindowPixelRect(a0, 0x55, 0, 0, 0x80, 1); + FillWindowPixelBuffer(a0, 0x44); + FillWindowPixelRect(a0, 0x55, 0, 0, 0x80, 1); } void sub_81C7C28(void) { - u32 *v1; - u32 i; - u8 v2; - u32 v3; - u32 v4; - u8 spriteId; - - v1 = sub_81C763C(0); - for (i = 0; i == 0; i++) - { - LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); - } - - sub_81C795C(gUnknown_0861FA54); - v2 = IndexOfSpritePaletteTag(0); - v3 = 0x80 << 9 << v2; - v1[5] = -2 & ~v3; - spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); - v1[6] = (u32)(&gSprites[spriteId]); + u32 *v1; + u32 i; + u8 v2; + u32 v3; + u32 v4; + u8 spriteId; + + v1 = sub_81C763C(0); + for (i = 0; i == 0; i++) + { + LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); + } + + sub_81C795C(gUnknown_0861FA54); + v2 = IndexOfSpritePaletteTag(0); + v3 = 0x80 << 9 << v2; + v1[5] = -2 & ~v3; + spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); + v1[6] = (u32)(&gSprites[spriteId]); } void sub_81C7C94(void) { - void **v1; - v1 = sub_81C763C(0); - DestroySprite(v1[6]); - FreeSpriteTilesByTag(0); - FreeSpritePaletteByTag(0); + void **v1; + v1 = sub_81C763C(0); + DestroySprite(v1[6]); + FreeSpriteTilesByTag(0); + FreeSpritePaletteByTag(0); } void sub_81C7CB4(u16 *a0) { - u32 v1; - v1 = GetBgY(0); - a0[19] = (v1 >> 8) * -1; + u32 v1; + v1 = GetBgY(0); + a0[19] = (v1 >> 8) * -1; } struct Sprite *sub_81C7CCC(void) { - struct Sprite **v1; - struct Sprite *v2; - v1 = sub_81C763C(0); - v2 = v1[6]; - v2->callback = SpriteCallbackDummy; - return v2; + struct Sprite **v1; + struct Sprite *v2; + v1 = sub_81C763C(0); + v2 = v1[6]; + v2->callback = SpriteCallbackDummy; + return v2; } \ No newline at end of file -- cgit v1.2.3 From 762640664f19c19f3ddc97428753ce8f92d3372e Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 16 Feb 2019 12:09:27 -0500 Subject: Fix formatting --- src/pokenav_main.c | 64 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/pokenav_main.c b/src/pokenav_main.c index 992bca3f0..3a761442e 100644 --- a/src/pokenav_main.c +++ b/src/pokenav_main.c @@ -415,7 +415,8 @@ void sub_81C7170(u8 taskId) while (!exitLoop) { u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); - switch (v1) { + switch (v1) + { case 1: dataPtr[0] = dataPtr[0] + 1; break; @@ -449,27 +450,28 @@ void sub_81C71E4(u8 taskId) v1 = func(data[0]); switch (v1) { - case 0: - case 1: - data[0]++; - break; - case 4: - DestroyTask(taskId); - break; - default: - data[0] = v1 - 5; - break; - case 2: - case 3: + case 0: + case 1: + data[0]++; + break; + case 4: + DestroyTask(taskId); + break; + default: + data[0] = v1 - 5; + break; + case 2: + case 3: } } void CB2_PokeNav(void) { gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); - if (gUnknown_0203CF40 == NULL) { + if (gUnknown_0203CF40 == NULL) SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - } else { + else + { sub_81C7360(gUnknown_0203CF40); ResetTasks(); SetVBlankCallback(NULL); @@ -899,8 +901,10 @@ u32 atk47_cmd47(s32 a0) } } -u32 sub_81C791C(s32 a0) { - if (ChangeBgY(0, 384, 2) <= 0) { +u32 sub_81C791C(s32 a0) +{ + if (ChangeBgY(0, 384, 2) <= 0) + { ChangeBgY(0, 0, 0); return 4; } @@ -920,9 +924,7 @@ void sub_81C795C(const struct SpritePalette *palettes) { index = AllocSpritePalette(current->tag); if (index == 0xFF) - { break; - } else { index = (index * 16) + 0x100; @@ -1078,18 +1080,18 @@ void sub_81C7AC0(s32 a0) v1 = sub_81C763C(0); switch (a0) { - case 0: - BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); - break; - case 1: - BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); - break; - case 2: - BeginNormalPaletteFade(-1, -2, 0, 16, 0); - break; - case 3: - BeginNormalPaletteFade(-1, -2, 16, 0, 0); - break; + case 0: + BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); + break; + case 1: + BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); + break; + case 2: + BeginNormalPaletteFade(-1, -2, 0, 16, 0); + break; + case 3: + BeginNormalPaletteFade(-1, -2, 16, 0, 0); + break; } } -- cgit v1.2.3 From f52855258389fb88f06bc0d416cced71bb1fe99b Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 16 Feb 2019 16:00:01 -0500 Subject: Rename pokenav file --- ld_script.txt | 4 +- src/pokenav.c | 1198 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/pokenav_main.c | 1198 ---------------------------------------------------- 3 files changed, 1200 insertions(+), 1200 deletions(-) create mode 100644 src/pokenav.c delete mode 100644 src/pokenav_main.c diff --git a/ld_script.txt b/ld_script.txt index 8c48cf316..77bc56ecc 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -289,7 +289,7 @@ SECTIONS { src/pokemon_summary_screen.o(.text); src/unk_pokedex_area_screen_helper.o(.text); src/battle_pyramid_bag.o(.text); - src/pokenav_main.o(.text); + src/pokenav.o(.text); asm/pokenav.o(.text); src/pokenav_match_call.o(.text); asm/rom_81D1C44.o(.text); @@ -592,7 +592,7 @@ SECTIONS { src/pokemon_summary_screen.o(.rodata); src/unk_pokedex_area_screen_helper.o(.rodata); src/battle_pyramid_bag.o(.rodata); - src/pokenav_main.o(.rodata); + src/pokenav.o(.rodata); data/pokenav.o(.rodata); src/pokenav_match_call.o(.rodata); data/rom_81D1C44.o(.rodata); diff --git a/src/pokenav.c b/src/pokenav.c new file mode 100644 index 000000000..3a761442e --- /dev/null +++ b/src/pokenav.c @@ -0,0 +1,1198 @@ +#include "global.h" +#include "alloc.h" +#include "task.h" +#include "main.h" +#include "overworld.h" +#include "field_weather.h" +#include "palette.h" +#include "pokemon_storage_system.h" +#include "sound.h" +#include "constants/songs.h" +#include "window.h" +#include "gpu_regs.h" +#include "bg.h" +#include "menu.h" +#include "graphics.h" +#include "gba/macro.h" +#include "decompress.h" +#include "strings.h" + +#define UNKNOWN_OFFSET 100000 + +struct UnknownStruct_0203CF40 +{ + u32 (*field0)(void); + u32 field4; + u16 field8; + u16 fieldA; + u32 fieldC; + void *field10[19]; +}; + +struct UnknownStruct_sub_81C76C4 +{ + u32 data[523]; +}; + +extern u32 sub_81C9430(void); +extern void sub_81CAADC(void); +extern u32 sub_81C99D4(void); +extern void sub_8199D98(void); +extern void sub_81C7D28(void); +extern u32 sub_81C9298(void); +extern u32 sub_81C941C(void); +extern u32 sub_81C9924(void); +extern u32 sub_81C99C0(void); +extern u32 sub_81C9990(void); +extern u32 sub_81C9940(void); +extern u32 sub_81C9338(void); +extern u32 sub_81C9368(void); +extern u32 sub_81C92CC(void); +extern u32 sub_81C9304(void); +extern u32 sub_81CC4D4(void); +extern u32 sub_81CC554(void); +extern u32 sub_81CC5F4(void); +extern u32 sub_81CC62C(void); +extern u32 sub_81CC65C(void); +extern u32 sub_81CC524(void); +extern u32 sub_81CC670(void); +extern u32 sub_81CCFD8(void); +extern u32 sub_81CD070(void); +extern u32 sub_81CDDD4(void); +extern u32 sub_81CDE2C(void); +extern u32 sub_81CDE64(void); +extern u32 sub_81CD1C0(void); +extern u32 sub_81CECA0(void); +extern u32 sub_81CEF3C(void); +extern u32 sub_81CEFDC(void); +extern u32 sub_81CF330(void); +extern u32 sub_81CF3A0(void); +extern u32 sub_81CF3D0(void); +extern u32 sub_81CEFF0(void); +extern u32 sub_81CF3F8(void); +extern u32 sub_81CD024(void); +extern u32 sub_81CEF98(void); +extern u32 sub_81CF368(void); +extern u32 sub_81CAAE8(void); +extern u32 sub_81CAB24(void); +extern u32 sub_81CB260(void); +extern u32 sub_81CB29C(void); +extern u32 sub_81CB2CC(void); +extern u32 sub_81CAB38(void); +extern u32 sub_81CB2E0(void); +extern u32 sub_81CF9BC(void); +extern u32 sub_81CFA34(void); +extern u32 sub_81CFDD0(void); +extern u32 sub_81CFE40(void); +extern u32 sub_81CFE70(void); +extern u32 sub_81CFA48(void); +extern u32 sub_81CFE98(void); +extern u32 sub_81D0450(void); +extern u32 sub_81D04A0(void); +extern u32 sub_81D0978(void); +extern u32 sub_81D09B0(void); +extern u32 sub_81D09E0(void); +extern u32 sub_81D04B8(void); +extern u32 sub_81D09F4(void); +extern u32 sub_81CFA04(void); +extern u32 sub_81CFE08(void); + +u32 sub_81C791C(s32 a0); +bool32 sub_81C756C(u32 a0); +bool32 sub_81C76C4(void); +u32 AnyMonHasRibbon(void); +u32 sub_81C75E0(void); +u32 sub_81C75D4(void); +u32 sub_81C76FC(void); +u32 sub_81C786C(void); +u32 sub_81C7764(s32 a0); +u32 atk47_cmd47(s32 a0); +bool32 sub_81C7738(void); +void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 a1, u32 a2); +void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); +void sub_81C7360(struct UnknownStruct_0203CF40 *a0); +void sub_81C7650(u32 index); +void sub_81C7850(u32 a0); +void sub_81C7BF8(u32 a0); +void sub_81C71E4(u8 a0); +void sub_81C7170(u8 a0); +void sub_81C742C(u8 taskId); +void sub_81C7710(void); +void sub_81C75F4(void); +void sub_81C7334(void); +void sub_81C7418(void); +void sub_81C7400(void); +void sub_81C7C28(void); +void sub_81C72BC(void); +void sub_81C7B74(void); +void sub_81C7C94(void); + + +u32 (*const gUnknown_0861F3EC[15][7])(void) = +{ + { + (u32 (*)(void))sub_81C9298, + sub_81C941C, + sub_81C9924, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9298, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9338, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9368, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C92CC, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81C9304, + sub_81C941C, + sub_81C9940, + sub_81C9990, + sub_81C99C0, + sub_81C9430, + sub_81C99D4, + }, + { + sub_81CC4D4, + sub_81CC554, + sub_81CC5F4, + sub_81CC62C, + sub_81CC65C, + sub_81CC524, + sub_81CC670, + }, + { + sub_81CCFD8, + sub_81CD070, + sub_81CDDD4, + sub_81CDE2C, + sub_81CDE64, + sub_81CD1C0, + sub_81CECA0, + }, + { + sub_81CEF3C, + sub_81CEFDC, + sub_81CF330, + sub_81CF3A0, + sub_81CF3D0, + sub_81CEFF0, + sub_81CF3F8, + }, + { + sub_81CD024, + sub_81CD070, + sub_81CDDD4, + sub_81CDE2C, + sub_81CDE64, + sub_81CD1C0, + sub_81CECA0, + }, + { + sub_81CEF98, + sub_81CEFDC, + sub_81CF368, + sub_81CF3A0, + sub_81CF3D0, + sub_81CEFF0, + sub_81CF3F8, + }, + { + sub_81CAAE8, + sub_81CAB24, + sub_81CB260, + sub_81CB29C, + sub_81CB2CC, + sub_81CAB38, + sub_81CB2E0, + }, + { + sub_81CF9BC, + sub_81CFA34, + sub_81CFDD0, + sub_81CFE40, + sub_81CFE70, + sub_81CFA48, + sub_81CFE98, + }, + { + sub_81D0450, + sub_81D04A0, + sub_81D0978, + sub_81D09B0, + sub_81D09E0, + sub_81D04B8, + sub_81D09F4, + }, + { + sub_81CFA04, + sub_81CFA34, + sub_81CFE08, + sub_81CFE40, + sub_81CFE70, + sub_81CFA48, + sub_81CFE98, + }, +}; + +const u16 gUnknown_0861F590[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); +const u32 gUnknown_0861F5B0[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); +const u32 gUnknown_0861F994[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); + +const struct BgTemplate gUnknown_0861FA04 = +{ + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, +}; + +const struct WindowTemplate gUnknown_0861FA08[2] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x16, + .width = 0x10, + .height = 0x2, + .paletteNum = 0, + .baseBlock = 0x36, + }, + { + .bg = 0xFF, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 0, + .height = 0, + .paletteNum = 0, + .baseBlock = 0, + }, +}; + +const u8 *const (MenuButtonReminders[12]) = +{ + gText_Navgear_ClearButtonList, + gText_NavgearMap_ZoomedOutButtons, + gText_NavgearMap_ZoomedInButtons, + gText_NavgearCondition_MonListButtons, + gText_NavgearCondition_MonStatusButtons, + gText_NavgearCondition_MarkingButtons, + gText_NavgearMatchCall_TrainerListButtons, + gText_NavgearMatchCall_CallMenuButtons, + gText_NavgearMatchCall_CheckTrainerButtons, + gText_NavgearRibbons_MonListButtons, + gText_NavgearRibbons_RibbonListButtons, + gText_NavgearRibbons_RibbonCheckButtons, +}; + +const u8 gMenuButtonReminderColor[4] = +{ + 4, 1, 2, 0 +}; + +const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = +{ + { + .data = gUnknown_0861F5B0, + .size = 0x1000, + .tag = 0, + } +}; + +const struct SpritePalette gUnknown_0861FA54[2] = +{ + { + .data = gUnknown_0861F590, + .tag = 0, + }, + { + .data = NULL, + .tag = 0, + } +}; + +const struct CompressedSpriteSheet gUnknown_0861FA64 = +{ + .data = gPokenavLeftHeaderHoennMap_Gfx, + .size = 0xC00, + .tag = 2 +}; + +extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; +extern u8 gUnknown_0203CF3C; +extern const struct SpriteTemplate gUnknown_0861FB04; + +u32 sub_81C7078(u32 (*a0)(s32), u32 a1) +{ + u16 taskId; + + if (!is_c1_link_related_active()) + taskId = CreateTask(sub_81C7170, a1); + else + taskId = CreateTask(sub_81C71E4, a1); + + SetWordTaskArg(taskId, 1, (u32)a0); + + gTasks[taskId].data[3] = gUnknown_0203CF3C; + return ((gUnknown_0203CF3C++) << 16) | taskId; +} + +bool32 sub_81C70D8(u32 a0) +{ + u32 v1 = a0 & 0xFFFF; + u32 v2 = a0 >> 16; + if (gTasks[v1].isActive + && (gTasks[v1].func == sub_81C7170 || gTasks[v1].func == sub_81C71E4) + && gTasks[v1].data[3] == v2) + { + + return TRUE; + } + else + return FALSE; +} + +bool32 sub_81C7124(u32 a0) +{ + s32 i; + for (i = 0; i < 16; i++) + { + if (gTasks[i].isActive + && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)) + { + u32 arg = GetWordTaskArg((u8)i, 1); + if (arg == a0) + return TRUE; + } + } + return FALSE; +} + +void sub_81C7170(u8 taskId) +{ + s16 *dataPtr; + u32 (*func)(u32); + bool32 exitLoop; + + func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); + dataPtr = gTasks[taskId].data; + exitLoop = FALSE; + while (!exitLoop) + { + u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); + switch (v1) + { + case 1: + dataPtr[0] = dataPtr[0] + 1; + break; + case 0: + dataPtr[0]++; + return; + case 4: + DestroyTask(taskId); + return; + default: + dataPtr[0] = v1 - 5; + break; + case 3: + break; + case 2: + return; + } + } +} + +void sub_81C71E4(u8 taskId) +{ + u32 (*func)(u32); + s16 *data; + u32 v1; + + if (sub_8087598()) + return; + func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); + data = gTasks[taskId].data; + v1 = func(data[0]); + switch (v1) + { + case 0: + case 1: + data[0]++; + break; + case 4: + DestroyTask(taskId); + break; + default: + data[0] = v1 - 5; + break; + case 2: + case 3: + } +} + +void CB2_PokeNav(void) +{ + gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); + if (gUnknown_0203CF40 == NULL) + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + else + { + sub_81C7360(gUnknown_0203CF40); + ResetTasks(); + SetVBlankCallback(NULL); + CreateTask(sub_81C742C, 0); + SetMainCallback2(sub_81C7400); + SetVBlankCallback(sub_81C7418); + } +} + +void sub_81C72A4() +{ + SetMainCallback2(sub_81C72BC); + FadeScreen(1, 0); +} + +void sub_81C72BC() +{ + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); + if (gUnknown_0203CF40 == NULL) + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + else + { + sub_81C7360(gUnknown_0203CF40); + gUnknown_0203CF40->field8 = 1; + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(NULL); + CreateTask(sub_81C742C, 0); + SetMainCallback2(sub_81C7400); + SetVBlankCallback(sub_81C7418); + } + } +} + +void sub_81C7334() +{ + s32 i; + for (i = 0; i < 19; i++) + { + sub_81C7650(i); + } + + Free(gUnknown_0203CF40); + gUnknown_0203CF40 = NULL; + InitKeys(); +} + +// Clears UnknownStruct_0203CF40 +void sub_81C7360(struct UnknownStruct_0203CF40 *a0) +{ + s32 i; + void **arrayPtr; + void *fill; + + fill = NULL; + i = 18; + arrayPtr = &(a0->field10[18]); + for (i; i >= 0; i--) + { + *arrayPtr = fill; + arrayPtr -= 1; + } + a0->field8 = 0; + a0->field4 = 0; + a0->fieldC = AnyMonHasRibbon(); + a0->field0 = NULL; +} + +bool32 AnyMonHasRibbon() +{ + s32 i; + s32 j; + + for (i = 0; i < 6; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) + && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) + && GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0) + { + return TRUE; + } + } + + for (j = 0; j < 14; j++) + { + for (i = 0; i < 30; i++) + { + if (CheckBoxMonSanityAt(j, i) + && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) + { + return TRUE; + } + } + } + + return FALSE; +} + +void sub_81C7400() +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_81C7418() +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +void sub_81C742C(u8 taskId) +{ + s16 *dataPtr; + u32 v1; + bool32 v2; + + dataPtr = gTasks[taskId].data; + + switch (dataPtr[0]) + { + case 0: + sub_81C76C4(); + dataPtr[0] = 1; + break; + case 1: + if (sub_81C76FC()) + break; + sub_81C756C(UNKNOWN_OFFSET); + dataPtr[0] = 4; + break; + case 2: + if (sub_81C786C()) + break; + dataPtr[0] = 3; + case 3: + v1 = sub_81C75E0(); + if (v1 == -1) + { + sub_81C7710(); + dataPtr[0] = 5; + } + else if (v1 >= UNKNOWN_OFFSET) + { + gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); + gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); + if (sub_81C756C(v1)) + dataPtr[0] = 4; + else + { + sub_81C7710(); + dataPtr[0] = 5; + } + } + else if (v1 != 0) + { + sub_81C7850(v1); + if (sub_81C786C()) + dataPtr[0] = 2; + } + break; + case 4: + if (!sub_81C75D4()) + dataPtr[0] = 3; + break; + case 5: + if (!sub_81C7738()) + { + v2 = gUnknown_0203CF40->field8 != 0; + sub_81C9430(); + sub_81C7334(); + if (v2) + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + else + SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + } + } +} + +bool32 sub_81C756C(u32 a0) +{ + u32 index; + + index = a0 - UNKNOWN_OFFSET; + sub_81C75F4(); + if (!gUnknown_0861F3EC[index][0]()) + return FALSE; + if (!gUnknown_0861F3EC[index][2]()) + return FALSE; + sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]); + gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1]; + gUnknown_0203CF40->field4 = index; + return TRUE; +} + +u32 sub_81C75D4(void) +{ + return sub_81C786C(); +} + +u32 sub_81C75E0(void) +{ + return gUnknown_0203CF40->field0(); +} + +void sub_81C75F4(void) +{ + InitKeys(); +} + +void IndirectSetVBlankCallback(IntrCallback callback) +{ + SetVBlankCallback(callback); +} + +void sub_81C760C(void) +{ + SetVBlankCallback(sub_81C7418); +} + +void *sub_81C761C(u32 index, u32 size) +{ + return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); +} + +void *sub_81C763C(u32 index) +{ + return gUnknown_0203CF40->field10[index]; +} + +void sub_81C7650(u32 index) +{ + if (gUnknown_0203CF40->field10[index] != NULL) + { + Free(gUnknown_0203CF40->field10[index]); + gUnknown_0203CF40->field10[index] = NULL; + } +} + +u16 sub_81C767C(void) +{ + return gUnknown_0203CF40->field8; +} + +void sub_81C7688(u16 a0) +{ + gUnknown_0203CF40->field8 = a0; +} + +void sub_81C7694(u32 a0) +{ + u32 value; + value = a0; + if (a0 > 4) + value = 0; + gUnknown_0203CF40->fieldA = value; +} + +u16 sub_81C76AC(void) +{ + return gUnknown_0203CF40->fieldA; +} + +u32 sub_81C76B8(void) +{ + return gUnknown_0203CF40->fieldC; +} + +bool32 sub_81C76C4(void) +{ + struct UnknownStruct_sub_81C76C4 *v1; + + v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); + if (v1 == NULL) + return FALSE; + else + { + ResetSpriteData(); + FreeAllSpritePalettes(); + v1->data[3] = sub_81C7078(sub_81C7764, 1); + return TRUE; + } +} + +u32 sub_81C76FC(void) +{ + u32 *v1; + v1 = sub_81C763C(0); + return sub_81C70D8(v1[3]); +} + +void sub_81C7710(void) +{ + PlaySE(SE_PN_OFF); + sub_81CAADC(); + BeginNormalPaletteFade(-1, -1, 0, 16, 0); +} + +bool32 sub_81C7738(void) +{ + if (!gPaletteFade.active) + { + sub_81C99D4(); + sub_81C7C94(); + FreeAllWindowBuffers(); + return FALSE; + } else + return TRUE; +} + +u32 sub_81C7764(s32 a0) +{ + u32 *v1; + + switch (a0) + { + case 0: + SetGpuReg(0, 0x82 << 5); + FreeAllWindowBuffers(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_0861FA04, 1); + sub_8199D98(); + reset_temp_tile_data_buffers(); + return 1; + case 1: + v1 = sub_81C763C(0); + decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); + SetBgTilemapBuffer(0, &v1[11]); + CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); + CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); + CopyBgTilemapBufferToVram(0); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + sub_81C7B74(); + return 0; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return 2; + + sub_81C7C28(); + sub_81C7D28(); + ShowBg(0); + return 4; + default: + return 4; + } +} + +void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) +{ + u32 (**v1)(void); + + v1 = sub_81C763C(0); + v1[0] = a0; + v1[1] = a1; + v1[2] = NULL; +} + +void sub_81C7850(u32 a0) +{ + void (**v1)(u32); + + v1 = sub_81C763C(0); + v1[2] = NULL; + v1[0](a0); +} + +u32 sub_81C786C(void) +{ + u32 (**v1)(void); + + v1 = sub_81C763C(0); + return v1[1](); +} + +void sub_81C7880(void) +{ + u32 *v1; + + v1 = sub_81C763C(0); + v1[3] = sub_81C7078(atk47_cmd47, 4); +} + +void sub_81C78A0(void) +{ + u32 *v1; + + v1 = sub_81C763C(0); + v1[3] = sub_81C7078(sub_81C791C, 4); +} + +bool32 sub_81C78C0(void) +{ + u32 *v1; + + v1 = sub_81C763C(0); + return sub_81C70D8(v1[3]); +} + +u32 atk47_cmd47(s32 a0) +{ + switch (a0) + { + default: + return 4; + case 1: + return 0; + case 0: + return 0; + case 2: + if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) + { + ChangeBgY(0, 0x2000, 0); + return 4; + } + + return 2; + } +} + +u32 sub_81C791C(s32 a0) +{ + if (ChangeBgY(0, 384, 2) <= 0) + { + ChangeBgY(0, 0, 0); + return 4; + } + return 2; +} + +void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { + CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); +} + +void sub_81C795C(const struct SpritePalette *palettes) +{ + const struct SpritePalette *current; + u32 index; + + for (current = palettes; current->data != NULL; current++) + { + index = AllocSpritePalette(current->tag); + if (index == 0xFF) + break; + else + { + index = (index * 16) + 0x100; + CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); + } + } +} + +void sub_81C7990(u32 a0, u16 a1) +{ + CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); +} + +__attribute__((naked)) +void sub_81C79BC(u16 *a0, u16 *a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + str r0, [sp]\n\ + str r1, [sp, 0x4]\n\ + mov r10, r2\n\ + str r3, [sp, 0x8]\n\ + ldr r0, [sp, 0x2C]\n\ + cmp r0, 0\n\ + bne _081C79E4\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp]\n\ + b _081C79F4\n\ + .pool\n\ +_081C79E4:\n\ + ldr r2, [sp, 0x2C]\n\ + ldr r0, [sp, 0x8]\n\ + cmp r2, r0\n\ + blt _081C7A00\n\ + ldr r2, =0x001fffff\n\ + mov r1, r10\n\ + ands r2, r1\n\ + ldr r0, [sp, 0x4]\n\ +_081C79F4:\n\ + ldr r1, [sp, 0x30]\n\ + bl CpuSet\n\ + b _081C7AAE\n\ + .pool\n\ +_081C7A00:\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + add r10, r2\n\ + b _081C7AA6\n\ +_081C7A08:\n\ + ldr r1, [sp]\n\ + ldrh r0, [r1]\n\ + movs r2, 0x1F\n\ + mov r9, r2\n\ + mov r1, r9\n\ + ands r1, r0\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + lsrs r2, r0, 21\n\ + movs r1, 0x1F\n\ + ands r1, r2\n\ + mov r8, r1\n\ + lsrs r7, r0, 26\n\ + movs r2, 0x1F\n\ + ands r7, r2\n\ + ldr r0, [sp, 0x4]\n\ + ldrh r4, [r0]\n\ + movs r0, 0x1F\n\ + ands r0, r4\n\ + mov r1, r9\n\ + subs r0, r1\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r2, [sp, 0x2C]\n\ + adds r6, r0, 0\n\ + muls r6, r2\n\ + asrs r6, 8\n\ + lsls r4, 16\n\ + lsrs r0, r4, 21\n\ + movs r1, 0x1F\n\ + ands r0, r1\n\ + mov r2, r8\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + adds r5, r0, 0\n\ + muls r5, r1\n\ + asrs r5, 8\n\ + lsrs r4, 26\n\ + movs r2, 0x1F\n\ + ands r4, r2\n\ + subs r4, r7\n\ + lsls r4, 8\n\ + adds r0, r4, 0\n\ + ldr r1, [sp, 0x8]\n\ + bl __divsi3\n\ + ldr r1, [sp, 0x2C]\n\ + muls r0, r1\n\ + asrs r0, 8\n\ + add r6, r9\n\ + movs r2, 0x1F\n\ + ands r6, r2\n\ + add r5, r8\n\ + ands r5, r2\n\ + adds r0, r7, r0\n\ + ands r0, r2\n\ + lsls r0, 10\n\ + lsls r5, 5\n\ + orrs r0, r5\n\ + orrs r0, r6\n\ + ldr r1, [sp, 0x30]\n\ + strh r0, [r1]\n\ + ldr r2, [sp]\n\ + adds r2, 0x2\n\ + str r2, [sp]\n\ + ldr r0, [sp, 0x4]\n\ + adds r0, 0x2\n\ + str r0, [sp, 0x4]\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x30]\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + add r10, r1\n\ +_081C7AA6:\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r10, r0\n\ + bne _081C7A08\n\ +_081C7AAE:\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +void sub_81C7AC0(s32 a0) +{ + u32 *v1; + v1 = sub_81C763C(0); + switch (a0) + { + case 0: + BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); + break; + case 1: + BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); + break; + case 2: + BeginNormalPaletteFade(-1, -2, 0, 16, 0); + break; + case 3: + BeginNormalPaletteFade(-1, -2, 16, 0, 0); + break; + } +} + +bool32 IsPaletteFadeActive(void) +{ + return gPaletteFade.active; +} + +void sub_81C7B40(void) +{ + BlendPalettes(0xFFFEFFFE, 16, 0); +} + +void sub_81C7B54(const struct BgTemplate *a0, s32 a1) +{ + s32 i; + if (a1 <= 0) + return; + for (i = a1; i != 0; i--) + { + InitBgFromTemplate(a0++); + } +} + +void sub_81C7B74(void) +{ + u32 *v1; + + v1 = sub_81C763C(0); + InitWindows(&gUnknown_0861FA08[0]); + v1[4] = 0; + sub_81C7BF8(0); + PutWindowTilemap(v1[4]); + CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. +} + +void sub_81C7BA4(u32 a0) +{ + u32 *v1; + + v1 = sub_81C763C(0); + sub_81C7BF8(v1[4]); + AddTextPrinterParameterized3(v1[4], 1, 0, 1, gMenuButtonReminderColor, 0, MenuButtonReminders[a0]); +} + +bool8 sub_81C7BE8(void) +{ + return IsDma3ManagerBusyWithBgCopy(); +} + +void sub_81C7BF8(u32 a0) +{ + FillWindowPixelBuffer(a0, 0x44); + FillWindowPixelRect(a0, 0x55, 0, 0, 0x80, 1); +} + +void sub_81C7C28(void) +{ + u32 *v1; + u32 i; + u8 v2; + u32 v3; + u32 v4; + u8 spriteId; + + v1 = sub_81C763C(0); + for (i = 0; i == 0; i++) + { + LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); + } + + sub_81C795C(gUnknown_0861FA54); + v2 = IndexOfSpritePaletteTag(0); + v3 = 0x80 << 9 << v2; + v1[5] = -2 & ~v3; + spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); + v1[6] = (u32)(&gSprites[spriteId]); +} + +void sub_81C7C94(void) +{ + void **v1; + v1 = sub_81C763C(0); + DestroySprite(v1[6]); + FreeSpriteTilesByTag(0); + FreeSpritePaletteByTag(0); +} + +void sub_81C7CB4(u16 *a0) +{ + u32 v1; + v1 = GetBgY(0); + a0[19] = (v1 >> 8) * -1; +} + +struct Sprite *sub_81C7CCC(void) +{ + struct Sprite **v1; + struct Sprite *v2; + v1 = sub_81C763C(0); + v2 = v1[6]; + v2->callback = SpriteCallbackDummy; + return v2; +} \ No newline at end of file diff --git a/src/pokenav_main.c b/src/pokenav_main.c deleted file mode 100644 index 3a761442e..000000000 --- a/src/pokenav_main.c +++ /dev/null @@ -1,1198 +0,0 @@ -#include "global.h" -#include "alloc.h" -#include "task.h" -#include "main.h" -#include "overworld.h" -#include "field_weather.h" -#include "palette.h" -#include "pokemon_storage_system.h" -#include "sound.h" -#include "constants/songs.h" -#include "window.h" -#include "gpu_regs.h" -#include "bg.h" -#include "menu.h" -#include "graphics.h" -#include "gba/macro.h" -#include "decompress.h" -#include "strings.h" - -#define UNKNOWN_OFFSET 100000 - -struct UnknownStruct_0203CF40 -{ - u32 (*field0)(void); - u32 field4; - u16 field8; - u16 fieldA; - u32 fieldC; - void *field10[19]; -}; - -struct UnknownStruct_sub_81C76C4 -{ - u32 data[523]; -}; - -extern u32 sub_81C9430(void); -extern void sub_81CAADC(void); -extern u32 sub_81C99D4(void); -extern void sub_8199D98(void); -extern void sub_81C7D28(void); -extern u32 sub_81C9298(void); -extern u32 sub_81C941C(void); -extern u32 sub_81C9924(void); -extern u32 sub_81C99C0(void); -extern u32 sub_81C9990(void); -extern u32 sub_81C9940(void); -extern u32 sub_81C9338(void); -extern u32 sub_81C9368(void); -extern u32 sub_81C92CC(void); -extern u32 sub_81C9304(void); -extern u32 sub_81CC4D4(void); -extern u32 sub_81CC554(void); -extern u32 sub_81CC5F4(void); -extern u32 sub_81CC62C(void); -extern u32 sub_81CC65C(void); -extern u32 sub_81CC524(void); -extern u32 sub_81CC670(void); -extern u32 sub_81CCFD8(void); -extern u32 sub_81CD070(void); -extern u32 sub_81CDDD4(void); -extern u32 sub_81CDE2C(void); -extern u32 sub_81CDE64(void); -extern u32 sub_81CD1C0(void); -extern u32 sub_81CECA0(void); -extern u32 sub_81CEF3C(void); -extern u32 sub_81CEFDC(void); -extern u32 sub_81CF330(void); -extern u32 sub_81CF3A0(void); -extern u32 sub_81CF3D0(void); -extern u32 sub_81CEFF0(void); -extern u32 sub_81CF3F8(void); -extern u32 sub_81CD024(void); -extern u32 sub_81CEF98(void); -extern u32 sub_81CF368(void); -extern u32 sub_81CAAE8(void); -extern u32 sub_81CAB24(void); -extern u32 sub_81CB260(void); -extern u32 sub_81CB29C(void); -extern u32 sub_81CB2CC(void); -extern u32 sub_81CAB38(void); -extern u32 sub_81CB2E0(void); -extern u32 sub_81CF9BC(void); -extern u32 sub_81CFA34(void); -extern u32 sub_81CFDD0(void); -extern u32 sub_81CFE40(void); -extern u32 sub_81CFE70(void); -extern u32 sub_81CFA48(void); -extern u32 sub_81CFE98(void); -extern u32 sub_81D0450(void); -extern u32 sub_81D04A0(void); -extern u32 sub_81D0978(void); -extern u32 sub_81D09B0(void); -extern u32 sub_81D09E0(void); -extern u32 sub_81D04B8(void); -extern u32 sub_81D09F4(void); -extern u32 sub_81CFA04(void); -extern u32 sub_81CFE08(void); - -u32 sub_81C791C(s32 a0); -bool32 sub_81C756C(u32 a0); -bool32 sub_81C76C4(void); -u32 AnyMonHasRibbon(void); -u32 sub_81C75E0(void); -u32 sub_81C75D4(void); -u32 sub_81C76FC(void); -u32 sub_81C786C(void); -u32 sub_81C7764(s32 a0); -u32 atk47_cmd47(s32 a0); -bool32 sub_81C7738(void); -void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 a1, u32 a2); -void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)); -void sub_81C7360(struct UnknownStruct_0203CF40 *a0); -void sub_81C7650(u32 index); -void sub_81C7850(u32 a0); -void sub_81C7BF8(u32 a0); -void sub_81C71E4(u8 a0); -void sub_81C7170(u8 a0); -void sub_81C742C(u8 taskId); -void sub_81C7710(void); -void sub_81C75F4(void); -void sub_81C7334(void); -void sub_81C7418(void); -void sub_81C7400(void); -void sub_81C7C28(void); -void sub_81C72BC(void); -void sub_81C7B74(void); -void sub_81C7C94(void); - - -u32 (*const gUnknown_0861F3EC[15][7])(void) = -{ - { - (u32 (*)(void))sub_81C9298, - sub_81C941C, - sub_81C9924, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9298, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9338, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9368, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C92CC, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81C9304, - sub_81C941C, - sub_81C9940, - sub_81C9990, - sub_81C99C0, - sub_81C9430, - sub_81C99D4, - }, - { - sub_81CC4D4, - sub_81CC554, - sub_81CC5F4, - sub_81CC62C, - sub_81CC65C, - sub_81CC524, - sub_81CC670, - }, - { - sub_81CCFD8, - sub_81CD070, - sub_81CDDD4, - sub_81CDE2C, - sub_81CDE64, - sub_81CD1C0, - sub_81CECA0, - }, - { - sub_81CEF3C, - sub_81CEFDC, - sub_81CF330, - sub_81CF3A0, - sub_81CF3D0, - sub_81CEFF0, - sub_81CF3F8, - }, - { - sub_81CD024, - sub_81CD070, - sub_81CDDD4, - sub_81CDE2C, - sub_81CDE64, - sub_81CD1C0, - sub_81CECA0, - }, - { - sub_81CEF98, - sub_81CEFDC, - sub_81CF368, - sub_81CF3A0, - sub_81CF3D0, - sub_81CEFF0, - sub_81CF3F8, - }, - { - sub_81CAAE8, - sub_81CAB24, - sub_81CB260, - sub_81CB29C, - sub_81CB2CC, - sub_81CAB38, - sub_81CB2E0, - }, - { - sub_81CF9BC, - sub_81CFA34, - sub_81CFDD0, - sub_81CFE40, - sub_81CFE70, - sub_81CFA48, - sub_81CFE98, - }, - { - sub_81D0450, - sub_81D04A0, - sub_81D0978, - sub_81D09B0, - sub_81D09E0, - sub_81D04B8, - sub_81D09F4, - }, - { - sub_81CFA04, - sub_81CFA34, - sub_81CFE08, - sub_81CFE40, - sub_81CFE70, - sub_81CFA48, - sub_81CFE98, - }, -}; - -const u16 gUnknown_0861F590[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); -const u32 gUnknown_0861F5B0[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); -const u32 gUnknown_0861F994[] = INCBIN_U32("graphics/pokenav/icon2_unused.4bpp.lz"); - -const struct BgTemplate gUnknown_0861FA04 = -{ - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 5, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0, -}; - -const struct WindowTemplate gUnknown_0861FA08[2] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 0x16, - .width = 0x10, - .height = 0x2, - .paletteNum = 0, - .baseBlock = 0x36, - }, - { - .bg = 0xFF, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 0, - .height = 0, - .paletteNum = 0, - .baseBlock = 0, - }, -}; - -const u8 *const (MenuButtonReminders[12]) = -{ - gText_Navgear_ClearButtonList, - gText_NavgearMap_ZoomedOutButtons, - gText_NavgearMap_ZoomedInButtons, - gText_NavgearCondition_MonListButtons, - gText_NavgearCondition_MonStatusButtons, - gText_NavgearCondition_MarkingButtons, - gText_NavgearMatchCall_TrainerListButtons, - gText_NavgearMatchCall_CallMenuButtons, - gText_NavgearMatchCall_CheckTrainerButtons, - gText_NavgearRibbons_MonListButtons, - gText_NavgearRibbons_RibbonListButtons, - gText_NavgearRibbons_RibbonCheckButtons, -}; - -const u8 gMenuButtonReminderColor[4] = -{ - 4, 1, 2, 0 -}; - -const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = -{ - { - .data = gUnknown_0861F5B0, - .size = 0x1000, - .tag = 0, - } -}; - -const struct SpritePalette gUnknown_0861FA54[2] = -{ - { - .data = gUnknown_0861F590, - .tag = 0, - }, - { - .data = NULL, - .tag = 0, - } -}; - -const struct CompressedSpriteSheet gUnknown_0861FA64 = -{ - .data = gPokenavLeftHeaderHoennMap_Gfx, - .size = 0xC00, - .tag = 2 -}; - -extern struct UnknownStruct_0203CF40 *gUnknown_0203CF40; -extern u8 gUnknown_0203CF3C; -extern const struct SpriteTemplate gUnknown_0861FB04; - -u32 sub_81C7078(u32 (*a0)(s32), u32 a1) -{ - u16 taskId; - - if (!is_c1_link_related_active()) - taskId = CreateTask(sub_81C7170, a1); - else - taskId = CreateTask(sub_81C71E4, a1); - - SetWordTaskArg(taskId, 1, (u32)a0); - - gTasks[taskId].data[3] = gUnknown_0203CF3C; - return ((gUnknown_0203CF3C++) << 16) | taskId; -} - -bool32 sub_81C70D8(u32 a0) -{ - u32 v1 = a0 & 0xFFFF; - u32 v2 = a0 >> 16; - if (gTasks[v1].isActive - && (gTasks[v1].func == sub_81C7170 || gTasks[v1].func == sub_81C71E4) - && gTasks[v1].data[3] == v2) - { - - return TRUE; - } - else - return FALSE; -} - -bool32 sub_81C7124(u32 a0) -{ - s32 i; - for (i = 0; i < 16; i++) - { - if (gTasks[i].isActive - && (gTasks[i].func == sub_81C7170 || gTasks[i].func == sub_81C71E4)) - { - u32 arg = GetWordTaskArg((u8)i, 1); - if (arg == a0) - return TRUE; - } - } - return FALSE; -} - -void sub_81C7170(u8 taskId) -{ - s16 *dataPtr; - u32 (*func)(u32); - bool32 exitLoop; - - func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); - dataPtr = gTasks[taskId].data; - exitLoop = FALSE; - while (!exitLoop) - { - u32 v1 =((u32 (*)(u32))func)(dataPtr[0]); - switch (v1) - { - case 1: - dataPtr[0] = dataPtr[0] + 1; - break; - case 0: - dataPtr[0]++; - return; - case 4: - DestroyTask(taskId); - return; - default: - dataPtr[0] = v1 - 5; - break; - case 3: - break; - case 2: - return; - } - } -} - -void sub_81C71E4(u8 taskId) -{ - u32 (*func)(u32); - s16 *data; - u32 v1; - - if (sub_8087598()) - return; - func = (u32 (*)(u32))GetWordTaskArg(taskId, 1); - data = gTasks[taskId].data; - v1 = func(data[0]); - switch (v1) - { - case 0: - case 1: - data[0]++; - break; - case 4: - DestroyTask(taskId); - break; - default: - data[0] = v1 - 5; - break; - case 2: - case 3: - } -} - -void CB2_PokeNav(void) -{ - gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); - if (gUnknown_0203CF40 == NULL) - SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - else - { - sub_81C7360(gUnknown_0203CF40); - ResetTasks(); - SetVBlankCallback(NULL); - CreateTask(sub_81C742C, 0); - SetMainCallback2(sub_81C7400); - SetVBlankCallback(sub_81C7418); - } -} - -void sub_81C72A4() -{ - SetMainCallback2(sub_81C72BC); - FadeScreen(1, 0); -} - -void sub_81C72BC() -{ - UpdatePaletteFade(); - if (!gPaletteFade.active) - { - gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); - if (gUnknown_0203CF40 == NULL) - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - else - { - sub_81C7360(gUnknown_0203CF40); - gUnknown_0203CF40->field8 = 1; - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(NULL); - CreateTask(sub_81C742C, 0); - SetMainCallback2(sub_81C7400); - SetVBlankCallback(sub_81C7418); - } - } -} - -void sub_81C7334() -{ - s32 i; - for (i = 0; i < 19; i++) - { - sub_81C7650(i); - } - - Free(gUnknown_0203CF40); - gUnknown_0203CF40 = NULL; - InitKeys(); -} - -// Clears UnknownStruct_0203CF40 -void sub_81C7360(struct UnknownStruct_0203CF40 *a0) -{ - s32 i; - void **arrayPtr; - void *fill; - - fill = NULL; - i = 18; - arrayPtr = &(a0->field10[18]); - for (i; i >= 0; i--) - { - *arrayPtr = fill; - arrayPtr -= 1; - } - a0->field8 = 0; - a0->field4 = 0; - a0->fieldC = AnyMonHasRibbon(); - a0->field0 = NULL; -} - -bool32 AnyMonHasRibbon() -{ - s32 i; - s32 j; - - for (i = 0; i < 6; i++) - { - if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) - && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) - && GetMonData(&gPlayerParty[i], MON_DATA_RIBBON_COUNT) != 0) - { - return TRUE; - } - } - - for (j = 0; j < 14; j++) - { - for (i = 0; i < 30; i++) - { - if (CheckBoxMonSanityAt(j, i) - && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) - { - return TRUE; - } - } - } - - return FALSE; -} - -void sub_81C7400() -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); -} - -void sub_81C7418() -{ - TransferPlttBuffer(); - LoadOam(); - ProcessSpriteCopyRequests(); -} - -void sub_81C742C(u8 taskId) -{ - s16 *dataPtr; - u32 v1; - bool32 v2; - - dataPtr = gTasks[taskId].data; - - switch (dataPtr[0]) - { - case 0: - sub_81C76C4(); - dataPtr[0] = 1; - break; - case 1: - if (sub_81C76FC()) - break; - sub_81C756C(UNKNOWN_OFFSET); - dataPtr[0] = 4; - break; - case 2: - if (sub_81C786C()) - break; - dataPtr[0] = 3; - case 3: - v1 = sub_81C75E0(); - if (v1 == -1) - { - sub_81C7710(); - dataPtr[0] = 5; - } - else if (v1 >= UNKNOWN_OFFSET) - { - gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); - gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); - if (sub_81C756C(v1)) - dataPtr[0] = 4; - else - { - sub_81C7710(); - dataPtr[0] = 5; - } - } - else if (v1 != 0) - { - sub_81C7850(v1); - if (sub_81C786C()) - dataPtr[0] = 2; - } - break; - case 4: - if (!sub_81C75D4()) - dataPtr[0] = 3; - break; - case 5: - if (!sub_81C7738()) - { - v2 = gUnknown_0203CF40->field8 != 0; - sub_81C9430(); - sub_81C7334(); - if (v2) - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - else - SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); - } - } -} - -bool32 sub_81C756C(u32 a0) -{ - u32 index; - - index = a0 - UNKNOWN_OFFSET; - sub_81C75F4(); - if (!gUnknown_0861F3EC[index][0]()) - return FALSE; - if (!gUnknown_0861F3EC[index][2]()) - return FALSE; - sub_81C7834(gUnknown_0861F3EC[index][3], gUnknown_0861F3EC[index][4]); - gUnknown_0203CF40->field0 = gUnknown_0861F3EC[index][1]; - gUnknown_0203CF40->field4 = index; - return TRUE; -} - -u32 sub_81C75D4(void) -{ - return sub_81C786C(); -} - -u32 sub_81C75E0(void) -{ - return gUnknown_0203CF40->field0(); -} - -void sub_81C75F4(void) -{ - InitKeys(); -} - -void IndirectSetVBlankCallback(IntrCallback callback) -{ - SetVBlankCallback(callback); -} - -void sub_81C760C(void) -{ - SetVBlankCallback(sub_81C7418); -} - -void *sub_81C761C(u32 index, u32 size) -{ - return gUnknown_0203CF40->field10[index] = (void*)Alloc(size); -} - -void *sub_81C763C(u32 index) -{ - return gUnknown_0203CF40->field10[index]; -} - -void sub_81C7650(u32 index) -{ - if (gUnknown_0203CF40->field10[index] != NULL) - { - Free(gUnknown_0203CF40->field10[index]); - gUnknown_0203CF40->field10[index] = NULL; - } -} - -u16 sub_81C767C(void) -{ - return gUnknown_0203CF40->field8; -} - -void sub_81C7688(u16 a0) -{ - gUnknown_0203CF40->field8 = a0; -} - -void sub_81C7694(u32 a0) -{ - u32 value; - value = a0; - if (a0 > 4) - value = 0; - gUnknown_0203CF40->fieldA = value; -} - -u16 sub_81C76AC(void) -{ - return gUnknown_0203CF40->fieldA; -} - -u32 sub_81C76B8(void) -{ - return gUnknown_0203CF40->fieldC; -} - -bool32 sub_81C76C4(void) -{ - struct UnknownStruct_sub_81C76C4 *v1; - - v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); - if (v1 == NULL) - return FALSE; - else - { - ResetSpriteData(); - FreeAllSpritePalettes(); - v1->data[3] = sub_81C7078(sub_81C7764, 1); - return TRUE; - } -} - -u32 sub_81C76FC(void) -{ - u32 *v1; - v1 = sub_81C763C(0); - return sub_81C70D8(v1[3]); -} - -void sub_81C7710(void) -{ - PlaySE(SE_PN_OFF); - sub_81CAADC(); - BeginNormalPaletteFade(-1, -1, 0, 16, 0); -} - -bool32 sub_81C7738(void) -{ - if (!gPaletteFade.active) - { - sub_81C99D4(); - sub_81C7C94(); - FreeAllWindowBuffers(); - return FALSE; - } else - return TRUE; -} - -u32 sub_81C7764(s32 a0) -{ - u32 *v1; - - switch (a0) - { - case 0: - SetGpuReg(0, 0x82 << 5); - FreeAllWindowBuffers(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_0861FA04, 1); - sub_8199D98(); - reset_temp_tile_data_buffers(); - return 1; - case 1: - v1 = sub_81C763C(0); - decompress_and_copy_tile_data_to_vram(0, &gPokenavHeader_Gfx, 0, 0, 0); - SetBgTilemapBuffer(0, &v1[11]); - CopyToBgTilemapBuffer(0, &gPokenavHeader_Tilemap, 0, 0); - CopyPaletteIntoBufferUnfaded(gPokenavHeader_Pal, 0, 0x20); - CopyBgTilemapBufferToVram(0); - return 0; - case 2: - if (free_temp_tile_data_buffers_if_possible()) - return 2; - - sub_81C7B74(); - return 0; - case 3: - if (IsDma3ManagerBusyWithBgCopy()) - return 2; - - sub_81C7C28(); - sub_81C7D28(); - ShowBg(0); - return 4; - default: - return 4; - } -} - -void sub_81C7834(u32 (*a0)(void), u32(*a1)(void)) -{ - u32 (**v1)(void); - - v1 = sub_81C763C(0); - v1[0] = a0; - v1[1] = a1; - v1[2] = NULL; -} - -void sub_81C7850(u32 a0) -{ - void (**v1)(u32); - - v1 = sub_81C763C(0); - v1[2] = NULL; - v1[0](a0); -} - -u32 sub_81C786C(void) -{ - u32 (**v1)(void); - - v1 = sub_81C763C(0); - return v1[1](); -} - -void sub_81C7880(void) -{ - u32 *v1; - - v1 = sub_81C763C(0); - v1[3] = sub_81C7078(atk47_cmd47, 4); -} - -void sub_81C78A0(void) -{ - u32 *v1; - - v1 = sub_81C763C(0); - v1[3] = sub_81C7078(sub_81C791C, 4); -} - -bool32 sub_81C78C0(void) -{ - u32 *v1; - - v1 = sub_81C763C(0); - return sub_81C70D8(v1[3]); -} - -u32 atk47_cmd47(s32 a0) -{ - switch (a0) - { - default: - return 4; - case 1: - return 0; - case 0: - return 0; - case 2: - if ((u32)ChangeBgY(0, 384, 1) >= 0x2000) - { - ChangeBgY(0, 0x2000, 0); - return 4; - } - - return 2; - } -} - -u32 sub_81C791C(s32 a0) -{ - if (ChangeBgY(0, 384, 2) <= 0) - { - ChangeBgY(0, 0, 0); - return 4; - } - return 2; -} - -void CopyPaletteIntoBufferUnfaded(const u16 *palette, u32 bufferOffset, u32 size) { - CpuCopy16(palette, gPlttBufferUnfaded + bufferOffset, size); -} - -void sub_81C795C(const struct SpritePalette *palettes) -{ - const struct SpritePalette *current; - u32 index; - - for (current = palettes; current->data != NULL; current++) - { - index = AllocSpritePalette(current->tag); - if (index == 0xFF) - break; - else - { - index = (index * 16) + 0x100; - CopyPaletteIntoBufferUnfaded(current->data, index, 0x20); - } - } -} - -void sub_81C7990(u32 a0, u16 a1) -{ - CpuFill16(a1, gPlttBufferFaded + 0x100 + (a0 * 16), 16 * sizeof(u16)); -} - -__attribute__((naked)) -void sub_81C79BC(u16 *a0, u16 *a1, u32 a2, u32 a3, u32 unused, u32 a5, u32 a6) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - str r0, [sp]\n\ - str r1, [sp, 0x4]\n\ - mov r10, r2\n\ - str r3, [sp, 0x8]\n\ - ldr r0, [sp, 0x2C]\n\ - cmp r0, 0\n\ - bne _081C79E4\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp]\n\ - b _081C79F4\n\ - .pool\n\ -_081C79E4:\n\ - ldr r2, [sp, 0x2C]\n\ - ldr r0, [sp, 0x8]\n\ - cmp r2, r0\n\ - blt _081C7A00\n\ - ldr r2, =0x001fffff\n\ - mov r1, r10\n\ - ands r2, r1\n\ - ldr r0, [sp, 0x4]\n\ -_081C79F4:\n\ - ldr r1, [sp, 0x30]\n\ - bl CpuSet\n\ - b _081C7AAE\n\ - .pool\n\ -_081C7A00:\n\ - movs r2, 0x1\n\ - negs r2, r2\n\ - add r10, r2\n\ - b _081C7AA6\n\ -_081C7A08:\n\ - ldr r1, [sp]\n\ - ldrh r0, [r1]\n\ - movs r2, 0x1F\n\ - mov r9, r2\n\ - mov r1, r9\n\ - ands r1, r0\n\ - mov r9, r1\n\ - lsls r0, 16\n\ - lsrs r2, r0, 21\n\ - movs r1, 0x1F\n\ - ands r1, r2\n\ - mov r8, r1\n\ - lsrs r7, r0, 26\n\ - movs r2, 0x1F\n\ - ands r7, r2\n\ - ldr r0, [sp, 0x4]\n\ - ldrh r4, [r0]\n\ - movs r0, 0x1F\n\ - ands r0, r4\n\ - mov r1, r9\n\ - subs r0, r1\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r2, [sp, 0x2C]\n\ - adds r6, r0, 0\n\ - muls r6, r2\n\ - asrs r6, 8\n\ - lsls r4, 16\n\ - lsrs r0, r4, 21\n\ - movs r1, 0x1F\n\ - ands r0, r1\n\ - mov r2, r8\n\ - subs r0, r2\n\ - lsls r0, 8\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - adds r5, r0, 0\n\ - muls r5, r1\n\ - asrs r5, 8\n\ - lsrs r4, 26\n\ - movs r2, 0x1F\n\ - ands r4, r2\n\ - subs r4, r7\n\ - lsls r4, 8\n\ - adds r0, r4, 0\n\ - ldr r1, [sp, 0x8]\n\ - bl __divsi3\n\ - ldr r1, [sp, 0x2C]\n\ - muls r0, r1\n\ - asrs r0, 8\n\ - add r6, r9\n\ - movs r2, 0x1F\n\ - ands r6, r2\n\ - add r5, r8\n\ - ands r5, r2\n\ - adds r0, r7, r0\n\ - ands r0, r2\n\ - lsls r0, 10\n\ - lsls r5, 5\n\ - orrs r0, r5\n\ - orrs r0, r6\n\ - ldr r1, [sp, 0x30]\n\ - strh r0, [r1]\n\ - ldr r2, [sp]\n\ - adds r2, 0x2\n\ - str r2, [sp]\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x2\n\ - str r0, [sp, 0x4]\n\ - adds r1, 0x2\n\ - str r1, [sp, 0x30]\n\ - movs r1, 0x1\n\ - negs r1, r1\n\ - add r10, r1\n\ -_081C7AA6:\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - cmp r10, r0\n\ - bne _081C7A08\n\ -_081C7AAE:\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} - -void sub_81C7AC0(s32 a0) -{ - u32 *v1; - v1 = sub_81C763C(0); - switch (a0) - { - case 0: - BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); - break; - case 1: - BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); - break; - case 2: - BeginNormalPaletteFade(-1, -2, 0, 16, 0); - break; - case 3: - BeginNormalPaletteFade(-1, -2, 16, 0, 0); - break; - } -} - -bool32 IsPaletteFadeActive(void) -{ - return gPaletteFade.active; -} - -void sub_81C7B40(void) -{ - BlendPalettes(0xFFFEFFFE, 16, 0); -} - -void sub_81C7B54(const struct BgTemplate *a0, s32 a1) -{ - s32 i; - if (a1 <= 0) - return; - for (i = a1; i != 0; i--) - { - InitBgFromTemplate(a0++); - } -} - -void sub_81C7B74(void) -{ - u32 *v1; - - v1 = sub_81C763C(0); - InitWindows(&gUnknown_0861FA08[0]); - v1[4] = 0; - sub_81C7BF8(0); - PutWindowTilemap(v1[4]); - CopyWindowToVram(v1[4], 3); // TODO: Use a defined constant here. -} - -void sub_81C7BA4(u32 a0) -{ - u32 *v1; - - v1 = sub_81C763C(0); - sub_81C7BF8(v1[4]); - AddTextPrinterParameterized3(v1[4], 1, 0, 1, gMenuButtonReminderColor, 0, MenuButtonReminders[a0]); -} - -bool8 sub_81C7BE8(void) -{ - return IsDma3ManagerBusyWithBgCopy(); -} - -void sub_81C7BF8(u32 a0) -{ - FillWindowPixelBuffer(a0, 0x44); - FillWindowPixelRect(a0, 0x55, 0, 0, 0x80, 1); -} - -void sub_81C7C28(void) -{ - u32 *v1; - u32 i; - u8 v2; - u32 v3; - u32 v4; - u8 spriteId; - - v1 = sub_81C763C(0); - for (i = 0; i == 0; i++) - { - LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); - } - - sub_81C795C(gUnknown_0861FA54); - v2 = IndexOfSpritePaletteTag(0); - v3 = 0x80 << 9 << v2; - v1[5] = -2 & ~v3; - spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); - v1[6] = (u32)(&gSprites[spriteId]); -} - -void sub_81C7C94(void) -{ - void **v1; - v1 = sub_81C763C(0); - DestroySprite(v1[6]); - FreeSpriteTilesByTag(0); - FreeSpritePaletteByTag(0); -} - -void sub_81C7CB4(u16 *a0) -{ - u32 v1; - v1 = GetBgY(0); - a0[19] = (v1 >> 8) * -1; -} - -struct Sprite *sub_81C7CCC(void) -{ - struct Sprite **v1; - struct Sprite *v2; - v1 = sub_81C763C(0); - v2 = v1[6]; - v2->callback = SpriteCallbackDummy; - return v2; -} \ No newline at end of file -- cgit v1.2.3 From 7ad225a72f0d60a4c390b41fba005512d23730aa Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 18 Feb 2019 00:16:27 -0500 Subject: Address formatting issues and use constants --- src/pokenav.c | 57 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/src/pokenav.c b/src/pokenav.c index 3a761442e..595b66bab 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -16,6 +16,7 @@ #include "gba/macro.h" #include "decompress.h" #include "strings.h" +#include "constants/rgb.h" #define UNKNOWN_OFFSET 100000 @@ -131,7 +132,7 @@ void sub_81C7C94(void); u32 (*const gUnknown_0861F3EC[15][7])(void) = { { - (u32 (*)(void))sub_81C9298, + sub_81C9298, sub_81C941C, sub_81C9924, sub_81C9990, @@ -287,9 +288,9 @@ const struct WindowTemplate gUnknown_0861FA08[2] = { .bg = 0, .tilemapLeft = 1, - .tilemapTop = 0x16, - .width = 0x10, - .height = 0x2, + .tilemapTop = 22, + .width = 16, + .height = 2, .paletteNum = 0, .baseBlock = 0x36, }, @@ -384,7 +385,9 @@ bool32 sub_81C70D8(u32 a0) return TRUE; } else + { return FALSE; + } } bool32 sub_81C7124(u32 a0) @@ -462,6 +465,7 @@ void sub_81C71E4(u8 taskId) break; case 2: case 3: + break; } } @@ -469,7 +473,9 @@ void CB2_PokeNav(void) { gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); if (gUnknown_0203CF40 == NULL) + { SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); + } else { sub_81C7360(gUnknown_0203CF40); @@ -494,7 +500,9 @@ void sub_81C72BC() { gUnknown_0203CF40 = Alloc(sizeof(struct UnknownStruct_0203CF40)); if (gUnknown_0203CF40 == NULL) + { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } else { sub_81C7360(gUnknown_0203CF40); @@ -549,7 +557,7 @@ bool32 AnyMonHasRibbon() s32 i; s32 j; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_EGG) @@ -559,9 +567,9 @@ bool32 AnyMonHasRibbon() } } - for (j = 0; j < 14; j++) + for (j = 0; j < TOTAL_BOXES_COUNT; j++) { - for (i = 0; i < 30; i++) + for (i = 0; i < IN_BOX_COUNT; i++) { if (CheckBoxMonSanityAt(j, i) && GetBoxMonDataAt(j, i, MON_DATA_RIBBON_COUNT) != 0) @@ -625,7 +633,9 @@ void sub_81C742C(u8 taskId) gUnknown_0861F3EC[gUnknown_0203CF40->field4][6](); gUnknown_0861F3EC[gUnknown_0203CF40->field4][5](); if (sub_81C756C(v1)) + { dataPtr[0] = 4; + } else { sub_81C7710(); @@ -654,6 +664,7 @@ void sub_81C742C(u8 taskId) else SetMainCallback2(CB2_ReturnToFieldWithOpenMenu); } + break; } } @@ -711,10 +722,7 @@ void *sub_81C763C(u32 index) void sub_81C7650(u32 index) { if (gUnknown_0203CF40->field10[index] != NULL) - { - Free(gUnknown_0203CF40->field10[index]); - gUnknown_0203CF40->field10[index] = NULL; - } + FREE_AND_SET_NULL(gUnknown_0203CF40->field10[index]); } u16 sub_81C767C(void) @@ -752,7 +760,9 @@ bool32 sub_81C76C4(void) v1 = (struct UnknownStruct_sub_81C76C4*)sub_81C761C(0, sizeof(struct UnknownStruct_sub_81C76C4)); if (v1 == NULL) + { return FALSE; + } else { ResetSpriteData(); @@ -773,7 +783,7 @@ void sub_81C7710(void) { PlaySE(SE_PN_OFF); sub_81CAADC(); - BeginNormalPaletteFade(-1, -1, 0, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); } bool32 sub_81C7738(void) @@ -785,7 +795,9 @@ bool32 sub_81C7738(void) FreeAllWindowBuffers(); return FALSE; } else + { return TRUE; + } } u32 sub_81C7764(s32 a0) @@ -795,7 +807,7 @@ u32 sub_81C7764(s32 a0) switch (a0) { case 0: - SetGpuReg(0, 0x82 << 5); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); FreeAllWindowBuffers(); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, &gUnknown_0861FA04, 1); @@ -923,8 +935,10 @@ void sub_81C795C(const struct SpritePalette *palettes) for (current = palettes; current->data != NULL; current++) { index = AllocSpritePalette(current->tag); - if (index == 0xFF) + if (index == 0xFF) + { break; + } else { index = (index * 16) + 0x100; @@ -1084,13 +1098,13 @@ void sub_81C7AC0(s32 a0) BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); break; case 1: - BeginNormalPaletteFade(v1[5], -2, 16, 0, 0); + BeginNormalPaletteFade(v1[5], -2, 16, 0, RGB_BLACK); break; case 2: - BeginNormalPaletteFade(-1, -2, 0, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); break; case 3: - BeginNormalPaletteFade(-1, -2, 16, 0, 0); + BeginNormalPaletteFade(0xFFFFFFFF, -2, 16, 0, RGB_BLACK); break; } } @@ -1102,7 +1116,7 @@ bool32 IsPaletteFadeActive(void) void sub_81C7B40(void) { - BlendPalettes(0xFFFEFFFE, 16, 0); + BlendPalettes(0xFFFEFFFE, 16, RGB_BLACK); } void sub_81C7B54(const struct BgTemplate *a0, s32 a1) @@ -1165,9 +1179,8 @@ void sub_81C7C28(void) sub_81C795C(gUnknown_0861FA54); v2 = IndexOfSpritePaletteTag(0); - v3 = 0x80 << 9 << v2; - v1[5] = -2 & ~v3; - spriteId = CreateSprite(&gUnknown_0861FB04, 0xDC, 0xC, 0); + v1[5] = ~1 & ~(0x10000 << v2); + spriteId = CreateSprite(&gUnknown_0861FB04, 220, 12, 0); v1[6] = (u32)(&gSprites[spriteId]); } @@ -1195,4 +1208,4 @@ struct Sprite *sub_81C7CCC(void) v2 = v1[6]; v2->callback = SpriteCallbackDummy; return v2; -} \ No newline at end of file +} -- cgit v1.2.3 From 40d4f7f8db4126086e975e90d7de967129d34dd0 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 18 Feb 2019 01:10:59 -0500 Subject: Minor fixes --- src/pokenav.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pokenav.c b/src/pokenav.c index 595b66bab..ff687e8dc 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -326,7 +326,7 @@ const u8 gMenuButtonReminderColor[4] = 4, 1, 2, 0 }; -const struct CompressedSpriteSheet gUnknown_0861FA4C[1] = +const struct CompressedSpriteSheet gUnknown_0861FA4C[] = { { .data = gUnknown_0861F5B0, @@ -1095,7 +1095,7 @@ void sub_81C7AC0(s32 a0) switch (a0) { case 0: - BeginNormalPaletteFade(v1[5], -2, 0, 16, a0); + BeginNormalPaletteFade(v1[5], -2, 0, 16, RGB_BLACK); break; case 1: BeginNormalPaletteFade(v1[5], -2, 16, 0, RGB_BLACK); @@ -1172,7 +1172,7 @@ void sub_81C7C28(void) u8 spriteId; v1 = sub_81C763C(0); - for (i = 0; i == 0; i++) + for (i = 0; i < ARRAY_COUNT(gUnknown_0861FA4C); i++) { LoadCompressedSpriteSheet(&gUnknown_0861FA4C[i]); } -- cgit v1.2.3