From 0d8af0446cc798ce8e54ec2132673d6958cd5b80 Mon Sep 17 00:00:00 2001 From: Kermalis <29823718+Kermalis@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:51:57 -0500 Subject: [PATCH] other_menus2.s --- asm/other_menus2.s | 242 ------------------------------------ include/other_menus2.h | 3 +- ld_script.txt | 1 - src/data/other_menus2.h | 11 +- src/friend_rescue.c | 1 - src/other_menus1.c | 14 +-- src/other_menus2.c | 224 ++++++++++++++++++++++++++++----- src/thank_you_wonder_mail.c | 1 - src/trade_items_menu.c | 2 - src/unk_menu_203B360.c | 1 + src/wonder_mail.c | 1 - src/wonder_mail_main_menu.c | 1 - 12 files changed, 205 insertions(+), 297 deletions(-) delete mode 100644 asm/other_menus2.s diff --git a/asm/other_menus2.s b/asm/other_menus2.s deleted file mode 100644 index f55d8d251..000000000 --- a/asm/other_menus2.s +++ /dev/null @@ -1,242 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8037A48 -sub_8037A48: - push {r4-r6,lr} - sub sp, 0x28 - movs r6, 0x1 - movs r0, 0 - mov r1, sp - movs r2, 0x14 - bl sub_800D670 - add r4, sp, 0x14 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x14 - bl sub_800D670 - ldr r1, _08037AAC - movs r3, 0x8 - adds r2, r1, 0 - adds r0, r2, 0x4 -_08037A6C: - str r3, [r0] - subs r0, 0x4 - cmp r0, r1 - bge _08037A6C - ldr r0, [sp, 0x10] - str r0, [r2] - ldr r0, [r4, 0x10] - str r0, [r2, 0x4] - ldr r5, _08037AB0 - mov r0, sp - adds r1, r5, 0 - bl strcmp - cmp r0, 0 - beq _08037A8C - movs r0, 0x1 -_08037A8C: - lsls r0, 24 - cmp r0, 0 - bne _08037AA6 - adds r0, r4, 0 - adds r1, r5, 0 - bl strcmp - cmp r0, 0 - beq _08037AA0 - movs r0, 0x1 -_08037AA0: - lsls r0, 24 - cmp r0, 0 - beq _08037AB4 -_08037AA6: - movs r0, 0 - b _08037B1E - .align 2, 0 -_08037AAC: .4byte gUnknown_202EC40 -_08037AB0: .4byte gUnknown_80E6E50 -_08037AB4: - ldr r1, [sp, 0x10] - cmp r1, 0 - bne _08037AC0 - ldr r0, [r4, 0x10] - cmp r0, 0x1 - beq _08037B1C -_08037AC0: - cmp r1, 0x1 - bne _08037ACA - ldr r0, [r4, 0x10] - cmp r0, 0 - beq _08037B1C -_08037ACA: - cmp r1, 0x2 - bne _08037AD4 - ldr r0, [r4, 0x10] - cmp r0, 0x3 - beq _08037B1C -_08037AD4: - cmp r1, 0x3 - bne _08037ADE - ldr r0, [r4, 0x10] - cmp r0, 0x2 - beq _08037B1C -_08037ADE: - cmp r1, 0x9 - bne _08037AE8 - ldr r0, [r4, 0x10] - cmp r0, 0xA - beq _08037B1C -_08037AE8: - cmp r1, 0xA - bne _08037AF2 - ldr r0, [r4, 0x10] - cmp r0, 0x9 - beq _08037B1C -_08037AF2: - cmp r1, 0x4 - bne _08037AFC - ldr r0, [r4, 0x10] - cmp r0, 0x5 - beq _08037B1C -_08037AFC: - cmp r1, 0x5 - bne _08037B06 - ldr r0, [r4, 0x10] - cmp r0, 0x4 - beq _08037B1C -_08037B06: - cmp r1, 0x6 - bne _08037B10 - ldr r0, [r4, 0x10] - cmp r0, 0x7 - beq _08037B1C -_08037B10: - cmp r1, 0x7 - bne _08037B1A - ldr r0, [r4, 0x10] - cmp r0, 0x6 - beq _08037B1C -_08037B1A: - movs r6, 0 -_08037B1C: - adds r0, r6, 0 -_08037B1E: - add sp, 0x28 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8037A48 - - thumb_func_start sub_8037B28 -sub_8037B28: - push {r4,r5,lr} - sub sp, 0x14 - adds r4, r0, 0 - movs r5, 0 - bl sub_800D414 - ldr r0, _08037B58 - str r5, [r0] - ldr r5, _08037B5C - mov r0, sp - movs r1, 0 - movs r2, 0x14 - bl MemoryFill8 - mov r0, sp - adds r1, r5, 0 - bl strcpy - str r4, [sp, 0x10] - mov r0, sp - movs r1, 0x14 - bl sub_800D59C - b _08037B7A - .align 2, 0 -_08037B58: .4byte gUnknown_202EC38 -_08037B5C: .4byte gUnknown_80E6E50 -_08037B60: - cmp r5, 0x3 - beq _08037BCC - cmp r5, 0x4 - beq _08037BD8 - cmp r5, 0x5 - beq _08037BF0 - ldr r2, _08037BC0 - ldr r1, [r2] - ldr r0, _08037BC4 - cmp r1, r0 - bgt _08037BE4 - adds r0, r1, 0x1 - str r0, [r2] -_08037B7A: - movs r4, 0 -_08037B7C: - bl sub_80373C4 - bl sub_8012AE8 - cmp r0, 0x3 - bgt _08037B8C - cmp r0, 0x2 - bge _08037BF0 -_08037B8C: - adds r4, 0x1 - cmp r4, 0 - ble _08037B7C - bl sub_800D33C - adds r5, r0, 0 - bl sub_800D570 - cmp r5, 0x2 - bne _08037B60 - bl sub_800D600 - lsls r0, 24 - cmp r0, 0 - beq _08037BFC - bl sub_8037A48 - lsls r0, 24 - cmp r0, 0 - bne _08037BC8 - movs r4, 0x4 - bl sub_800D520 - bl sub_800D510 - b _08037C06 - .align 2, 0 -_08037BC0: .4byte gUnknown_202EC38 -_08037BC4: .4byte 0x00000707 -_08037BC8: - movs r4, 0 - b _08037C06 -_08037BCC: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x2 - b _08037C08 -_08037BD8: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x3 - b _08037C08 -_08037BE4: - bl sub_800D520 - bl sub_800D510 - movs r0, 0xF - b _08037C08 -_08037BF0: - bl sub_800D520 - bl sub_800D510 - movs r0, 0x1 - b _08037C08 -_08037BFC: - movs r4, 0x5 - bl sub_800D520 - bl sub_800D510 -_08037C06: - adds r0, r4, 0 -_08037C08: - add sp, 0x14 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8037B28 - - .align 2,0 diff --git a/include/other_menus2.h b/include/other_menus2.h index fa5eaf91e..30c033114 100644 --- a/include/other_menus2.h +++ b/include/other_menus2.h @@ -1,7 +1,8 @@ #ifndef GUARD_OTHER_MENUS2_H #define GUARD_OTHER_MENUS2_H -u32 sub_8037C10(bool8); +s32 sub_8037B28(s32); +s32 sub_8037C10(bool8); s32 sub_8037D64(u32 mode, void *, void *); s32 sub_80381F4(u32 mode, void *, void *); diff --git a/ld_script.txt b/ld_script.txt index b34e93867..153414996 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -180,7 +180,6 @@ SECTIONS { src/main_menu2.o(.text); src/trade_items_menu.o(.text); src/other_menus1.o(.text); - asm/other_menus2.o(.text); src/other_menus2.o(.text); src/adventure_log_menu.o(.text); src/unk_menu_203B360.o(.text); diff --git a/src/data/other_menus2.h b/src/data/other_menus2.h index a57e02e7c..73ec2f35e 100644 --- a/src/data/other_menus2.h +++ b/src/data/other_menus2.h @@ -1,7 +1,6 @@ -ALIGNED(4) const u8 gUnknown_80E6E50[] = _("CHUNSOFT"); // TODO: MAKE STATIC WHEN other_menus2.s IS DED +ALIGNED(4) static const u8 sChunsoft[] = _("CHUNSOFT"); -// TODO: These belongs to files after -ALIGNED(4) static const u8 fill1[] = _("pksdir0"); -ALIGNED(4) static const u8 fill2[] = _("pksdir0"); -ALIGNED(4) static const u8 fill3[] = _("pksdir0"); -ALIGNED(4) static const u8 fill4[] = _("pksdir0"); \ No newline at end of file +// TODO: These belong to files after. Two of the .c files were stripped away? They were before unk_menu_203B360.c +ALIGNED(4) static const u8 fill1[] = _("pksdir0"); // adventure_log_menu.c +ALIGNED(4) static const u8 fill2[] = _("pksdir0"); // ?.c +ALIGNED(4) static const u8 fill3[] = _("pksdir0"); // ?.c \ No newline at end of file diff --git a/src/friend_rescue.c b/src/friend_rescue.c index 79dd3f639..6716654fa 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -306,7 +306,6 @@ extern void sub_8031E10(void); extern u8 sub_800D588(void); extern u32 sub_8023CE8(void); extern bool8 sub_8031D70(u32 mailIndex, s32); -extern s32 sub_8037B28(u32); extern u32 GetDungeonTeamRankPts(DungeonLocation *, u32); extern void sprintfStatic(char *buffer, const char *text, ...); diff --git a/src/other_menus1.c b/src/other_menus1.c index f50f6c5f2..e5fa64de4 100644 --- a/src/other_menus1.c +++ b/src/other_menus1.c @@ -18,17 +18,12 @@ #include "sprite.h" #include "text1.h" -// TODO: MAKE STATIC WHEN other_menus1.s IS DED -/*static*/ EWRAM_DATA_2 unkStruct_203B35C *sUnknown_203B35C = {0}; +static EWRAM_DATA_2 unkStruct_203B35C *sUnknown_203B35C = {0}; #include "data/other_menus1.h" -// other_menus1.s -extern void sub_8037900(void); // text.s -extern void xxx_call_update_bg_vram(); -// other_menus2.s -extern s32 sub_8037B28(u32); +extern void xxx_call_update_bg_vram(); // egg's PR should remove this static void sub_80371B8(void); static void sub_8037400(void); @@ -36,6 +31,7 @@ static void sub_80376CC(void); static void sub_8037748(void); static u32 sub_8037798(void); static void sub_8037810(void); +static void sub_8037900(void); void sub_8036FDC(s32 param_1) { @@ -104,7 +100,7 @@ UNUSED static u32 sub_80370F0(void) sub_80371B8(); break; case 2: - if (sUnknown_203B35C->unk0 < 2 && sUnknown_203B35C->linkStatus == COMMS_GOOD && !sub_8037C10(FALSE)) + if (sUnknown_203B35C->unk0 < 2 && sUnknown_203B35C->linkStatus == COMMS_GOOD && sub_8037C10(FALSE) == 0) return 41; // TODO: what screen is this? if (!sub_80130A8(&sUnknown_203B35C->unk1C[0])) @@ -133,7 +129,7 @@ static void sub_80371B8(void) sub_8037400(); if (sUnknown_203B35C->unk0 < 2 && sUnknown_203B35C->linkStatus == COMMS_GOOD) { - if (sub_8037C10(FALSE)) { + if (sub_8037C10(FALSE) != 0) { sub_80376CC(); sub_8035CC0(sUnknown_203B35C->unk15C, 0); // Success! diff --git a/src/other_menus2.c b/src/other_menus2.c index 1265bb67f..fcbaffe3e 100644 --- a/src/other_menus2.c +++ b/src/other_menus2.c @@ -11,10 +11,16 @@ #include "save.h" #include "structs/str_dungeon.h" +typedef struct unkStruct_800D670 +{ + u8 buffer[16]; + u32 unk10; +} unkStruct_800D670; + // rescue_password_menu.c extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected -extern u32 gUnknown_202EC40[2]; +extern s32 gUnknown_202EC40[2]; extern s32 gUnknown_202EC48; extern struct UnkStruct_203B184 *gUnknown_203B184; @@ -30,44 +36,199 @@ extern void sub_800D570(void); extern u8 sub_800D588(void); extern void sub_800D59C(s32 *, u32); extern u8 sub_800D600(void); -extern void sub_800D670(u32, s32 *, u32); +extern void sub_800D670(s32 idx, void *dst, s32 size); extern void sub_800D68C(u32); -u32 sub_8037C10(bool8 a0) +// Inline needed for 8-bit return cast +static inline bool8 IsNotChunsoft(unkStruct_800D670 *unk) { - u32 ret; + return strcmp(unk->buffer, sChunsoft) != 0; +} - if (a0) - { +bool8 sub_8037A48(void) +{ + bool8 found; + unkStruct_800D670 stack; + unkStruct_800D670 stack_1; + s32 i; + + found = TRUE; + sub_800D670(0, &stack, sizeof(unkStruct_800D670)); + sub_800D670(1, &stack_1, sizeof(unkStruct_800D670)); + + for (i = 0; i < 2; i++) + gUnknown_202EC40[i] = 8; + + gUnknown_202EC40[0] = stack.unk10; + gUnknown_202EC40[1] = stack_1.unk10; + + if (IsNotChunsoft(&stack) || IsNotChunsoft(&stack_1)) + return FALSE; + + if ((stack.unk10 == 0 && stack_1.unk10 == 1) + || (stack.unk10 == 1 && stack_1.unk10 == 0)) { + //found = TRUE; + } + else if ((stack.unk10 == 2 && stack_1.unk10 == 3) + || (stack.unk10 == 3 && stack_1.unk10 == 2)) { + //found = TRUE; + } + else if ((stack.unk10 == 9 && stack_1.unk10 == 10) + || (stack.unk10 == 10 && stack_1.unk10 == 9)) { + //found = TRUE; + } + else if ((stack.unk10 == 4 && stack_1.unk10 == 5) + || (stack.unk10 == 5 && stack_1.unk10 == 4)) { + //found = TRUE; + } + else if ((stack.unk10 == 6 && stack_1.unk10 == 7) + || (stack.unk10 == 7 && stack_1.unk10 == 6)) { + //found = TRUE; + } + else { + found = FALSE; + } + + return found; +} + +// https://decomp.me/scratch/IJ9zV (inverted loop, try to match without gotos...) +NAKED s32 sub_8037B28(s32 mode) +{ + asm_unified("push {r4,r5,lr}\n" +" sub sp, 0x14\n" +" adds r4, r0, 0\n" +" movs r5, 0\n" +" bl sub_800D414\n" +" ldr r0, _08037B58\n" +" str r5, [r0]\n" +" ldr r5, _08037B5C\n" +" mov r0, sp\n" +" movs r1, 0\n" +" movs r2, 0x14\n" +" bl MemoryFill8\n" +" mov r0, sp\n" +" adds r1, r5, 0\n" +" bl strcpy\n" +" str r4, [sp, 0x10]\n" +" mov r0, sp\n" +" movs r1, 0x14\n" +" bl sub_800D59C\n" +" b _08037B7A\n" +" .align 2, 0\n" +"_08037B58: .4byte gUnknown_202EC38\n" +"_08037B5C: .4byte sChunsoft\n" +"_08037B60:\n" +" cmp r5, 0x3\n" +" beq _08037BCC\n" +" cmp r5, 0x4\n" +" beq _08037BD8\n" +" cmp r5, 0x5\n" +" beq _08037BF0\n" +" ldr r2, _08037BC0\n" +" ldr r1, [r2]\n" +" ldr r0, _08037BC4\n" +" cmp r1, r0\n" +" bgt _08037BE4\n" +" adds r0, r1, 0x1\n" +" str r0, [r2]\n" +"_08037B7A:\n" +" movs r4, 0\n" +"_08037B7C:\n" +" bl sub_80373C4\n" +" bl sub_8012AE8\n" +" cmp r0, 0x3\n" +" bgt _08037B8C\n" +" cmp r0, 0x2\n" +" bge _08037BF0\n" +"_08037B8C:\n" +" adds r4, 0x1\n" +" cmp r4, 0\n" +" ble _08037B7C\n" +" bl sub_800D33C\n" +" adds r5, r0, 0\n" +" bl sub_800D570\n" +" cmp r5, 0x2\n" +" bne _08037B60\n" +" bl sub_800D600\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" beq _08037BFC\n" +" bl sub_8037A48\n" +" lsls r0, 24\n" +" cmp r0, 0\n" +" bne _08037BC8\n" +" movs r4, 0x4\n" +" bl sub_800D520\n" +" bl sub_800D510\n" +" b _08037C06\n" +" .align 2, 0\n" +"_08037BC0: .4byte gUnknown_202EC38\n" +"_08037BC4: .4byte 0x00000707\n" +"_08037BC8:\n" +" movs r4, 0\n" +" b _08037C06\n" +"_08037BCC:\n" +" bl sub_800D520\n" +" bl sub_800D510\n" +" movs r0, 0x2\n" +" b _08037C08\n" +"_08037BD8:\n" +" bl sub_800D520\n" +" bl sub_800D510\n" +" movs r0, 0x3\n" +" b _08037C08\n" +"_08037BE4:\n" +" bl sub_800D520\n" +" bl sub_800D510\n" +" movs r0, 0xF\n" +" b _08037C08\n" +"_08037BF0:\n" +" bl sub_800D520\n" +" bl sub_800D510\n" +" movs r0, 0x1\n" +" b _08037C08\n" +"_08037BFC:\n" +" movs r4, 0x5\n" +" bl sub_800D520\n" +" bl sub_800D510\n" +"_08037C06:\n" +" adds r0, r4, 0\n" +"_08037C08:\n" +" add sp, 0x14\n" +" pop {r4,r5}\n" +" pop {r1}\n" +" bx r1"); +} + +s32 sub_8037C10(bool8 a0) +{ + s32 ret; + + if (a0) { if (sub_800D588()) - { ret = gUnknown_202EC40[0]; - } else - { ret = gUnknown_202EC40[1]; - } } - else if (sub_800D588()) - { - ret = gUnknown_202EC40[1]; - } - else - { - ret = gUnknown_202EC40[0]; + else { + if (sub_800D588()) + ret = gUnknown_202EC40[1]; + else + ret = gUnknown_202EC40[0]; } + return ret; } static void sub_8037C44(s32 mode, void *data) { - s32 index; + s32 i; - for(index = 0; index < 2; index++) - { - sub_800D68C(index); - } - switch(mode) { + for (i = 0; i < 2; i++) + sub_800D68C(i); + + switch (mode) { case 0: case 1: sub_800D59C(data, sizeof(unkStruct_8035D94)); @@ -84,15 +245,14 @@ static void sub_8037C44(s32 mode, void *data) break; case 9: case 10: - sub_800D59C(data, 0xb4); + sub_800D59C(data, 0xB4); break; } } static void sub_8037CC4(s32 mode, void *param_2, void *param_3) { - switch(mode) - { + switch (mode) { case 0: case 1: sub_800D670(0, param_2, sizeof(unkStruct_8035D94)); @@ -112,13 +272,13 @@ static void sub_8037CC4(s32 mode, void *param_2, void *param_3) break; case 9: case 10: - sub_800D670(0, param_2, 180); - sub_800D670(1, param_3, 180); + sub_800D670(0, param_2, 0xB4); + sub_800D670(1, param_3, 0xB4); break; } } -// TODO: same as sub_80381F4 +// TODO: same as sub_80381F4. Try to fix this fakematch https://decomp.me/scratch/vkGqo s32 sub_8037D64(u32 mode, void *param_2, void *param_3) { u32 iVar2; @@ -171,8 +331,8 @@ static s32 sub_8037DF0(void) s32 iStack_c; linkStatus = COMMS_GOOD; - sub_800D670(0,&iStack_10,4); - sub_800D670(1,&iStack_c,4); + sub_800D670(0, &iStack_10, 4); + sub_800D670(1, &iStack_c, 4); if ((iStack_10 != 0) || (iStack_c != 0)) { linkStatus = (!sub_800D588()) ? iStack_c : iStack_10; if (linkStatus == COMMS_GOOD) { @@ -432,7 +592,7 @@ UNUSED static s32 sub_80381E8(u32 mode, void * param_2, void * param_3) return sub_803815C(mode, param_2, param_3); } -// TODO: clean this up +// TODO: clean this up... fix fakematch without gotos. see above funcs https://decomp.me/scratch/JGv2m s32 sub_80381F4(u32 mode, void *param_2, void *param_3) { u32 iVar2; diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index 3105d2c4e..88904ca54 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -221,7 +221,6 @@ extern void sub_802A828(); extern void sub_802A850(); extern void sub_8031E10(); extern void SetThankYouMailMenuState(u32); -extern s32 sub_8037B28(u32); extern u8 sub_800D588(void); extern u32 GetDungeonTeamRankPts(DungeonLocation *, u32); extern void sub_8031D70(u8, u32); diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c index e0a8b4434..c1d971154 100644 --- a/src/trade_items_menu.c +++ b/src/trade_items_menu.c @@ -21,8 +21,6 @@ static EWRAM_DATA_2 struct TradeItemsMenu *sTradeItemsMenu = {0}; #include "data/trade_items_menu.h" -extern s32 sub_8037B28(u32); - void sub_8036F74(void); void sub_8036F30(); void TradeItem_AddItem(); diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index a9bcb5e2c..2a14e3a93 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -1,4 +1,5 @@ #include "global.h" +#include "globaldata.h" #include "constants/main_menu.h" #include "input.h" #include "main_menu1.h" diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 2cb73970f..ff60e808a 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -39,7 +39,6 @@ extern u32 sub_8031DCC(); extern void sub_8031E10(); extern void sub_8031E00(); extern void sub_8031E10(void); -extern s32 sub_8037B28(u32); extern void sub_8031D70(u8, u32); extern u32 sub_8023CE8(void); extern void sub_8030F58(u32); diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index 1f6ec67d6..a095bbe58 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -74,7 +74,6 @@ extern void SetWonderMailMainMenuState(u8); extern void sub_8031E10(void); extern u8 sub_800D588(void); extern void sub_802EF48(void); -extern s32 sub_8037B28(u32); void PrintWonderMailMainMenuError(u32); void HandleWonderMailMainScreen(void);