other_menus2.s

This commit is contained in:
Kermalis
2024-11-30 23:51:57 -05:00
parent 62a0165014
commit 0d8af0446c
12 changed files with 205 additions and 297 deletions

View File

@@ -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

View File

@@ -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 *);

View File

@@ -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);

View File

@@ -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");
// 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

View File

@@ -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, ...);

View File

@@ -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!

View File

@@ -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;

View File

@@ -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);

View File

@@ -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();

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "globaldata.h"
#include "constants/main_menu.h"
#include "input.h"
#include "main_menu1.h"

View File

@@ -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);

View File

@@ -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);