continue decomping link functions

This commit is contained in:
Seth Barberee
2023-07-17 11:22:44 -07:00
parent 1098955bee
commit ba6c9b1a56
6 changed files with 189 additions and 293 deletions

View File

@@ -1071,292 +1071,4 @@ _08038070: .4byte gTeamInventory_203B460
_08038074: .4byte 0x000003e7
thumb_func_end sub_8038014
thumb_func_start sub_8038078
sub_8038078:
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
bl sub_800D588
lsls r0, 24
cmp r0, 0
bne _0803808A
adds r4, r5, 0
_0803808A:
ldr r6, [r4, 0x10]
ldr r0, _08038098
ldr r0, [r0]
cmp r0, 0
beq _0803809C
ldr r5, [r0, 0x50]
b _080380A2
.align 2, 0
_08038098: .4byte gUnknown_203B184
_0803809C:
bl sub_8011C34
adds r5, r0, 0
_080380A2:
movs r0, 0x4
adds r1, r6, 0
bl HasMail
lsls r0, 24
cmp r0, 0
beq _080380BA
ldr r0, [r4, 0x28]
cmp r0, r5
bne _080380BA
movs r0, 0
b _080380BC
_080380BA:
movs r0, 0xB
_080380BC:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_8038078
thumb_func_start sub_80380C4
sub_80380C4:
push {r4-r6,lr}
adds r6, r0, 0
adds r4, r1, 0
bl sub_800D588
lsls r0, 24
adds r5, r4, 0
cmp r0, 0
bne _080380D8
adds r5, r6, 0
_080380D8:
ldr r4, [r5, 0x10]
movs r0, 0x2
adds r1, r4, 0
bl HasMail
lsls r0, 24
cmp r0, 0
bne _08038110
movs r0, 0x4
adds r1, r4, 0
bl HasMail
lsls r0, 24
cmp r0, 0
bne _08038110
movs r0, 0x6
adds r1, r4, 0
bl HasMail
lsls r0, 24
cmp r0, 0
bne _08038110
ldr r0, [r5, 0x10]
bl sub_8095298
lsls r0, 24
cmp r0, 0
beq _08038114
_08038110:
movs r0, 0x7
b _08038126
_08038114:
bl FindOpenMailSlot
movs r1, 0x1
negs r1, r1
cmp r0, r1
beq _08038124
movs r0, 0
b _08038126
_08038124:
movs r0, 0xD
_08038126:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_80380C4
thumb_func_start sub_803812C
sub_803812C:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
bl sub_800D588
lsls r0, 24
cmp r0, 0
bne _0803813E
adds r4, r5, 0
_0803813E:
ldr r1, [r4, 0x10]
movs r0, 0x1
bl HasMail
lsls r0, 24
cmp r0, 0
bne _08038150
movs r0, 0x9
b _08038152
_08038150:
movs r0, 0
_08038152:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_803812C
thumb_func_start sub_8038158
sub_8038158:
movs r0, 0
bx lr
thumb_func_end sub_8038158
thumb_func_start sub_803815C
sub_803815C:
push {r4,lr}
adds r3, r1, 0
movs r4, 0
cmp r0, 0xA
bhi _080381D2
lsls r0, 2
ldr r1, _08038170
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08038170: .4byte _08038174
.align 2, 0
_08038174:
.4byte _080381A0
.4byte _080381A0
.4byte _080381D2
.4byte _080381B4
.4byte _080381D2
.4byte _080381BE
.4byte _080381D2
.4byte _080381AA
.4byte _080381D2
.4byte _080381D2
.4byte _080381C8
_080381A0:
adds r0, r3, 0
adds r1, r2, 0
bl sub_8038014
b _080381D0
_080381AA:
adds r0, r3, 0
adds r1, r2, 0
bl sub_8038078
b _080381D0
_080381B4:
adds r0, r3, 0
adds r1, r2, 0
bl sub_80380C4
b _080381D0
_080381BE:
adds r0, r3, 0
adds r1, r2, 0
bl sub_803812C
b _080381D0
_080381C8:
adds r0, r3, 0
adds r1, r2, 0
bl sub_8038158
_080381D0:
adds r4, r0, 0
_080381D2:
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_803815C
thumb_func_start sub_80381DC
sub_80381DC:
push {lr}
bl sub_8037F9C
pop {r0}
bx r0
thumb_func_end sub_80381DC
thumb_func_start sub_80381E8
sub_80381E8:
push {lr}
bl sub_803815C
pop {r1}
bx r1
thumb_func_end sub_80381E8
thumb_func_start sub_80381F4
sub_80381F4:
push {r4-r7,lr}
sub sp, 0x4
adds r5, r0, 0
adds r6, r1, 0
adds r7, r2, 0
movs r4, 0
bl sub_803815C
str r0, [sp]
ldr r0, _08038218
str r4, [r0]
bl sub_800D494
mov r0, sp
movs r1, 0x4
bl sub_800D59C
b _0803822E
.align 2, 0
_08038218: .4byte gUnknown_202EC4C
_0803821C:
subs r0, r4, 0x3
cmp r0, 0x2
bls _08038272
ldr r1, _08038250
ldr r0, [r1]
cmp r0, 0x63
bgt _0803827E
adds r0, 0x1
str r0, [r1]
_0803822E:
bl sub_80373C4
bl sub_800D33C
adds r4, r0, 0
bl sub_800D570
cmp r4, 0x2
bne _0803821C
bl sub_800D600
lsls r0, 24
cmp r0, 0
beq _08038254
bl sub_8037DF0
b _0803825E
.align 2, 0
_08038250: .4byte gUnknown_202EC4C
_08038254:
bl sub_800D520
bl sub_800D510
movs r0, 0x5
_0803825E:
str r0, [sp]
ldr r0, [sp]
cmp r0, 0
bne _0803828A
adds r0, r5, 0
adds r1, r6, 0
adds r2, r7, 0
bl sub_8037F9C
b _08038292
_08038272:
bl sub_800D520
bl sub_800D510
movs r0, 0x1
b _08038298
_0803827E:
bl sub_800D520
bl sub_800D510
movs r0, 0xF
b _08038298
_0803828A:
bl sub_800D520
bl sub_800D510
_08038292:
bl sub_800D520
ldr r0, [sp]
_08038298:
add sp, 0x4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80381F4
.align 2,0

View File

@@ -40,7 +40,7 @@ struct unkStruct_8035D94
u8 itemIndex_u8;
u32 itemIndex_u32;
} itemIndex;
u32 numItems;
s32 numItems;
};
struct MainMenuSub

View File

@@ -155,6 +155,7 @@ SECTIONS {
src/trade_items_menu.o(.text);
src/other_menus.o(.text);
asm/other_menus.o(.text);
src/other_menus_1.o(.text);
src/adventure_log_menu.o(.text);
src/unk_menu_203B360.o(.text);
src/save_menu.o(.text);

View File

@@ -464,8 +464,8 @@ extern void TransferBGPaletteBuffer();
extern void xxx_call_update_bg_vram();
extern void sub_8009908();
extern void xxx_call_update_bg_sound_input();
extern s32 sub_8037D64(u32, void *, void *);
extern s32 sub_80381F4(u32, void *, void *);
extern s32 sub_8037D64(u32 mode, void *, void *);
extern s32 sub_80381F4(u32 mode, void *, void *);
extern void sub_8037810(void);
extern void sub_8011830(void);
extern s32 sub_8037B28(u32);

183
src/other_menus_1.c Normal file
View File

@@ -0,0 +1,183 @@
#include "global.h"
#include "constants/communication_error_codes.h"
#include "dungeon_global_data.h"
#include "pokemon.h"
#include "code_8094F88.h"
#include "save.h"
extern s32 gCommsTimeout; // Counts to 100 and then errors if other player hasn't connected
extern s32 sub_803815C(u32, void *, void*);
extern void sub_800D494(void);
extern s32 sub_800D33C(void);
extern void sub_800D520(void);
extern u8 sub_800D600(void);
extern void sub_80373C4(void);
extern void sub_800D59C(s32 *, u32);
extern void sub_800D570(void);
extern void sub_800D510(void);
extern s32 sub_8037DF0(void);
extern void sub_8037F9C(u32, u8 *, u8 *);
extern s32 sub_8038014(void *param_2,void *param_3);
extern u8 sub_800D588(void);
extern struct UnkStruct_203B184 *gUnknown_203B184;
s32 sub_8038078(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2)
{
u32 uVar2;
u32 uVar3;
if (sub_800D588() == 0) {
param_2 = param_1;
}
uVar3 = (param_2->unk10).unk10;
if (gUnknown_203B184 != NULL) {
uVar2 = gUnknown_203B184->unk050;
}
else {
uVar2 = sub_8011C34();
}
if (HasMail(4,uVar3) && (param_2->unk28 == uVar2)) {
return COMMS_GOOD;
}
else {
return COMMS_NOT_ELIGIBLE_2;
}
}
s32 sub_80380C4(struct unkStruct_203B480 *param_1,struct unkStruct_203B480 *param_2)
{
u32 uVar2;
struct unkStruct_203B480 *mail;
if (sub_800D588() == 0) {
mail = param_1;
}
else
mail = param_2;
uVar2 = mail->unk10.unk10;
if (HasMail(2,uVar2) || HasMail(4,uVar2) || HasMail(6,uVar2))
{
return COMMS_DUPLICATE_MAIL;
}
if(sub_8095298(mail->unk10.unk10))
{
return COMMS_DUPLICATE_MAIL;
}
else if (FindOpenMailSlot() == -1)
{
return COMMS_NO_ROOM_MAIL;
}
else
{
return COMMS_GOOD;
}
}
s32 sub_803812C(struct unkStruct_203B480 *param_1, struct unkStruct_203B480 *param_2)
{
if (sub_800D588() == 0) {
param_2 = param_1;
}
if (HasMail(1, (param_2->unk10).unk10)) {
return COMMS_GOOD;
}
else {
return COMMS_NOT_ELIGIBLE_1;
}
}
s32 sub_8038158(void *param_1, void *param_2)
{
return COMMS_GOOD;
}
s32 sub_803815C(u32 mode, void *param_2, void *param_3)
{
s32 linkStatus;
linkStatus = COMMS_GOOD;
switch(mode) {
case 0:
case 1:
linkStatus = sub_8038014(param_2, param_3);
break;
case 7:
linkStatus = sub_8038078(param_2, param_3);
break;
case 3:
linkStatus = sub_80380C4(param_2, param_3);
break;
case 5:
linkStatus = sub_803812C(param_2, param_3);
break;
case 10:
linkStatus = sub_8038158(param_2, param_3);
break;
}
return linkStatus;
}
void sub_80381DC(u32 mode, void * param_2, void * param_3)
{
sub_8037F9C(mode, param_2, param_3);
}
s32 sub_80381E8(u32 mode, void * param_2, void * param_3)
{
return sub_803815C(mode, param_2, param_3);
}
// TODO: clean this up
s32 sub_80381F4(u32 mode, void * param_2, void * param_3)
{
u32 iVar2;
s32 linkStatus;
iVar2 = 0;
linkStatus = sub_803815C(mode, param_2, param_3);
gCommsTimeout = 0;
sub_800D494();
sub_800D59C(&linkStatus, 4);
goto _first;
_start:
while (iVar2 - 3 > 2) {
if (99 < gCommsTimeout) {
sub_800D520();
sub_800D510();
return COMMS_NOT_READY;
}
gCommsTimeout++;
_first:
sub_80373C4();
iVar2 = sub_800D33C();
sub_800D570();
if (iVar2 == 2) {
if (sub_800D600() != 0) {
linkStatus = sub_8037DF0();
}
else {
sub_800D520();
sub_800D510();
linkStatus = 5;
}
if (linkStatus != COMMS_GOOD) {
sub_800D520();
sub_800D510();
}
else {
sub_8037F9C(mode, param_2, param_3);
}
goto _end;
}
else
goto _start;
}
sub_800D520();
sub_800D510();
return 1;
_end:
sub_800D520();
return linkStatus;
}

View File

@@ -14,7 +14,7 @@
#define RESCUE_PASSWORD_SIZE 0x36
EWRAM_DATA u32 gUnknown_202EC4C = {0};
EWRAM_DATA s32 gCommsTimeout = {0};
EWRAM_DATA u8 gRescuePasswordBuffer[RESCUE_PASSWORD_SIZE] = {0};
extern struct unkStruct_203B484 *gUnknown_203B484;
@@ -760,4 +760,4 @@ void sub_80391F8(void)
}
xxx_draw_string_80144C4();
gRescuePasswordMenu->unk210 += 1;
}
}